[Libreoffice-commits] online.git: loolwsd/test

Ashod Nakashian ashod.nakashian at collabora.co.uk
Mon Nov 14 05:18:32 UTC 2016


 loolwsd/test/httpcrashtest.cpp |   45 ++++++++++++++++++++++++++++++++++-------
 1 file changed, 38 insertions(+), 7 deletions(-)

New commits:
commit d2d3bb19e0885d2c26176b236fc4fa9d77c34e16
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Fri Nov 11 22:38:14 2016 -0500

    loolwsd: new unittest to test forkit crash recovery
    
    Change-Id: I61c79cce83af1fface2f54294d418c67eb6d398e
    Reviewed-on: https://gerrit.libreoffice.org/30814
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/test/httpcrashtest.cpp b/loolwsd/test/httpcrashtest.cpp
index 3bd4bcd..fea8734 100644
--- a/loolwsd/test/httpcrashtest.cpp
+++ b/loolwsd/test/httpcrashtest.cpp
@@ -58,16 +58,18 @@ class HTTPCrashTest : public CPPUNIT_NS::TestFixture
 
     CPPUNIT_TEST(testBarren);
     CPPUNIT_TEST(testCrashKit);
+    CPPUNIT_TEST(testCrashForkit);
 
     CPPUNIT_TEST_SUITE_END();
 
     void testCountHowManyLoolkits();
     void testBarren();
     void testCrashKit();
+    void testCrashForkit();
     void testNoExtraLoolKitsLeft();
 
     static
-    void killLoKitProcesses();
+    void killLoKitProcesses(const char* exec_filename);
 
 public:
     HTTPCrashTest()
@@ -122,7 +124,7 @@ void HTTPCrashTest::testBarren()
     const auto testname = "barren ";
     try
     {
-        killLoKitProcesses();
+        killLoKitProcesses("(loolkit)");
 
         std::cerr << "Loading after kill." << std::endl;
 
@@ -131,7 +133,6 @@ void HTTPCrashTest::testBarren()
 
         sendTextFrame(socket, "status", testname);
         assertResponseString(socket, "status:", testname);
-
     }
     catch (const Poco::Exception& exc)
     {
@@ -146,7 +147,7 @@ void HTTPCrashTest::testCrashKit()
     {
         auto socket = loadDocAndGetSocket("empty.odt", _uri, testname);
 
-        killLoKitProcesses();
+        killLoKitProcesses("(loolkit)");
 
         // We expect the client connection to close.
         // In the future we might restore the kit, but currently we don't.
@@ -183,7 +184,36 @@ void HTTPCrashTest::testCrashKit()
     }
 }
 
-void HTTPCrashTest::killLoKitProcesses()
+void HTTPCrashTest::testCrashForkit()
+{
+    const auto testname = "crashForkit ";
+    try
+    {
+        auto socket = loadDocAndGetSocket("empty.odt", _uri, testname);
+
+        std::cerr << "Killing forkit." << std::endl;
+        killLoKitProcesses("(loolforkit)");
+        std::cerr << "Communicating after kill." << std::endl;
+
+        sendTextFrame(socket, "status", testname);
+        assertResponseString(socket, "status:", testname);
+
+        // respond close frame
+        socket->shutdown();
+
+
+        std::cerr << "Killing forkit." << std::endl;
+        killLoKitProcesses("(loolkit)");
+        std::cerr << "Communicating after kill." << std::endl;
+        loadDocAndGetSocket("empty.odt", _uri, testname);
+    }
+    catch (const Poco::Exception& exc)
+    {
+        CPPUNIT_FAIL(exc.displayText());
+    }
+}
+
+void HTTPCrashTest::killLoKitProcesses(const char* exec_filename)
 {
     // Crash all lokit processes.
     for (auto it = Poco::DirectoryIterator(std::string("/proc")); it != Poco::DirectoryIterator(); ++it)
@@ -202,18 +232,19 @@ void HTTPCrashTest::killLoKitProcesses()
             {
                 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)")
+                if (tokens.count() > 3 && tokens[1] == exec_filename)
                 {
                     std::cerr << "Killing " << pid << std::endl;
                     if (kill(pid, SIGKILL) == -1)
                     {
-                        std::cerr << "kill(" << pid << ",SIGKILL) failed: " << std::strerror(errno) << std::endl;
+                        std::cerr << "kill(" << pid << ", SIGKILL) failed: " << std::strerror(errno) << std::endl;
                     }
                 }
             }


More information about the Libreoffice-commits mailing list