From 8f53b88bb674b493c0e447e3cfa37515a19c9965 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Mon, 28 Apr 2025 18:05:19 -0400 Subject: [PATCH] chore: remove unused tests Remove Unused Mocks Remove remaing uses of TEST_ENV and its guarded items --- src/lib/client/ServerProxy.h | 7 - src/lib/platform/XWindowsKeyState.h | 19 - src/lib/server/InputFilter.h | 6 - src/lib/server/PrimaryClient.h | 6 - src/test/mock/deskflow/MockScreen.h | 27 - src/test/mock/server/MockConfig.h | 23 - src/test/mock/server/MockInputFilter.h | 19 - src/test/mock/server/MockPrimaryClient.h | 29 - src/test/shared/TestEventQueue.cpp | 38 -- src/test/shared/TestEventQueue.h | 30 - .../unittests/deskflow/ProtocolUtilTests.cpp | 520 ----------------- .../unittests/deskflow/ServerAppTests.cpp | 2 - src/test/unittests/net/NetworkTests.cpp | 522 ------------------ .../platform/MSWindowsKeyStateTests.cpp | 138 ----- .../platform/XWindowsKeyStateTests.cpp | 208 ------- .../platform/XWindowsScreenSaverTests.cpp | 37 -- .../platform/XWindowsScreenTests.cpp | 33 -- 17 files changed, 1664 deletions(-) delete mode 100644 src/test/mock/deskflow/MockScreen.h delete mode 100644 src/test/mock/server/MockConfig.h delete mode 100644 src/test/mock/server/MockInputFilter.h delete mode 100644 src/test/mock/server/MockPrimaryClient.h delete mode 100644 src/test/shared/TestEventQueue.cpp delete mode 100644 src/test/shared/TestEventQueue.h delete mode 100644 src/test/unittests/deskflow/ProtocolUtilTests.cpp delete mode 100644 src/test/unittests/net/NetworkTests.cpp delete mode 100644 src/test/unittests/platform/MSWindowsKeyStateTests.cpp delete mode 100644 src/test/unittests/platform/XWindowsKeyStateTests.cpp delete mode 100644 src/test/unittests/platform/XWindowsScreenSaverTests.cpp delete mode 100644 src/test/unittests/platform/XWindowsScreenTests.cpp diff --git a/src/lib/client/ServerProxy.h b/src/lib/client/ServerProxy.h index 19c01dfa6..6b4411b89 100644 --- a/src/lib/client/ServerProxy.h +++ b/src/lib/client/ServerProxy.h @@ -51,13 +51,6 @@ public: //@} -#ifdef TEST_ENV - void handleDataForTest() - { - handleData(Event(), nullptr); - } -#endif - protected: enum EResult { diff --git a/src/lib/platform/XWindowsKeyState.h b/src/lib/platform/XWindowsKeyState.h index e4355b73f..a7e9fb531 100644 --- a/src/lib/platform/XWindowsKeyState.h +++ b/src/lib/platform/XWindowsKeyState.h @@ -129,9 +129,6 @@ private: bool m_lock; }; -#ifdef TEST_ENV -public: // yuck -#endif using KeyModifierMaskList = std::vector; private: @@ -159,20 +156,4 @@ private: // autorepeat state XKeyboardState m_keyboardState; - -#ifdef TEST_ENV -public: - int32_t group() const - { - return m_group; - } - void group(const int32_t &group) - { - m_group = group; - } - KeyModifierMaskList modifierFromX() const - { - return m_modifierFromX; - } -#endif }; diff --git a/src/lib/server/InputFilter.h b/src/lib/server/InputFilter.h index 567c2fa2a..a2cdfaa73 100644 --- a/src/lib/server/InputFilter.h +++ b/src/lib/server/InputFilter.h @@ -359,12 +359,6 @@ public: InputFilter(const InputFilter &); virtual ~InputFilter(); -#ifdef TEST_ENV - InputFilter() : m_primaryClient(nullptr) - { - } -#endif - InputFilter &operator=(const InputFilter &); // add rule, adopting the condition and the actions diff --git a/src/lib/server/PrimaryClient.h b/src/lib/server/PrimaryClient.h index 1c39fc59e..7f8045a83 100644 --- a/src/lib/server/PrimaryClient.h +++ b/src/lib/server/PrimaryClient.h @@ -29,12 +29,6 @@ public: PrimaryClient(const std::string &name, deskflow::Screen *screen); ~PrimaryClient() override = default; -#ifdef TEST_ENV - PrimaryClient() : BaseClientProxy("") - { - } -#endif - //! @name manipulators //@{ diff --git a/src/test/mock/deskflow/MockScreen.h b/src/test/mock/deskflow/MockScreen.h deleted file mode 100644 index 196452e33..000000000 --- a/src/test/mock/deskflow/MockScreen.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#define TEST_ENV - -#include "deskflow/Screen.h" - -#include - -class MockScreen : public deskflow::Screen -{ -public: - MockScreen() : deskflow::Screen() - { - } - MOCK_METHOD(void, disable, (), (override)); - MOCK_METHOD(void, getShape, (int32_t &, int32_t &, int32_t &, int32_t &), (const, override)); - MOCK_METHOD(void, getCursorPos, (int32_t &, int32_t &), (const, override)); - MOCK_METHOD(void, resetOptions, (), (override)); - MOCK_METHOD(void, setOptions, (const OptionsList &), (override)); - MOCK_METHOD(void, enable, (), (override)); -}; diff --git a/src/test/mock/server/MockConfig.h b/src/test/mock/server/MockConfig.h deleted file mode 100644 index 57febed2b..000000000 --- a/src/test/mock/server/MockConfig.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#define TEST_ENV - -#include "server/Config.h" - -#include - -class MockConfig : public Config -{ -public: - MockConfig() : Config() - { - } - MOCK_METHOD(InputFilter *, getInputFilter, (), (override)); - MOCK_METHOD(bool, isScreen, (const std::string &), (const, override)); -}; diff --git a/src/test/mock/server/MockInputFilter.h b/src/test/mock/server/MockInputFilter.h deleted file mode 100644 index e5b2a82df..000000000 --- a/src/test/mock/server/MockInputFilter.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#define TEST_ENV - -#include "server/InputFilter.h" - -#include - -class MockInputFilter : public InputFilter -{ -public: - MOCK_METHOD(void, setPrimaryClient, (PrimaryClient *), (override)); -}; diff --git a/src/test/mock/server/MockPrimaryClient.h b/src/test/mock/server/MockPrimaryClient.h deleted file mode 100644 index 3e94aea70..000000000 --- a/src/test/mock/server/MockPrimaryClient.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#define TEST_ENV - -#include "server/PrimaryClient.h" - -#include - -class MockPrimaryClient : public PrimaryClient -{ -public: - MOCK_METHOD(void *, getEventTarget, (), (const, override)); - MOCK_METHOD(void, getCursorPos, (int32_t &, int32_t &), (const, override)); - MOCK_METHOD(void, setJumpCursorPos, (int32_t, int32_t), (const)); - MOCK_METHOD(void, reconfigure, (uint32_t), (override)); - MOCK_METHOD(void, resetOptions, (), (override)); - MOCK_METHOD(void, setOptions, (const OptionsList &), (override)); - MOCK_METHOD(void, enable, (), (override)); - MOCK_METHOD(void, disable, (), (override)); - MOCK_METHOD(uint32_t, registerHotKey, (KeyID, KeyModifierMask), (override)); - MOCK_METHOD(KeyModifierMask, getToggleMask, (), (const, override)); - MOCK_METHOD(void, unregisterHotKey, (uint32_t), (override)); -}; diff --git a/src/test/shared/TestEventQueue.cpp b/src/test/shared/TestEventQueue.cpp deleted file mode 100644 index 25ef7a193..000000000 --- a/src/test/shared/TestEventQueue.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "test/shared/TestEventQueue.h" - -#include "base/TMethodEventJob.h" - -#include - -void TestEventQueue::raiseQuitEvent() -{ - addEvent(Event(EventTypes::Quit)); -} - -void TestEventQueue::initQuitTimeout(double timeout) -{ - assert(m_pQuitTimeoutTimer == nullptr); - m_pQuitTimeoutTimer = newOneShotTimer(timeout, nullptr); - adoptHandler( - EventTypes::Timer, m_pQuitTimeoutTimer, - new TMethodEventJob(this, &TestEventQueue::handleQuitTimeout) - ); -} - -void TestEventQueue::cleanupQuitTimeout() -{ - removeHandler(EventTypes::Timer, m_pQuitTimeoutTimer); - deleteTimer(m_pQuitTimeoutTimer); - m_pQuitTimeoutTimer = nullptr; -} - -void TestEventQueue::handleQuitTimeout(const Event &, void *vclient) -{ - throw std::runtime_error("test event queue timeout"); -} diff --git a/src/test/shared/TestEventQueue.h b/src/test/shared/TestEventQueue.h deleted file mode 100644 index 29df60671..000000000 --- a/src/test/shared/TestEventQueue.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#include "base/EventQueue.h" - -class EventQueueTimer; - -class TestEventQueue : public EventQueue -{ -public: - TestEventQueue() : m_pQuitTimeoutTimer(nullptr) - { - } - - void handleQuitTimeout(const Event &, void *vclient); - void raiseQuitEvent(); - void initQuitTimeout(double timeout); - void cleanupQuitTimeout(); - -private: - void timeoutThread(void *); - -private: - EventQueueTimer *m_pQuitTimeoutTimer; -}; diff --git a/src/test/unittests/deskflow/ProtocolUtilTests.cpp b/src/test/unittests/deskflow/ProtocolUtilTests.cpp deleted file mode 100644 index 0fbd482db..000000000 --- a/src/test/unittests/deskflow/ProtocolUtilTests.cpp +++ /dev/null @@ -1,520 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2014 - 2020 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "deskflow/ProtocolUtil.h" -#include "test/mock/io/MockStream.h" - -#include -#include - -using ::testing::_; -using ::testing::DoAll; -using ::testing::ElementsAreArray; -using ::testing::Eq; -using ::testing::Pointee; -using ::testing::Return; -using ::testing::SetArgPointee; -using ::testing::StrEq; -using ::testing::TypedEq; - -ACTION_P2(SetValueToVoidPointerArg0, value, size) -{ - memcpy(arg0, value, size); -} - -MATCHER_P(EqVoidPointeeInt8, expected, "") -{ - const uint8_t Actual8 = (*static_cast(arg)); - return (expected == Actual8); -} - -MATCHER_P(EqVoidPointeeInt16, expected, "") -{ - const uint16_t Actual16 = (*static_cast(arg)); - return (expected == (Actual16 >> 8)); -} - -MATCHER_P(EqVoidPointeeInt32, expected, "") -{ - const uint32_t Actual32 = (*static_cast(arg)); - return (expected == (Actual32 >> 24)); -} - -MATCHER_P(EqVoidVectorInt1byte, expected, "") -{ - bool Result = true; - const uint8_t *Actual = (static_cast(arg)) + 4; - const size_t Size = *(Actual - 1); - - if (Size == expected.size()) { - for (size_t i = 0; i < expected.size(); ++i) { - if (expected[i] != Actual[i]) { - Result = false; - break; - } - } - } else { - Result = false; - } - - return Result; -} - -MATCHER_P(EqVoidVectorInt2bytes, expected, "") -{ - bool Result = true; - const uint16_t *Actual = (static_cast(arg)) + 2; - const size_t Size = *(Actual - 1) >> 8; - - if (Size == expected.size()) { - for (size_t i = 0; i < expected.size(); ++i) { - if (expected[i] != (Actual[i] >> 8)) { - Result = false; - break; - } - } - } else { - Result = false; - } - - return Result; -} - -MATCHER_P(EqVoidVectorInt4bytes, expected, "") -{ - bool Result = true; - const uint32_t *Actual = (static_cast(arg)) + 1; - const size_t Size = *(Actual - 1) >> 24; - - if (Size == expected.size()) { - for (size_t i = 0; i < expected.size(); ++i) { - if (expected[i] != (Actual[i] >> 24)) { - Result = false; - break; - } - } - } else { - Result = false; - } - - return Result; -} - -MATCHER_P(EqVectorSymbols, expected, "") -{ - bool Result = true; - const uint8_t *Actual = (static_cast(arg)); - - for (size_t i = 0; i < expected.size(); ++i) { - if (expected[i] != (Actual[i])) { - Result = false; - break; - } - } - - return Result; -} - -ACTION(ThrowBadAlloc) -{ - throw std::bad_alloc(); -} - -class ProtocolUtilTests : public ::testing::Test -{ -public: - MockStream stream; - uint8_t ActualInt8 = 0; - uint16_t ActualInt16 = 0; - uint32_t ActualInt32 = 0; - std::string ActualString; -}; - -// TODO: fix tests causing segmentation fault -#if 0 -TEST_F(ProtocolUtilTests, readf__XIOEndOfStream_exception) { - ON_CALL(stream, read(_, _)).WillByDefault(Return(0)); - - EXPECT_FALSE(ProtocolUtil::readf(&stream, "%s", &ActualString)); - EXPECT_TRUE(ActualString.empty()); -} - -TEST_F(ProtocolUtilTests, readf_XIOReadMismatch_exception) { - EXPECT_CALL(stream, read(_, _)) - .WillOnce(DoAll(SetValueToVoidPointerArg0("b", 1), Return(1))); - - EXPECT_FALSE(ProtocolUtil::readf(&stream, "a%s", &ActualString)); - EXPECT_TRUE(ActualString.empty()); -} - -TEST_F(ProtocolUtilTests, readf_bad_alloc_exception) { - ON_CALL(stream, read(_, _)).WillByDefault(ThrowBadAlloc()); - - EXPECT_FALSE(ProtocolUtil::readf(&stream, "a%s", &ActualString)); - EXPECT_TRUE(ActualString.empty()); -} - -TEST_F(ProtocolUtilTests, readf_asserts) { - ASSERT_DEBUG_DEATH( - { ProtocolUtil::readf(&stream, "%x", &ActualString); }, - "invalid format specifier"); - - ASSERT_DEBUG_DEATH( - { ProtocolUtil::readf(&stream, "%5i", &ActualString); }, - "length to be read is wrong:"); - - ASSERT_DEBUG_DEATH( - { ProtocolUtil::readf(&stream, "%5I", &ActualString); }, ""); -} - -TEST_F(ProtocolUtilTests, readf_params_validation) { - EXPECT_FALSE(ProtocolUtil::readf(nullptr, "%x", nullptr)); - EXPECT_FALSE(ProtocolUtil::readf(&stream, nullptr, nullptr)); -} - -TEST_F(ProtocolUtilTests, readf_string) { - const uint8_t Length = 200; - const std::string Expected(Length, 'x'); - std::array StringSize{{0, 0, 0, Length}}; - - EXPECT_CALL(stream, read(_, _)) - .WillOnce( - DoAll(SetValueToVoidPointerArg0(StringSize.data(), StringSize.size()), - Return(StringSize.size()))) - .WillOnce( - DoAll(SetValueToVoidPointerArg0(Expected.c_str(), Expected.length()), - Return(Expected.length()))); - - EXPECT_TRUE(ProtocolUtil::readf(&stream, "%s", &ActualString)); - EXPECT_EQ(Expected, ActualString); -} - -class ReadfIntTestFixture - : public ::testing::TestWithParam> { -public: - MockStream stream; - uint8_t StreamData1Byte = 10; - std::array StreamData2Bytes{{0, 10}}; - std::array StreamData4Bytes{{0, 0, 0, 10}}; - - uint8_t *getStreamData(int size) { - uint8_t *StreamData = nullptr; - switch (size) { - case 2: - StreamData = StreamData2Bytes.data(); - break; - case 4: - StreamData = StreamData4Bytes.data(); - break; - default: - StreamData = &StreamData1Byte; - break; - } - return StreamData; - } -}; - -TEST_P(ReadfIntTestFixture, readf_int) { - int Actual = 0; - const int Expected = 10; - const char *Format = std::get<0>(GetParam()); - int StreamDataSize = std::get<1>(GetParam()); - uint8_t *StreamData = getStreamData(StreamDataSize); - - ON_CALL(stream, read(_, _)) - .WillByDefault( - DoAll(SetValueToVoidPointerArg0(StreamData, StreamDataSize), - Return(StreamDataSize))); - - EXPECT_TRUE(ProtocolUtil::readf(&stream, Format, &Actual)); - EXPECT_EQ(Expected, Actual); -} - -INSTANTIATE_TEST_SUITE_P(ReadfIntTests, ReadfIntTestFixture, - ::testing::Values(std::make_tuple("%1i", 1), - std::make_tuple("%2i", 2), - std::make_tuple("%4i", 4))); - -class ReadfIntVectorTestFixture : public ReadfIntTestFixture {}; - -TEST_P(ReadfIntVectorTestFixture, readf_int_vector) { - std::vector Actual1Byte = {}; - std::vector Actual2Bytes = {}; - std::vector Actual4Bytes = {}; - - const std::vector Expected1Byte = {10, 10}; - const std::vector Expected2Bytes = {10, 10}; - const std::vector Expected4Bytes = {10, 10}; - std::array StreamVectorSize{{0, 0, 0, 2}}; - - const char *Format = std::get<0>(GetParam()); - int StreamDataSize = std::get<1>(GetParam()); - uint8_t *StreamData = getStreamData(StreamDataSize); - - MockStream stream; - EXPECT_CALL(stream, read(_, _)) - .WillOnce(DoAll(SetValueToVoidPointerArg0(StreamVectorSize.data(), - StreamVectorSize.size()), - Return(StreamVectorSize.size()))) - .WillRepeatedly( - DoAll(SetValueToVoidPointerArg0(StreamData, StreamDataSize), - Return(StreamDataSize))); - - switch (StreamDataSize) { - case 2: - EXPECT_TRUE(ProtocolUtil::readf(&stream, Format, &Actual2Bytes)); - EXPECT_EQ(Expected2Bytes, Actual2Bytes); - break; - case 4: - EXPECT_TRUE(ProtocolUtil::readf(&stream, Format, &Actual4Bytes)); - EXPECT_EQ(Expected4Bytes, Actual4Bytes); - break; - default: - EXPECT_TRUE(ProtocolUtil::readf(&stream, Format, &Actual1Byte)); - EXPECT_EQ(Expected1Byte, Actual1Byte); - break; - } -} - -INSTANTIATE_TEST_SUITE_P(ReadfIntVectorTests, ReadfIntVectorTestFixture, - ::testing::Values(std::make_tuple("%1I", 1), - std::make_tuple("%2I", 2), - std::make_tuple("%4I", 4))); - -class ReadfIntAndStringTest : public ReadfIntTestFixture { -public: - uint8_t ActualInt8 = 0; - uint16_t ActualInt16 = 0; - uint32_t ActualInt32 = 32; - std::string ActualString; -}; - -TEST_P(ReadfIntAndStringTest, readf_int_and_string) { - const int ExpectedInt = 10; - const uint8_t StringLength = 200; - const std::string ExpectedString(StringLength, 'x'); - std::array StringSize{{0, 0, 0, StringLength}}; - - const char *Format = std::get<0>(GetParam()); - int StreamDataSize = std::get<1>(GetParam()); - uint8_t *StreamData = getStreamData(StreamDataSize); - - EXPECT_CALL(stream, read(_, _)) - .WillOnce(DoAll(SetValueToVoidPointerArg0(StreamData, StreamDataSize), - Return(StreamDataSize))) - .WillOnce( - DoAll(SetValueToVoidPointerArg0(StringSize.data(), StringSize.size()), - Return(StringSize.size()))) - .WillOnce(DoAll(SetValueToVoidPointerArg0(ExpectedString.c_str(), - ExpectedString.length()), - Return(ExpectedString.length()))); - - switch (StreamDataSize) { - case 2: - EXPECT_TRUE( - ProtocolUtil::readf(&stream, Format, &ActualInt16, &ActualString)); - EXPECT_EQ(ExpectedInt, ActualInt16); - break; - case 4: - EXPECT_TRUE( - ProtocolUtil::readf(&stream, Format, &ActualInt32, &ActualString)); - EXPECT_EQ(ExpectedInt, ActualInt32); - break; - default: - EXPECT_TRUE( - ProtocolUtil::readf(&stream, Format, &ActualInt8, &ActualString)); - EXPECT_EQ(ExpectedInt, ActualInt8); - break; - } - EXPECT_EQ(ExpectedString, ActualString); -} - -INSTANTIATE_TEST_SUITE_P(IntAndStringTest, ReadfIntAndStringTest, - ::testing::Values(std::make_tuple("%1i%s", 1), - std::make_tuple("%2i%s", 2), - std::make_tuple("%4i%s", 4))); - -TEST_F(ProtocolUtilTests, readf_string_and_int4bytes) { - const uint8_t ExpectedInt = 10; - std::array StreamIntData{{0, 0, 0, ExpectedInt}}; - - const std::string ExpectedStr(32768, 'x'); - std::array Size{{0, 0, 128, 0}}; - - EXPECT_CALL(stream, read(_, _)) - .WillOnce(DoAll(SetValueToVoidPointerArg0(Size.data(), Size.size()), - Return(Size.size()))) - .WillOnce(DoAll( - SetValueToVoidPointerArg0(ExpectedStr.c_str(), ExpectedStr.length()), - Return(ExpectedStr.length()))) - .WillOnce(DoAll( - SetValueToVoidPointerArg0(StreamIntData.data(), StreamIntData.size()), - Return(StreamIntData.size()))); - - EXPECT_TRUE( - ProtocolUtil::readf(&stream, "%s%4i", &ActualString, &ActualInt32)); - EXPECT_EQ(ExpectedStr, ActualString); - EXPECT_EQ(ExpectedInt, ActualInt32); -} - -TEST_F(ProtocolUtilTests, readf_string_and_vector_int4bytes) { - std::vector Actual = {}; - const std::vector Expected4Bytes = {10, 10}; - std::array StreamVectorSize{{0, 0, 0, 2}}; - std::array StreamData4Bytes{{0, 0, 0, 10}}; - - const std::string ExpString(32768, 'x'); - std::array SizeString{{0, 0, 128, 0}}; - - EXPECT_CALL(stream, read(_, _)) - .WillOnce( - DoAll(SetValueToVoidPointerArg0(SizeString.data(), SizeString.size()), - Return(SizeString.size()))) - .WillOnce(DoAll( - SetValueToVoidPointerArg0(ExpString.c_str(), ExpString.length()), - Return(ExpString.length()))) - .WillOnce(DoAll(SetValueToVoidPointerArg0(StreamVectorSize.data(), - StreamVectorSize.size()), - Return(StreamVectorSize.size()))) - .WillRepeatedly(DoAll(SetValueToVoidPointerArg0(StreamData4Bytes.data(), - StreamData4Bytes.size()), - Return(StreamData4Bytes.size()))); - - EXPECT_TRUE(ProtocolUtil::readf(&stream, "%s%4I", &ActualString, &Actual)); - EXPECT_EQ(ExpString, ActualString); - EXPECT_EQ(Expected4Bytes, Actual); -} - -TEST_F(ProtocolUtilTests, readf_vector_int4bytes_and_string) { - std::vector Actual4Bytes = {}; - const std::vector Expected4Bytes = {10, 10}; - std::array StreamVectorSize{{0, 0, 0, 2}}; - std::array StreamData4Bytes{{0, 0, 0, 10}}; - - const std::string ExpectedString(32768, 'x'); - std::array StringSize{{0, 0, 128, 0}}; - - EXPECT_CALL(stream, read(_, _)) - .WillOnce(DoAll(SetValueToVoidPointerArg0(StreamVectorSize.data(), - StreamVectorSize.size()), - Return(StreamVectorSize.size()))) - .WillOnce(DoAll(SetValueToVoidPointerArg0(StreamData4Bytes.data(), - StreamData4Bytes.size()), - Return(StreamData4Bytes.size()))) - .WillOnce(DoAll(SetValueToVoidPointerArg0(StreamData4Bytes.data(), - StreamData4Bytes.size()), - Return(StreamData4Bytes.size()))) - .WillOnce( - DoAll(SetValueToVoidPointerArg0(StringSize.data(), StringSize.size()), - Return(StringSize.size()))) - .WillOnce(DoAll(SetValueToVoidPointerArg0(ExpectedString.c_str(), - ExpectedString.length()), - Return(ExpectedString.length()))); - - EXPECT_TRUE( - ProtocolUtil::readf(&stream, "%4I%s", &Actual4Bytes, &ActualString)); - EXPECT_EQ(ExpectedString, ActualString); - EXPECT_EQ(Expected4Bytes, Actual4Bytes); -} - -class WriteIntTest - : public ::testing::TestWithParam> { -public: - MockStream stream; - uint8_t Expected1Byte = 5; - uint16_t Expected2Bytes = 10; - uint32_t Expected4Bytes = 15; -}; - -TEST_P(WriteIntTest, write_int) { - const char *Format = std::get<0>(GetParam()); - const int DataSize = std::get<1>(GetParam()); - switch (DataSize) { - case 2: - EXPECT_CALL(stream, - write(EqVoidPointeeInt16(Expected2Bytes), Eq(DataSize))); - ProtocolUtil::writef(&stream, Format, Expected2Bytes); - break; - case 4: - EXPECT_CALL(stream, - write(EqVoidPointeeInt32(Expected4Bytes), Eq(DataSize))); - ProtocolUtil::writef(&stream, Format, Expected4Bytes); - break; - default: - EXPECT_CALL(stream, write(EqVoidPointeeInt8(Expected1Byte), Eq(DataSize))); - ProtocolUtil::writef(&stream, Format, Expected1Byte); - break; - } -} - -INSTANTIATE_TEST_SUITE_P(WriteIntTest, WriteIntTest, - ::testing::Values(std::make_tuple("%1i", 1), - std::make_tuple("%2i", 2), - std::make_tuple("%4i", 4))); - -class WriteIntVectorTest - : public ::testing::TestWithParam> { -public: - MockStream stream; - const std::vector Expected1Byte = {10, 20, 30}; - const std::vector Expected2Byte = {40, 50, 60}; - const std::vector Expected4Byte = {70, 80, 90}; -}; - -TEST_P(WriteIntVectorTest, write_vector_int) { - const char *Format = std::get<0>(GetParam()); - const int Type = std::get<1>(GetParam()); - - switch (Type) { - case 2: - EXPECT_CALL(stream, - write(EqVoidVectorInt2bytes(Expected2Byte), - Eq(Type * Expected2Byte.size() + sizeof(uint32_t)))); - ProtocolUtil::writef(&stream, Format, &Expected2Byte); - break; - case 4: - EXPECT_CALL(stream, - write(EqVoidVectorInt4bytes(Expected4Byte), - Eq(Type * Expected4Byte.size() + sizeof(uint32_t)))); - ProtocolUtil::writef(&stream, Format, &Expected4Byte); - break; - default: - EXPECT_CALL(stream, write(EqVoidVectorInt1byte(Expected1Byte), - Eq(Expected1Byte.size() + sizeof(uint32_t)))); - ProtocolUtil::writef(&stream, Format, &Expected1Byte); - break; - } -} - -INSTANTIATE_TEST_SUITE_P(WriteIntVectorTest, WriteIntVectorTest, - ::testing::Values(std::make_tuple("%1I", 1), - std::make_tuple("%2I", 2), - std::make_tuple("%4I", 4))); - -TEST_F(ProtocolUtilTests, write_string_test) { - const std::string Expected = "Expected"; - const std::vector ExpectedVector = {'E', 'x', 'p', 'e', - 'c', 't', 'e', 'd'}; - EXPECT_CALL(stream, write(EqVoidVectorInt1byte(ExpectedVector), - Expected.size() + sizeof(uint32_t))); - ProtocolUtil::writef(&stream, "%s", &Expected); -} - -TEST_F(ProtocolUtilTests, write_raw_bytes_test) { - const uint32_t Size = 5; - const std::array Expected{{10, 20, 30, 40, 50}}; - EXPECT_CALL(stream, write(EqVoidVectorInt1byte(Expected), - Expected.size() + sizeof(uint32_t))); - ProtocolUtil::writef(&stream, "%S", Size, &Expected); -} - -TEST_F(ProtocolUtilTests, write_symbols_from_format_test) { - const std::vector Expected = {'%', '1', '2', '3', '4', '5'}; - EXPECT_CALL(stream, write(EqVectorSymbols(Expected), Expected.size())); - ProtocolUtil::writef(&stream, "%%12345"); -} - -#endif diff --git a/src/test/unittests/deskflow/ServerAppTests.cpp b/src/test/unittests/deskflow/ServerAppTests.cpp index b96b4c424..a575e43c1 100644 --- a/src/test/unittests/deskflow/ServerAppTests.cpp +++ b/src/test/unittests/deskflow/ServerAppTests.cpp @@ -4,8 +4,6 @@ * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception */ -#define TEST_ENV - #include "deskflow/ArgParser.h" #include "deskflow/ServerApp.h" #include "deskflow/ServerArgs.h" diff --git a/src/test/unittests/net/NetworkTests.cpp b/src/test/unittests/net/NetworkTests.cpp deleted file mode 100644 index 37ed36aee..000000000 --- a/src/test/unittests/net/NetworkTests.cpp +++ /dev/null @@ -1,522 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -// TODO: fix, tests failing intermittently and/or with segfault -#if 0 - -#define TEST_ENV - -#include "base/Log.h" -#include "base/TMethodEventJob.h" -#include "base/TMethodJob.h" -#include "client/Client.h" -#include "deskflow/FileChunk.h" -#include "deskflow/StreamChunker.h" -#include "mt/Thread.h" -#include "net/NetworkAddress.h" -#include "net/SocketMultiplexer.h" -#include "net/TCPSocketFactory.h" -#include "server/ClientListener.h" -#include "server/ClientProxy.h" -#include "server/Server.h" -#include "test/mock/deskflow/MockScreen.h" -#include "test/mock/server/MockConfig.h" -#include "test/mock/server/MockInputFilter.h" -#include "test/mock/server/MockPrimaryClient.h" -#include "test/shared/TestEventQueue.h" - -#include -#include -#include -#include -#include - -using namespace std; -using ::testing::_; -using ::testing::Invoke; -using ::testing::NiceMock; -using ::testing::Return; - -#define TEST_PORT 24803 -#define TEST_HOST "localhost" - -const size_t kMockDataSize = 1024 * 1024 * 10; // 10MB -const uint16_t kMockDataChunkIncrement = 1024; // 1KB -const char *kMockFilename = "tmp/test/NetworkTests.mock"; -const size_t kMockFileSize = 1024 * 1024 * 10; // 10MB - -void getScreenShape(int32_t &x, int32_t &y, int32_t &w, int32_t &h); -void getCursorPos(int32_t &x, int32_t &y); -uint8_t *newMockData(size_t size); -void createFile(fstream &file, const char *filename, size_t size); - -class NetworkTests : public ::testing::Test { -public: - NetworkTests() : m_mockData(nullptr), m_mockDataSize(0), m_mockFileSize(0) { - m_mockData = newMockData(kMockDataSize); - createFile(m_mockFile, kMockFilename, kMockFileSize); - } - - ~NetworkTests() { - remove(kMockFilename); - delete[] m_mockData; - } - - void sendMockData(void *eventTarget); - - void - sendToClient_mockData_handleClientConnected(const Event &, void *vlistener); - void sendToClient_mockData_fileReceiveCompleted(const Event &, void *); - - void - sendToClient_mockFile_handleClientConnected(const Event &, void *vlistener); - void sendToClient_mockFile_fileReceiveCompleted(const Event &event, void *); - - void - sendToServer_mockData_handleClientConnected(const Event &, void *vlistener); - void sendToServer_mockData_fileReceiveCompleted(const Event &event, void *); - - void - sendToServer_mockFile_handleClientConnected(const Event &, void *vlistener); - void sendToServer_mockFile_fileReceiveCompleted(const Event &event, void *); - -public: - TestEventQueue m_events; - uint8_t *m_mockData; - size_t m_mockDataSize; - fstream m_mockFile; - size_t m_mockFileSize; -}; - -TEST_F(NetworkTests, sendToClient_mockData) { - // server and client - NetworkAddress serverAddress(TEST_HOST, TEST_PORT); - - serverAddress.resolve(); - - // server - SocketMultiplexer serverSocketMultiplexer; - TCPSocketFactory *serverSocketFactory = - new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, SecurityLevel::PlainText); - NiceMock serverScreen; - NiceMock primaryClient; - NiceMock serverConfig; - NiceMock serverInputFilter; - - m_events.adoptHandler( - m_events.forClientListener().connected(), &listener, - new TMethodEventJob( - this, &NetworkTests::sendToClient_mockData_handleClientConnected, - &listener)); - - ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); - ON_CALL(serverConfig, getInputFilter()) - .WillByDefault(Return(&serverInputFilter)); - - deskflow::ServerArgs serverArgs; - serverArgs.m_enableDragDrop = true; - Server server( - serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); - server.m_mock = true; - listener.setServer(&server); - - // client - NiceMock clientScreen; - SocketMultiplexer clientSocketMultiplexer; - TCPSocketFactory *clientSocketFactory = - new TCPSocketFactory(&m_events, &clientSocketMultiplexer); - - ON_CALL(clientScreen, getShape(_, _, _, _)) - .WillByDefault(Invoke(getScreenShape)); - ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); - - deskflow::ClientArgs clientArgs; - clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; - Client client( - &m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, - clientArgs); - - m_events.adoptHandler( - m_events.forFile().fileReceiveCompleted(), &client, - new TMethodEventJob( - this, &NetworkTests::sendToClient_mockData_fileReceiveCompleted)); - - client.connect(); - - m_events.initQuitTimeout(10); - m_events.loop(); - m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forFile().fileReceiveCompleted(), &client); - m_events.cleanupQuitTimeout(); -} - -TEST_F(NetworkTests, sendToClient_mockFile) { - // server and client - NetworkAddress serverAddress(TEST_HOST, TEST_PORT); - - serverAddress.resolve(); - - // server - SocketMultiplexer serverSocketMultiplexer; - TCPSocketFactory *serverSocketFactory = - new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, SecurityLevel::PlainText); - NiceMock serverScreen; - NiceMock primaryClient; - NiceMock serverConfig; - NiceMock serverInputFilter; - - m_events.adoptHandler( - m_events.forClientListener().connected(), &listener, - new TMethodEventJob( - this, &NetworkTests::sendToClient_mockFile_handleClientConnected, - &listener)); - - ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); - ON_CALL(serverConfig, getInputFilter()) - .WillByDefault(Return(&serverInputFilter)); - - deskflow::ServerArgs serverArgs; - serverArgs.m_enableDragDrop = true; - Server server( - serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); - server.m_mock = true; - listener.setServer(&server); - - // client - NiceMock clientScreen; - SocketMultiplexer clientSocketMultiplexer; - TCPSocketFactory *clientSocketFactory = - new TCPSocketFactory(&m_events, &clientSocketMultiplexer); - - ON_CALL(clientScreen, getShape(_, _, _, _)) - .WillByDefault(Invoke(getScreenShape)); - ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); - - deskflow::ClientArgs clientArgs; - clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; - Client client( - &m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, - clientArgs); - - m_events.adoptHandler( - m_events.forFile().fileReceiveCompleted(), &client, - new TMethodEventJob( - this, &NetworkTests::sendToClient_mockFile_fileReceiveCompleted)); - - client.connect(); - - m_events.initQuitTimeout(10); - m_events.loop(); - m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forFile().fileReceiveCompleted(), &client); - m_events.cleanupQuitTimeout(); -} - -TEST_F(NetworkTests, sendToServer_mockData) { - // server and client - NetworkAddress serverAddress(TEST_HOST, TEST_PORT); - serverAddress.resolve(); - - // server - SocketMultiplexer serverSocketMultiplexer; - TCPSocketFactory *serverSocketFactory = - new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, SecurityLevel::PlainText); - NiceMock serverScreen; - NiceMock primaryClient; - NiceMock serverConfig; - NiceMock serverInputFilter; - - ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); - ON_CALL(serverConfig, getInputFilter()) - .WillByDefault(Return(&serverInputFilter)); - - deskflow::ServerArgs serverArgs; - serverArgs.m_enableDragDrop = true; - Server server( - serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); - server.m_mock = true; - listener.setServer(&server); - - // client - NiceMock clientScreen; - SocketMultiplexer clientSocketMultiplexer; - TCPSocketFactory *clientSocketFactory = - new TCPSocketFactory(&m_events, &clientSocketMultiplexer); - - ON_CALL(clientScreen, getShape(_, _, _, _)) - .WillByDefault(Invoke(getScreenShape)); - ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); - - deskflow::ClientArgs clientArgs; - clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; - Client client( - &m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, - clientArgs); - - m_events.adoptHandler( - m_events.forClientListener().connected(), &listener, - new TMethodEventJob( - this, &NetworkTests::sendToServer_mockData_handleClientConnected, - &client)); - - m_events.adoptHandler( - m_events.forFile().fileReceiveCompleted(), &server, - new TMethodEventJob( - this, &NetworkTests::sendToServer_mockData_fileReceiveCompleted)); - - client.connect(); - - m_events.initQuitTimeout(10); - m_events.loop(); - m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forFile().fileReceiveCompleted(), &server); - m_events.cleanupQuitTimeout(); -} - -TEST_F(NetworkTests, sendToServer_mockFile) { - // server and client - NetworkAddress serverAddress(TEST_HOST, TEST_PORT); - - serverAddress.resolve(); - - // server - SocketMultiplexer serverSocketMultiplexer; - TCPSocketFactory *serverSocketFactory = - new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, SecurityLevel::PlainText); - NiceMock serverScreen; - NiceMock primaryClient; - NiceMock serverConfig; - NiceMock serverInputFilter; - - ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); - ON_CALL(serverConfig, getInputFilter()) - .WillByDefault(Return(&serverInputFilter)); - - deskflow::ServerArgs serverArgs; - serverArgs.m_enableDragDrop = true; - Server server( - serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); - server.m_mock = true; - listener.setServer(&server); - - // client - NiceMock clientScreen; - SocketMultiplexer clientSocketMultiplexer; - TCPSocketFactory *clientSocketFactory = - new TCPSocketFactory(&m_events, &clientSocketMultiplexer); - - ON_CALL(clientScreen, getShape(_, _, _, _)) - .WillByDefault(Invoke(getScreenShape)); - ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); - - deskflow::ClientArgs clientArgs; - clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; - Client client( - &m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, - clientArgs); - - m_events.adoptHandler( - m_events.forClientListener().connected(), &listener, - new TMethodEventJob( - this, &NetworkTests::sendToServer_mockFile_handleClientConnected, - &client)); - - m_events.adoptHandler( - m_events.forFile().fileReceiveCompleted(), &server, - new TMethodEventJob( - this, &NetworkTests::sendToServer_mockFile_fileReceiveCompleted)); - - client.connect(); - - m_events.initQuitTimeout(10); - m_events.loop(); - m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forFile().fileReceiveCompleted(), &server); - m_events.cleanupQuitTimeout(); -} - -void NetworkTests::sendToClient_mockData_handleClientConnected( - const Event &, void *vlistener) { - ClientListener *listener = static_cast(vlistener); - Server *server = listener->getServer(); - - ClientProxy *client = listener->getNextClient(); - if (client == nullptr) { - throw runtime_error("client is null"); - } - - BaseClientProxy *bcp = client; - server->adoptClient(bcp); - server->setActive(bcp); - - sendMockData(server); -} - -void NetworkTests::sendToClient_mockData_fileReceiveCompleted( - const Event &event, void *) { - Client *client = static_cast(event.getTarget()); - EXPECT_TRUE(client->isReceivedFileSizeValid()); - - m_events.raiseQuitEvent(); -} - -void NetworkTests::sendToClient_mockFile_handleClientConnected( - const Event &, void *vlistener) { - ClientListener *listener = static_cast(vlistener); - Server *server = listener->getServer(); - - ClientProxy *client = listener->getNextClient(); - if (client == nullptr) { - throw runtime_error("client is null"); - } - - BaseClientProxy *bcp = client; - server->adoptClient(bcp); - server->setActive(bcp); - - server->sendFileToClient(kMockFilename); -} - -void NetworkTests::sendToClient_mockFile_fileReceiveCompleted( - const Event &event, void *) { - Client *client = static_cast(event.getTarget()); - EXPECT_TRUE(client->isReceivedFileSizeValid()); - - m_events.raiseQuitEvent(); -} - -void NetworkTests::sendToServer_mockData_handleClientConnected( - const Event &, void *vclient) { - Client *client = static_cast(vclient); - sendMockData(client); -} - -void NetworkTests::sendToServer_mockData_fileReceiveCompleted( - const Event &event, void *) { - Server *server = static_cast(event.getTarget()); - EXPECT_TRUE(server->isReceivedFileSizeValid()); - - m_events.raiseQuitEvent(); -} - -void NetworkTests::sendToServer_mockFile_handleClientConnected( - const Event &, void *vclient) { - Client *client = static_cast(vclient); - client->sendFileToServer(kMockFilename); -} - -void NetworkTests::sendToServer_mockFile_fileReceiveCompleted( - const Event &event, void *) { - Server *server = static_cast(event.getTarget()); - EXPECT_TRUE(server->isReceivedFileSizeValid()); - - m_events.raiseQuitEvent(); -} - -void NetworkTests::sendMockData(void *eventTarget) { - // send first message (file size) - std::string size = deskflow::string::sizeTypeToString(kMockDataSize); - FileChunk *sizeMessage = FileChunk::start(size); - - m_events.addEvent( - Event(m_events.forFile().fileChunkSending(), eventTarget, sizeMessage)); - - // send chunk messages with incrementing chunk size - size_t lastSize = 0; - size_t sentLength = 0; - while (true) { - size_t dataSize = lastSize + kMockDataChunkIncrement; - - // make sure we don't read too much from the mock data. - if (sentLength + dataSize > kMockDataSize) { - dataSize = kMockDataSize - sentLength; - } - - // first byte is the chunk mark, last is \0 - FileChunk *chunk = FileChunk::data(m_mockData, dataSize); - m_events.addEvent( - Event(m_events.forFile().fileChunkSending(), eventTarget, chunk)); - - sentLength += dataSize; - lastSize = dataSize; - - if (sentLength == kMockDataSize) { - break; - } - } - - // send last message - FileChunk *transferFinished = FileChunk::end(); - m_events.addEvent(Event( - m_events.forFile().fileChunkSending(), eventTarget, transferFinished)); -} - -uint8_t *newMockData(size_t size) { - uint8_t *buffer = new uint8_t[size]; - - uint8_t *data = buffer; - const uint8_t head[] = "mock head... "; - size_t headSize = sizeof(head) - 1; - const uint8_t tail[] = "... mock tail"; - size_t tailSize = sizeof(tail) - 1; - const uint8_t deskflowRocks[] = "deskflow\0 rocks! "; - size_t deskflowRocksSize = sizeof(deskflowRocks) - 1; - - memcpy(data, head, headSize); - data += headSize; - - size_t times = (size - headSize - tailSize) / deskflowRocksSize; - for (size_t i = 0; i < times; ++i) { - memcpy(data, deskflowRocks, deskflowRocksSize); - data += deskflowRocksSize; - } - - size_t remainder = (size - headSize - tailSize) % deskflowRocksSize; - if (remainder != 0) { - memset(data, '.', remainder); - data += remainder; - } - - memcpy(data, tail, tailSize); - return buffer; -} - -void createFile(fstream &file, const char *filename, size_t size) { - uint8_t *buffer = newMockData(size); - - file.open(filename, ios::out | ios::binary); - if (!file.is_open()) { - throw runtime_error("file not open"); - } - - file.write(reinterpret_cast(buffer), size); - file.close(); - - delete[] buffer; -} - -void getScreenShape(int32_t &x, int32_t &y, int32_t &w, int32_t &h) { - x = 0; - y = 0; - w = 1; - h = 1; -} - -void getCursorPos(int32_t &x, int32_t &y) { - x = 0; - y = 0; -} - -#endif // WINAPI_CARBON diff --git a/src/test/unittests/platform/MSWindowsKeyStateTests.cpp b/src/test/unittests/platform/MSWindowsKeyStateTests.cpp deleted file mode 100644 index 2b0bd7a9e..000000000 --- a/src/test/unittests/platform/MSWindowsKeyStateTests.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2011 Nick Bolton - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -// TODO: fix Assertion failed: s_instance != nullptr -#if 0 - -#define TEST_ENV - -#include "base/TMethodJob.h" -#include "platform/MSWindowsDesks.h" -#include "platform/MSWindowsKeyState.h" -#include "platform/MSWindowsScreen.h" -#include "platform/MSWindowsScreenSaver.h" -#include "test/mock/deskflow/MockEventQueue.h" -#include "test/mock/deskflow/MockKeyMap.h" - -#include -#include - -// wParam = flags, HIBYTE(lParam) = virtual key, LOBYTE(lParam) = scan code -#define DESKFLOW_MSG_FAKE_KEY DESKFLOW_HOOK_LAST_MSG + 4 - -using ::testing::_; -using ::testing::NiceMock; - -class MSWindowsKeyStateTests : public ::testing::Test { -protected: - virtual void SetUp() { - m_hook.loadLibrary(); - m_screensaver = new MSWindowsScreenSaver(); - } - - virtual void TearDown() { delete m_screensaver; } - - MSWindowsDesks *newDesks(IEventQueue *eventQueue) { - return new MSWindowsDesks( - true, false, m_screensaver, eventQueue, - new TMethodJob( - this, &MSWindowsKeyStateTests::updateKeysCB), - false); - } - - void *getEventTarget() const { - return const_cast(this); - } - -private: - void updateKeysCB(void *) {} - IScreenSaver *m_screensaver; - MSWindowsHook m_hook; -}; - -TEST_F(MSWindowsKeyStateTests, disable_eventQueueNotUsed) { - NiceMock eventQueue; - MSWindowsDesks *desks = newDesks(&eventQueue); - MockKeyMap keyMap; - MSWindowsKeyState keyState( - desks, getEventTarget(), &eventQueue, keyMap, {"en"}, true); - - EXPECT_CALL(eventQueue, removeHandler(_, _)).Times(0); - - keyState.disable(); - delete desks; -} - -TEST_F( - MSWindowsKeyStateTests, - testAutoRepeat_noRepeatAndButtonIsZero_resultIsTrue) { - NiceMock eventQueue; - MSWindowsDesks *desks = newDesks(&eventQueue); - MockKeyMap keyMap; - MSWindowsKeyState keyState( - desks, getEventTarget(), &eventQueue, keyMap, {"en"}, true); - keyState.setLastDown(1); - - bool actual = keyState.testAutoRepeat(true, false, 1); - - ASSERT_TRUE(actual); - delete desks; -} - -TEST_F(MSWindowsKeyStateTests, testAutoRepeat_pressFalse_lastDownIsZero) { - NiceMock eventQueue; - MSWindowsDesks *desks = newDesks(&eventQueue); - MockKeyMap keyMap; - MSWindowsKeyState keyState( - desks, getEventTarget(), &eventQueue, keyMap, {"en"}, true); - keyState.setLastDown(1); - - keyState.testAutoRepeat(false, false, 1); - - ASSERT_EQ(0, keyState.getLastDown()); - delete desks; -} - -TEST_F(MSWindowsKeyStateTests, saveModifiers_noModifiers_savedModifiers0) { - NiceMock eventQueue; - MSWindowsDesks *desks = newDesks(&eventQueue); - MockKeyMap keyMap; - MSWindowsKeyState keyState( - desks, getEventTarget(), &eventQueue, keyMap, {"en"}, true); - - keyState.saveModifiers(); - - ASSERT_EQ(0, keyState.getSavedModifiers()); - delete desks; -} - -TEST_F( - MSWindowsKeyStateTests, testKoreanLocale_inputModeKey_resultCorrectKeyID) { - NiceMock eventQueue; - MSWindowsDesks *desks = newDesks(&eventQueue); - MockKeyMap keyMap; - MSWindowsKeyState keyState( - desks, getEventTarget(), &eventQueue, keyMap, {"en"}, true); - - keyState.setKeyLayout((HKL)0x00000412u); // for ko-KR local ID - ASSERT_EQ( - 0xEF31, keyState.getKeyID(0x15u, 0x1f2u)); // VK_HANGUL from Hangul key - ASSERT_EQ( - 0xEF34, keyState.getKeyID(0x19u, 0x1f1u)); // VK_HANJA from Hanja key - ASSERT_EQ( - 0xEF31, keyState.getKeyID(0x15u, 0x11du)); // VK_HANGUL from R-Alt key - ASSERT_EQ( - 0xEF34, keyState.getKeyID(0x19u, 0x138u)); // VK_HANJA from R-Ctrl key - - keyState.setKeyLayout((HKL)0x00000411); // for ja-jp locale ID - ASSERT_EQ(0xEF26, keyState.getKeyID(0x15u, 0x1du)); // VK_KANA - ASSERT_EQ(0xEF2A, keyState.getKeyID(0x19u, 0x38u)); // VK_KANJI - - delete desks; -} - -#endif diff --git a/src/test/unittests/platform/XWindowsKeyStateTests.cpp b/src/test/unittests/platform/XWindowsKeyStateTests.cpp deleted file mode 100644 index 6e66058b8..000000000 --- a/src/test/unittests/platform/XWindowsKeyStateTests.cpp +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2011 Nick Bolton - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -// TODO: fix Assertion `s_instance != nullptr' failed. -#if 0 - -#define TEST_ENV - -#include "test/mock/deskflow/MockEventQueue.h" -#include "test/mock/deskflow/MockKeyMap.h" - -#include "base/Log.h" -#include "platform/XWindowsKeyState.h" - -#define XK_LATIN1 -#define XK_MISCELLANY -#include - -#if HAVE_XKB_EXTENSION -#include -#endif - -#include -#include -#include - -class XWindowsKeyStateTests : public ::testing::Test { -protected: - XWindowsKeyStateTests() : m_display(nullptr) {} - - ~XWindowsKeyStateTests() { - if (m_display != nullptr) { - LOG((CLOG_DEBUG "closing display")); - XCloseDisplay(m_display); - } - } - - virtual void SetUp() { - // open the display only once for the entire test suite - if (this->m_display == nullptr) { - LOG((CLOG_DEBUG "opening display")); - this->m_display = XOpenDisplay(nullptr); - - ASSERT_TRUE(this->m_display != nullptr) - << "unable to open display: " << errno; - } - } - - virtual void TearDown() {} - - Display *m_display; -}; - -TEST_F(XWindowsKeyStateTests, setActiveGroup_pollAndSet_groupIsZero) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - keyState.setActiveGroup(XWindowsKeyState::kGroupPollAndSet); - - ASSERT_EQ(0, keyState.group()); -} - -TEST_F(XWindowsKeyStateTests, setActiveGroup_poll_groupIsNotSet) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - keyState.setActiveGroup(XWindowsKeyState::kGroupPoll); - - ASSERT_LE(-1, keyState.group()); -} - -TEST_F(XWindowsKeyStateTests, setActiveGroup_customGroup_groupWasSet) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - keyState.setActiveGroup(1); - - ASSERT_EQ(1, keyState.group()); -} - -TEST_F(XWindowsKeyStateTests, mapModifiersFromX_zeroState_zeroMask) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - int mask = keyState.mapModifiersFromX(0); - - ASSERT_EQ(0, mask); -} - -TEST_F(XWindowsKeyStateTests, mapModifiersToX_zeroMask_resultIsTrue) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - unsigned int modifiers = 0; - bool result = keyState.mapModifiersToX(0, modifiers); - - ASSERT_TRUE(result); -} - -TEST_F(XWindowsKeyStateTests, fakeCtrlAltDel_default_returnsFalse) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - bool result = keyState.fakeCtrlAltDel(); - - ASSERT_FALSE(result); -} - -TEST_F(XWindowsKeyStateTests, pollActiveModifiers_defaultState_returnsZero) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - KeyModifierMask actual = keyState.pollActiveModifiers(); - - ASSERT_EQ(0, actual); -} - -#if 0 // TODO: fix, causes sigsegv -TEST_F(XWindowsKeyStateTests, pollActiveModifiers_shiftKeyDownThenUp_masksAreCorrect) -{ - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState( - m_display, true, &eventQueue, keyMap); - - // set mock modifier mapping - std::fill(keyState.modifierFromX().begin(), keyState.modifierFromX().end(), 0); - keyState.modifierFromX()[ShiftMapIndex] = KeyModifierShift; - - KeyCode key = XKeysymToKeycode(m_display, XK_Shift_L); - - // fake shift key down (without using deskflow) - XTestFakeKeyEvent(m_display, key, true, CurrentTime); - - // function under test (1st call) - KeyModifierMask modDown = keyState.pollActiveModifiers(); - - // fake shift key up (without using deskflow) - XTestFakeKeyEvent(m_display, key, false, CurrentTime); - - // function under test (2nd call) - KeyModifierMask modUp = keyState.pollActiveModifiers(); - - EXPECT_TRUE((modDown & KeyModifierShift) == KeyModifierShift) - << "shift key not in mask - key was not pressed"; - - EXPECT_TRUE((modUp & KeyModifierShift) == 0) - << "shift key still in mask - make sure no keys are being held down"; -} -#endif - -TEST_F(XWindowsKeyStateTests, pollActiveGroup_defaultState_returnsZero) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - int32_t actual = keyState.pollActiveGroup(); - - ASSERT_EQ(0, actual); -} - -TEST_F(XWindowsKeyStateTests, pollActiveGroup_positiveGroup_returnsGroup) { - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - keyState.group(3); - - int32_t actual = keyState.pollActiveGroup(); - - ASSERT_EQ(3, actual); -} - -TEST_F(XWindowsKeyStateTests, pollActiveGroup_xkb_areEqual) { -#if HAVE_XKB_EXTENSION - MockKeyMap keyMap; - MockEventQueue eventQueue; - XWindowsKeyState keyState(m_display, true, &eventQueue, keyMap); - - // reset the group - keyState.group(-1); - - XkbStateRec state; - - // compare pollActiveGroup() with XkbGetState() - if (XkbGetState(m_display, XkbUseCoreKbd, &state) == Success) { - int32_t actual = keyState.pollActiveGroup(); - - ASSERT_EQ(state.group, actual); - } else { - FAIL() << "XkbGetState() returned error " << errno; - } -#else - SUCCEED() << "Xkb extension not installed"; -#endif -} -#endif diff --git a/src/test/unittests/platform/XWindowsScreenSaverTests.cpp b/src/test/unittests/platform/XWindowsScreenSaverTests.cpp deleted file mode 100644 index 2ed3b1738..000000000 --- a/src/test/unittests/platform/XWindowsScreenSaverTests.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2011 Nick Bolton - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -// TODO: fix tests -#if 0 - -#include "platform/XWindowsScreenSaver.h" -#include "test/mock/deskflow/MockEventQueue.h" - -#include -#include - -using ::testing::_; - -// TODO: not working on build machine for some reason -TEST(CXWindowsScreenSaverTests, activate_defaultScreen_todo) -{ - Display* display = XOpenDisplay(":0.0"); - Window window = DefaultRootWindow(display); - MockEventQueue eventQueue; - EXPECT_CALL(eventQueue, removeHandler(_, _)).Times(1); - CXWindowsScreenSaver screenSaver( - display, window, nullptr, &eventQueue); - - screenSaver.activate(); - - bool isActive = screenSaver.isActive(); - - screenSaver.deactivate(); - - ASSERT_EQ(true, isActive); -} -#endif diff --git a/src/test/unittests/platform/XWindowsScreenTests.cpp b/src/test/unittests/platform/XWindowsScreenTests.cpp deleted file mode 100644 index 8d02e8e63..000000000 --- a/src/test/unittests/platform/XWindowsScreenTests.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2011 Nick Bolton - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "test/mock/deskflow/MockEventQueue.h" - -#include - -#include "platform/XWindowsScreen.h" - -using ::testing::_; - -// TODO: fix failing tests -#if 0 -TEST(CXWindowsScreenTests, fakeMouseMove_nonPrimary_getCursorPosValuesCorrect) { - MockEventQueue eventQueue; - EXPECT_CALL(eventQueue, adoptHandler(_, _, _)).Times(2); - EXPECT_CALL(eventQueue, adoptBuffer(_)).Times(2); - EXPECT_CALL(eventQueue, removeHandler(_, _)).Times(2); - XWindowsScreen screen( - ":0.0", false, false, 0, &eventQueue); - - screen.fakeMouseMove(10, 20); - - int x, y; - screen.getCursorPos(x, y); - ASSERT_EQ(10, x); - ASSERT_EQ(20, y); -} -#endif