[Libreoffice-commits] online.git: 2 commits - loolwsd/configure.ac loolwsd/Log.cpp loolwsd/Log.hpp loolwsd/test loolwsd/Util.cpp

Michael Meeks michael.meeks at collabora.com
Fri Apr 15 20:57:23 UTC 2016


 loolwsd/Log.cpp             |   56 ++++++++++++++++++++-----
 loolwsd/Log.hpp             |    5 ++
 loolwsd/Util.cpp            |   39 ++++--------------
 loolwsd/configure.ac        |    1 
 loolwsd/test/Makefile.am    |   15 ++----
 loolwsd/test/run_test.sh.in |   50 -----------------------
 loolwsd/test/run_unit.sh.in |   95 ++++++++++++++++++++++++++++++++------------
 7 files changed, 133 insertions(+), 128 deletions(-)

New commits:
commit 448e25f6d81f2c143878a3e6eb269d44049af389
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Fri Apr 15 20:46:44 2016 +0100

    Make logging signal safe again. snprintf: simpler, safer, faster.

diff --git a/loolwsd/Log.cpp b/loolwsd/Log.cpp
index 48fe800..fb85a48 100644
--- a/loolwsd/Log.cpp
+++ b/loolwsd/Log.cpp
@@ -41,7 +41,27 @@ namespace Log
     };
     static StaticNames Source;
 
-    std::string prefix()
+    // We need a signal safe means of writing messages
+    //   $ man 7 signal
+    void signalLog(const char *message)
+    {
+        while (true) {
+            int length = strlen(message);
+            int written = write (STDERR_FILENO, message, length);
+            if (written < 0)
+            {
+                if (errno == EINTR)
+                    continue; // ignore.
+                else
+                    break;
+            }
+            message += written;
+            if (message[0] == '\0')
+                break;
+        }
+    }
+
+    static void getPrefix(char *buffer)
     {
         Poco::Int64 usec = Poco::Timestamp().epochMicroseconds() - epochStart;
 
@@ -53,19 +73,31 @@ namespace Log
         const Poco::Int64 seconds = usec / (one_s);
         usec %= (one_s);
 
-        std::ostringstream stream;
-        stream << (Source.inited ? Source.id : std::string())
-               << '-' << std::setw(2) << std::setfill('0')
-               << (Poco::Thread::current() ? Poco::Thread::current()->id() : 0) << ' '
-               << std::setw(2) << hours << ':' << std::setw(2) << minutes << ':'
-               << std::setw(2) << seconds << "." << std::setw(6) << usec
-               << ' ';
+        char procName[32]; // we really need only 16
+        if (!prctl(PR_GET_NAME, reinterpret_cast<unsigned long>(procName), 0, 0, 0) == 0)
+            strcpy(procName, "<noid>");
+
+        const char *appName = (Source.inited ? Source.id.c_str() : "<shutdown>");
+        assert(strlen(appName) + 32 + 28 < 1024 - 1);
 
-        char buf[32]; // we really need only 16
-        if (prctl(PR_GET_NAME, reinterpret_cast<unsigned long>(buf), 0, 0, 0) == 0)
-            stream << '[' << std::setw(15) << std::setfill(' ') << std::left << buf << "] ";
+        snprintf(buffer, 4095, "%s-%.2d %.2d:%.2d:%.2d.%.6d [ %s ] ", appName,
+                 (Poco::Thread::current() ? Poco::Thread::current()->id() : 0),
+                 (int)hours, (int)minutes, (int)seconds, (int)usec,
+                 procName);
+    }
+
+    std::string prefix()
+    {
+        char buffer[1024];
+        getPrefix(buffer);
+        return std::string(buffer);
+    }
 
-        return stream.str();
+    void signalLogPrefix()
+    {
+        char buffer[1024];
+        getPrefix(buffer);
+        signalLog(buffer);
     }
 
     void initialize(const std::string& name)
