changeset 771:aa231a1bf3b7

Irccd: server::set_nickname is no longer virtual Instead, it calls send() or just update nickname depending on the connection state. Also make state_ variable protected to allow derived objects modifying it.
author David Demelier <markand@malikania.fr>
date Mon, 13 Aug 2018 21:32:00 +0200
parents 06c5a76fedd2
children f5ccf65ae929
files libirccd-test/irccd/test/cli_fixture.cpp libirccd-test/irccd/test/command_fixture.cpp libirccd-test/irccd/test/js_plugin_fixture.cpp libirccd-test/irccd/test/mock_server.cpp libirccd/irccd/daemon/server.hpp tests/src/irccdctl/cli-server-nick/main.cpp
diffstat 6 files changed, 42 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd-test/irccd/test/cli_fixture.cpp	Mon Aug 13 20:15:00 2018 +0200
+++ b/libirccd-test/irccd/test/cli_fixture.cpp	Mon Aug 13 21:32:00 2018 +0200
@@ -48,6 +48,7 @@
     irccd_.servers().add(server_);
     irccd_.transports().add(std::make_unique<transport_server>(
         std::make_unique<io::local_acceptor>(std::move(acceptor))));
+    server_->disconnect();
     server_->clear();
 }
 
--- a/libirccd-test/irccd/test/command_fixture.cpp	Mon Aug 13 20:15:00 2018 +0200
+++ b/libirccd-test/irccd/test/command_fixture.cpp	Mon Aug 13 21:32:00 2018 +0200
@@ -101,6 +101,7 @@
 
     irccd_.servers().add(server_);
     irccd_.plugins().add(plugin_);
+    server_->disconnect();
     server_->clear();
     plugin_->clear();
 }
--- a/libirccd-test/irccd/test/js_plugin_fixture.cpp	Mon Aug 13 20:15:00 2018 +0200
+++ b/libirccd-test/irccd/test/js_plugin_fixture.cpp	Mon Aug 13 21:32:00 2018 +0200
@@ -49,6 +49,7 @@
     irccd_.plugins().add(plugin_);
     irccd_.servers().add(server_);
 
+    server_->disconnect();
     server_->set_nickname("irccd");
     server_->clear();
 
--- a/libirccd-test/irccd/test/mock_server.cpp	Mon Aug 13 20:15:00 2018 +0200
+++ b/libirccd-test/irccd/test/mock_server.cpp	Mon Aug 13 21:32:00 2018 +0200
@@ -22,11 +22,13 @@
 
 void mock_server::connect(connect_handler) noexcept
 {
+    state_ = state::connected;
     push("connect");
 }
 
 void mock_server::disconnect() noexcept
 {
+    state_ = state::disconnected;
     push("disconnect");
 }
 
--- a/libirccd/irccd/daemon/server.hpp	Mon Aug 13 20:15:00 2018 +0200
+++ b/libirccd/irccd/daemon/server.hpp	Mon Aug 13 21:32:00 2018 +0200
@@ -269,9 +269,13 @@
         connected                       //!< ready for use.
     };
 
-private:
+protected:
+    /*
+     * \brief Server state.
+     */
     state state_{state::disconnected};
 
+private:
     // Requested and joined channels.
     std::vector<channel> rchannels_;
     std::set<std::string> jchannels_;
@@ -430,7 +434,7 @@
      *
      * \param nickname the nickname
      */
-    virtual void set_nickname(std::string nickname);
+    void set_nickname(std::string nickname);
 
     /**
      * Get the username.
--- a/tests/src/irccdctl/cli-server-nick/main.cpp	Mon Aug 13 20:15:00 2018 +0200
+++ b/tests/src/irccdctl/cli-server-nick/main.cpp	Mon Aug 13 21:32:00 2018 +0200
@@ -29,15 +29,41 @@
 
 BOOST_FIXTURE_TEST_SUITE(server_nick_suite, cli_fixture)
 
-BOOST_AUTO_TEST_CASE(basic)
+BOOST_AUTO_TEST_CASE(not_connected)
 {
     start();
-    /*
-     * TODO: we will make server::set_nickname call raw() instead of being
-     * virtual.
-     */
+    server_->disconnect();
+
+    const auto [code, out, err] = exec({ "server-nick", "test", "new" });
+
+    BOOST_TEST(!code);
+    BOOST_TEST(out.size() == 0U);
+    BOOST_TEST(err.size() == 0U);
+
+    const auto cmd = server_->find("raw");
+
+    BOOST_TEST(cmd.size() == 0U);
+    BOOST_TEST(server_->get_nickname() == "new");
 }
 
+BOOST_AUTO_TEST_CASE(connected)
+{
+    start();
+    server_->connect([] (auto) {});
+
+    const auto [code, out, err] = exec({ "server-nick", "test", "new" });
+
+    BOOST_TEST(!code);
+    BOOST_TEST(out.size() == 0U);
+    BOOST_TEST(err.size() == 0U);
+
+    const auto cmd = server_->find("send");
+
+    BOOST_TEST(cmd.size() == 1U);
+    BOOST_TEST(std::any_cast<std::string>(cmd[0][0]) == "NICK new");
+}
+
+
 BOOST_AUTO_TEST_SUITE(errors)
 
 BOOST_AUTO_TEST_CASE(invalid_identifier_1)