[Libreoffice-commits] online.git: loolwsd/test
Tor Lillqvist
tml at collabora.com
Wed Apr 13 10:18:53 UTC 2016
loolwsd/test/httpwstest.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
New commits:
commit b4ae5192bb0503f0a823bce50223dea4a1d56f52
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Apr 13 13:13:01 2016 +0300
bccu#1678: Add cppunit test that no extra loolkit processes are left over
The number of loolkit processes after running the cppunit tests should
be the same as before running them. (At least, that is the intention
at the moment, I think. If/when this changes, the test will have to be
adapted, of course.)
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index 3da76dd..319d4f6 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -9,6 +9,8 @@
#include "config.h"
+#include <Poco/DirectoryIterator.h>
+#include <Poco/FileStream.h>
#include <Poco/Net/AcceptCertificateHandler.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPClientSession.h>
@@ -21,7 +23,9 @@
#include <Poco/Net/Socket.h>
#include <Poco/Net/SSLManager.h>
#include <Poco/Path.h>
+#include <Poco/StreamCopier.h>
#include <Poco/StringTokenizer.h>
+#include <Poco/Thread.h>
#include <Poco/URI.h>
#include <cppunit/extensions/HelperMacros.h>
#include <Poco/JSON/JSON.h>
@@ -37,8 +41,10 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
{
const Poco::URI _uri;
Poco::Net::HTTPResponse _response;
+ static int _initialLoolKitCount;
CPPUNIT_TEST_SUITE(HTTPWSTest);
+ CPPUNIT_TEST(testCountHowManyLoolkits);
CPPUNIT_TEST(testBadRequest);
CPPUNIT_TEST(testLoad);
CPPUNIT_TEST(testBadLoad);
@@ -53,8 +59,10 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testPasswordProtectedDocumentWithCorrectPassword);
CPPUNIT_TEST(testPasswordProtectedDocumentWithCorrectPasswordAgain);
CPPUNIT_TEST(testImpressPartCountChanged);
+ CPPUNIT_TEST(testNoExtraLoolKitsLeft);
CPPUNIT_TEST_SUITE_END();
+ void testCountHowManyLoolkits();
void testBadRequest();
void testLoad();
void testBadLoad();
@@ -69,6 +77,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
void testPasswordProtectedDocumentWithCorrectPassword();
void testPasswordProtectedDocumentWithCorrectPasswordAgain();
void testImpressPartCountChanged();
+ void testNoExtraLoolKitsLeft();
static
void sendTextFrame(Poco::Net::WebSocket& socket, const std::string& string);
@@ -81,6 +90,9 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
const std::string& prefix,
std::string& response,
const bool isLine);
+ static
+ int countLoolKitProcesses();
+
public:
HTTPWSTest()
#ifdef ENABLE_SSL
@@ -115,6 +127,14 @@ public:
}
};
+int HTTPWSTest::_initialLoolKitCount = 0;
+
+void HTTPWSTest::testCountHowManyLoolkits()
+{
+ _initialLoolKitCount = countLoolKitProcesses();
+ CPPUNIT_ASSERT(_initialLoolKitCount > 0);
+}
+
void HTTPWSTest::testBadRequest()
{
try
@@ -791,6 +811,16 @@ void HTTPWSTest::testImpressPartCountChanged()
}
}
+void HTTPWSTest::testNoExtraLoolKitsLeft()
+{
+ // Give polls in the lool processes time to time out
+ Poco::Thread::sleep(POLL_TIMEOUT_MS*2);
+
+ int countNow = countLoolKitProcesses();
+
+ CPPUNIT_ASSERT_EQUAL(countNow, _initialLoolKitCount);
+}
+
void HTTPWSTest::sendTextFrame(Poco::Net::WebSocket& socket, const std::string& string)
{
socket.sendFrame(string.data(), string.size());
@@ -895,6 +925,41 @@ void HTTPWSTest::getResponseMessage(Poco::Net::WebSocket& ws, const std::string&
}
}
+int HTTPWSTest::countLoolKitProcesses()
+{
+ int result = 0;
+
+ for (auto i = Poco::DirectoryIterator(std::string("/proc")); i != Poco::DirectoryIterator(); ++i)
+ {
+ Poco::Path procEntry = i.path();
+ const std::string& fileName = procEntry.getFileName();
+ int pid;
+ std::size_t endPos = 0;
+ try
+ {
+ pid = std::stoi(fileName, &endPos);
+ }
+ catch (const std::invalid_argument&)
+ {
+ pid = 0;
+ }
+ if (pid > 1 && endPos == fileName.length())
+ {
+ Poco::FileInputStream comm(procEntry.toString() + "/comm");
+ std::string command;
+ Poco::StreamCopier::copyToString(comm, command);
+ if (command.length() > 0 && command.back() == '\n')
+ command.pop_back();
+ // std::cout << "For process " << pid << " comm is '" << command << "'" << std::endl;
+ if (command == "loolkit")
+ result++;
+ }
+ }
+
+ // std::cout << "Number of loolkit processes: " << result << std::endl;
+ return result;
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(HTTPWSTest);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list