summaryrefslogtreecommitdiffhomepage
path: root/tests/test-connectionregistry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-connectionregistry.cpp')
-rw-r--r--tests/test-connectionregistry.cpp170
1 files changed, 170 insertions, 0 deletions
diff --git a/tests/test-connectionregistry.cpp b/tests/test-connectionregistry.cpp
new file mode 100644
index 0000000..dbc2b7e
--- /dev/null
+++ b/tests/test-connectionregistry.cpp
@@ -0,0 +1,170 @@
+#include <gtest/gtest.h>
+
+#include <filesystem>
+#include <string>
+#include <system_error>
+
+#include <boost/beast/core.hpp>
+#include <boost/beast/http.hpp>
+
+#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<ConnectionRegistry::connection::element_type>(std::move(ts0))};
+
+ boost::asio::ip::tcp::socket ts1{ioc};
+ ConnectionRegistry::connection c1 {std::make_shared<ConnectionRegistry::connection::element_type>(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<ConnectionRegistry::connection::element_type>(std::move(ts0))};
+
+ boost::asio::ip::tcp::socket ts1{ioc};
+ ConnectionRegistry::connection c1 {std::make_shared<ConnectionRegistry::connection::element_type>(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<ConnectionRegistry::connection::element_type>(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<ConnectionRegistry::connection::element_type>(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<ConnectionRegistry::connection::element_type>(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<ConnectionRegistry::connection::element_type>(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<ConnectionRegistry::connection::element_type>(std::move(ts0))};
+
+ boost::asio::ip::tcp::socket ts1{ioc};
+ ConnectionRegistry::connection c1 {std::make_shared<ConnectionRegistry::connection::element_type>(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);
+}
+