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

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

DEFINITIONS

This source file includes following definitions.
  1. null_lowest
  2. special_id_highest
  3. null_special_id_ignored
  4. highest_score_wins
  5. invalid_score_is_0

   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 FIRST_ID "foo"
  16 
  17 #define XML_FIRST_ID "<block " PCMK_XA_ID "=\"" FIRST_ID "\" "  \
  18                                PCMK_XA_SCORE "=\"0\" />"
  19 #define XML_NO_ID "<block " PCMK_XA_SCORE "=\"5\" />"
  20 #define XML_LOW   "<block " PCMK_XA_ID "=\"low\"  " PCMK_XA_SCORE "=\"1\"   />"
  21 #define XML_HIGH  "<block " PCMK_XA_ID "=\"high\" " PCMK_XA_SCORE "=\"100\" />"
  22 #define XML_BAD   "<block " PCMK_XA_ID "=\"high\" " PCMK_XA_SCORE "=\"x\"   />"
  23 
  24 static pcmk__nvpair_unpack_t unpack_data = {
  25     .first_id = FIRST_ID,
  26 };
  27 
  28 static void
  29 null_lowest(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  30 {
  31     xmlNode *block = pcmk__xml_parse(XML_LOW);
  32 
  33     assert_non_null(block);
  34 
  35     assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, block, NULL), 1);
  36     assert_int_equal(pcmk__cmp_nvpair_blocks(block, NULL, NULL), -1);
  37     assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, NULL, NULL), 0);
  38 
  39     unpack_data.overwrite = false;
  40     assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, block, &unpack_data), 1);
  41     assert_int_equal(pcmk__cmp_nvpair_blocks(block, NULL, &unpack_data), -1);
  42     assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, NULL, &unpack_data), 0);
  43 
  44     unpack_data.overwrite = true;
  45     assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, block, &unpack_data), -1);
  46     assert_int_equal(pcmk__cmp_nvpair_blocks(block, NULL, &unpack_data), 1);
  47     assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, NULL, &unpack_data), 0);
  48 
  49     pcmk__xml_free(block);
  50 }
  51 
  52 static void
  53 special_id_highest(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  54 {
  55     xmlNode *first_id = pcmk__xml_parse(XML_FIRST_ID);
  56     xmlNode *not_first_id = pcmk__xml_parse(XML_HIGH);
  57     xmlNode *no_id = pcmk__xml_parse(XML_NO_ID);
  58 
  59     assert_non_null(first_id);
  60     assert_non_null(not_first_id);
  61     assert_non_null(no_id);
  62 
  63     unpack_data.overwrite = false;
  64     assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, not_first_id,
  65                                              &unpack_data), -1);
  66     assert_int_equal(pcmk__cmp_nvpair_blocks(not_first_id, first_id,
  67                                              &unpack_data), 1);
  68     assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, no_id,
  69                                              &unpack_data), -1);
  70     assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, first_id,
  71                                              &unpack_data), 1);
  72 
  73     unpack_data.overwrite = true;
  74     assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, not_first_id,
  75                                              &unpack_data), 1);
  76     assert_int_equal(pcmk__cmp_nvpair_blocks(not_first_id, first_id,
  77                                              &unpack_data), -1);
  78     assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, no_id,
  79                                              &unpack_data), 1);
  80     assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, first_id,
  81                                              &unpack_data), -1);
  82 
  83     pcmk__xml_free(first_id);
  84     pcmk__xml_free(not_first_id);
  85     pcmk__xml_free(no_id);
  86 }
  87 
  88 static void
  89 null_special_id_ignored(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  90 {
  91     xmlNode *no_id = pcmk__xml_parse(XML_NO_ID);
  92     xmlNode *high = pcmk__xml_parse(XML_HIGH);
  93 
  94     assert_non_null(no_id);
  95     assert_non_null(high);
  96 
  97     unpack_data.first_id = NULL;
  98 
  99     unpack_data.overwrite = false;
 100     assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, high, &unpack_data), 1);
 101 
 102     unpack_data.overwrite = true;
 103     assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, high, &unpack_data), -1);
 104 
 105     unpack_data.first_id = FIRST_ID;
 106 
 107     pcmk__xml_free(no_id);
 108     pcmk__xml_free(high);
 109 }
 110 
 111 static void
 112 highest_score_wins(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 113 {
 114     xmlNode *low = pcmk__xml_parse(XML_LOW);
 115     xmlNode *low2 = pcmk__xml_parse(XML_LOW);
 116     xmlNode *high = pcmk__xml_parse(XML_HIGH);
 117 
 118     assert_non_null(low);
 119     assert_non_null(high);
 120 
 121     unpack_data.overwrite = false;
 122     assert_int_equal(pcmk__cmp_nvpair_blocks(low, high, &unpack_data), 1);
 123     assert_int_equal(pcmk__cmp_nvpair_blocks(low, low2, &unpack_data), 0);
 124 
 125     unpack_data.overwrite = true;
 126     assert_int_equal(pcmk__cmp_nvpair_blocks(low, high, &unpack_data), -1);
 127     assert_int_equal(pcmk__cmp_nvpair_blocks(low, low2, &unpack_data), 0);
 128 
 129     pcmk__xml_free(low);
 130     pcmk__xml_free(high);
 131 }
 132 
 133 static void
 134 invalid_score_is_0(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 135 {
 136     xmlNode *zero = pcmk__xml_parse(XML_FIRST_ID);
 137     xmlNode *bad = pcmk__xml_parse(XML_BAD);
 138 
 139     assert_non_null(zero);
 140     assert_non_null(bad);
 141 
 142     assert_int_equal(pcmk__cmp_nvpair_blocks(zero, bad, NULL), 0);
 143     assert_int_equal(pcmk__cmp_nvpair_blocks(bad, zero, NULL), 0);
 144 
 145     pcmk__xml_free(zero);
 146     pcmk__xml_free(bad);
 147 }
 148 
 149 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
 150                 cmocka_unit_test(null_lowest),
 151                 cmocka_unit_test(special_id_highest),
 152                 cmocka_unit_test(null_special_id_ignored),
 153                 cmocka_unit_test(highest_score_wins),
 154                 cmocka_unit_test(invalid_score_is_0))

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