aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/integtests/Main.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2018-04-25 18:07:30 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2018-04-25 18:07:30 -0400
commit9b1b081cfdb1c0fb6457278775e0823f8bc10f62 (patch)
treece8840148d8445055ba9e4f12263b2208f234c16 /src/test/integtests/Main.cpp
Import Upstream version 2.0.0+dfsgupstream/2.0.0+dfsg
Diffstat (limited to 'src/test/integtests/Main.cpp')
-rw-r--r--src/test/integtests/Main.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/test/integtests/Main.cpp b/src/test/integtests/Main.cpp
new file mode 100644
index 0000000..76b42b6
--- /dev/null
+++ b/src/test/integtests/Main.cpp
@@ -0,0 +1,108 @@
+/*
+ * barrier -- mouse and keyboard sharing utility
+ * Copyright (C) 2012-2016 Symless Ltd.
+ * Copyright (C) 2011 Nick Bolton
+ *
+ * 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/>.
+ */
+
+#include "arch/Arch.h"
+#include "base/Log.h"
+
+#if SYSAPI_WIN32
+#include "arch/win32/ArchMiscWindows.h"
+#endif
+
+#include "test/global/gtest.h"
+#include <iostream>
+#include <fstream>
+
+#define LOCK_TIMEOUT 30
+
+using namespace std;
+
+void lock(string lockFile);
+void unlock(string lockFile);
+
+int
+main(int argc, char **argv)
+{
+#if SYSAPI_WIN32
+ // record window instance for tray icon, etc
+ ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));
+#endif
+
+ Arch arch;
+ arch.init();
+
+ Log log;
+ log.setFilter(kDEBUG2);
+
+ string lockFile;
+ for (int i = 0; i < argc; i++) {
+ if (string(argv[i]).compare("--lock-file") == 0) {
+ lockFile = argv[i + 1];
+ }
+ }
+
+ if (!lockFile.empty()) {
+ lock(lockFile);
+ }
+
+
+ testing::InitGoogleTest(&argc, argv);
+
+ int result = RUN_ALL_TESTS();
+
+ if (!lockFile.empty()) {
+ unlock(lockFile);
+ }
+
+ // gtest seems to randomly finish with error codes (e.g. -1, -1073741819)
+ // even when no tests have failed. not sure what causes this, but it
+ // happens on all platforms and keeps leading to false positives.
+ // according to the documentation, 1 is a failure, so we should be
+ // able to trust that code.
+ return (result == 1) ? 1 : 0;
+}
+
+void
+lock(string lockFile)
+{
+ double start = ARCH->time();
+
+ // keep checking until timeout is reached.
+ while ((ARCH->time() - start) < LOCK_TIMEOUT) {
+
+ ifstream is(lockFile.c_str());
+ bool noLock = !is;
+ is.close();
+
+ if (noLock) {
+ break;
+ }
+
+ // check every second if file has gone.
+ ARCH->sleep(1);
+ }
+
+ // write empty lock file.
+ ofstream os(lockFile.c_str());
+ os.close();
+}
+
+void
+unlock(string lockFile)
+{
+ remove(lockFile.c_str());
+}