This source file includes following definitions.
- assert_scan_nvpair
- null_asserts
- already_allocated_asserts
- empty_input
- equal_sign_only
- name_only
- value_only
- valid
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <glib.h>
13
14 #include <crm/common/unittest_internal.h>
15
16 static void
17 assert_scan_nvpair(const gchar *input, int expected_rc,
18 const gchar *expected_name, const gchar *expected_value)
19 {
20 gchar *name = NULL;
21 gchar *value = NULL;
22
23 assert_int_equal(pcmk__scan_nvpair(input, &name, &value),
24 expected_rc);
25
26 if (expected_name == NULL) {
27 assert_null(name);
28 } else {
29 assert_string_equal(name, expected_name);
30 }
31
32 if (expected_value == NULL) {
33 assert_null(value);
34 } else {
35 assert_string_equal(value, expected_value);
36 }
37
38 g_free(name);
39 g_free(value);
40 }
41
42 static void
43 null_asserts(void **state)
44 {
45 const gchar *input = "key=value";
46 gchar *name = NULL;
47 gchar *value = NULL;
48
49 pcmk__assert_asserts(pcmk__scan_nvpair(NULL, &name, &value));
50 pcmk__assert_asserts(pcmk__scan_nvpair(input, NULL, &value));
51 pcmk__assert_asserts(pcmk__scan_nvpair(input, &name, NULL));
52 }
53
54 static void
55 already_allocated_asserts(void **state)
56 {
57 const gchar *input = "key=value";
58 gchar *buf_null = NULL;
59 gchar *buf_allocated = g_strdup("allocated string");
60
61 pcmk__assert_asserts(pcmk__scan_nvpair(input, &buf_allocated, &buf_null));
62 pcmk__assert_asserts(pcmk__scan_nvpair(input, &buf_null, &buf_allocated));
63
64 g_free(buf_allocated);
65 }
66
67 static void
68 empty_input(void **state)
69 {
70 assert_scan_nvpair("", pcmk_rc_bad_nvpair, NULL, NULL);
71 }
72
73 static void
74 equal_sign_only(void **state)
75 {
76 assert_scan_nvpair("=", pcmk_rc_bad_nvpair, NULL, NULL);
77 }
78
79 static void
80 name_only(void **state)
81 {
82 assert_scan_nvpair("name", pcmk_rc_bad_nvpair, NULL, NULL);
83 assert_scan_nvpair("name=", pcmk_rc_bad_nvpair, NULL, NULL);
84 }
85
86 static void
87 value_only(void **state)
88 {
89 assert_scan_nvpair("=value", pcmk_rc_bad_nvpair, NULL, NULL);
90 }
91
92 static void
93 valid(void **state)
94 {
95 assert_scan_nvpair("name=value", pcmk_rc_ok, "name", "value");
96
97
98 assert_scan_nvpair("name=value\n\n", pcmk_rc_ok, "name", "value");
99 assert_scan_nvpair("\nname=value\n", pcmk_rc_ok, "\nname", "value");
100 assert_scan_nvpair("name\n=value\n", pcmk_rc_ok, "name\n", "value");
101 assert_scan_nvpair("name=\nvalue\n", pcmk_rc_ok, "name", "\nvalue");
102 assert_scan_nvpair("name=val\nue\n", pcmk_rc_ok, "name", "val\nue");
103
104
105 assert_scan_nvpair(" name=value", pcmk_rc_ok, " name", "value");
106 assert_scan_nvpair("name =value", pcmk_rc_ok, "name ", "value");
107 assert_scan_nvpair("name= value", pcmk_rc_ok, "name", " value");
108 assert_scan_nvpair("name=value ", pcmk_rc_ok, "name", "value ");
109 assert_scan_nvpair("name = value", pcmk_rc_ok, "name ", " value");
110
111
112 assert_scan_nvpair("name=value=", pcmk_rc_ok, "name", "value=");
113 assert_scan_nvpair("name=value=\n\n", pcmk_rc_ok, "name", "value=");
114 assert_scan_nvpair("name=value=e", pcmk_rc_ok, "name", "value=e");
115 assert_scan_nvpair("name=value=e\n\n", pcmk_rc_ok, "name", "value=e");
116
117
118 assert_scan_nvpair("name='value'", pcmk_rc_ok, "name", "'value'");
119 assert_scan_nvpair("'name'=value", pcmk_rc_ok, "'name'", "value");
120 assert_scan_nvpair("'name=value'", pcmk_rc_ok, "'name", "value'");
121 assert_scan_nvpair("name=\"value\"", pcmk_rc_ok, "name", "\"value\"");
122 assert_scan_nvpair("\"name\"=value", pcmk_rc_ok, "\"name\"", "value");
123 assert_scan_nvpair("\"name=value\"", pcmk_rc_ok, "\"name", "value\"");
124
125
126 assert_scan_nvpair("!@#$%=^&*()", pcmk_rc_ok, "!@#$%", "^&*()");
127 assert_scan_nvpair("name=$value", pcmk_rc_ok, "name", "$value");
128 }
129
130 PCMK__UNIT_TEST(NULL, NULL,
131 cmocka_unit_test(null_asserts),
132 cmocka_unit_test(already_allocated_asserts),
133 cmocka_unit_test(empty_input),
134 cmocka_unit_test(equal_sign_only),
135 cmocka_unit_test(name_only),
136 cmocka_unit_test(value_only),
137 cmocka_unit_test(valid))