#include #include #include #include #include #include #include "libreichwein/file.h" #include "connectionregistry.h" namespace fs = std::filesystem; using namespace Reichwein; class ConnectionRegistryTest: public ::testing::Test { protected: ConnectionRegistryTest(){ } ~ConnectionRegistryTest(){ } }; TEST_F(ConnectionRegistryTest, constructor) { ConnectionRegistry cr{}; } TEST_F(ConnectionRegistryTest, test_addConnection) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts0{ioc}; ConnectionRegistry::connection c0 {std::make_shared(std::move(ts0))}; boost::asio::ip::tcp::socket ts1{ioc}; ConnectionRegistry::connection c1 {std::make_shared(std::move(ts1))}; ConnectionRegistry cr{}; cr.addConnection(c0); EXPECT_THROW(cr.addConnection(c0), std::exception); cr.addConnection(c1); EXPECT_THROW(cr.addConnection(c0), std::exception); EXPECT_THROW(cr.addConnection(c1), std::exception); } TEST_F(ConnectionRegistryTest, test_delConnection) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts0{ioc}; ConnectionRegistry::connection c0 {std::make_shared(std::move(ts0))}; boost::asio::ip::tcp::socket ts1{ioc}; ConnectionRegistry::connection c1 {std::make_shared(std::move(ts1))}; ConnectionRegistry cr{}; EXPECT_THROW(cr.delConnection(c0), std::exception); cr.addConnection(c0); cr.delConnection(c0); cr.addConnection(c0); cr.addConnection(c1); cr.delConnection(c0); EXPECT_THROW(cr.delConnection(c0), std::exception); cr.delConnection(c1); EXPECT_THROW(cr.delConnection(c1), std::exception); } TEST_F(ConnectionRegistryTest, test_setId) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts{ioc}; ConnectionRegistry::connection c {std::make_shared(std::move(ts))}; ConnectionRegistry cr{}; EXPECT_THROW(cr.setId(c, "id1"), std::exception); cr.addConnection(c); cr.setId(c, "id2"); } TEST_F(ConnectionRegistryTest, test_dump) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts{ioc}; ConnectionRegistry::connection c {std::make_shared(std::move(ts))}; ConnectionRegistry cr{}; cr.addConnection(c); cr.dump(); cr.setId(c, "id1"); cr.dump(); } TEST_F(ConnectionRegistryTest, test_iterators) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts{ioc}; ConnectionRegistry::connection c {std::make_shared(std::move(ts))}; ConnectionRegistry cr{}; EXPECT_THROW(cr.begin(""), std::exception); EXPECT_THROW(cr.end(""), std::exception); EXPECT_EQ(std::distance(cr.begin(), cr.end()), 0); cr.addConnection(c); EXPECT_THROW(cr.begin(""), std::exception); EXPECT_THROW(cr.end(""), std::exception); EXPECT_EQ(std::distance(cr.begin(), cr.end()), 1); cr.setId(c, "id1"); EXPECT_EQ(std::distance(cr.begin("id1"), cr.end("id1")), 1); EXPECT_EQ(std::distance(cr.begin(), cr.end()), 1); } TEST_F(ConnectionRegistryTest, test_guard) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts{ioc}; ConnectionRegistry::connection c {std::make_shared(std::move(ts))}; ConnectionRegistry cr{}; { ConnectionRegistry::RegistryGuard rg{cr, c}; EXPECT_THROW(cr.addConnection(c), std::exception); } EXPECT_THROW(cr.delConnection(c), std::exception); } TEST_F(ConnectionRegistryTest, number_of_connections) { boost::asio::io_context ioc{1}; boost::asio::ip::tcp::socket ts0{ioc}; ConnectionRegistry::connection c0 {std::make_shared(std::move(ts0))}; boost::asio::ip::tcp::socket ts1{ioc}; ConnectionRegistry::connection c1 {std::make_shared(std::move(ts1))}; ConnectionRegistry cr{}; EXPECT_EQ(cr.number_of_connections(), 0); cr.addConnection(c0); EXPECT_EQ(cr.number_of_connections(), 1); cr.addConnection(c1); EXPECT_EQ(cr.number_of_connections(), 2); cr.delConnection(c0); EXPECT_EQ(cr.number_of_connections(), 1); cr.delConnection(c1); EXPECT_EQ(cr.number_of_connections(), 0); }