pacemaker 2.1.8-2.1.8
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-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
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
41 if (scheduler == NULL) {
42 return 1;
43 }
44
48
50
51 /* Get references to several resources we use frequently. */
52 for (GList *iter = scheduler->resources; iter != NULL; iter = iter->next) {
53 pcmk_resource_t *rsc = (pcmk_resource_t *) iter->data;
54
55 if (strcmp(rsc->id, "dummy") == 0) {
56 dummy = rsc;
57 } else if (strcmp(rsc->id, "exim-group") == 0) {
58 exim_group = rsc;
59 } else if (strcmp(rsc->id, "httpd-bundle") == 0) {
60 httpd_bundle = rsc;
61 } else if (strcmp(rsc->id, "mysql-clone-group") == 0) {
62 for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
63 pcmk_resource_t *child = (pcmk_resource_t *) iter->data;
64
65 if (strcmp(child->id, "mysql-group:0") == 0) {
66 mysql_group_0 = child;
67 } else if (strcmp(child->id, "mysql-group:1") == 0) {
68 mysql_group_1 = child;
69 }
70 }
71 } else if (strcmp(rsc->id, "promotable-clone") == 0) {
72 for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
73 pcmk_resource_t *child = (pcmk_resource_t *) iter->data;
74
75 if (strcmp(child->id, "promotable-rsc:0") == 0) {
76 promotable_0 = child;
77 } else if (strcmp(child->id, "promotable-rsc:1") == 0) {
78 promotable_1 = child;
79 }
80 }
81 }
82 }
83
84 return 0;
85}
86
87static int
88teardown(void **state) {
90
91 return 0;
92}
93
94static void
95bad_args(void **state) {
96 char *id = dummy->id;
97
98 assert_false(pe_base_name_eq(NULL, "dummy"));
99 assert_false(pe_base_name_eq(dummy, NULL));
100
101 dummy->id = NULL;
102 assert_false(pe_base_name_eq(dummy, "dummy"));
103 dummy->id = id;
104}
105
106static void
107primitive_rsc(void **state) {
108 assert_true(pe_base_name_eq(dummy, "dummy"));
109 assert_false(pe_base_name_eq(dummy, "DUMMY"));
110 assert_false(pe_base_name_eq(dummy, "dUmMy"));
111 assert_false(pe_base_name_eq(dummy, "dummy0"));
112 assert_false(pe_base_name_eq(dummy, "dummy:0"));
113}
114
115static void
116group_rsc(void **state) {
117 assert_true(pe_base_name_eq(exim_group, "exim-group"));
118 assert_false(pe_base_name_eq(exim_group, "EXIM-GROUP"));
119 assert_false(pe_base_name_eq(exim_group, "exim-group0"));
120 assert_false(pe_base_name_eq(exim_group, "exim-group:0"));
121 assert_false(pe_base_name_eq(exim_group, "Public-IP"));
122}
123
124static void
125clone_rsc(void **state) {
126 assert_true(pe_base_name_eq(promotable_0, "promotable-rsc"));
127 assert_true(pe_base_name_eq(promotable_1, "promotable-rsc"));
128
129 assert_false(pe_base_name_eq(promotable_0, "promotable-rsc:0"));
130 assert_false(pe_base_name_eq(promotable_1, "promotable-rsc:1"));
131 assert_false(pe_base_name_eq(promotable_0, "PROMOTABLE-RSC"));
132 assert_false(pe_base_name_eq(promotable_1, "PROMOTABLE-RSC"));
133 assert_false(pe_base_name_eq(promotable_0, "Promotable-rsc"));
134 assert_false(pe_base_name_eq(promotable_1, "Promotable-rsc"));
135}
136
137static void
138bundle_rsc(void **state) {
139 assert_true(pe_base_name_eq(httpd_bundle, "httpd-bundle"));
140 assert_false(pe_base_name_eq(httpd_bundle, "HTTPD-BUNDLE"));
141 assert_false(pe_base_name_eq(httpd_bundle, "httpd"));
142 assert_false(pe_base_name_eq(httpd_bundle, "httpd-docker-0"));
143}
144
145PCMK__UNIT_TEST(setup, teardown,
146 cmocka_unit_test(bad_args),
147 cmocka_unit_test(primitive_rsc),
148 cmocka_unit_test(group_rsc),
149 cmocka_unit_test(clone_rsc),
150 cmocka_unit_test(bundle_rsc))
const char * path
Definition cib.c:28
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1
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.
@ pcmk_sched_no_compat
Definition scheduler.h:170
@ pcmk_sched_no_counts
Definition scheduler.h:164
#define pcmk__set_scheduler_flags(scheduler, flags_to_set)
Cluster status and scheduling.
void pe_free_working_set(pcmk_scheduler_t *scheduler)
Free scheduler data.
Definition status.c:50
pcmk_scheduler_t * pe_new_working_set(void)
Create a new object to hold scheduler data.
Definition status.c:34
gboolean cluster_status(pcmk_scheduler_t *scheduler)
Definition status.c:96
GList * children
Definition resources.h:471
xmlNode * input
Definition scheduler.h:196
GList * resources
Definition scheduler.h:231
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
Wrappers for and extensions to libxml2.
void crm_xml_init(void)
Initialize the CRM XML subsystem.
Definition xml.c:2121
xmlNode * pcmk__xml_read(const char *filename)
Definition xml_io.c:166