Mercurial > irccd
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)