diff --git a/loolwsd/Log.hpp b/loolwsd/Log.hpp
index b64f766..cc43baa 100644
--- a/loolwsd/Log.hpp
+++ b/loolwsd/Log.hpp
@@ -29,6 +29,11 @@ namespace Log
     void error(const std::string& msg);
     void syserror(const std::string& msg);
 
+    /// Signal safe prefix logging
+    void signalLogPrefix();
+    /// Signal safe logging
+    void signalLog(const char *message);
+
     /// The following is to write streaming logs.
     /// Log::info() << "Value: 0x" << std::hex << value
     ///             << ", pointer: " << this << Log::end;
diff --git a/loolwsd/Util.cpp b/loolwsd/Util.cpp
index 8952179..d30b31a 100644
--- a/loolwsd/Util.cpp
+++ b/loolwsd/Util.cpp
@@ -253,27 +253,6 @@ namespace Util
         }
     }
 
-    // We need a signal safe means of writing messages
-    //   $ man 7 signal
-    static
-    void log_signal(const char *message)
-    {
-        while (true) {
-            int length = strlen(message);
-            int written = write (STDERR_FILENO, message, length);
-            if (written < 0)
-            {
-                if (errno == EINTR)
-                    continue; // ignore.
-                else
-                    break;
-            }
-            message += written;
-            if (message[0] == '\0')
-                break;
-        }
-    }
-
     static
     void handleTerminationSignal(const int signal)
     {
@@ -281,10 +260,10 @@ namespace Util
         {
             TerminationFlag = true;
 
-            log_signal(Log::prefix().c_str());
-            log_signal(" Termination signal received: ");
-            log_signal(signalName(signal));
-            log_signal("\n");
+            Log::signalLogPrefix();
+            Log::signalLog(" Termination signal received: ");
+            Log::signalLog(signalName(signal));
+            Log::signalLog("\n");
         }
     }
 
