diff --git a/src/lib/server/Config.h b/src/lib/server/Config.h index 60c9a56a1..91d1783fc 100644 --- a/src/lib/server/Config.h +++ b/src/lib/server/Config.h @@ -202,12 +202,6 @@ public: Config(IEventQueue *events); virtual ~Config() = default; -#ifdef TEST_ENV - Config() : m_inputFilter(nullptr) - { - } -#endif - //! @name manipulators //@{ diff --git a/src/test/unittests/server/ConfigTests.cpp b/src/test/unittests/server/ConfigTests.cpp deleted file mode 100644 index 97d395f21..000000000 --- a/src/test/unittests/server/ConfigTests.cpp +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2014 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -// TODO: fix integ tests masquerading as unit tests -#if 0 - -#include "lib/server/Config.h" -#include "net/XSocket.h" - -#include - -class OnlySystemFilter : public InputFilter::Condition { -public: - Condition *clone() const override { return new OnlySystemFilter(); } - std::string format() const override { return ""; } - - InputFilter::EFilterStatus match(const Event &ev) override { - return ev.getType() == EventTypes::System ? InputFilter::kActivate - : InputFilter::kNoMatch; - } -}; - -TEST(ServerConfigTests, - serverconfig_will_deem_inequal_configs_with_different_map_size) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, - serverconfig_will_deem_inequal_configs_with_different_cell_names) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenB"); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, - serverconfig_will_deem_equal_configs_with_same_cell_names) { - Config a(nullptr); - Config b(nullptr); - EXPECT_TRUE(a.addScreen("screenA")); - EXPECT_TRUE(a.addScreen("screenB")); - EXPECT_TRUE(a.addScreen("screenC")); - EXPECT_TRUE(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - EXPECT_TRUE(a.connect("screenB", EDirection::kLeft, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - EXPECT_TRUE(b.addScreen("screenA")); - EXPECT_TRUE(b.addScreen("screenB")); - EXPECT_TRUE(b.addScreen("screenC")); - EXPECT_TRUE(b.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - EXPECT_TRUE(b.connect("screenB", EDirection::kLeft, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - a.addOption("screenA", kOptionClipboardSharing, 1); - b.addOption("screenA", kOptionClipboardSharing, 1); - a.addOption(std::string(), kOptionClipboardSharing, 1); - b.addOption(std::string(), kOptionClipboardSharing, 1); - a.getInputFilter()->addFilterRule(InputFilter::Rule{new OnlySystemFilter()}); - b.getInputFilter()->addFilterRule(InputFilter::Rule{new OnlySystemFilter()}); - a.addAlias("screenA", "aliasA"); - b.addAlias("screenA", "aliasA"); - NetworkAddress addr1("localhost", 8080); - addr1.resolve(); - NetworkAddress addr2("localhost", 8080); - addr2.resolve(); - a.setDeskflowAddress(addr1); - b.setDeskflowAddress(addr2); - - EXPECT_TRUE(a == b); - EXPECT_TRUE(b == a); -} - -TEST(NetworkAddress, hostname_valid_parsing) { - const int validPort = 24900; - const std::string portStr = std::to_string(validPort); - - // list of test cases. 1 param - hostname for parsing, 2 param - port, 3 param - // - expected hostname - const std::initializer_list> validTestCases = { - std::make_tuple(std::string("127.0.0.1"), validPort, "127.0.0.1"), - std::make_tuple(std::string("127.0.0.1:") + portStr, 0, "127.0.0.1"), - std::make_tuple(std::string("localhost"), validPort, "localhost"), - std::make_tuple(std::string("localhost:") + portStr, 0, "localhost"), - std::make_tuple(std::string(""), validPort, ""), - std::make_tuple(std::string(":") + portStr, 0, ""), - // Temporary disabled tests for ipv6 - // std::make_tuple(std::string("[::1]:") + portStr, 0, "::1"), - // std::make_tuple(std::string("[fe80::a156:9f36:793:7bfb%14]:") + portStr, - // 0, "fe80::a156:9f36:793:7bfb%14"), - // std::make_tuple(std::string("::1"), validPort, "::1"), - // std::make_tuple(std::string("fe80::a156:9f36:793:7bfb%14"), validPort, - // "fe80::a156:9f36:793:7bfb%14"), - // std::make_tuple(std::string("fe80:0000:0000:0000:a156:9f36:793:7bfb%14"), - // validPort, "fe80:0000:0000:0000:a156:9f36:793:7bfb%14"), - }; - - for (const auto &caseParams : validTestCases) { - NetworkAddress addr(std::get<0>(caseParams), std::get<1>(caseParams)); - addr.resolve(); - - EXPECT_TRUE(addr.getHostname() == std::get<2>(caseParams)); - EXPECT_TRUE(addr.getPort() == validPort); - EXPECT_TRUE(addr.getAddress() != nullptr); - } - - // list of non valid hostnames - const std::initializer_list nonValidTestCases = { - ":nonValidPort", ":", - // Temporary disabled tests for ipv6 - //"[::1]:", - //"[::1]:nonValidPort", - //"fe80::1", - //"[::1]:-1", - //"[::1]:65536" - }; - - for (const auto &caseParam : nonValidTestCases) { - bool flag = false; - try { - NetworkAddress addr(caseParam, validPort); - } catch (const XSocketAddress &) { - - flag = true; - } - - EXPECT_TRUE(flag); - } -} - -TEST( - ServerConfigTests, - serverconfig_will_deem_different_configs_with_same_cell_names_different_options) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenA"); - a.addOption("screenA", kOptionClipboardSharing, 0); - b.addOption("screenA", kOptionClipboardSharing, 1); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST( - ServerConfigTests, - serverconfig_will_deem_different_configs_with_same_cell_names_different_aliases1) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenA"); - b.addAlias("screenA", "aliasA"); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST( - ServerConfigTests, - serverconfig_will_deem_different_configs_with_same_cell_names_different_aliases2) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenA"); - a.addAlias("screenA", "aliasA"); - b.addAlias("screenA", "aliasB"); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, - serverconfig_will_deem_different_configs_with_different_global_options) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenA"); - a.addOption(std::string(), kOptionClipboardSharing, 0); - b.addOption(std::string(), kOptionClipboardSharing, 1); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, - serverconfig_will_deem_different_configs_with_different_filters) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenA"); - a.getInputFilter()->addFilterRule(InputFilter::Rule{new OnlySystemFilter()}); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, - serverconfig_will_deem_different_configs_with_different_address) { - Config a(nullptr); - Config b(nullptr); - a.addScreen("screenA"); - b.addScreen("screenA"); - a.setDeskflowAddress(NetworkAddress(8080)); - b.setDeskflowAddress(NetworkAddress(1010)); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, serverconfig_will_deem_different_cell_neighbours1) { - Config a(nullptr); - Config b(nullptr); - EXPECT_TRUE(a.addScreen("screenA")); - EXPECT_TRUE(a.addScreen("screenB")); - EXPECT_TRUE(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - EXPECT_TRUE(b.addScreen("screenA")); - EXPECT_TRUE(b.addScreen("screenB")); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, serverconfig_will_deem_different_cell_neighbours2) { - Config a(nullptr); - Config b(nullptr); - EXPECT_TRUE(a.addScreen("screenA")); - EXPECT_TRUE(a.addScreen("screenB")); - EXPECT_TRUE(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - EXPECT_TRUE(b.addScreen("screenA")); - EXPECT_TRUE(b.addScreen("screenB")); - EXPECT_TRUE(b.connect("screenA", EDirection::kBottom, 0.0f, 0.25f, "screenB", - 0.25f, 1.0f)); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -TEST(ServerConfigTests, serverconfig_will_deem_different_cell_neighbours3) { - Config a(nullptr); - Config b(nullptr); - EXPECT_TRUE(a.addScreen("screenA")); - EXPECT_TRUE(a.addScreen("screenB")); - EXPECT_TRUE(a.addScreen("screenC")); - EXPECT_TRUE(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", - 0.5f, 1.0f)); - EXPECT_TRUE(b.addScreen("screenA")); - EXPECT_TRUE(b.addScreen("screenB")); - EXPECT_TRUE(b.addScreen("screenC")); - EXPECT_TRUE(b.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenC", - 0.5f, 1.0f)); - EXPECT_FALSE(a == b); - EXPECT_FALSE(b == a); -} - -#endif diff --git a/src/unittests/server/CMakeLists.txt b/src/unittests/server/CMakeLists.txt index 0d43f534c..90825e276 100644 --- a/src/unittests/server/CMakeLists.txt +++ b/src/unittests/server/CMakeLists.txt @@ -5,6 +5,14 @@ if(WIN32) set(extra_libs version ${cli11_lib} ${tomlPP_lib} app mt net) endif() +create_test( + NAME ServerConfigTests + DEPENDS server + LIBS base arch ${extra_libs} + SOURCE ServerConfigTests.cpp + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/lib/server" +) + create_test( NAME ServerTests DEPENDS server diff --git a/src/unittests/server/ServerConfigTests.cpp b/src/unittests/server/ServerConfigTests.cpp new file mode 100644 index 000000000..ec53d463d --- /dev/null +++ b/src/unittests/server/ServerConfigTests.cpp @@ -0,0 +1,163 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-FileCopyrightText: (C) 2014 - 2016 Symless Ltd. + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "ServerConfigTests.h" + +#include "../../lib/server/Config.h" + +class OnlySystemFilter : public InputFilter::Condition +{ +public: + Condition *clone() const override + { + return new OnlySystemFilter(); + } + std::string format() const override + { + return ""; + } + + InputFilter::EFilterStatus match(const Event &ev) override + { + return ev.getType() == EventTypes::System ? InputFilter::kActivate : InputFilter::kNoMatch; + } +}; + +using namespace deskflow::server; + +void ServerConfigTests::equalityCheck() +{ + Config a(nullptr); + Config b(nullptr); + QVERIFY(a.addScreen("screenA")); + QVERIFY(a != b); + + QVERIFY(b.addScreen("screenB")); + QVERIFY(a != b); + + QVERIFY(a.addScreen("screenB")); + QVERIFY(a.addScreen("screenC")); + QVERIFY(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(a.connect("screenB", EDirection::kLeft, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(b.addScreen("screenA")); + QVERIFY(b.addScreen("screenC")); + QVERIFY(b.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(b.connect("screenB", EDirection::kLeft, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(a.addOption("screenA", kOptionClipboardSharing, 1)); + QVERIFY(b.addOption("screenA", kOptionClipboardSharing, 1)); + QVERIFY(a.addOption(std::string(), kOptionClipboardSharing, 1)); + QVERIFY(b.addOption(std::string(), kOptionClipboardSharing, 1)); + + a.getInputFilter()->addFilterRule(InputFilter::Rule{new OnlySystemFilter()}); + b.getInputFilter()->addFilterRule(InputFilter::Rule{new OnlySystemFilter()}); + QVERIFY(a.addAlias("screenA", "aliasA")); + QVERIFY(b.addAlias("screenA", "aliasA")); + /* TODO Fix linking to the proper libs + NetworkAddress addr1("localhost", 8080); + addr1.resolve(); + NetworkAddress addr2("localhost", 8080); + addr2.resolve(); + a.setDeskflowAddress(addr1); + b.setDeskflowAddress(addr2); + */ + QVERIFY(a == b); +} + +void ServerConfigTests::equalityCheck_diff_options() +{ + Config a(nullptr); + Config b(nullptr); + + QVERIFY(a.addScreen("screenA")); + QVERIFY(b.addScreen("screenA")); + QVERIFY(a.addOption("screenA", kOptionClipboardSharing, 0)); + QVERIFY(b.addOption("screenA", kOptionClipboardSharing, 1)); + QVERIFY(a != b); +} + +void ServerConfigTests::equalityCheck_diff_alias() +{ + Config a(nullptr); + Config b(nullptr); + + QVERIFY(a.addScreen("screenA")); + QVERIFY(b.addScreen("screenA")); + QVERIFY(b.addAlias("screenA", "aliasA")); + QVERIFY(a != b); + + QVERIFY(a.addAlias("screenA", "aliasA")); + QVERIFY(b.addAlias("screenA", "aliasB")); + QVERIFY(a != b); +} + +void ServerConfigTests::equalityCheck_diff_filters() +{ + Config a(nullptr); + Config b(nullptr); + QVERIFY(a.addScreen("screenA")); + QVERIFY(b.addScreen("screenA")); + + a.getInputFilter()->addFilterRule(InputFilter::Rule{new OnlySystemFilter()}); + QVERIFY(a != b); +} + +// TODO FIX +/* +void ServerConfigTests::equalityCheck_diff_address() +{ + Config a(nullptr); + Config b(nullptr); + QVERIFY(a.addScreen("screenA")); + QVERIFY(b.addScreen("screenA")); + a.setDeskflowAddress(NetworkAddress(8000)); + b.setDeskflowAddress(NetworkAddress(9000)); + QVERIFY(a != b); +} +*/ + +void ServerConfigTests::equalityCheck_diff_neighbours1() +{ + Config a(nullptr); + Config b(nullptr); + QVERIFY(a.addScreen("screenA")); + QVERIFY(a.addScreen("screenB")); + QVERIFY(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(b.addScreen("screenA")); + QVERIFY(b.addScreen("screenB")); + QVERIFY(a != b); + QVERIFY(b != a); +} + +void ServerConfigTests::equalityCheck_diff_neighbours2() +{ + Config a(nullptr); + Config b(nullptr); + QVERIFY(a.addScreen("screenA")); + QVERIFY(a.addScreen("screenB")); + QVERIFY(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(b.addScreen("screenA")); + QVERIFY(b.addScreen("screenB")); + QVERIFY(b.connect("screenA", EDirection::kBottom, 0.0f, 0.25f, "screenB", 0.25f, 1.0f)); + QVERIFY(a != b); +} + +void ServerConfigTests::equalityCheck_diff_neighbours3() +{ + Config a(nullptr); + Config b(nullptr); + QVERIFY(a.addScreen("screenA")); + QVERIFY(a.addScreen("screenB")); + QVERIFY(a.addScreen("screenC")); + QVERIFY(a.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenB", 0.5f, 1.0f)); + QVERIFY(b.addScreen("screenA")); + QVERIFY(b.addScreen("screenB")); + QVERIFY(b.addScreen("screenC")); + QVERIFY(b.connect("screenA", EDirection::kBottom, 0.0f, 0.5f, "screenC", 0.5f, 1.0f)); + QVERIFY(a != b); +} + +QTEST_MAIN(ServerConfigTests) diff --git a/src/unittests/server/ServerConfigTests.h b/src/unittests/server/ServerConfigTests.h new file mode 100644 index 000000000..294b5c453 --- /dev/null +++ b/src/unittests/server/ServerConfigTests.h @@ -0,0 +1,21 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include + +class ServerConfigTests : public QObject +{ + Q_OBJECT +private slots: + void equalityCheck(); + void equalityCheck_diff_options(); + void equalityCheck_diff_alias(); + void equalityCheck_diff_filters(); + // void equalityCheck_diff_address(); + void equalityCheck_diff_neighbours1(); + void equalityCheck_diff_neighbours2(); + void equalityCheck_diff_neighbours3(); +};