pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pe_base_name_eq_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2022-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
13
14#include <crm/common/xml.h>
17#include <crm/pengine/status.h>
18
19xmlNode *input = NULL;
21
24
25static int
26setup(void **state) {
27 char *path = NULL;
28
30
31 path = crm_strdup_printf("%s/crm_mon.xml", getenv("PCMK_CTS_CLI_DIR"));
33 free(path);
34
35 if (input == NULL) {
36 return 1;
37 }
38
40 if (scheduler == NULL) {
41 return 1;
42 }
43
46
48
49 /* Get references to several resources we use frequently. */
50 for (GList *iter = scheduler->priv->resources;
51 iter != NULL; iter = iter->next) {
52
53 pcmk_resource_t *rsc = (pcmk_resource_t *) iter->data;
54
55 if (strcmp(rsc->id, "dummy") == 0) {
56 dummy = rsc;
57
58 } else if (strcmp(rsc->id, "exim-group") == 0) {
59 exim_group = rsc;
60
61 } else if (strcmp(rsc->id, "httpd-bundle") == 0) {
62 httpd_bundle = rsc;
63
64 } else if (strcmp(rsc->id, "mysql-clone-group") == 0) {
65 for (GList *iter = rsc->priv->children;
66 iter != NULL; iter = iter->next) {
67
68 pcmk_resource_t *child = (pcmk_resource_t *) iter->data;
69
70 if (strcmp(child->id, "mysql-group:0") == 0) {
71 mysql_group_0 = child;
72 } else if (strcmp(child->id, "mysql-group:1") == 0) {
73 mysql_group_1 = child;
74 }
75 }
76
77 } else if (strcmp(rsc->id, "promotable-clone") == 0) {
78 for (GList *iter = rsc->priv->children;
79 iter != NULL; iter = iter->next) {
80
81 pcmk_resource_t *child = (pcmk_resource_t *) iter->data;
82
83 if (strcmp(child->id, "promotable-rsc:0") == 0) {
84 promotable_0 = child;
85 } else if (strcmp(child->id, "promotable-rsc:1") == 0) {
86 promotable_1 = child;
87 }
88 }
89 }
90 }
91
92 return 0;
93}
94
95static int
96teardown(void **state)
97{
100 return 0;
101}
102
103static void
104bad_args(void **state) {
105 char *id = dummy->id;
106
107 assert_false(pe_base_name_eq(NULL, "dummy"));
108 assert_false(pe_base_name_eq(dummy, NULL));
109
110 dummy->id = NULL;
111 assert_false(pe_base_name_eq(dummy, "dummy"));
112 dummy->id = id;
113}
114
115static void
116primitive_rsc(void **state) {
117 assert_true(pe_base_name_eq(dummy, "dummy"));
118 assert_false(pe_base_name_eq(dummy, "DUMMY"));
119 assert_false(pe_base_name_eq(dummy, "dUmMy"));
120 assert_false(pe_base_name_eq(dummy, "dummy0"));
121 assert_false(pe_base_name_eq(dummy, "dummy:0"));
122}
123
124static void
125group_rsc(void **state) {
126 assert_true(pe_base_name_eq(exim_group, "exim-group"));
127 assert_false(pe_base_name_eq(exim_group, "EXIM-GROUP"));
128 assert_false(pe_base_name_eq(exim_group, "exim-group0"));
129 assert_false(pe_base_name_eq(exim_group, "exim-group:0"));
130 assert_false(pe_base_name_eq(exim_group, "Public-IP"));
131}
132
133static void
134clone_rsc(void **state) {
135 assert_true(pe_base_name_eq(promotable_0, "promotable-rsc"));
136 assert_true(pe_base_name_eq(promotable_1, "promotable-rsc"));
137
138 assert_false(pe_base_name_eq(promotable_0, "promotable-rsc:0"));
139 assert_false(pe_base_name_eq(promotable_1, "promotable-rsc:1"));
140 assert_false(pe_base_name_eq(promotable_0, "PROMOTABLE-RSC"));
141 assert_false(pe_base_name_eq(promotable_1, "PROMOTABLE-RSC"));
142 assert_false(pe_base_name_eq(promotable_0, "Promotable-rsc"));
143 assert_false(pe_base_name_eq(promotable_1, "Promotable-rsc"));
144}
145
146static void
147bundle_rsc(void **state) {
148 assert_true(pe_base_name_eq(httpd_bundle, "httpd-bundle"));
149 assert_false(pe_base_name_eq(httpd_bundle, "HTTPD-BUNDLE"));
150 assert_false(pe_base_name_eq(httpd_bundle, "httpd"));
151 assert_false(pe_base_name_eq(httpd_bundle, "httpd-docker-0"));
152}
153
154PCMK__UNIT_TEST(setup, teardown,
155 cmocka_unit_test(bad_args),
156 cmocka_unit_test(primitive_rsc),
157 cmocka_unit_test(group_rsc),
158 cmocka_unit_test(clone_rsc),
159 cmocka_unit_test(bundle_rsc))
const char * path
Definition cib.c:28
uint32_t id
Definition cpg.c:0
pcmk_resource_t * httpd_bundle
pcmk_scheduler_t * scheduler
pcmk_resource_t * mysql_group_0
pcmk_resource_t * promotable_0
pcmk_resource_t * promotable_1
pcmk_resource_t * exim_group
pcmk_resource_t * mysql_group_1
pcmk_resource_t * dummy
xmlNode * input
Scheduler API.
void pcmk_free_scheduler(pcmk_scheduler_t *scheduler)
Free scheduler data.
Definition scheduler.c:193
pcmk_scheduler_t * pcmk_new_scheduler(void)
Create a new object to hold scheduler data.
Definition scheduler.c:32
#define pcmk__set_scheduler_flags(scheduler, flags_to_set)
@ pcmk__sched_no_counts
Cluster status and scheduling.
gboolean cluster_status(pcmk_scheduler_t *scheduler)
Definition status.c:73
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1
pcmk__resource_private_t * priv
Definition resources.h:61
pcmk__scheduler_private_t * priv
Definition scheduler.h:99
xmlNode * input
Definition scheduler.h:81
int pcmk__xml_test_teardown_group(void **state)
Definition unittest.c:105
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
int pcmk__xml_test_setup_group(void **state)
Definition unittest.c:87
Wrappers for and extensions to libxml2.
xmlNode * pcmk__xml_read(const char *filename)
Definition xml_io.c:101