Mercurial > irccd
annotate tests/cmd-rule-list/main.cpp @ 498:fbd80bfcf58d
Irccd: import new options, closes #713
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 30 Sep 2017 10:31:08 +0200 |
parents | 7e273b7f4f92 |
children | c729f06c6f27 |
rev | line source |
---|---|
448
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * main.cpp -- test rule-list remote command |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <command.hpp> |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <command-tester.hpp> |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <service.hpp> |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 using namespace irccd; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 class RuleListCommandTest : public CommandTester { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 protected: |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 nlohmann::json m_result; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 /* |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 * Rule sets are unordered so use this function to search a string in |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 * the JSON array. |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 */ |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 inline bool contains(const nlohmann::json &array, const std::string &str) |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 for (const auto &v : array) |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 if (v.is_string() && v == str) |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 return true; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 return false; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 public: |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 RuleListCommandTest() |
488
7e273b7f4f92
Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents:
448
diff
changeset
|
44 : CommandTester(std::make_unique<rule_list_command>()) |
448
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 { |
488
7e273b7f4f92
Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents:
448
diff
changeset
|
46 m_irccd.rules().add(rule( |
448
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 { "s1", "s2" }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 { "c1", "c2" }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 { "o1", "o2" }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 { "p1", "p2" }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 { "onMessage", "onCommand" }, |
488
7e273b7f4f92
Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents:
448
diff
changeset
|
52 rule::action_type::drop |
448
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 )); |
488
7e273b7f4f92
Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents:
448
diff
changeset
|
54 m_irccd.rules().add(rule( |
448
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 { "s1", }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 { "c1", }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 { "o1", }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 { "p1", }, |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 { "onMessage", }, |
488
7e273b7f4f92
Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents:
448
diff
changeset
|
60 rule::action_type::accept |
448
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 )); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 m_irccdctl.client().request({{ "command", "rule-list" }}); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 m_irccdctl.client().onMessage.connect([&] (auto result) { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 m_result = result; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 }); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 }; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 TEST_F(RuleListCommandTest, basic) |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 try { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 poll([&] () { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 return m_result.is_object(); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 }); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 ASSERT_TRUE(m_result.is_object()); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 ASSERT_TRUE(m_result["list"].is_array()); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 ASSERT_EQ(2U, m_result["list"].size()); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 // Rule 0. |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 auto servers = m_result["list"][0]["servers"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 auto channels = m_result["list"][0]["channels"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 auto plugins = m_result["list"][0]["plugins"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 auto events = m_result["list"][0]["events"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 ASSERT_TRUE(contains(servers, "s1")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 ASSERT_TRUE(contains(servers, "s2")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 ASSERT_TRUE(contains(channels, "c1")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 ASSERT_TRUE(contains(channels, "c2")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 ASSERT_TRUE(contains(plugins, "p1")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 ASSERT_TRUE(contains(plugins, "p2")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 ASSERT_TRUE(contains(events, "onMessage")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 ASSERT_TRUE(contains(events, "onCommand")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 ASSERT_EQ("drop", m_result["list"][0]["action"]); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 // Rule 1. |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 auto servers = m_result["list"][1]["servers"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 auto channels = m_result["list"][1]["channels"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 auto plugins = m_result["list"][1]["plugins"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 auto events = m_result["list"][1]["events"]; |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 ASSERT_TRUE(contains(servers, "s1")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 ASSERT_TRUE(contains(channels, "c1")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 ASSERT_TRUE(contains(plugins, "p1")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 ASSERT_TRUE(contains(events, "onMessage")); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 ASSERT_EQ("accept", m_result["list"][1]["action"]); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 } catch (const std::exception &ex) { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 FAIL() << ex.what(); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 TEST_F(RuleListCommandTest, empty) |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 m_irccd.rules().remove(0); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 m_irccd.rules().remove(0); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 try { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 poll([&] () { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 return m_result.is_object(); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 }); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 ASSERT_TRUE(m_result.is_object()); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 ASSERT_TRUE(m_result["list"].is_array()); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 ASSERT_EQ(0U, m_result["list"].size()); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 } catch (const std::exception &ex) { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 FAIL() << ex.what(); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 } |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 int main(int argc, char **argv) |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 { |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 testing::InitGoogleTest(&argc, argv); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 return RUN_ALL_TESTS(); |
9be4f8a5cf1a
Irccdctl: implement rule-list
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 } |