root/lib/common/tests/xml_element/pcmk__xe_set_id_test.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. null_node
  2. null_format
  3. valid_id
  4. invalid_id
  5. format_args

   1 /*
   2  * Copyright 2024 the Pacemaker project contributors
   3  *
   4  * The version control history for this file may have further details.
   5  *
   6  * This source code is licensed under the GNU General Public License version 2
   7  * or later (GPLv2+) WITHOUT ANY WARRANTY.
   8  */
   9 
  10 #include <crm_internal.h>
  11 
  12 #include <crm/common/unittest_internal.h>
  13 #include <crm/common/xml_internal.h>
  14 
  15 static void
  16 null_node(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  17 {
  18     pcmk__xe_set_id(NULL, "test_id");
  19 }
  20 
  21 static void
  22 null_format(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  23 {
  24     xmlNode *test_xml = pcmk__xe_create(NULL, "test");
  25 
  26     pcmk__assert_asserts(pcmk__xe_set_id(NULL, NULL));
  27     pcmk__assert_asserts(pcmk__xe_set_id(test_xml, NULL));
  28 
  29 #ifdef HAVE_FORMAT_NONLITERAL
  30 #pragma GCC diagnostic push
  31 #pragma GCC diagnostic ignored "-Wformat-zero-length"
  32 #endif  // HAVE_FORMAT_NONLITERAL
  33     pcmk__assert_asserts(pcmk__xe_set_id(test_xml, ""));
  34 #ifdef HAVE_FORMAT_NONLITERAL
  35 #pragma GCC diagnostic pop
  36 #endif  // HAVE_FORMAT_NONLITERAL
  37 
  38     pcmk__xml_free(test_xml);
  39 }
  40 
  41 static void
  42 valid_id(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  43 {
  44     // IDs that are already valid XML names
  45     xmlNode *test_xml = pcmk__xe_create(NULL, "test");
  46     const char *id = NULL;
  47 
  48     // No ID set initially
  49     pcmk__xe_set_id(test_xml, "test_id");
  50     assert_string_equal(pcmk__xe_id(test_xml), "test_id");
  51 
  52     // ID already set: test overwrite
  53     // #xEFFFF (NameStartChar), #xB7 (NameChar)
  54     id = "\xF3\xAF\xBF\xBF" "\xC2\xB7";
  55     pcmk__xe_set_id(test_xml, "%s", id);
  56     assert_string_equal(pcmk__xe_id(test_xml), id);
  57 
  58     pcmk__xml_free(test_xml);
  59 }
  60 
  61 static void
  62 invalid_id(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  63 {
  64     // IDs that need sanitization
  65     xmlNode *test_xml = pcmk__xe_create(NULL, "test");
  66 
  67     // No ID set initially
  68     pcmk__xe_set_id(test_xml, "-ab");
  69     assert_string_equal(pcmk__xe_id(test_xml), "_ab");
  70 
  71     // ID already set: test overwrite
  72     pcmk__xe_set_id(test_xml, "a$b");
  73     assert_string_equal(pcmk__xe_id(test_xml), "a.b");
  74 
  75     pcmk__xe_set_id(test_xml, "ab$");
  76     assert_string_equal(pcmk__xe_id(test_xml), "ab.");
  77 
  78     pcmk__xe_set_id(test_xml, "$$$");
  79     assert_string_equal(pcmk__xe_id(test_xml), "_..");
  80 
  81     pcmk__xml_free(test_xml);
  82 }
  83 
  84 static void
  85 format_args(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  86 {
  87     xmlNode *test_xml = pcmk__xe_create(NULL, "test");
  88     const char *str = "test";
  89     int num = 42;
  90 
  91     pcmk__xe_set_id(test_xml, "rsc-%s-%d", str, num);
  92     assert_string_equal(pcmk__xe_id(test_xml), "rsc-test-42");
  93 
  94     pcmk__xml_free(test_xml);
  95 }
  96 
  97 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
  98                 cmocka_unit_test(null_node),
  99                 cmocka_unit_test(null_format),
 100                 cmocka_unit_test(valid_id),
 101                 cmocka_unit_test(invalid_id),
 102                 cmocka_unit_test(format_args))

/* [previous][next][first][last][top][bottom][index][help] */