root/lib/common/tests/xml/pcmk__xe_match_test.c

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

DEFINITIONS

This source file includes following definitions.
  1. bad_input
  2. not_found
  3. find_attrB
  4. find_attrA_matching

   1 /*
   2  * Copyright 2022 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/msg_xml.h>
  13 #include <crm/common/unittest_internal.h>
  14 #include <crm/common/xml_internal.h>
  15 
  16 const char *str1 =
  17     "<xml>\n"
  18     "  <!-- This is an A node -->\n"
  19     "  <nodeA attrA=\"123\" " XML_ATTR_ID "=\"1\">\n"
  20     "    content\n"
  21     "  </nodeA>\n"
  22     "  <!-- This is an A node -->\n"
  23     "  <nodeA attrA=\"456\" " XML_ATTR_ID "=\"2\">\n"
  24     "    content\n"
  25     "  </nodeA>\n"
  26     "  <!-- This is an A node -->\n"
  27     "  <nodeA attrB=\"XYZ\" " XML_ATTR_ID "=\"3\">\n"
  28     "    content\n"
  29     "  </nodeA>\n"
  30     "  <!-- This is a B node -->\n"
  31     "  <nodeB attrA=\"123\" " XML_ATTR_ID "=\"4\">\n"
  32     "    content\n"
  33     "  </nodeA>\n"
  34     "  <!-- This is a B node -->\n"
  35     "  <nodeB attrB=\"ABC\" " XML_ATTR_ID "=\"5\">\n"
  36     "    content\n"
  37     "  </nodeA>\n"
  38     "</xml>";
  39 
  40 static void
  41 bad_input(void **state) {
     /* [previous][next][first][last][top][bottom][index][help] */
  42     xmlNode *xml = string2xml(str1);
  43 
  44     assert_null(pcmk__xe_match(NULL, NULL, NULL, NULL));
  45     assert_null(pcmk__xe_match(NULL, NULL, NULL, "attrX"));
  46 
  47     free_xml(xml);
  48 }
  49 
  50 static void
  51 not_found(void **state) {
     /* [previous][next][first][last][top][bottom][index][help] */
  52     xmlNode *xml = string2xml(str1);
  53 
  54     /* No node with an attrX attribute */
  55     assert_null(pcmk__xe_match(xml, NULL, "attrX", NULL));
  56     /* No nodeX node */
  57     assert_null(pcmk__xe_match(xml, "nodeX", NULL, NULL));
  58     /* No nodeA node with attrX */
  59     assert_null(pcmk__xe_match(xml, "nodeA", "attrX", NULL));
  60     /* No nodeA node with attrA=XYZ */
  61     assert_null(pcmk__xe_match(xml, "nodeA", "attrA", "XYZ"));
  62 
  63     free_xml(xml);
  64 }
  65 
  66 static void
  67 find_attrB(void **state) {
     /* [previous][next][first][last][top][bottom][index][help] */
  68     xmlNode *xml = string2xml(str1);
  69     xmlNode *result = NULL;
  70 
  71     /* Find the first node with attrB */
  72     result = pcmk__xe_match(xml, NULL, "attrB", NULL);
  73     assert_non_null(result);
  74     assert_string_equal(crm_element_value(result, "id"), "3");
  75 
  76     /* Find the first nodeB with attrB */
  77     result = pcmk__xe_match(xml, "nodeB", "attrB", NULL);
  78     assert_non_null(result);
  79     assert_string_equal(crm_element_value(result, "id"), "5");
  80 
  81     free_xml(xml);
  82 }
  83 
  84 static void
  85 find_attrA_matching(void **state) {
     /* [previous][next][first][last][top][bottom][index][help] */
  86     xmlNode *xml = string2xml(str1);
  87     xmlNode *result = NULL;
  88 
  89     /* Find attrA=456 */
  90     result = pcmk__xe_match(xml, NULL, "attrA", "456");
  91     assert_non_null(result);
  92     assert_string_equal(crm_element_value(result, "id"), "2");
  93 
  94     /* Find a nodeB with attrA=123 */
  95     result = pcmk__xe_match(xml, "nodeB", "attrA", "123");
  96     assert_non_null(result);
  97     assert_string_equal(crm_element_value(result, "id"), "4");
  98 
  99     free_xml(xml);
 100 }
 101 
 102 PCMK__UNIT_TEST(NULL, NULL,
 103                 cmocka_unit_test(bad_input),
 104                 cmocka_unit_test(not_found),
 105                 cmocka_unit_test(find_attrB),
 106                 cmocka_unit_test(find_attrA_matching));

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