This source file includes following definitions.
- setup
- teardown
- invalid_name
- single_schema
- multiple_schemas
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <crm/common/xml.h>
13 #include <crm/common/unittest_internal.h>
14 #include <crm/common/lists_internal.h>
15
16 #include <glib.h>
17
18 const char *rngs1[] = { "pacemaker-3.0.rng", "status-1.0.rng", "alerts-2.10.rng",
19 "nvset-2.9.rng", "score.rng", "rule-2.9.rng",
20 "tags-1.3.rng", "acls-2.0.rng", "fencing-2.4.rng",
21 "constraints-3.0.rng", "resources-3.0.rng", "nvset-3.0.rng",
22 "nodes-3.0.rng", "options-3.0.rng", NULL };
23
24 const char *rngs2[] = { "pacemaker-2.0.rng", "status-1.0.rng", "tags-1.3.rng",
25 "acls-2.0.rng", "fencing-1.2.rng", "constraints-1.2.rng",
26 "rule.rng", "score.rng", "resources-1.3.rng",
27 "nvset-1.3.rng", "nodes-1.3.rng", "options-1.0.rng",
28 "nvset.rng", "cib-1.2.rng", NULL };
29
30 const char *rngs3[] = { "pacemaker-2.1.rng", "constraints-2.1.rng", NULL };
31
32 static int
33 setup(void **state)
34 {
35 setenv("PCMK_schema_directory", PCMK__TEST_SCHEMA_DIR, 1);
36 pcmk__xml_test_setup_group(state);
37 return 0;
38 }
39
40 static int
41 teardown(void **state)
42 {
43 pcmk__xml_test_teardown_group(state);
44 unsetenv("PCMK_schema_directory");
45 return 0;
46 }
47
48 static void
49 invalid_name(void **state)
50 {
51 GList *already_included = NULL;
52 xmlNode *parent = pcmk__xe_create(NULL, PCMK__XA_SCHEMAS);
53
54 pcmk__build_schema_xml_node(parent, "pacemaker-9.0", &already_included);
55 assert_null(parent->children);
56 assert_null(already_included);
57 pcmk__xml_free(parent);
58 }
59
60 static void
61 single_schema(void **state)
62 {
63 GList *already_included = NULL;
64 xmlNode *parent = pcmk__xe_create(NULL, PCMK__XA_SCHEMAS);
65 xmlNode *schema_node = NULL;
66 xmlNode *file_node = NULL;
67 int i = 0;
68
69 pcmk__build_schema_xml_node(parent, "pacemaker-3.0", &already_included);
70
71 assert_non_null(already_included);
72 assert_non_null(parent->children);
73
74
75
76
77
78
79
80
81
82
83
84 schema_node = pcmk__xe_first_child(parent, NULL, NULL, NULL);
85 assert_string_equal("pacemaker-3.0",
86 crm_element_value(schema_node, PCMK_XA_VERSION));
87
88 file_node = pcmk__xe_first_child(schema_node, NULL, NULL, NULL);
89 while (file_node != NULL && rngs1[i] != NULL) {
90 assert_string_equal(rngs1[i],
91 crm_element_value(file_node, PCMK_XA_PATH));
92 assert_int_equal(pcmk__xml_first_child(file_node)->type, XML_CDATA_SECTION_NODE);
93
94 file_node = pcmk__xe_next(file_node, NULL);
95 i++;
96 }
97
98 g_list_free_full(already_included, free);
99 pcmk__xml_free(parent);
100 }
101
102 static void
103 multiple_schemas(void **state)
104 {
105 GList *already_included = NULL;
106 xmlNode *parent = pcmk__xe_create(NULL, PCMK__XA_SCHEMAS);
107 xmlNode *schema_node = NULL;
108 xmlNode *file_node = NULL;
109 int i = 0;
110
111 pcmk__build_schema_xml_node(parent, "pacemaker-2.0", &already_included);
112 pcmk__build_schema_xml_node(parent, "pacemaker-2.1", &already_included);
113
114 assert_non_null(already_included);
115 assert_non_null(parent->children);
116
117
118
119
120 schema_node = pcmk__xe_first_child(parent, NULL, NULL, NULL);
121 assert_string_equal("pacemaker-2.0",
122 crm_element_value(schema_node, PCMK_XA_VERSION));
123
124 file_node = pcmk__xe_first_child(schema_node, NULL, NULL, NULL);
125 while (file_node != NULL && rngs2[i] != NULL) {
126 assert_string_equal(rngs2[i],
127 crm_element_value(file_node, PCMK_XA_PATH));
128 assert_int_equal(pcmk__xml_first_child(file_node)->type, XML_CDATA_SECTION_NODE);
129
130 file_node = pcmk__xe_next(file_node, NULL);
131 i++;
132 }
133
134 schema_node = pcmk__xe_next(schema_node, NULL);
135 assert_string_equal("pacemaker-2.1",
136 crm_element_value(schema_node, PCMK_XA_VERSION));
137
138 file_node = pcmk__xe_first_child(schema_node, NULL, NULL, NULL);
139 i = 0;
140
141 while (file_node != NULL && rngs3[i] != NULL) {
142 assert_string_equal(rngs3[i],
143 crm_element_value(file_node, PCMK_XA_PATH));
144 assert_int_equal(pcmk__xml_first_child(file_node)->type, XML_CDATA_SECTION_NODE);
145
146 file_node = pcmk__xe_next(file_node, NULL);
147 i++;
148 }
149
150 g_list_free_full(already_included, free);
151 pcmk__xml_free(parent);
152 }
153
154 PCMK__UNIT_TEST(setup, teardown,
155 cmocka_unit_test(invalid_name),
156 cmocka_unit_test(single_schema),
157 cmocka_unit_test(multiple_schemas))