pacemaker  3.0.0-d8340737c4
Scalable High-Availability cluster resource manager
pcmk__new_message_as_test.c
Go to the documentation of this file.
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 <stdio.h> // NULL
13 #include <libxml/tree.h> // xmlNode
14 
15 #include <crm/common/ipc.h> // pcmk_ipc_controld
16 #include <crm/common/nvpair.h> // crm_element_value()
17 #include <crm/common/messages_internal.h> // pcmk__new_message_as()
18 #include <crm/common/servers_internal.h> // pcmk__server_message_type()
19 #include <crm/common/xml_internal.h> // pcmk__xe_create(), etc.
20 
22 
23 static void
24 invalid_arguments(void **state)
25 {
26  xmlNode *data = pcmk__xe_create(NULL, "x");
27 
28  assert_null(pcmk__new_message_as(NULL, pcmk_ipc_controld, "x", "x", "x",
29  "x", "x", data));
30  assert_null(pcmk__new_message_as("x", pcmk_ipc_controld, "x", NULL, "x",
31  "x", "x", data));
32  assert_null(pcmk__new_message_as("x", pcmk_ipc_controld, "x", "x", "x", "x",
33  NULL, data));
35 }
36 
37 static void
38 optional_arguments_null(void **state)
39 {
40  xmlNode *message = NULL;
41 
42  message = pcmk__new_message_as("fn", pcmk_ipc_controld, NULL, "ss", NULL,
43  NULL, "op", NULL);
44  assert_non_null(message);
45  assert_string_equal(crm_element_value(message, PCMK_XA_ORIGIN), "fn");
46  assert_string_equal(crm_element_value(message, PCMK__XA_T),
48  assert_string_equal(crm_element_value(message, PCMK__XA_SUBT),
50  assert_string_equal(crm_element_value(message, PCMK_XA_VERSION),
52  assert_non_null(crm_element_value(message, PCMK_XA_REFERENCE));
53  assert_string_equal(crm_element_value(message, PCMK__XA_CRM_SYS_FROM),
54  "ss");
55  assert_null(crm_element_value(message, PCMK__XA_CRM_HOST_TO));
56  assert_null(crm_element_value(message, PCMK__XA_CRM_SYS_TO));
57  assert_string_equal(crm_element_value(message, PCMK__XA_CRM_TASK), "op");
58  assert_null(message->children);
59  pcmk__xml_free(message);
60 }
61 
62 static void
63 optional_arguments_nonnull(void **state)
64 {
65  xmlNode *message = NULL;
66  xmlNode *data = pcmk__xe_create(NULL, "x");
67 
68  message = pcmk__new_message_as("fn", pcmk_ipc_controld, "rt", "ss", "node1",
69  "rs", "op", data);
71 
72  assert_non_null(message);
73  assert_string_equal(crm_element_value(message, PCMK_XA_REFERENCE), "rt");
74  assert_string_equal(crm_element_value(message, PCMK__XA_CRM_HOST_TO),
75  "node1");
76  assert_string_equal(crm_element_value(message, PCMK__XA_CRM_SYS_TO), "rs");
77  assert_non_null(message->children);
78  assert_null(message->children->next);
79  assert_string_equal((const char *) (message->children->name),
81  assert_non_null(message->children->children);
82  assert_null(message->children->children->next);
83  assert_string_equal((const char *) (message->children->children->name),
84  "x");
85  pcmk__xml_free(message);
86 }
87 
88 PCMK__UNIT_TEST(NULL, NULL,
89  cmocka_unit_test(invalid_arguments),
90  cmocka_unit_test(optional_arguments_null),
91  cmocka_unit_test(optional_arguments_nonnull))
char data[0]
Definition: cpg.c:58
#define CRM_FEATURE_SET
Definition: crm.h:66
#define PCMK_XA_REFERENCE
Definition: xml_names.h:372
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
const char * pcmk__server_message_type(enum pcmk_ipc_server server)
Definition: servers.c:162
#define PCMK__XA_SUBT
#define PCMK__XA_CRM_HOST_TO
xmlNode * pcmk__xe_create(xmlNode *parent, const char *name)
Definition: xml_element.c:407
#define PCMK__XA_CRM_SYS_TO
void pcmk__xml_free(xmlNode *xml)
Definition: xml.c:789
#define PCMK_XA_ORIGIN
Definition: xml_names.h:351
#define PCMK__XA_CRM_TASK
const char * crm_element_value(const xmlNode *data, const char *name)
Retrieve the value of an XML attribute.
Definition: xml_element.c:1168
#define PCMK__XA_CRM_SYS_FROM
xmlNode * pcmk__new_message_as(const char *origin, enum pcmk_ipc_server server, const char *reply_to, const char *sender_system, const char *recipient_node, const char *recipient_system, const char *task, xmlNode *data)
Definition: messages.c:58
Functionality for manipulating name/value pairs.
#define PCMK__XE_CRM_XML
Controller.
Definition: ipc.h:52
IPC interface to Pacemaker daemons.
#define PCMK__XA_T
#define PCMK__VALUE_REQUEST
#define PCMK_XA_VERSION
Definition: xml_names.h:444