This source file includes following definitions.
- empty_input
- no_specials
- single_dash
- double_dash
- special_args
- special_arg_at_end
- long_arg
- negative_score
- negative_score_2
- string_arg_with_dash
- string_arg_with_dash_2
- string_arg_with_dash_3
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <crm/common/unittest_internal.h>
13 #include <crm/common/cmdline_internal.h>
14
15 #include <glib.h>
16 #include <stdint.h>
17
18 #define LISTS_EQ(a, b) { \
19 assert_int_equal(g_strv_length((gchar **) (a)), g_strv_length((gchar **) (b))); \
20 for (int i = 0; i < g_strv_length((a)); i++) { \
21 assert_string_equal((a)[i], (b)[i]); \
22 } \
23 }
24
25 static void
26 empty_input(void **state) {
27 assert_null(pcmk__cmdline_preproc(NULL, ""));
28 }
29
30 static void
31 no_specials(void **state) {
32 const char *argv[] = { "crm_mon", "-a", "-b", "-c", "-d", "-1", NULL };
33 const gchar *expected[] = { "crm_mon", "-a", "-b", "-c", "-d", "-1", NULL };
34
35 gchar **processed = pcmk__cmdline_preproc((char **) argv, NULL);
36 LISTS_EQ(processed, expected);
37 g_strfreev(processed);
38
39 processed = pcmk__cmdline_preproc((char **) argv, "");
40 LISTS_EQ(processed, expected);
41 g_strfreev(processed);
42 }
43
44 static void
45 single_dash(void **state) {
46 const char *argv[] = { "crm_mon", "-", NULL };
47 const gchar *expected[] = { "crm_mon", "-", NULL };
48
49 gchar **processed = pcmk__cmdline_preproc((char **) argv, NULL);
50 LISTS_EQ(processed, expected);
51 g_strfreev(processed);
52 }
53
54 static void
55 double_dash(void **state) {
56 const char *argv[] = { "crm_mon", "-a", "--", "-bc", NULL };
57 const gchar *expected[] = { "crm_mon", "-a", "--", "-bc", NULL };
58
59 gchar **processed = pcmk__cmdline_preproc((char **) argv, NULL);
60 LISTS_EQ(processed, expected);
61 g_strfreev(processed);
62 }
63
64 static void
65 special_args(void **state) {
66 const char *argv[] = { "crm_mon", "-aX", "-Fval", NULL };
67 const gchar *expected[] = { "crm_mon", "-a", "X", "-F", "val", NULL };
68
69 gchar **processed = pcmk__cmdline_preproc((char **) argv, "aF");
70 LISTS_EQ(processed, expected);
71 g_strfreev(processed);
72 }
73
74 static void
75 special_arg_at_end(void **state) {
76 const char *argv[] = { "crm_mon", "-a", NULL };
77 const gchar *expected[] = { "crm_mon", "-a", NULL };
78
79 gchar **processed = pcmk__cmdline_preproc((char **) argv, "a");
80 LISTS_EQ(processed, expected);
81 g_strfreev(processed);
82 }
83
84 static void
85 long_arg(void **state) {
86 const char *argv[] = { "crm_mon", "--blah=foo", NULL };
87 const gchar *expected[] = { "crm_mon", "--blah=foo", NULL };
88
89 gchar **processed = pcmk__cmdline_preproc((char **) argv, NULL);
90 LISTS_EQ(processed, expected);
91 g_strfreev(processed);
92 }
93
94 static void
95 negative_score(void **state) {
96 const char *argv[] = { "crm_mon", "-v", "-1000", NULL };
97 const gchar *expected[] = { "crm_mon", "-v", "-1000", NULL };
98
99 gchar **processed = pcmk__cmdline_preproc((char **) argv, "v");
100 LISTS_EQ(processed, expected);
101 g_strfreev(processed);
102 }
103
104 static void
105 negative_score_2(void **state) {
106 const char *argv[] = { "crm_mon", "-1i3", NULL };
107 const gchar *expected[] = { "crm_mon", "-1", "-i", "-3", NULL };
108
109 gchar **processed = pcmk__cmdline_preproc((char **) argv, NULL);
110 LISTS_EQ(processed, expected);
111 g_strfreev(processed);
112 }
113
114 static void
115 string_arg_with_dash(void **state) {
116 const char *argv[] = { "crm_mon", "-n", "crm_mon_options", "-v", "--opt1 --opt2", NULL };
117 const gchar *expected[] = { "crm_mon", "-n", "crm_mon_options", "-v", "--opt1 --opt2", NULL };
118
119 gchar **processed = pcmk__cmdline_preproc((char **) argv, "v");
120 LISTS_EQ(processed, expected);
121 g_strfreev(processed);
122 }
123
124 static void
125 string_arg_with_dash_2(void **state) {
126 const char *argv[] = { "crm_mon", "-n", "crm_mon_options", "-v", "-1i3", NULL };
127 const gchar *expected[] = { "crm_mon", "-n", "crm_mon_options", "-v", "-1i3", NULL };
128
129 gchar **processed = pcmk__cmdline_preproc((char **) argv, "v");
130 LISTS_EQ(processed, expected);
131 g_strfreev(processed);
132 }
133
134 static void
135 string_arg_with_dash_3(void **state) {
136 const char *argv[] = { "crm_mon", "-abc", "-1i3", NULL };
137 const gchar *expected[] = { "crm_mon", "-a", "-b", "-c", "-1i3", NULL };
138
139 gchar **processed = pcmk__cmdline_preproc((char **) argv, "c");
140 LISTS_EQ(processed, expected);
141 g_strfreev(processed);
142 }
143
144 PCMK__UNIT_TEST(NULL, NULL,
145 cmocka_unit_test(empty_input),
146 cmocka_unit_test(no_specials),
147 cmocka_unit_test(single_dash),
148 cmocka_unit_test(double_dash),
149 cmocka_unit_test(special_args),
150 cmocka_unit_test(special_arg_at_end),
151 cmocka_unit_test(long_arg),
152 cmocka_unit_test(negative_score),
153 cmocka_unit_test(negative_score_2),
154 cmocka_unit_test(string_arg_with_dash),
155 cmocka_unit_test(string_arg_with_dash_2),
156 cmocka_unit_test(string_arg_with_dash_3))