@@ -307,14 +286,14 @@ namespace Util
     static
     void handleFatalSignal(const int signal)
     {
-        log_signal(Log::prefix().c_str());
-        log_signal(" Fatal signal received: ");
-        log_signal(signalName(signal));
-        log_signal("\n");
+        Log::signalLogPrefix();
+        Log::signalLog(" Fatal signal received: ");
+        Log::signalLog(signalName(signal));
+        Log::signalLog("\n");
 
         if (std::getenv("LOOL_DEBUG"))
         {
-            log_signal(FatalGdbString);
+            Log::signalLog(FatalGdbString);
             sleep(30);
         }
 
commit 65ee749ce1c90612d04d4aea44318cb53e713031
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Fri Apr 15 16:39:05 2016 +0100

    Move new unit tests to custom test driver.
    
    Cleaner, and avoids bogus warnings during compile.
    Merge run_test.sh.in into a mode of run_unit.sh - gives the
    chance for nice debug output etc.

diff --git a/loolwsd/configure.ac b/loolwsd/configure.ac
index 48b2539..0083081 100644
--- a/loolwsd/configure.ac
+++ b/loolwsd/configure.ac
@@ -249,7 +249,6 @@ AC_CONFIG_FILES([Makefile
                  loolwsd.spec
                  loolwsd.xml])
 AC_CONFIG_FILES([test/run_unit.sh],[chmod +x test/run_unit.sh])
-AC_CONFIG_FILES([test/run_test.sh],[chmod +x test/run_test.sh])
 
 AC_OUTPUT
 
diff --git a/loolwsd/test/Makefile.am b/loolwsd/test/Makefile.am
index d44e787..721ec0c 100644
--- a/loolwsd/test/Makefile.am
+++ b/loolwsd/test/Makefile.am
@@ -28,19 +28,14 @@ else
 SYSTEM_STAMP =
 endif
 
-${top_builddir}/test/run_unit.sh.log ${top_builddir}/test/run_unit.sh.trs : \
-	$(SYSTEM_STAMP) @JAILS_PATH@ \
-	${top_srcdir}/test/run_unit.sh \
-	${top_builddir}/loolwsd ${top_builddir}/loolforkit \
-	$(wildcard *.la)
-	if ${top_srcdir}/test/run_unit.sh; then \
-	   touch ${top_builddir}/test/run_unit.sh.log; \
-	fi
-
 if HAVE_LO_PATH
-TESTS = ${top_srcdir}/test/run_unit.sh ${top_srcdir}/test/run_test.sh
+TESTS = unit-timeout.la unit-fonts.la unit-storage.la unit-prefork.la run_test.sh
 else
 TESTS = ${top_builddir}/test/test
 endif
 
+TEST_EXTENSIONS = .la .sh
+LA_LOG_DRIVER = ${top_srcdir}/test/run_unit.sh
+SH_LOG_DRIVER = ${top_srcdir}/test/run_unit.sh
+
 EXTRA_DIST = data/hello.odt data/hello.txt $(test_SOURCES) run_unit.sh
diff --git a/loolwsd/test/run_test.sh.in b/loolwsd/test/run_test.sh.in
deleted file mode 100755
index f7895c7..0000000
--- a/loolwsd/test/run_test.sh.in
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-#
-# DO NOT EDIT - this file is generated from run_test.sh.in.
-#
-
-abs_top_builddir="@abs_top_builddir@"
-test_build="${abs_top_builddir}/test"
-test_output="$test_build/run_test.sh.trs"
-test_log_output="$test_build/test_output"
-
-mkdir -p $test_log_output
-
-if test "z at ENABLE_DEBUG@" != "ztrue"; then
-    echo ""
-    echo "It is necessary to configure with --enable-debug for unit tests to pass"
-    echo ""
-    echo ":test-result: FAIL $tst" > $test_output
-    exit 1;
-fi
-
-echo "Running cppunit test ...";
-
-# result logging
-echo > $test_output
-
-${abs_top_builddir}/loolwsd --systemplate="@SYSTEMPLATE_PATH@" --lotemplate="@LO_PATH@" \
-           --childroot="@JAILS_PATH@" --allowlocalstorage 2>$test_log_output/run_test.log &
-
-echo "  waiting for loolwsd to start"
-sleep 1 # sad - need to add a wait to the start of test.cpp ...
-
-echo "  executing test"
-
-cd $test_build
-if ./test; then
-	echo "Test run_test.sh passed."
-	echo ":test-result: PASS run_test.sh" >> $test_output
-	retval=0
-else
-	cat $test_log_output/run_test.log
-        echo "============================================================="
-	echo "Test failed on unit:"
-        echo "============================================================="
-	echo ":test-result: FAIL run_test.sh" >> $test_output
-	retval=1
-fi
-
-kill $!
-
-exit $retval
diff --git a/loolwsd/test/run_unit.sh.in b/loolwsd/test/run_unit.sh.in
index 5491640..7a929e7 100755
--- a/loolwsd/test/run_unit.sh.in
+++ b/loolwsd/test/run_unit.sh.in
@@ -3,16 +3,34 @@
 # DO NOT EDIT - this file is generated from run_unit.sh.in.
 #
 
-export LOOL_LOGLEVEL=trace
+# substituted variables in one place:
+abs_top_builddir="/opt/libreoffice/online/loolwsd"
+systemplate_path="@SYSTEMPLATE_PATH@"
+enable_debug="@ENABLE_DEBUG@"
+jails_path="@JAILS_PATH@"
+lo_path="@LO_PATH@"
 
-abs_top_builddir="@abs_top_builddir@"
-test_build="${abs_top_builddir}/test"
-test_output="$test_build/run_unit.sh.trs"
-test_log_output="$test_build/test_output"
+while test $# -gt 0; do
+  case $1 in
+      --test-name) tst=$2; shift;;
+      --log-file)  tst_log=$2; shift;;
+      --trs-file)  test_output=$2; shift;;
+  -*) ;; # ignore
+  esac
+  shift
+done
+
+test_mode=
+if test "z$tst" != "zrun_test.sh"; then
+    # drop .la suffix
+    tst=`echo $tst | sed s/\.la//`;
+else
+    test_mode=old
+fi
 
