comparison tests/cmd-rule-add/main.cpp @ 557:c729f06c6f27

Tests: convert cmd-rule-*, #593
author David Demelier <markand@malikania.fr>
date Sat, 25 Nov 2017 14:34:20 +0100
parents 7e273b7f4f92
children 23fc81b1bd8f
comparison
equal deleted inserted replaced
556:c9b703f923d0 557:c729f06c6f27
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 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 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */ 17 */
18 18
19 #include <command.hpp> 19 #define BOOST_TEST_MODULE "rule-add"
20 #include <command-tester.hpp> 20 #include <boost/test/unit_test.hpp>
21 #include <service.hpp>
22 21
23 using namespace irccd; 22 #include <irccd/json_util.hpp>
24 23
25 class RuleAddCommandTest : public CommandTester { 24 #include <irccd/command.hpp>
26 protected: 25 #include <irccd/rule_service.hpp>
27 nlohmann::json m_result;
28 26
29 /* 27 #include <command_test.hpp>
30 * Rule sets are unordered so use this function to search a string in 28
31 * the JSON array. 29 namespace irccd {
32 */ 30
33 inline bool contains(const nlohmann::json &array, const std::string &str) 31 namespace {
32
33 class rule_add_test : public command_test<rule_add_command> {
34 public:
35 rule_add_test()
34 { 36 {
35 for (const auto &v : array) 37 daemon_->commands().add(std::make_unique<rule_list_command>());
36 if (v.is_string() && v == str)
37 return true;
38
39 return false;
40 }
41
42 public:
43 RuleAddCommandTest()
44 : CommandTester(std::make_unique<rule_add_command>())
45 {
46 m_irccd.commands().add(std::make_unique<rule_list_command>());
47 m_irccdctl.client().onMessage.connect([&] (auto result) {
48 m_result = result;
49 });
50 } 38 }
51 }; 39 };
52 40
53 TEST_F(RuleAddCommandTest, basic) 41 } // !namespace
42
43 BOOST_FIXTURE_TEST_SUITE(rule_add_test_suite, rule_add_test)
44
45 BOOST_AUTO_TEST_CASE(basic)
54 { 46 {
55 m_irccdctl.client().request({ 47 nlohmann::json result;
48
49 ctl_->send({
56 { "command", "rule-add" }, 50 { "command", "rule-add" },
57 { "servers", { "s1", "s2" } }, 51 { "servers", { "s1", "s2" } },
58 { "channels", { "c1", "c2" } }, 52 { "channels", { "c1", "c2" } },
59 { "plugins", { "p1", "p2" } }, 53 { "plugins", { "p1", "p2" } },
60 { "events", { "onMessage" } }, 54 { "events", { "onMessage" } },
61 { "action", "accept" }, 55 { "action", "accept" },
62 { "index", 0 } 56 { "index", 0 }
63 }); 57 });
58 ctl_->recv([&] (auto, auto msg) {
59 result = msg;
60 });
64 61
65 try { 62 wait_for([&] () {
66 poll([&] () { 63 return result.is_object();
67 return m_result.is_object(); 64 });
68 });
69 65
70 ASSERT_TRUE(m_result.is_object()); 66 BOOST_TEST(result.is_object());
71 ASSERT_TRUE(m_result["status"].get<bool>());
72 67
73 m_result = nullptr; 68 result = nullptr;
74 m_irccdctl.client().request({{ "command", "rule-list" }}); 69 ctl_->send({{"command", "rule-list"}});
70 ctl_->recv([&] (auto, auto msg) {
71 result = msg;
72 });
75 73
76 poll([&] () { 74 wait_for([&] () {
77 return m_result.is_object(); 75 return result.is_object();
78 }); 76 });
79 77
80 ASSERT_TRUE(m_result.is_object()); 78 BOOST_TEST(result.is_object());
81 ASSERT_TRUE(m_result["status"].get<bool>());
82 79
83 auto servers = m_result["list"][0]["servers"]; 80 auto servers = result["list"][0]["servers"];
84 auto channels = m_result["list"][0]["channels"]; 81 auto channels = result["list"][0]["channels"];
85 auto plugins = m_result["list"][0]["plugins"]; 82 auto plugins = result["list"][0]["plugins"];
86 auto events = m_result["list"][0]["events"]; 83 auto events = result["list"][0]["events"];
87 84
88 ASSERT_TRUE(contains(servers, "s1")); 85 BOOST_TEST(json_util::contains(servers, "s1"));
89 ASSERT_TRUE(contains(servers, "s2")); 86 BOOST_TEST(json_util::contains(servers, "s2"));
90 ASSERT_TRUE(contains(channels, "c1")); 87 BOOST_TEST(json_util::contains(channels, "c1"));
91 ASSERT_TRUE(contains(channels, "c2")); 88 BOOST_TEST(json_util::contains(channels, "c2"));
92 ASSERT_TRUE(contains(plugins, "p1")); 89 BOOST_TEST(json_util::contains(plugins, "p1"));
93 ASSERT_TRUE(contains(plugins, "p2")); 90 BOOST_TEST(json_util::contains(plugins, "p2"));
94 ASSERT_TRUE(contains(events, "onMessage")); 91 BOOST_TEST(json_util::contains(events, "onMessage"));
95 ASSERT_EQ("accept", m_result["list"][0]["action"]); 92 BOOST_TEST(result["list"][0]["action"].get<std::string>() == "accept");
96 } catch (const std::exception &ex) { 93 }
97 FAIL() << ex.what(); 94
95 BOOST_AUTO_TEST_CASE(append)
96 {
97 nlohmann::json result;
98
99 ctl_->send({
100 { "command", "rule-add" },
101 { "servers", { "s1" } },
102 { "channels", { "c1" } },
103 { "plugins", { "p1" } },
104 { "events", { "onMessage" } },
105 { "action", "accept" },
106 { "index", 0 }
107 });
108 ctl_->recv([&] (auto, auto msg) {
109 result = msg;
110 });
111
112 wait_for([&] () {
113 return result.is_object();
114 });
115
116 BOOST_TEST(result.is_object());
117
118 result = nullptr;
119 ctl_->send({
120 { "command", "rule-add" },
121 { "servers", { "s2" } },
122 { "channels", { "c2" } },
123 { "plugins", { "p2" } },
124 { "events", { "onMessage" } },
125 { "action", "drop" },
126 { "index", 1 }
127 });
128 ctl_->recv([&] (auto, auto msg) {
129 result = msg;
130 });
131
132 wait_for([&] () {
133 return result.is_object();
134 });
135
136 BOOST_TEST(result.is_object());
137
138 result = nullptr;
139 ctl_->send({{"command", "rule-list"}});
140 ctl_->recv([&] (auto, auto msg) {
141 result = msg;
142 });
143
144 wait_for([&] () {
145 return result.is_object();
146 });
147
148 BOOST_TEST(result.is_object());
149 BOOST_TEST(result["list"].size() == 2U);
150
151 // Rule 0.
152 {
153 auto servers = result["list"][0]["servers"];
154 auto channels = result["list"][0]["channels"];
155 auto plugins = result["list"][0]["plugins"];
156 auto events = result["list"][0]["events"];
157
158 BOOST_TEST(json_util::contains(servers, "s1"));
159 BOOST_TEST(json_util::contains(channels, "c1"));
160 BOOST_TEST(json_util::contains(plugins, "p1"));
161 BOOST_TEST(json_util::contains(events, "onMessage"));
162 BOOST_TEST(result["list"][0]["action"].get<std::string>() == "accept");
163 }
164
165 // Rule 1.
166 {
167 auto servers = result["list"][1]["servers"];
168 auto channels = result["list"][1]["channels"];
169 auto plugins = result["list"][1]["plugins"];
170 auto events = result["list"][1]["events"];
171
172 BOOST_TEST(json_util::contains(servers, "s2"));
173 BOOST_TEST(json_util::contains(channels, "c2"));
174 BOOST_TEST(json_util::contains(plugins, "p2"));
175 BOOST_TEST(json_util::contains(events, "onMessage"));
176 BOOST_TEST(result["list"][1]["action"].get<std::string>() == "drop");
98 } 177 }
99 } 178 }
100 179
101 TEST_F(RuleAddCommandTest, append) 180 BOOST_AUTO_TEST_SUITE_END()
102 {
103 try {
104 m_irccdctl.client().request({
105 { "command", "rule-add" },
106 { "servers", { "s1" } },
107 { "channels", { "c1" } },
108 { "plugins", { "p1" } },
109 { "events", { "onMessage" } },
110 { "action", "accept" },
111 { "index", 0 }
112 });
113 181
114 poll([&] () { 182 } // !irccd
115 return m_result.is_object();
116 });
117
118 ASSERT_TRUE(m_result.is_object());
119 ASSERT_TRUE(m_result["status"].get<bool>());
120
121 m_result = nullptr;
122 m_irccdctl.client().request({
123 { "command", "rule-add" },
124 { "servers", { "s2" } },
125 { "channels", { "c2" } },
126 { "plugins", { "p2" } },
127 { "events", { "onMessage" } },
128 { "action", "drop" },
129 { "index", 1 }
130 });
131
132 poll([&] () {
133 return m_result.is_object();
134 });
135
136 ASSERT_TRUE(m_result.is_object());
137 ASSERT_TRUE(m_result["status"].get<bool>());
138
139 m_result = nullptr;
140 m_irccdctl.client().request({{ "command", "rule-list" }});
141
142 poll([&] () {
143 return m_result.is_object();
144 });
145
146 ASSERT_TRUE(m_result.is_object());
147 ASSERT_TRUE(m_result["status"].get<bool>());
148 ASSERT_EQ(2U, m_result["list"].size());
149
150 // Rule 0.
151 {
152 auto servers = m_result["list"][0]["servers"];
153 auto channels = m_result["list"][0]["channels"];
154 auto plugins = m_result["list"][0]["plugins"];
155 auto events = m_result["list"][0]["events"];
156
157 ASSERT_TRUE(contains(servers, "s1"));
158 ASSERT_TRUE(contains(channels, "c1"));
159 ASSERT_TRUE(contains(plugins, "p1"));
160 ASSERT_TRUE(contains(events, "onMessage"));
161 ASSERT_EQ("accept", m_result["list"][0]["action"]);
162 }
163
164 // Rule 1.
165 {
166 auto servers = m_result["list"][1]["servers"];
167 auto channels = m_result["list"][1]["channels"];
168 auto plugins = m_result["list"][1]["plugins"];
169 auto events = m_result["list"][1]["events"];
170
171 ASSERT_TRUE(contains(servers, "s2"));
172 ASSERT_TRUE(contains(channels, "c2"));
173 ASSERT_TRUE(contains(plugins, "p2"));
174 ASSERT_TRUE(contains(events, "onMessage"));
175 ASSERT_EQ("drop", m_result["list"][1]["action"]);
176 }
177 } catch (const std::exception &ex) {
178 FAIL() << ex.what();
179 }
180 }
181
182 int main(int argc, char **argv)
183 {
184 testing::InitGoogleTest(&argc, argv);
185
186 return RUN_ALL_TESTS();
187 }