loolwsd/test/countloolkits.hpp | 76 ++++++++++++++++++++++++++++++- loolwsd/test/httpwstest.cpp | 64 ++------------------------ loolwsd/test/integration-http-server.cpp | 4 - 3 files changed, 82 insertions(+), 62 deletions(-)
New commits: commit 40d694d9ef089988296e01ed4c011642d445491b Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Thu Apr 28 22:01:05 2016 -0400 loolwsd: moved loolkit process counting to own file and minimized wait Change-Id: Ib7950fe7d97ca3484aadb1d7a7492ad1a88e375a Reviewed-on: https://gerrit.libreoffice.org/24478 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/test/countloolkits.hpp b/loolwsd/test/countloolkits.hpp index 1fb1ba5..2490f22 100644 --- a/loolwsd/test/countloolkits.hpp +++ b/loolwsd/test/countloolkits.hpp @@ -10,7 +10,81 @@ #ifndef INCLUDED_COUNTLOOLKITPROCESSES_HPP #define INCLUDED_COUNTLOOLKITPROCESSES_HPP -extern int countLoolKitProcesses(); +#include <Poco/DirectoryIterator.h> +#include <Poco/StringTokenizer.h> + +/// Counts the number of LoolKit process instances without wiating. +static +int getLoolKitProcessCount() +{ + int result = 0; + for (auto i = Poco::DirectoryIterator(std::string("/proc")); i != Poco::DirectoryIterator(); ++i) + { + try + { + 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 stat(procEntry.toString() + "/stat"); + std::string statString; + Poco::StreamCopier::copyToString(stat, statString); + Poco::StringTokenizer tokens(statString, " "); + if (tokens.count() > 3 && tokens[1] == "(loolkit)") + { + switch (tokens[2].c_str()[0]) + { + case 'x': + case 'X': // Kinds of dead-ness. + case 'Z': // zombies + break; // ignore + default: + result++; + break; + } + // std::cout << "Process:" << pid << ", '" << tokens[1] << "'" << " state: " << tokens[2] << std::endl; + } + } + } + catch (const Poco::Exception&) + { + } + } + + // std::cout << "Number of loolkit processes: " << result << std::endl; + return result; +} + +static +int countLoolKitProcesses(const int expected, const int timeoutMs = POLL_TIMEOUT_MS * 5) +{ + const size_t repeat = (timeoutMs + POLL_TIMEOUT_MS - 1) / POLL_TIMEOUT_MS; + auto count = getLoolKitProcessCount(); + for (size_t i = 0; i < repeat; ++i) + { + if (count == expected) + { + return count; + } + + // Give polls in the lool processes time to time out etc + Poco::Thread::sleep(POLL_TIMEOUT_MS); + + count = getLoolKitProcessCount(); + } + + return count; +} #endif diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp index f57d710..9994f92 100644 --- a/loolwsd/test/httpwstest.cpp +++ b/loolwsd/test/httpwstest.cpp @@ -15,7 +15,6 @@ #include <thread> #include <regex> -#include <Poco/DirectoryIterator.h> #include <Poco/Dynamic/Var.h> #include <Poco/FileStream.h> #include <Poco/JSON/JSON.h> @@ -160,6 +159,7 @@ public: void tearDown() { + testNoExtraLoolKitsLeft(); } }; @@ -167,7 +167,7 @@ int HTTPWSTest::_initialLoolKitCount = 0; void HTTPWSTest::testCountHowManyLoolkits() { - _initialLoolKitCount = countLoolKitProcesses(); + _initialLoolKitCount = getLoolKitProcessCount(); CPPUNIT_ASSERT(_initialLoolKitCount > 0); } @@ -520,7 +520,7 @@ void HTTPWSTest::testReloadWhileDisconnecting() sendTextFrame(socket, "uno .uno:Delete"); sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\naaa bbb ccc"); - kitcount = countLoolKitProcesses(); + kitcount = getLoolKitProcessCount(); // Shutdown abruptly. socket.shutdown(); @@ -542,7 +542,7 @@ void HTTPWSTest::testReloadWhileDisconnecting() CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(socket)); // Should have no new instances. - CPPUNIT_ASSERT_EQUAL(kitcount, countLoolKitProcesses()); + CPPUNIT_ASSERT_EQUAL(kitcount, getLoolKitProcessCount()); // Check if the document contains the pasted text. sendTextFrame(socket, "uno .uno:SelectAll"); @@ -1225,7 +1225,7 @@ void HTTPWSTest::testEditLock() void HTTPWSTest::testNoExtraLoolKitsLeft() { - int countNow = countLoolKitProcesses(); + const auto countNow = countLoolKitProcesses(_initialLoolKitCount); CPPUNIT_ASSERT_EQUAL(_initialLoolKitCount, countNow); } @@ -1411,60 +1411,6 @@ void HTTPWSTest::getTileMessage(Poco::Net::WebSocket& ws, std::string& tile) while (retries > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE); } -int countLoolKitProcesses() -{ - // Give polls in the lool processes time to time out etc - Poco::Thread::sleep(POLL_TIMEOUT_MS*5); - - int result = 0; - - for (auto i = Poco::DirectoryIterator(std::string("/proc")); i != Poco::DirectoryIterator(); ++i) - { - try - { - 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 stat(procEntry.toString() + "/stat"); - std::string statString; - Poco::StreamCopier::copyToString(stat, statString); - Poco::StringTokenizer tokens(statString, " "); - if (tokens.count() > 3 && tokens[1] == "(loolkit)") - { - switch (tokens[2].c_str()[0]) - { - case 'x': - case 'X': // Kinds of dead-ness. - case 'Z': // zombies - break; // ignore - default: - result++; - break; - } - // std::cout << "Process:" << pid << ", '" << tokens[1] << "'" << " state: " << tokens[2] << std::endl; - } - } - } - catch (const Poco::Exception&) - { - } - } - - // std::cout << "Number of loolkit processes: " << result << std::endl; - return result; -} - void HTTPWSTest::getPartHashCodes(const std::string response, std::vector<std::string>& parts) { diff --git a/loolwsd/test/integration-http-server.cpp b/loolwsd/test/integration-http-server.cpp index f4e7557..f527511 100644 --- a/loolwsd/test/integration-http-server.cpp +++ b/loolwsd/test/integration-http-server.cpp @@ -82,7 +82,7 @@ int HTTPServerTest::_initialLoolKitCount = 0; void HTTPServerTest::testCountHowManyLoolkits() { - _initialLoolKitCount = countLoolKitProcesses(); + _initialLoolKitCount = getLoolKitProcessCount(); CPPUNIT_ASSERT(_initialLoolKitCount > 0); } @@ -263,7 +263,7 @@ void HTTPServerTest::testScriptsAndLinksPost() void HTTPServerTest::testNoExtraLoolKitsLeft() { - int countNow = countLoolKitProcesses(); + const auto countNow = countLoolKitProcesses(_initialLoolKitCount); CPPUNIT_ASSERT_EQUAL(_initialLoolKitCount, countNow); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits