aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CommonLibs/Makefile.am5
-rw-r--r--CommonLibs/ThreadsTest.cpp94
2 files changed, 99 insertions, 0 deletions
diff --git a/CommonLibs/Makefile.am b/CommonLibs/Makefile.am
index 271a8ef..b338385 100644
--- a/CommonLibs/Makefile.am
+++ b/CommonLibs/Makefile.am
@@ -44,6 +44,7 @@ libcommon_la_SOURCES = \
Utils.cpp
noinst_PROGRAMS = \
+ ThreadsTest \
BitVectorTest \
InterthreadTest \
SocketsTest \
@@ -80,6 +81,10 @@ URLEncodeTest_LDADD = libcommon.la
BitVectorTest_SOURCES = BitVectorTest.cpp
BitVectorTest_LDADD = libcommon.la $(SQLITE_LA)
+ThreadsTest_SOURCES = ThreadsTest.cpp
+ThreadsTest_LDADD = libcommon.la $(SQLITE_LA)
+ThreadsTest_LDFLAGS = -lpthread
+
InterthreadTest_SOURCES = InterthreadTest.cpp
InterthreadTest_LDADD = libcommon.la $(SQLITE_LA)
InterthreadTest_LDFLAGS = -lpthread
diff --git a/CommonLibs/ThreadsTest.cpp b/CommonLibs/ThreadsTest.cpp
new file mode 100644
index 0000000..1cb12c8
--- /dev/null
+++ b/CommonLibs/ThreadsTest.cpp
@@ -0,0 +1,94 @@
+/*
+* Copyright 2013 Alexander Chemeris <Alexander.Chemeris@fairwaves.ru>
+*
+*
+* This software is distributed under the terms of the GNU Affero Public License.
+* See the COPYING file in the main directory for details.
+*
+* This use of this software may be subject to additional restrictions.
+* See the LEGAL file in the main directory for details.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+
+#include "Threads.h"
+#include "Timeval.h"
+#include "Configuration.h"
+#include <iostream>
+
+ConfigurationTable gConfig;
+
+class SimpleThreadTest : public Thread
+{
+public:
+ SimpleThreadTest() : Thread("SimpleThreadTest") {}
+
+ void runThread()
+ {
+ COUT(getThreadName() << ": Started thread");
+ while (isThreadRunning()) {
+ COUT(getThreadName() << ": Sleeping...");
+ msleep(50);
+ }
+ COUT(getThreadName() << ": Stopped thread");
+ }
+
+};
+
+
+void testSimpleStartStop()
+{
+ SimpleThreadTest simpleThreadTest;
+ COUT("Main: Starting thread " << simpleThreadTest.getThreadName());
+ simpleThreadTest.startThread();
+ COUT("Main: Started thread " << simpleThreadTest.getThreadName());
+ msleep(30);
+ COUT("Main: Stopping thread " << simpleThreadTest.getThreadName());
+ simpleThreadTest.stopThread();
+ COUT("Main: Stopped thread " << simpleThreadTest.getThreadName());
+}
+
+void testDoubleRequestStop()
+{
+ SimpleThreadTest simpleThreadTest;
+ COUT("Main: Starting thread " << simpleThreadTest.getThreadName());
+ simpleThreadTest.startThread();
+ COUT("Main: Started thread " << simpleThreadTest.getThreadName());
+ msleep(30);
+ COUT("Main: Requesting stop for thread " << simpleThreadTest.getThreadName());
+ simpleThreadTest.requestThreadStop();
+ msleep(30);
+ COUT("Main: Requesting stop for thread " << simpleThreadTest.getThreadName());
+ simpleThreadTest.requestThreadStop();
+ msleep(30);
+ COUT("Main: Stopping thread " << simpleThreadTest.getThreadName());
+ simpleThreadTest.stopThread();
+ COUT("Main: Stopped thread " << simpleThreadTest.getThreadName());
+}
+
+
+int main(int argc, char *argv[])
+{
+ std::cout<< std::endl << "Simple start/stop test" << std::endl << std::endl ;
+ testSimpleStartStop();
+
+ std::cout << std::endl << "Double requestThreadStop() test" << std::endl << std::endl ;
+ testDoubleRequestStop();
+}
+
+
+// vim: ts=4 sw=4