Mercurial > irccd
annotate tests/test-rule.c @ 1089:16e66403ea66
plugins: substitute IRCCD_VERSION in Javascript plugins
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 21 Jul 2021 15:33:17 +0200 |
parents | e9b35306f376 |
children | 2c0eea3af7df |
rev | line source |
---|---|
944 | 1 /* |
2 * test-rule.c -- test rule.h functions | |
3 * | |
4 * Copyright (c) 2013-2021 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #define GREATEST_USE_ABBREVS 0 | |
20 #include <greatest.h> | |
21 | |
22 #include <irccd/rule.h> | |
23 #include <irccd/irccd.h> | |
24 | |
25 static void | |
26 clean(void *udata) | |
27 { | |
28 (void)udata; | |
29 | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
30 irc_bot_rule_clear(); |
944 | 31 } |
32 | |
33 GREATEST_TEST | |
34 basics_insert(void) | |
35 { | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
36 struct irc_rule *r, *r1, *r2; |
944 | 37 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
38 r1 = irc_rule_new(IRC_RULE_DROP); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
39 r2 = irc_rule_new(IRC_RULE_DROP); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
40 |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
41 irc_rule_add(r1->servers, "s1"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
42 irc_rule_add(r2->servers, "s2"); |
944 | 43 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
44 irc_bot_rule_insert(r1, 0); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
45 irc_bot_rule_insert(r2, 0); |
944 | 46 |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
47 r = irc.rules; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
48 GREATEST_ASSERT_EQ(r2, r); |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
49 r = r->next; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
50 GREATEST_ASSERT_EQ(r1, r); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
51 |
944 | 52 GREATEST_PASS(); |
53 } | |
54 | |
55 GREATEST_TEST | |
56 basics_remove(void) | |
57 { | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
58 struct irc_rule *r, *r1, *r2, *r3; |
944 | 59 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
60 r1 = irc_rule_new(IRC_RULE_DROP); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
61 r2 = irc_rule_new(IRC_RULE_DROP); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
62 r3 = irc_rule_new(IRC_RULE_DROP); |
944 | 63 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
64 irc_rule_add(r1->servers, "s1"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
65 irc_rule_add(r2->servers, "s2"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
66 irc_rule_add(r3->servers, "s3"); |
944 | 67 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
68 irc_bot_rule_insert(r1, -1); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
69 irc_bot_rule_insert(r2, -1); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
70 irc_bot_rule_insert(r3, -1); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
71 irc_bot_rule_remove(1); |
944 | 72 |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
73 r = irc.rules; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
74 GREATEST_ASSERT_EQ(r1, r); |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
75 r = r->next; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
76 GREATEST_ASSERT_EQ(r3, r); |
944 | 77 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
78 irc_bot_rule_remove(1); |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
79 r = irc.rules; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
80 GREATEST_ASSERT_EQ(r1, r); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
81 |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
82 irc_bot_rule_remove(0); |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
83 r = irc.rules; |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
84 GREATEST_ASSERT(!r); |
944 | 85 |
86 GREATEST_PASS(); | |
87 } | |
88 | |
89 /* | |
90 * Simulate the following rules configuration: | |
91 * | |
92 * # | |
93 * # On all servers, each channel #staff can't use the onCommand event, | |
94 * # everything else is allowed. | |
95 * # | |
96 * [rule] #1 | |
97 * servers = "" | |
98 * channels = "#staff" | |
99 * events = "onCommand" | |
100 * action = drop | |
101 * | |
102 * # | |
103 * # However, the same onCommand on #staff is allowed on server "unsafe" | |
104 * # | |
105 * [rule] #2 | |
106 * servers = "unsafe" | |
107 * channels = "#staff" | |
108 * events = "onCommand" | |
109 * action = accept | |
110 * | |
111 * # | |
112 * # Plugin game is only allowed on server "malikania" and "localhost", | |
113 * # channel "#games" and events "onMessage, onCommand". | |
114 * # | |
115 * # The first rule #3-1 disable the plugin game for every server, it is | |
116 * # reenabled again with the #3-2. | |
117 * # | |
118 * [rule] #3-1 | |
119 * plugins = "game" | |
120 * action = drop | |
121 * | |
122 * [rule] #3-2 | |
123 * servers = "malikania localhost" | |
124 * channels = "#games" | |
125 * plugins = "game" | |
126 * events = "onMessage onCommand" | |
127 * action = accept | |
128 */ | |
129 | |
130 static void | |
131 set(void *udata) | |
132 { | |
133 (void)udata; | |
134 | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
135 struct irc_rule *r1, *r2, *r31, *r32; |
944 | 136 |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
137 irc_bot_rule_clear(); |
944 | 138 |
139 /* #1 */ | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
140 r1 = irc_rule_new(IRC_RULE_DROP); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
141 irc_rule_add(r1->channels, "#staff"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
142 irc_rule_add(r1->events, "onCommand"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
143 irc_bot_rule_insert(r1, -1); |
944 | 144 |
145 /* #2 */ | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
146 r2 = irc_rule_new(IRC_RULE_ACCEPT); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
147 irc_rule_add(r2->servers, "unsafe"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
148 irc_rule_add(r2->channels, "#staff"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
149 irc_rule_add(r2->events, "onCommand"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
150 irc_bot_rule_insert(r2, -1); |
944 | 151 |
152 /* #3-1 */ | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
153 r31 = irc_rule_new(IRC_RULE_DROP); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
154 irc_rule_add(r31->plugins, "game"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
155 irc_bot_rule_insert(r31, -1); |
944 | 156 |
157 /* #3-2 */ | |
958
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
158 r32 = irc_rule_new(IRC_RULE_ACCEPT); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
159 irc_rule_add(r32->servers, "malikania"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
160 irc_rule_add(r32->servers, "localhost"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
161 irc_rule_add(r32->channels, "#games"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
162 irc_rule_add(r32->plugins, "game"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
163 irc_rule_add(r32->events, "onCommand"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
164 irc_rule_add(r32->events, "onMessage"); |
533639ec5e9c
misc: use sys/queue.h
David Demelier <markand@malikania.fr>
parents:
944
diff
changeset
|
165 irc_bot_rule_insert(r32, -1); |
944 | 166 }; |
167 | |
168 GREATEST_TEST | |
169 solve_match1(void) | |
170 { | |
171 struct irc_rule m = {0}; | |
172 | |
173 GREATEST_ASSERT(irc_rule_match(&m, "freenode", "#test", "a", "", "")); | |
174 GREATEST_ASSERT(irc_rule_match(&m, "", "", "", "", "")); | |
175 GREATEST_PASS(); | |
176 } | |
177 | |
178 GREATEST_TEST | |
179 solve_match2(void) | |
180 { | |
181 struct irc_rule m = {0}; | |
182 | |
183 irc_rule_add(m.servers, "freenode"); | |
184 | |
185 GREATEST_ASSERT(irc_rule_match(&m, "FreeNode", "#test", "a", "", "")); | |
186 GREATEST_ASSERT(!irc_rule_match(&m, "malikania", "#test", "a", "", "")); | |
187 GREATEST_ASSERT(irc_rule_match(&m, "freenode", "", "jean", "", "onMessage")); | |
188 GREATEST_PASS(); | |
189 } | |
190 | |
191 GREATEST_TEST | |
192 solve_match3(void) | |
193 { | |
194 struct irc_rule m = {0}; | |
195 | |
196 irc_rule_add(m.servers, "freenode"); | |
197 irc_rule_add(m.channels, "#staff"); | |
198 | |
199 GREATEST_ASSERT(irc_rule_match(&m, "freenode", "#staff", "a", "", "")); | |
200 GREATEST_ASSERT(!irc_rule_match(&m, "freenode", "#test", "a", "", "")); | |
201 GREATEST_ASSERT(!irc_rule_match(&m, "malikania", "#staff", "a", "", "")); | |
202 GREATEST_PASS(); | |
203 } | |
204 | |
205 GREATEST_TEST | |
206 solve_match4(void) | |
207 { | |
208 struct irc_rule m = {0}; | |
209 | |
210 irc_rule_add(m.servers, "malikania"); | |
211 irc_rule_add(m.channels, "#staff"); | |
212 irc_rule_add(m.origins, "a"); | |
213 | |
214 GREATEST_ASSERT(irc_rule_match(&m, "malikania", "#staff", "a", "","")); | |
215 GREATEST_ASSERT(!irc_rule_match(&m, "malikania", "#staff", "b", "", "")); | |
216 GREATEST_ASSERT(!irc_rule_match(&m, "freenode", "#staff", "a", "", "")); | |
217 GREATEST_PASS(); | |
218 } | |
219 | |
220 GREATEST_TEST | |
221 solve_match5(void) | |
222 { | |
223 struct irc_rule m = {0}; | |
224 | |
225 irc_rule_add(m.servers, "malikania"); | |
226 irc_rule_add(m.servers, "freenode"); | |
227 | |
228 GREATEST_ASSERT(irc_rule_match(&m, "malikania", "", "", "", "")); | |
229 GREATEST_ASSERT(irc_rule_match(&m, "freenode", "", "", "", "")); | |
230 GREATEST_ASSERT(!irc_rule_match(&m, "no", "", "", "", "")); | |
231 GREATEST_PASS(); | |
232 } | |
233 | |
234 GREATEST_TEST | |
235 solve_match6(void) | |
236 { | |
237 struct irc_rule m = {0}; | |
238 | |
239 irc_rule_add(m.servers, "malikania"); | |
240 irc_rule_add(m.origins, "markand"); | |
241 | |
242 GREATEST_ASSERT(irc_rule_match(&m, "malikania", "#staff", "markand", "system", "onCommand")); | |
243 GREATEST_ASSERT(!irc_rule_match(&m, "malikania", "#staff", "", "system", "onNames")); | |
244 GREATEST_ASSERT(!irc_rule_match(&m, "malikania", "#staff", "jean", "system", "onMessage")); | |
245 GREATEST_PASS(); | |
246 } | |
247 | |
248 GREATEST_TEST | |
249 solve_match7(void) | |
250 { | |
251 /* Allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
252 GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "malikania", "#staff", "", "a", "onMessage")); |
944 | 253 |
254 /* Allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
255 GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "freenode", "#staff", "", "b", "onTopic")); |
944 | 256 |
257 /* Not allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
258 GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "malikania", "#staff", "", "", "onCommand")); |
944 | 259 |
260 /* Not allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
261 GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "freenode", "#staff", "", "c", "onCommand")); |
944 | 262 |
263 /* Allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
264 GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "unsafe", "#staff", "", "c", "onCommand")); |
944 | 265 |
266 GREATEST_PASS(); | |
267 } | |
268 | |
269 GREATEST_TEST | |
270 solve_match8(void) | |
271 { | |
272 /* Allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
273 GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "malikania", "#games", "", "game", "onMessage")); |
944 | 274 |
275 /* Allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
276 GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "localhost", "#games", "", "game", "onMessage")); |
944 | 277 |
278 /* Allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
279 GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "malikania", "#games", "", "game", "onCommand")); |
944 | 280 |
281 /* Not allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
282 GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "malikania", "#games", "", "game", "onQuery")); |
944 | 283 |
284 /* Not allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
285 GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "freenode", "#no", "", "game", "onMessage")); |
944 | 286 |
287 /* Not allowed */ | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
288 GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "malikania", "#test", "", "game", "onMessage")); |
944 | 289 GREATEST_PASS(); |
290 } | |
291 | |
292 GREATEST_TEST | |
293 solve_match9(void) | |
294 { | |
1071
e9b35306f376
misc: remove usage of BSD sys/queue.h (rule)
David Demelier <markand@malikania.fr>
parents:
958
diff
changeset
|
295 GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "MALIKANIA", "#STAFF", "", "SYSTEM", "onCommand")); |
944 | 296 GREATEST_PASS(); |
297 } | |
298 | |
299 GREATEST_SUITE(suite_basics) | |
300 { | |
301 GREATEST_SET_SETUP_CB(clean, NULL); | |
302 GREATEST_RUN_TEST(basics_insert); | |
303 GREATEST_RUN_TEST(basics_remove); | |
304 } | |
305 | |
306 GREATEST_SUITE(suite_solve) | |
307 { | |
308 GREATEST_SET_SETUP_CB(set, NULL); | |
309 GREATEST_RUN_TEST(solve_match1); | |
310 GREATEST_RUN_TEST(solve_match2); | |
311 GREATEST_RUN_TEST(solve_match3); | |
312 GREATEST_RUN_TEST(solve_match4); | |
313 GREATEST_RUN_TEST(solve_match5); | |
314 GREATEST_RUN_TEST(solve_match6); | |
315 GREATEST_RUN_TEST(solve_match7); | |
316 GREATEST_RUN_TEST(solve_match8); | |
317 GREATEST_RUN_TEST(solve_match9); | |
318 } | |
319 | |
320 GREATEST_MAIN_DEFS(); | |
321 | |
322 int | |
323 main(int argc, char **argv) | |
324 { | |
325 GREATEST_MAIN_BEGIN(); | |
326 GREATEST_RUN_SUITE(suite_basics); | |
327 GREATEST_RUN_SUITE(suite_solve); | |
328 GREATEST_MAIN_END(); | |
329 | |
330 return 0; | |
331 } |