root/lib/pacemaker/tests/pcmk_ticket/pcmk_ticket_info_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. all_tickets
  6. single_ticket

   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 #include <pacemaker.h>
  16 
  17 #include <libxml/xpath.h>                   // xmlXPathObject, etc.
  18 
  19 static char *cib_path = NULL;
  20 
  21 static int
  22 setup_test(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  23 {
  24     cib_path = pcmk__cib_test_copy_cib("tickets.xml");
  25 
  26     if (cib_path == NULL) {
  27         return -1;
  28     }
  29 
  30     return 0;
  31 }
  32 
  33 static int
  34 teardown_test(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  35 {
  36     pcmk__cib_test_cleanup(cib_path);
  37     cib_path = NULL;
  38     return 0;
  39 }
  40 
  41 static void
  42 bad_arguments(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  43 {
  44     assert_int_equal(pcmk_ticket_info(NULL, "ticketA"), EINVAL);
  45 }
  46 
  47 static void
  48 unknown_ticket(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  49 {
  50     xmlNode *xml = NULL;
  51 
  52     assert_int_equal(pcmk_ticket_info(&xml, "XYZ"), ENXIO);
  53     pcmk__assert_validates(xml);
  54     pcmk__xml_free(xml);
  55 }
  56 
  57 static void
  58 all_tickets(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  59 {
  60     xmlNode *node = NULL;
  61     xmlXPathObject *xpath_obj = NULL;
  62     xmlNode *xml = NULL;
  63 
  64     assert_int_equal(pcmk_ticket_info(&xml, NULL), pcmk_rc_ok);
  65     pcmk__assert_validates(xml);
  66 
  67     /* Verify that the XML result has three <ticket> elements, with the attributes
  68      * we expect.  The input has four tickets, but when they are loaded into the
  69      * scheduler's hash table, the duplicate IDs will collide leaving us with
  70      * three.
  71      */
  72     xpath_obj = pcmk__xpath_search(xml->doc,
  73                                    "//" PCMK_XE_PACEMAKER_RESULT
  74                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET);
  75     assert_int_equal(pcmk__xpath_num_results(xpath_obj), 3);
  76     xmlXPathFreeObject(xpath_obj);
  77 
  78     xpath_obj = pcmk__xpath_search(xml->doc,
  79                                    "//" PCMK_XE_PACEMAKER_RESULT
  80                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET
  81                                    "[@" PCMK_XA_ID "=\"ticketA\"]");
  82 
  83     node = pcmk__xpath_result(xpath_obj, 0);
  84     assert_non_null(node);
  85     assert_string_equal(crm_element_value(node, PCMK_XA_STATUS), PCMK_VALUE_REVOKED);
  86     assert_string_equal(crm_element_value(node, PCMK__XA_GRANTED), "false");
  87     assert_string_equal(crm_element_value(node, PCMK_XA_STANDBY), PCMK_VALUE_FALSE);
  88     assert_string_equal(crm_element_value(node, "owner"), "1");
  89     xmlXPathFreeObject(xpath_obj);
  90 
  91     xpath_obj = pcmk__xpath_search(xml->doc,
  92                                    "//" PCMK_XE_PACEMAKER_RESULT
  93                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET
  94                                    "[@" PCMK_XA_ID "=\"ticketB\"]");
  95 
  96     node = pcmk__xpath_result(xpath_obj, 0);
  97     assert_non_null(node);
  98     assert_string_equal(crm_element_value(node, PCMK_XA_STATUS), PCMK_VALUE_GRANTED);
  99     assert_string_equal(crm_element_value(node, PCMK__XA_GRANTED), "true");
 100     assert_string_equal(crm_element_value(node, PCMK_XA_STANDBY), PCMK_VALUE_FALSE);
 101     assert_null(crm_element_value(node, "owner"));
 102     xmlXPathFreeObject(xpath_obj);
 103 
 104     xpath_obj = pcmk__xpath_search(xml->doc,
 105                                    "//" PCMK_XE_PACEMAKER_RESULT
 106                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET
 107                                    "[@" PCMK_XA_ID "=\"ticketC\"]");
 108 
 109     node = pcmk__xpath_result(xpath_obj, 0);
 110     assert_non_null(node);
 111     assert_string_equal(crm_element_value(node, PCMK_XA_STATUS), PCMK_VALUE_GRANTED);
 112     assert_string_equal(crm_element_value(node, PCMK__XA_GRANTED), "true");
 113     assert_string_equal(crm_element_value(node, PCMK_XA_STANDBY), PCMK_VALUE_FALSE);
 114     assert_null(crm_element_value(node, "owner"));
 115 
 116     xmlXPathFreeObject(xpath_obj);
 117     pcmk__xml_free(xml);
 118 }
 119 
 120 static void
 121 single_ticket(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 122 {
 123     xmlNode *node = NULL;
 124     xmlXPathObject *xpath_obj = NULL;
 125     xmlNode *xml = NULL;
 126 
 127     assert_int_equal(pcmk_ticket_info(&xml, "ticketA"), pcmk_rc_ok);
 128     pcmk__assert_validates(xml);
 129 
 130     /* Verify that the XML result has only one <ticket>, with the attributes
 131      * we expect.
 132      */
 133     xpath_obj = pcmk__xpath_search(xml->doc,
 134                                    "//" PCMK_XE_PACEMAKER_RESULT
 135                                    "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET
 136                                    "[@" PCMK_XA_ID "=\"ticketA\"]");
 137     assert_int_equal(pcmk__xpath_num_results(xpath_obj), 1);
 138 
 139     node = pcmk__xpath_result(xpath_obj, 0);
 140     assert_non_null(node);
 141     assert_string_equal(crm_element_value(node, PCMK_XA_STATUS), PCMK_VALUE_REVOKED);
 142     assert_string_equal(crm_element_value(node, PCMK__XA_GRANTED), "false");
 143     assert_string_equal(crm_element_value(node, PCMK_XA_STANDBY), PCMK_VALUE_FALSE);
 144     assert_string_equal(crm_element_value(node, "owner"), "1");
 145 
 146     xmlXPathFreeObject(xpath_obj);
 147     pcmk__xml_free(xml);
 148 }
 149 
 150 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
 151                 cmocka_unit_test_setup_teardown(bad_arguments, setup_test, teardown_test),
 152                 cmocka_unit_test_setup_teardown(unknown_ticket, setup_test, teardown_test),
 153                 cmocka_unit_test_setup_teardown(all_tickets, setup_test, teardown_test),
 154                 cmocka_unit_test_setup_teardown(single_ticket, setup_test, teardown_test))

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