comparison tests/src/libirccd/command-plugin-reload/main.cpp @ 611:9fbd1700435b

Tests: reoganize hierarchy
author David Demelier <markand@malikania.fr>
date Fri, 15 Dec 2017 15:37:58 +0100
parents tests/src/plugin-reload-command/main.cpp@22b3cd6f991f
children f69b1faf812f
comparison
equal deleted inserted replaced
610:22b3cd6f991f 611:9fbd1700435b
1 /*
2 * main.cpp -- test plugin-reload remote command
3 *
4 * Copyright (c) 2013-2017 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 "plugin-reload"
20 #include <boost/test/unit_test.hpp>
21
22 #include <irccd/daemon/command.hpp>
23 #include <irccd/daemon/plugin_service.hpp>
24
25 #include <irccd/test/command_test.hpp>
26
27 namespace irccd {
28
29 namespace {
30
31 class custom_plugin : public plugin {
32 public:
33 bool reloaded{false};
34
35 custom_plugin()
36 : plugin("test", "")
37 {
38 }
39
40 void on_reload(irccd&) override
41 {
42 reloaded = true;
43 }
44 };
45
46 class broken_plugin : public plugin {
47 public:
48 using plugin::plugin;
49
50 void on_reload(irccd&) override
51 {
52 throw std::runtime_error("broken");
53 }
54 };
55
56 class plugin_reload_test : public command_test<plugin_reload_command> {
57 protected:
58 std::shared_ptr<custom_plugin> plugin_;
59
60 plugin_reload_test()
61 : plugin_(std::make_shared<custom_plugin>())
62 {
63 daemon_->plugins().add(plugin_);
64 daemon_->plugins().add(std::make_unique<broken_plugin>("broken", ""));
65 }
66 };
67
68 } // !namespace
69
70 BOOST_FIXTURE_TEST_SUITE(plugin_reload_test_suite, plugin_reload_test)
71
72 BOOST_AUTO_TEST_CASE(basic)
73 {
74 ctl_->send({
75 { "command", "plugin-reload" },
76 { "plugin", "test" }
77 });
78
79 wait_for([&] () {
80 return plugin_->reloaded;
81 });
82
83 BOOST_TEST(plugin_->reloaded);
84 }
85
86 BOOST_AUTO_TEST_SUITE(errors)
87
88 BOOST_AUTO_TEST_CASE(not_found)
89 {
90 boost::system::error_code result;
91 nlohmann::json message;
92
93 ctl_->send({
94 { "command", "plugin-reload" },
95 { "plugin", "unknown" }
96 });
97 ctl_->recv([&] (auto rresult, auto rmessage) {
98 result = rresult;
99 message = rmessage;
100 });
101
102 wait_for([&] {
103 return result;
104 });
105
106 BOOST_TEST(result == plugin_error::not_found);
107 BOOST_TEST(message["error"].template get<int>() == plugin_error::not_found);
108 BOOST_TEST(message["errorCategory"].template get<std::string>() == "plugin");
109 }
110
111 BOOST_AUTO_TEST_CASE(exec_error)
112 {
113 boost::system::error_code result;
114 nlohmann::json message;
115
116 ctl_->send({
117 { "command", "plugin-reload" },
118 { "plugin", "broken" }
119 });
120 ctl_->recv([&] (auto rresult, auto rmessage) {
121 result = rresult;
122 message = rmessage;
123 });
124
125 wait_for([&] {
126 return result;
127 });
128
129 BOOST_TEST(result == plugin_error::exec_error);
130 BOOST_TEST(message["error"].template get<int>() == plugin_error::exec_error);
131 BOOST_TEST(message["errorCategory"].template get<std::string>() == "plugin");
132 }
133
134 BOOST_AUTO_TEST_SUITE_END()
135
136 BOOST_AUTO_TEST_SUITE_END()
137
138 } // !irccd