summaryrefslogtreecommitdiffstats
path: root/src/test/mock/ipc/MockIpcServer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/mock/ipc/MockIpcServer.h')
-rw-r--r--src/test/mock/ipc/MockIpcServer.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/test/mock/ipc/MockIpcServer.h b/src/test/mock/ipc/MockIpcServer.h
new file mode 100644
index 0000000..4124b41
--- /dev/null
+++ b/src/test/mock/ipc/MockIpcServer.h
@@ -0,0 +1,68 @@
+/*
+ * barrier -- 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/>.
+ */
+
+#pragma once
+
+#include "ipc/IpcServer.h"
+#include "ipc/IpcMessage.h"
+#include "arch/Arch.h"
+
+#include "test/global/gmock.h"
+
+using ::testing::_;
+using ::testing::Invoke;
+
+class IEventQueue;
+
+class MockIpcServer : public IpcServer
+{
+public:
+ MockIpcServer() :
+ m_sendCond(ARCH->newCondVar()),
+ m_sendMutex(ARCH->newMutex()) { }
+
+ ~MockIpcServer() {
+ if (m_sendCond != NULL) {
+ ARCH->closeCondVar(m_sendCond);
+ }
+
+ if (m_sendMutex != NULL) {
+ ARCH->closeMutex(m_sendMutex);
+ }
+ }
+
+ MOCK_METHOD0(listen, void());
+ MOCK_METHOD2(send, void(const IpcMessage&, EIpcClientType));
+ MOCK_CONST_METHOD1(hasClients, bool(EIpcClientType));
+
+ void delegateToFake() {
+ ON_CALL(*this, send(_, _)).WillByDefault(Invoke(this, &MockIpcServer::mockSend));
+ }
+
+ void waitForSend() {
+ ARCH->waitCondVar(m_sendCond, m_sendMutex, 5);
+ }
+
+private:
+ void mockSend(const IpcMessage&, EIpcClientType) {
+ ArchMutexLock lock(m_sendMutex);
+ ARCH->broadcastCondVar(m_sendCond);
+ }
+
+ ArchCond m_sendCond;
+ ArchMutex m_sendMutex;
+};