Mercurial > irccd
annotate tests/rules/main.cpp @ 189:bb70bb9e41eb
Irccd: use native Duktape API
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 03 Jun 2016 13:28:10 +0200 |
parents | 77f950caab35 |
children | 6635b9187d71 |
rev | line source |
---|---|
0 | 1 /* |
2 * main.cpp -- test irccd rules | |
3 * | |
4 * Copyright (c) 2013-2016 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 #include <gtest/gtest.h> | |
20 | |
95
1125d90b3b44
Misc: switch to .hpp, #477
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
21 #include <irccd/rule.hpp> |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
22 #include <irccd/service-rule.hpp> |
0 | 23 |
24 namespace irccd { | |
25 | |
26 /* | |
27 * Simulate the following rules configuration: | |
28 * | |
29 * # | |
30 * # On all servers, each channel #staff can't use the onCommand event, | |
31 * # everything else is allowed. | |
32 * # | |
33 * [rule] #1 | |
34 * servers = "" | |
35 * channels = "#staff" | |
36 * events = "onCommand" | |
37 * action = drop | |
38 * | |
39 * # | |
40 * # However, the same onCommand on #staff is allowed on server "unsafe" | |
41 * # | |
42 * [rule] #2 | |
43 * servers = "unsafe" | |
44 * channels = "#staff" | |
45 * events = "onCommand" | |
46 * action = accept | |
47 * | |
48 * # | |
49 * # Plugin game is only allowed on server "malikania" and "localhost", | |
50 * # channel "#games" and events "onMessage, onCommand". | |
51 * # | |
52 * # The first rule #3-1 disable the plugin game for every server, it is | |
53 * # reenabled again with the #3-2. | |
54 * # | |
55 * [rule] #3-1 | |
56 * plugins = "game" | |
57 * action = drop | |
58 * | |
59 * [rule] #3-2 | |
60 * servers = "malikania localhost" | |
61 * channels = "#games" | |
62 * plugins = "game" | |
63 * events = "onMessage onCommand" | |
64 * action = accept | |
65 */ | |
66 class RulesTest : public testing::Test { | |
67 protected: | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
68 RuleService m_rules; |
0 | 69 |
70 RulesTest() | |
71 { | |
72 // #1 | |
73 { | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
74 m_rules.add({ |
0 | 75 RuleSet{ }, // Servers |
76 RuleSet{ "#staff" }, // Channels | |
77 RuleSet{ }, // Origins | |
78 RuleSet{ }, // Plugins | |
79 RuleSet{ "onCommand" }, // Events | |
80 RuleAction::Drop | |
81 }); | |
82 } | |
83 | |
84 // #2 | |
85 { | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
86 m_rules.add({ |
0 | 87 RuleSet{ "unsafe" }, |
88 RuleSet{ "#staff" }, | |
89 RuleSet{ }, | |
90 RuleSet{ }, | |
91 RuleSet{ "onCommand" }, | |
92 RuleAction::Accept | |
93 }); | |
94 } | |
95 | |
96 // #3-1 | |
97 { | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
98 m_rules.add({ |
0 | 99 RuleSet{}, |
100 RuleSet{}, | |
101 RuleSet{}, | |
102 RuleSet{"game"}, | |
103 RuleSet{}, | |
104 RuleAction::Drop | |
105 }); | |
106 } | |
107 | |
108 // #3-2 | |
109 { | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
110 m_rules.add({ |
0 | 111 RuleSet{ "malikania", "localhost" }, |
112 RuleSet{ "#games" }, | |
113 RuleSet{ }, | |
114 RuleSet{ "game" }, | |
115 RuleSet{ "onCommand", "onMessage" }, | |
116 RuleAction::Accept | |
117 }); | |
118 } | |
119 } | |
120 }; | |
121 | |
122 TEST_F(RulesTest, basicMatch1) | |
123 { | |
124 Rule m; | |
125 | |
126 /* | |
127 * [rule] | |
128 */ | |
129 ASSERT_TRUE(m.match("freenode", "#test", "a", "", "")); | |
130 ASSERT_TRUE(m.match("", "", "", "", "")); | |
131 } | |
132 | |
133 TEST_F(RulesTest, basicMatch2) | |
134 { | |
135 Rule m(RuleSet{"freenode"}); | |
136 | |
137 /* | |
138 * [rule] | |
139 * servers = "freenode" | |
140 */ | |
141 | |
142 ASSERT_TRUE(m.match("freenode", "#test", "a", "", "")); | |
143 ASSERT_FALSE(m.match("malikania", "#test", "a", "", "")); | |
144 ASSERT_TRUE(m.match("freenode", "", "jean", "", "onMessage")); | |
145 } | |
146 | |
147 TEST_F(RulesTest, basicMatch3) | |
148 { | |
149 Rule m(RuleSet{"freenode"}, RuleSet{"#staff"}); | |
150 | |
151 /* | |
152 * [rule] | |
153 * servers = "freenode" | |
154 * channels = "#staff" | |
155 */ | |
156 | |
157 ASSERT_TRUE(m.match("freenode", "#staff", "a", "", "")); | |
158 ASSERT_FALSE(m.match("freenode", "#test", "a", "", "")); | |
159 ASSERT_FALSE(m.match("malikania", "#staff", "a", "", "")); | |
160 } | |
161 | |
162 TEST_F(RulesTest, basicMatch4) | |
163 { | |
164 Rule m(RuleSet{"malikania"}, RuleSet{"#staff"}, RuleSet{"a"}); | |
165 | |
166 /* | |
167 * [rule] | |
168 * servers = "malikania" | |
169 * channels = "#staff" | |
170 * plugins = "a" | |
171 */ | |
172 | |
173 ASSERT_TRUE(m.match("malikania", "#staff", "a", "","")); | |
174 ASSERT_FALSE(m.match("malikania", "#staff", "b", "", "")); | |
175 ASSERT_FALSE(m.match("freenode", "#staff", "a", "", "")); | |
176 } | |
177 | |
178 TEST_F(RulesTest, complexMatch1) | |
179 { | |
180 Rule m(RuleSet{"malikania", "freenode"}); | |
181 | |
182 /* | |
183 * [rule] | |
184 * servers = "malikania freenode" | |
185 */ | |
186 | |
187 ASSERT_TRUE(m.match("malikania", "", "", "", "")); | |
188 ASSERT_TRUE(m.match("freenode", "", "", "", "")); | |
189 ASSERT_FALSE(m.match("no", "", "", "", "")); | |
190 } | |
191 | |
192 TEST_F(RulesTest, basicSolve) | |
193 { | |
194 /* Allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
195 ASSERT_TRUE(m_rules.solve("malikania", "#staff", "", "a", "onMessage")); |
0 | 196 |
197 /* Allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
198 ASSERT_TRUE(m_rules.solve("freenode", "#staff", "", "b", "onTopic")); |
0 | 199 |
200 /* Not allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
201 ASSERT_FALSE(m_rules.solve("malikania", "#staff", "", "", "onCommand")); |
0 | 202 |
203 /* Not allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
204 ASSERT_FALSE(m_rules.solve("freenode", "#staff", "", "c", "onCommand")); |
0 | 205 |
206 /* Allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
207 ASSERT_TRUE(m_rules.solve("unsafe", "#staff", "", "c", "onCommand")); |
0 | 208 } |
209 | |
210 TEST_F(RulesTest, gamesSolve) | |
211 { | |
212 /* Allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
213 ASSERT_TRUE(m_rules.solve("malikania", "#games", "", "game", "onMessage")); |
0 | 214 |
215 /* Allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
216 ASSERT_TRUE(m_rules.solve("localhost", "#games", "", "game", "onMessage")); |
0 | 217 |
218 /* Allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
219 ASSERT_TRUE(m_rules.solve("malikania", "#games", "", "game", "onCommand")); |
0 | 220 |
221 /* Not allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
222 ASSERT_FALSE(m_rules.solve("malikania", "#games", "", "game", "onQuery")); |
0 | 223 |
224 /* Not allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
225 ASSERT_FALSE(m_rules.solve("freenode", "#no", "", "game", "onMessage")); |
0 | 226 |
227 /* Not allowed */ | |
127
77f950caab35
Irccd: implement RuleService, #498
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
228 ASSERT_FALSE(m_rules.solve("malikania", "#test", "", "game", "onMessage")); |
0 | 229 } |
230 | |
231 } // !irccd | |
232 | |
233 int main(int argc, char **argv) | |
234 { | |
235 testing::InitGoogleTest(&argc, argv); | |
236 | |
237 return RUN_ALL_TESTS(); | |
238 } |