root/lib/common/tests/nvpair/pcmk__unpack_nvpair_block_test.c

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

DEFINITIONS

This source file includes following definitions.
  1. invalid_args
  2. with_rules
  3. without_overwrite
  4. with_overwrite
  5. attributes_child

   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 #define XML_PASSING_RULE                                    \
  16     "<" PCMK_XE_RULE " " PCMK_XA_ID "='rp' >\n"             \
  17       "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='ep' "   \
  18           PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' "         \
  19           PCMK_XA_START "='1950-01-01 00:00:00' />\n"       \
  20     "</" PCMK_XE_RULE ">\n"
  21 
  22 #define XML_FAILING_RULE                                    \
  23     "<" PCMK_XE_RULE " " PCMK_XA_ID "='rf' >\n"             \
  24       "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='ef' "   \
  25           PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' "         \
  26           PCMK_XA_END "='1950-01-01 00:00:00' />\n"         \
  27     "</" PCMK_XE_RULE ">\n"
  28 
  29 #define XML_NVPAIRS_1                                       \
  30     "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp1-1' "          \
  31         PCMK_XA_NAME "='name1' " PCMK_XA_VALUE "='1' />\n"  \
  32     "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp1-2' "          \
  33         PCMK_XA_NAME "='name2' " PCMK_XA_VALUE "='1' />\n"
  34 
  35 #define XML_NVPAIRS_2                                       \
  36     "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp2-1' "          \
  37         PCMK_XA_NAME "='name1' " PCMK_XA_VALUE "='2' />\n"  \
  38     "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp2-2' "          \
  39         PCMK_XA_NAME "='name2' " PCMK_XA_VALUE "='2' />\n"  \
  40     "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp2-3' "          \
  41         PCMK_XA_NAME "='name3' " PCMK_XA_VALUE "='2' />\n"
  42 
  43 static void
  44 invalid_args(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  45 {
  46     pcmk__nvpair_unpack_t unpack_data = {
  47         .values = NULL,
  48         .rule_input = {
  49             .now = NULL,
  50         },
  51     };
  52 
  53     xmlNode *xml = pcmk__xml_parse("<xml/>");
  54 
  55     assert_non_null(xml);
  56 
  57     pcmk__assert_asserts(pcmk__unpack_nvpair_block(NULL, NULL));
  58     pcmk__assert_asserts(pcmk__unpack_nvpair_block(NULL, &unpack_data));
  59     pcmk__assert_asserts(pcmk__unpack_nvpair_block(xml, NULL));
  60     pcmk__assert_asserts(pcmk__unpack_nvpair_block(xml, &unpack_data));
  61 
  62     unpack_data.values = g_hash_table_new(NULL, NULL);
  63     pcmk__assert_asserts(pcmk__unpack_nvpair_block(NULL, &unpack_data));
  64     g_hash_table_destroy(unpack_data.values);
  65 
  66     pcmk__xml_free(xml);
  67 }
  68 
  69 static void
  70 with_rules(void **state) {
     /* [previous][next][first][last][top][bottom][index][help] */
  71     crm_time_t *now = crm_time_new("2024-01-01 15:00:00");
  72     pcmk__nvpair_unpack_t unpack_data = {
  73         .values = pcmk__strkey_table(free, free),
  74         .rule_input = {
  75             .now = now,
  76         },
  77     };
  78 
  79     xmlNode *xml = NULL;
  80 
  81     xml = pcmk__xml_parse("<xml>\n" XML_NVPAIRS_1 XML_PASSING_RULE "</xml>\n");
  82     assert_non_null(xml);
  83     pcmk__unpack_nvpair_block(xml, &unpack_data);
  84     assert_int_equal(g_hash_table_size(unpack_data.values), 2);
  85     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "1");
  86     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "1");
  87     pcmk__xml_free(xml);
  88 
  89     xml = pcmk__xml_parse("<xml>\n" XML_NVPAIRS_2 XML_FAILING_RULE "</xml>\n");
  90     assert_non_null(xml);
  91     pcmk__unpack_nvpair_block(xml, &unpack_data);
  92     assert_int_equal(g_hash_table_size(unpack_data.values), 2);
  93     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "1");
  94     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "1");
  95     assert_null(g_hash_table_lookup(unpack_data.values, "name3"));
  96 
  97     pcmk__xml_free(xml);
  98     crm_time_free(now);
  99     g_hash_table_destroy(unpack_data.values);
 100 }
 101 
 102 static void
 103 without_overwrite(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 104 {
 105     pcmk__nvpair_unpack_t unpack_data = {
 106         .values = pcmk__strkey_table(free, free),
 107         .overwrite = false,
 108     };
 109 
 110     xmlNode *xml = NULL;
 111 
 112     xml = pcmk__xml_parse("<xml>\n" XML_NVPAIRS_1 "</xml>\n");
 113     assert_non_null(xml);
 114     pcmk__unpack_nvpair_block(xml, &unpack_data);
 115     assert_int_equal(g_hash_table_size(unpack_data.values), 2);
 116     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "1");
 117     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "1");
 118     pcmk__xml_free(xml);
 119 
 120     xml = pcmk__xml_parse("<xml>\n" XML_NVPAIRS_2 "</xml>\n");
 121     assert_non_null(xml);
 122     pcmk__unpack_nvpair_block(xml, &unpack_data);
 123     assert_int_equal(g_hash_table_size(unpack_data.values), 3);
 124     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "1");
 125     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "1");
 126     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name3"), "2");
 127     pcmk__xml_free(xml);
 128 
 129     g_hash_table_destroy(unpack_data.values);
 130 }
 131 
 132 static void
 133 with_overwrite(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 134 {
 135     pcmk__nvpair_unpack_t unpack_data = {
 136         .values = pcmk__strkey_table(free, free),
 137         .overwrite = true,
 138     };
 139 
 140     xmlNode *xml = NULL;
 141 
 142     xml = pcmk__xml_parse("<xml>\n" XML_NVPAIRS_1 "</xml>\n");
 143     assert_non_null(xml);
 144     pcmk__unpack_nvpair_block(xml, &unpack_data);
 145     assert_int_equal(g_hash_table_size(unpack_data.values), 2);
 146     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "1");
 147     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "1");
 148     pcmk__xml_free(xml);
 149 
 150     xml = pcmk__xml_parse("<xml>\n" XML_NVPAIRS_2 "</xml>\n");
 151     assert_non_null(xml);
 152     pcmk__unpack_nvpair_block(xml, &unpack_data);
 153     assert_int_equal(g_hash_table_size(unpack_data.values), 3);
 154     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "2");
 155     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "2");
 156     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name3"), "2");
 157     pcmk__xml_free(xml);
 158 
 159     g_hash_table_destroy(unpack_data.values);
 160 }
 161 
 162 static void
 163 attributes_child(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 164 {
 165     pcmk__nvpair_unpack_t unpack_data = {
 166         .values = pcmk__strkey_table(free, free),
 167     };
 168 
 169     xmlNode *xml = pcmk__xml_parse("<xml>\n<" PCMK__XE_ATTRIBUTES ">\n"
 170                                    XML_NVPAIRS_1
 171                                    "</" PCMK__XE_ATTRIBUTES ">\n</xml>\n");
 172     assert_non_null(xml);
 173     pcmk__unpack_nvpair_block(xml, &unpack_data);
 174     assert_int_equal(g_hash_table_size(unpack_data.values), 2);
 175     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name1"), "1");
 176     assert_string_equal(g_hash_table_lookup(unpack_data.values, "name2"), "1");
 177     pcmk__xml_free(xml);
 178 
 179     g_hash_table_destroy(unpack_data.values);
 180 }
 181 
 182 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
 183                 cmocka_unit_test(invalid_args),
 184                 cmocka_unit_test(with_rules),
 185                 cmocka_unit_test(without_overwrite),
 186                 cmocka_unit_test(with_overwrite),
 187                 cmocka_unit_test(attributes_child))

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