# HG changeset patch # User David Demelier # Date 1534188720 -7200 # Node ID aa231a1bf3b7d77c936f47905bc8a4b0121b6581 # Parent 06c5a76fedd2efd41b6cbc3e4de01225166c0e51 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. diff -r 06c5a76fedd2 -r aa231a1bf3b7 libirccd-test/irccd/test/cli_fixture.cpp --- 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( std::make_unique(std::move(acceptor)))); + server_->disconnect(); server_->clear(); } diff -r 06c5a76fedd2 -r aa231a1bf3b7 libirccd-test/irccd/test/command_fixture.cpp --- 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(); } diff -r 06c5a76fedd2 -r aa231a1bf3b7 libirccd-test/irccd/test/js_plugin_fixture.cpp --- 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(); diff -r 06c5a76fedd2 -r aa231a1bf3b7 libirccd-test/irccd/test/mock_server.cpp --- 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"); } diff -r 06c5a76fedd2 -r aa231a1bf3b7 libirccd/irccd/daemon/server.hpp --- 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 rchannels_; std::set 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. diff -r 06c5a76fedd2 -r aa231a1bf3b7 tests/src/irccdctl/cli-server-nick/main.cpp --- 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(cmd[0][0]) == "NICK new"); +} + + BOOST_AUTO_TEST_SUITE(errors) BOOST_AUTO_TEST_CASE(invalid_identifier_1)