-mkdir -p $test_log_output
+# export LOOL_LOGLEVEL=trace
 
-if test "z at ENABLE_DEBUG@" != "ztrue"; then
+if test "z$enable_debug" != "ztrue"; then
     echo ""
     echo "It is necessary to configure with --enable-debug for unit tests to pass"
     echo ""
@@ -21,25 +39,52 @@ if test "z at ENABLE_DEBUG@" != "ztrue"; then
 fi
 
 # result logging
-echo > run_unit.sh.trs
-
-for tst in fonts timeout storage prefork; do
-    tst_log="test_output/$tst.log"
-    echo "Running test: $tst | $tst_log ...";
-    if ${abs_top_builddir}/loolwsd --systemplate="@SYSTEMPLATE_PATH@" \
-                                   --lotemplate="@LO_PATH@" \
-                                   --childroot="@JAILS_PATH@" \
-                                   --unitlib=".libs/unit-$tst.so" 2> "$tst_log"; then
-	echo "Test $tst passed."
-	echo ":test-result: PASS $tst" >> $test_output
+echo > $test_output
+
+if test "z$test_mode" == "zold"; then
+     echo "executing external tests"
+     ${abs_top_builddir}/loolwsd --systemplate="$systemplate_path" \
+                                 --lotemplate="$lo_path" \
+                                 --childroot="$jails_path" \
+                                 --allowlocalstorage  2> "$tst_log" &
+
+     echo "  waiting for loolwsd to start"
+     sleep 1 # sad - need to add a wait to the start of test.cpp ...
+     echo "  executing test"
+
+     oldpath=`pwd`
+     cd "${abs_top_builddir}/test"
+     if ./test; then
+	 echo "Test run_test.sh passed."
+	 echo ":test-result: PASS run_test.sh" >> $oldpath/$test_output
+	 retval=0
+     else
+         echo "============================================================="
+	 echo "Test failed on unit:"
+         echo "============================================================="
+	 echo ":test-result: FAIL run_test.sh" >> $oldpath/$test_output
+	 retval=1
+     fi
+
+     kill $!
+
+     exit $retval
+
+else # newer unit tests.
+    echo "Running $tst | $tst_log ...";
+    if ${abs_top_builddir}/loolwsd --systemplate="$systemplate_path" \
+                                   --lotemplate="$lo_path" \
+                                   --childroot="$jails_path" \
+                                   --unitlib=".libs/$tst.so" 2> "$tst_log"; then
+        echo "Test $tst passed."
+        echo ":test-result: PASS $tst" >> $test_output
     else
-	cat "$tst_log"
-        echo "============================================================="
-	echo "Test failed on unit: $tst re-run with:"
-	echo "   $ gdb --args ../loolwsd --systemplate=\"@SYSTEMPLATE_PATH@\" --lotemplate=\"@LO_PATH@\" \\"
-	echo "         --childroot=\"@JAILS_PATH@\" --unitlib=\".libs/unit-$tst.so\""
+        cat "$tst_log"
         echo "============================================================="
+        echo "Test failed on unit: $tst re-run with:"
+	echo "   $ gdb --args ../loolwsd --systemplate=\"$systemplate_path\" --lotemplate=\"$lo_path\" \\"
+	echo "         --childroot=\"$jails_path\" --unitlib=\".libs/$tst.so\""
+	echo "============================================================="
 	echo ":test-result: FAIL $tst" >> $test_output
     fi
-done
-
+fi


More information about the Libreoffice-commits mailing list