* Test: allocLockCursorToScreenInfo_withState_setsState * Merge remote-tracking branch 'origin/master' into S1-1717-sonarcloud-issues * Remove header wrappers for gmock/gtest * Convenience wrapper script for tests * Use `std::copy` instead of `strcpy` * Use `std::ranges::copy` instead of `stdcpy` * Delete dead code * Add guitests VS Code config and test wrapper * Revert "Delete dead code" This reverts commit aa40f5cd35a22b4b69acfd1876aceea053088060. * Build guitests with CMake * Run all tests * Don't use --gtest_filter for Qt tests * Undo skip for GUI tests * Coverage for `IpcClient::sendCommand` * Remove provider and proxy * Use lamda for StreamProvider to reduce boilerplate * Restore version checker tests * Remove activation souces * Tasks for current/all tests * Change command for tasks * Mock QNetworkAccessManager * Create core app to satisfy Qt assertations * Use `std::copy` instead of `std::ranges::copy` * Remove integtests * Merge guitests into unittests * Use std::string::length * Remove include (resolves to root) * Fix memory leaks * Disable sigsegv tests * Fixed formatting * Remove guitests from CI * New MainWindowTests * Passing test for MainWindowTests * Use alternative to strlen in MainWindow::checkSecureSocket * Passing test for Log::print * Fixed dtor call order * Fixed var name typo * Use proxy instead of `#define protected public` * Add args test for log * Add license ctor * Fixed log test for release * Add error log test * Init qt with -platform offscreen * Back-out initQt function * Use QT_QPA_PLATFORM * Try QT_QPA_PLATFORM=offscreen * Use more readable env node * Set QT_QPA_PLATFORM in CI and CodeQL * Remove env not needed * Modernize Log::print * Calculate the length of the format string fmt during the initial scan loop * More direct and efficient alterative to `strlen` * Fixed major maint issues in AppConfig * New clang and cmake rules * Set `max_pargs_hwrap` to 4 * Undo clang format for now * Fix missing `Setting::` * Fixed missing `m_S` on Windows * Re-add accidental dep resolution (fix later) * Fixed missing buffer position increment * Turn on errors * Fixed tests and improve error message * Fixed segfault on log refactor * Extract log time to function * Copyright date * Update ChangeLog
174 lines
5.9 KiB
C++
174 lines
5.9 KiB
C++
/*
|
|
* synergy -- mouse and keyboard sharing utility
|
|
* Copyright (C) 2015-2016 Symless Ltd.
|
|
*
|
|
* This package is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* found in the file LICENSE that should have accompanied this file.
|
|
*
|
|
* This package is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#define TEST_ENV
|
|
|
|
#include "test/mock/ipc/MockIpcServer.h"
|
|
|
|
#include "base/String.h"
|
|
#include "common/common.h"
|
|
#include "ipc/IpcLogOutputter.h"
|
|
#include "mt/Thread.h"
|
|
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
// HACK: ipc logging only used on windows anyway
|
|
#if WINAPI_MSWINDOWS
|
|
|
|
using ::testing::_;
|
|
using ::testing::AtLeast;
|
|
using ::testing::Matcher;
|
|
using ::testing::MatcherCast;
|
|
using ::testing::Property;
|
|
using ::testing::Return;
|
|
using ::testing::StrEq;
|
|
|
|
using namespace synergy;
|
|
|
|
// TODO Fix the IPC Tests for windows, see #6709
|
|
// Tests disabled due to gtest/gmock update causing build problems
|
|
// Decision to disable tests and create issue instead due to time constraints
|
|
// inline const Matcher<const IpcMessage&> IpcLogLineMessageEq(const String& s)
|
|
// {
|
|
// const Matcher<const IpcLogLineMessage&> m(
|
|
// Property(&IpcLogLineMessage::logLine, StrEq(s)));
|
|
// return MatcherCast<const IpcMessage&>(m);
|
|
// }
|
|
//
|
|
// TEST(IpcLogOutputterTests, write_threadingEnabled_bufferIsSent)
|
|
//{
|
|
// MockIpcServer mockServer;
|
|
// mockServer.delegateToFake();
|
|
//
|
|
// ON_CALL(mockServer, hasClients(_)).WillByDefault(Return(true));
|
|
//
|
|
// EXPECT_CALL(mockServer, hasClients(_)).Times(AtLeast(3));
|
|
// EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock 1\n"),
|
|
// _)).Times(1); EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock
|
|
// 2\n"), _)).Times(1);
|
|
//
|
|
// IpcLogOutputter outputter(mockServer, kIpcClientUnknown, true);
|
|
// outputter.write(kNOTE, "mock 1");
|
|
// mockServer.waitForSend();
|
|
// outputter.write(kNOTE, "mock 2");
|
|
// mockServer.waitForSend();
|
|
// }
|
|
//
|
|
// TEST(IpcLogOutputterTests, write_overBufferMaxSize_firstLineTruncated)
|
|
//{
|
|
// MockIpcServer mockServer;
|
|
//
|
|
// ON_CALL(mockServer, hasClients(_)).WillByDefault(Return(true));
|
|
// EXPECT_CALL(mockServer, hasClients(_)).Times(1);
|
|
// EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock 2\nmock 3\n"),
|
|
// _)).Times(1);
|
|
//
|
|
// IpcLogOutputter outputter(mockServer, kIpcClientUnknown, false);
|
|
// outputter.bufferMaxSize(2);
|
|
//
|
|
// // log more lines than the buffer can contain
|
|
// outputter.write(kNOTE, "mock 1");
|
|
// outputter.write(kNOTE, "mock 2");
|
|
// outputter.write(kNOTE, "mock 3");
|
|
// outputter.sendBuffer();
|
|
// }
|
|
//
|
|
// TEST(IpcLogOutputterTests, write_underBufferMaxSize_allLinesAreSent)
|
|
//{
|
|
// MockIpcServer mockServer;
|
|
//
|
|
// ON_CALL(mockServer, hasClients(_)).WillByDefault(Return(true));
|
|
//
|
|
// EXPECT_CALL(mockServer, hasClients(_)).Times(1);
|
|
// EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock 1\nmock 2\n"),
|
|
// _)).Times(1);
|
|
//
|
|
// IpcLogOutputter outputter(mockServer, kIpcClientUnknown, false);
|
|
// outputter.bufferMaxSize(2);
|
|
//
|
|
// // log more lines than the buffer can contain
|
|
// outputter.write(kNOTE, "mock 1");
|
|
// outputter.write(kNOTE, "mock 2");
|
|
// outputter.sendBuffer();
|
|
// }
|
|
//
|
|
//// HACK: temporarily disable this intermittently failing unit test.
|
|
//// when the build machine is under heavy load, a race condition
|
|
//// usually happens.
|
|
// #if 0
|
|
// TEST(IpcLogOutputterTests, write_overBufferRateLimit_lastLineTruncated)
|
|
//{
|
|
// MockIpcServer mockServer;
|
|
//
|
|
// ON_CALL(mockServer, hasClients(_)).WillByDefault(Return(true));
|
|
//
|
|
// EXPECT_CALL(mockServer, hasClients(_)).Times(2);
|
|
// EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock 1\nmock 2\n"),
|
|
// _)).Times(1); EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock
|
|
// 4\nmock 5\n"), _)).Times(1);
|
|
//
|
|
// IpcLogOutputter outputter(mockServer, false);
|
|
// outputter.bufferRateLimit(2, 1); // 1s
|
|
//
|
|
// // log 1 more line than the buffer can accept in time limit.
|
|
// outputter.write(kNOTE, "mock 1");
|
|
// outputter.write(kNOTE, "mock 2");
|
|
// outputter.write(kNOTE, "mock 3");
|
|
//
|
|
// outputter.sendBuffer();
|
|
//
|
|
// // after waiting the time limit send another to make sure
|
|
// // we can log after the time limit passes.
|
|
// // HACK: sleep causes the unit test to fail intermittently,
|
|
// // so lets try 100ms (there must be a better way to solve this)
|
|
// ARCH->sleep(2); // 2s
|
|
// outputter.write(kNOTE, "mock 4");
|
|
// outputter.write(kNOTE, "mock 5");
|
|
// outputter.write(kNOTE, "mock 6");
|
|
//
|
|
// outputter.sendBuffer();
|
|
// }
|
|
// #endif
|
|
//
|
|
// TEST(IpcLogOutputterTests, write_underBufferRateLimit_allLinesAreSent)
|
|
//{
|
|
// MockIpcServer mockServer;
|
|
//
|
|
// ON_CALL(mockServer, hasClients(_)).WillByDefault(Return(true));
|
|
//
|
|
// EXPECT_CALL(mockServer, hasClients(_)).Times(2);
|
|
// EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock 1\nmock 2\n"),
|
|
// _)).Times(1); EXPECT_CALL(mockServer, send(IpcLogLineMessageEq("mock
|
|
// 3\nmock 4\n"), _)).Times(1);
|
|
//
|
|
// IpcLogOutputter outputter(mockServer, kIpcClientUnknown, false);
|
|
// outputter.bufferRateLimit(4, 1); // 1s (should be plenty of time)
|
|
//
|
|
// // log 1 more line than the buffer can accept in time limit.
|
|
// outputter.write(kNOTE, "mock 1");
|
|
// outputter.write(kNOTE, "mock 2");
|
|
// outputter.sendBuffer();
|
|
//
|
|
// // after waiting the time limit send another to make sure
|
|
// // we can log after the time limit passes.
|
|
// outputter.write(kNOTE, "mock 3");
|
|
// outputter.write(kNOTE, "mock 4");
|
|
// outputter.sendBuffer();
|
|
// }
|
|
|
|
#endif // WINAPI_MSWINDOWS
|