root/lib/pacemaker/tests/pcmk_ticket/pcmk_ticket_get_attr_test.c

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

DEFINITIONS

This source file includes following definitions.
  1. setup_test
  2. teardown_test
  3. bad_arguments
  4. unknown_ticket
  5. verify_results
  6. attribute_exists
  7. default_no_ticket
  8. default_no_attribute

   1 /*
   2  * Copyright 2024-2025 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/cib/internal.h>
  13 #include <crm/common/unittest_internal.h>
  14 #include <crm/common/xml.h>
  15 
  16 #include <libxml/xpath.h>                   // xmlXPathObject, etc.
  17 
  18 #include <pacemaker.h>
  19 
  20 static char *cib_path = NULL;
  21 
  22 static int
  23 setup_test(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  24 {
  25     cib_path = pcmk__cib_test_copy_cib("tickets.xml");
  26 
  27     if (cib_path == NULL) {
  28         return -1;
  29     }
  30 
  31     return 0;
  32 }
  33 
  34 static int
  35 teardown_test(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  36 {
  37     pcmk__cib_test_cleanup(cib_path);
  38     cib_path = NULL;
  39     return 0;
  40 }
  41 
  42 static void
  43 bad_arguments(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  44 {
  45     xmlNode *xml = NULL;
  46 
  47     assert_int_equal(pcmk_ticket_get_attr(NULL, "ticketA", "XYZ", NULL), EINVAL);
  48 
  49     assert_int_equal(pcmk_ticket_get_attr(&xml, NULL, "attrA", NULL), EINVAL);
  50     pcmk__assert_validates(xml);
  51     pcmk__xml_free(xml);
  52     xml = NULL;
  53 
  54     assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", NULL, NULL), EINVAL);
  55     pcmk__assert_validates(xml);
  56     pcmk__xml_free(xml);
  57 }
  58 
  59 static void
  60 unknown_ticket(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  61 {
  62     xmlNode *xml = NULL;
  63 
  64     /* Both an unknown ticket and an unknown attribute on a known ticket
  65      * return ENXIO so we can't really differentiate between the two here.
  66      * Still, we'd better test both.
  67      */
  68     assert_int_equal(pcmk_ticket_get_attr(&xml, "XYZ", "attrA", NULL), ENXIO);
  69     pcmk__assert_validates(xml);
  70     pcmk__xml_free(xml);
  71     xml = NULL;
  72 
  73     assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", "XYZ", NULL), ENXIO);
  74     pcmk__assert_validates(xml);
  75     pcmk__xml_free(xml);
  76 }
  77 
  78 static void
  79 verify_results(xmlNode *xml, const char *ticket_id, const char *attr_name,
     /* [previous][next][first][last][top][bottom][index][help] */
  80                const char *attr_value)
  81 {
  82     xmlNode *node = NULL;
  83     xmlXPathObject *xpath_obj = NULL;
  84 
  85     /* Verify that the XML result has only one <ticket>, and that its ID is
  86      * what we asked for.
  87      */
  88     xpath_obj = pcmk__xpath_search(xml->doc,
  89                                    "//" PCMK_XE_PACEMAKER_RESULT
  90                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET);
  91     assert_int_equal(pcmk__xpath_num_results(xpath_obj), 1);
  92 
  93     node = pcmk__xpath_result(xpath_obj, 0);
  94     assert_non_null(node);
  95     assert_string_equal(crm_element_value(node, PCMK_XA_ID), ticket_id);
  96     xmlXPathFreeObject(xpath_obj);
  97 
  98     /* Verify that it has an <attribute> child whose name and value are what
  99      * we expect.
 100      */
 101     xpath_obj = pcmk__xpath_search(xml->doc,
 102                                    "//" PCMK_XE_PACEMAKER_RESULT
 103                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET
 104                                    "/" PCMK_XE_ATTRIBUTE);
 105     assert_int_equal(pcmk__xpath_num_results(xpath_obj), 1);
 106 
 107     node = pcmk__xpath_result(xpath_obj, 0);
 108     assert_non_null(node);
 109     assert_string_equal(crm_element_value(node, PCMK_XA_NAME), attr_name);
 110     assert_string_equal(crm_element_value(node, PCMK_XA_VALUE), attr_value);
 111 
 112     xmlXPathFreeObject(xpath_obj);
 113 }
 114 
 115 static void
 116 attribute_exists(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 117 {
 118     xmlNode *xml = NULL;
 119 
 120     assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", "owner", NULL), pcmk_rc_ok);
 121     pcmk__assert_validates(xml);
 122 
 123     verify_results(xml, "ticketA", "owner", "1");
 124 
 125     pcmk__xml_free(xml);
 126 }
 127 
 128 static void
 129 default_no_ticket(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 130 {
 131     xmlNode *xml = NULL;
 132 
 133     assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketX", "ABC", "DEFAULT"), pcmk_rc_ok);
 134     pcmk__assert_validates(xml);
 135 
 136     verify_results(xml, "ticketX", "ABC", "DEFAULT");
 137 
 138     pcmk__xml_free(xml);
 139 }
 140 
 141 static void
 142 default_no_attribute(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 143 {
 144     xmlNode *xml = NULL;
 145 
 146     assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", "ABC", "DEFAULT"), pcmk_rc_ok);
 147     pcmk__assert_validates(xml);
 148 
 149     verify_results(xml, "ticketA", "ABC", "DEFAULT");
 150 
 151     pcmk__xml_free(xml);
 152 }
 153 
 154 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
 155                 cmocka_unit_test_setup_teardown(bad_arguments, setup_test, teardown_test),
 156                 cmocka_unit_test_setup_teardown(unknown_ticket, setup_test, teardown_test),
 157                 cmocka_unit_test_setup_teardown(attribute_exists, setup_test, teardown_test),
 158                 cmocka_unit_test_setup_teardown(default_no_ticket, setup_test, teardown_test),
 159                 cmocka_unit_test_setup_teardown(default_no_attribute, setup_test, teardown_test))

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