comparison tests/src/libirccd-daemon/server-util/main.cpp @ 809:8460b4a34191

misc: reorganize namespaces, closes #952 @4h
author David Demelier <markand@malikania.fr>
date Fri, 16 Nov 2018 12:25:00 +0100
parents tests/src/libirccd/server-util/main.cpp@7145a3df4cb7
children 06cc2f95f479
comparison
equal deleted inserted replaced
808:80bccab4a093 809:8460b4a34191
1 /*
2 * main.cpp -- test server_util functions
3 *
4 * Copyright (c) 2013-2018 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 BOOST_TEST_MODULE "server_util"
20 #include <boost/test/unit_test.hpp>
21 #include <boost/filesystem.hpp>
22
23 #include <irccd/ini.hpp>
24
25 #include <irccd/daemon/server.hpp>
26 #include <irccd/daemon/server_util.hpp>
27
28 using nlohmann::json;
29
30 using irccd::daemon::server;
31 using irccd::daemon::server_util::from_config;
32 using irccd::daemon::server_util::from_json;
33 using irccd::daemon::server_util::message_type;
34
35 namespace irccd {
36
37 namespace server_util {
38
39 auto operator<<(std::ostream& out, message_type::kind kind) -> std::ostream&
40 {
41 if (kind == message_type::is_command)
42 out << "command";
43 else
44 out << "message";
45
46 return out;
47 }
48
49 } // !server_util
50
51 namespace {
52
53 class fixture {
54 protected:
55 boost::asio::io_service ctx_;
56 };
57
58 auto open_config(const std::string& config) -> ini::document
59 {
60 boost::filesystem::path path;
61
62 path /= CMAKE_CURRENT_SOURCE_DIR;
63 path /= config;
64
65 return ini::read_file(path.string());
66 }
67
68 auto open_json(const std::string& file) -> json
69 {
70 boost::filesystem::path path;
71
72 path /= CMAKE_CURRENT_SOURCE_DIR;
73 path /= file;
74
75 std::ifstream input(path.string());
76
77 if (!input)
78 throw std::runtime_error(std::strerror(errno));
79
80 return json::parse(std::string(std::istreambuf_iterator<char>(input.rdbuf()), {}));
81 }
82
83 BOOST_FIXTURE_TEST_SUITE(load_from_config, fixture)
84
85 BOOST_AUTO_TEST_SUITE(valid)
86
87 BOOST_AUTO_TEST_CASE(full)
88 {
89 const auto sv = from_config(ctx_, open_config("full.conf")[0]);
90
91 BOOST_TEST(sv->get_id() == "localhost");
92 BOOST_TEST(sv->get_hostname() == "irc.localhost");
93 BOOST_TEST(sv->get_port() == 3344U);
94 BOOST_TEST(sv->get_password() == "secret");
95 BOOST_TEST(sv->get_nickname() == "superbot");
96 BOOST_TEST(sv->get_username() == "sp");
97 BOOST_TEST(sv->get_realname() == "SuperBot 2000 NT");
98 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::join_invite));
99 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::auto_rejoin));
100 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::auto_reconnect));
101 }
102
103 #if defined(IRCCD_HAVE_SSL)
104
105 BOOST_AUTO_TEST_CASE(ssl)
106 {
107 const auto sv = from_config(ctx_, open_config("ssl.conf")[0]);
108
109 BOOST_TEST(sv->get_id() == "localhost");
110 BOOST_TEST(sv->get_hostname() == "irc.localhost");
111 BOOST_TEST(sv->get_port() == 6697U);
112 BOOST_TEST(sv->get_password() == "secret");
113 BOOST_TEST(sv->get_nickname() == "secure");
114 BOOST_TEST(sv->get_username() == "sc");
115 BOOST_TEST(sv->get_realname() == "SuperBot 2000 NT SSL");
116 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::ssl));
117 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::join_invite));
118 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::auto_rejoin));
119 BOOST_TEST(static_cast<bool>(sv->get_options() & server::options::auto_reconnect));
120 }
121
122 #endif // !IRCCD_HAVE_SSL
123
124 BOOST_AUTO_TEST_SUITE_END()
125
126 BOOST_AUTO_TEST_SUITE_END()
127
128 BOOST_FIXTURE_TEST_SUITE(load_from_json, fixture)
129
130 BOOST_AUTO_TEST_SUITE(valid)
131
132 BOOST_AUTO_TEST_CASE(full)
133 {
134 const auto sv = from_json(ctx_, open_json("full.json"));
135
136 BOOST_TEST(sv->get_id() == "localhost");
137 BOOST_TEST(sv->get_hostname() == "irc.localhost");
138 BOOST_TEST(sv->get_port() == 3344U);
139 BOOST_TEST(sv->get_password() == "secret");
140 BOOST_TEST(sv->get_nickname() == "superbot");
141 BOOST_TEST(sv->get_username() == "sp");
142 BOOST_TEST(sv->get_realname() == "SuperBot 2000 NT");
143 }
144
145 BOOST_AUTO_TEST_SUITE_END()
146
147 BOOST_AUTO_TEST_SUITE_END()
148
149 BOOST_AUTO_TEST_SUITE(message)
150
151 BOOST_AUTO_TEST_CASE(valid_short)
152 {
153 const auto m = message_type::parse("!hello", "!", "hello");
154
155 BOOST_TEST(m.type == message_type::is_command);
156 BOOST_TEST(m.message == "");
157 }
158
159 BOOST_AUTO_TEST_CASE(valid_arguments)
160 {
161 const auto m = message_type::parse("!hello world", "!", "hello");
162
163 BOOST_TEST(m.type == message_type::is_command);
164 BOOST_TEST(m.message == "world");
165 }
166
167 BOOST_AUTO_TEST_CASE(cchar_with_message_short)
168 {
169 const auto m = message_type::parse("!hello", "!", "hangman");
170
171 BOOST_TEST(m.type == message_type::is_message);
172 BOOST_TEST(m.message == "!hello");
173 }
174
175 BOOST_AUTO_TEST_CASE(cchar_with_message_arguments)
176 {
177 const auto m = message_type::parse("!hello world", "!", "hangman");
178
179 BOOST_TEST(m.type == message_type::is_message);
180 BOOST_TEST(m.message == "!hello world");
181 }
182
183 BOOST_AUTO_TEST_CASE(command_with_different_cchar_short)
184 {
185 const auto m = message_type::parse("!hello", ">", "hello");
186
187 BOOST_TEST(m.type == message_type::is_message);
188 BOOST_TEST(m.message == "!hello");
189 }
190
191 BOOST_AUTO_TEST_CASE(command_with_different_cchar_arguments)
192 {
193 const auto m = message_type::parse("!hello", ">", "hello");
194
195 BOOST_TEST(m.type == message_type::is_message);
196 BOOST_TEST(m.message == "!hello");
197 }
198
199 BOOST_AUTO_TEST_SUITE_END()
200
201 } // !namespace
202
203 } // !irccd