[Libreoffice-commits] online.git: 3 commits - loolwsd/configure.ac loolwsd/LOOLForKit.cpp loolwsd/test loolwsd/Util.cpp loolwsd/Util.hpp
Michael Meeks
michael.meeks at collabora.com
Thu Apr 14 08:34:59 UTC 2016
loolwsd/LOOLForKit.cpp | 4 -
loolwsd/Util.cpp | 27 -------
loolwsd/Util.hpp | 20 -----
loolwsd/configure.ac | 2
loolwsd/test/Makefile.am | 6 +
loolwsd/test/UnitFonts.cpp | 168 ++++++++++++++++++++++++++++++++++++++++++++
loolwsd/test/data/hello.odt |binary
loolwsd/test/run_test.sh.in | 2
loolwsd/test/run_unit.sh.in | 2
9 files changed, 180 insertions(+), 51 deletions(-)
New commits:
commit b3f17462eb3da98a129634218c2142ef64dd36d5
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Thu Apr 14 09:34:37 2016 +0100
Fix ENABLE_SSL AC_SUBST.
diff --git a/loolwsd/configure.ac b/loolwsd/configure.ac
index c16e242..28faacc 100644
--- a/loolwsd/configure.ac
+++ b/loolwsd/configure.ac
@@ -171,8 +171,10 @@ AS_IF([test "$enable_tests" != "no"],
AS_IF([test "$enable_ssl" != "no"],
[AC_DEFINE([ENABLE_SSL],1,[Enable SSL])])
+ENABLE_SSL=
if test "$enable_ssl" != "no"; then
ssl_msg="ssl enabled"
+ ENABLE_SSL=true
else
ssl_msg="insecure: ssl disabled"
fi
diff --git a/loolwsd/test/data/hello.odt b/loolwsd/test/data/hello.odt
index fcd047a..3febe62 100644
Binary files a/loolwsd/test/data/hello.odt and b/loolwsd/test/data/hello.odt differ
commit 35b27b352cdce3b2b486905f0462d9b938dd9a04
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Wed Apr 13 15:10:02 2016 +0100
Initial font unit test.
diff --git a/loolwsd/LOOLForKit.cpp b/loolwsd/LOOLForKit.cpp
index e3e8046..700273f 100644
--- a/loolwsd/LOOLForKit.cpp
+++ b/loolwsd/LOOLForKit.cpp
@@ -120,13 +120,13 @@ static int createLibreOfficeKit(const std::string& childRoot,
}
else
{
- UnitKit::get().launchedKit(pid);
-
// parent
if (pid < 0)
Log::syserror("Fork failed.");
else
Log::info("Forked kit [" + std::to_string(pid) + "].");
+
+ UnitKit::get().launchedKit(pid);
}
return pid;
diff --git a/loolwsd/test/Makefile.am b/loolwsd/test/Makefile.am
index f4c71fa..144b9e0 100644
--- a/loolwsd/test/Makefile.am
+++ b/loolwsd/test/Makefile.am
@@ -4,7 +4,9 @@ check_PROGRAMS = test
AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
-lib_LTLIBRARIES = unit-timeout.la unit-prefork.la unit-storage.la
+lib_LTLIBRARIES = \
+ unit-timeout.la unit-prefork.la \
+ unit-storage.la unit-fonts.la
AM_CPPFLAGS = -pthread -I$(top_srcdir)
@@ -13,6 +15,8 @@ test_SOURCES = httpposttest.cpp httpwstest.cpp test.cpp ../LOOLProtocol.cpp
test_LDADD = $(CPPUNIT_LIBS)
# unit test modules:
+unit_fonts_la_SOURCES = UnitFonts.cpp
+unit_fonts_la_LDFLAGS = -module
unit_timeout_la_SOURCES = UnitTimeout.cpp
unit_timeout_la_LDFLAGS = -module
unit_prefork_la_SOURCES = UnitPrefork.cpp
diff --git a/loolwsd/test/UnitFonts.cpp b/loolwsd/test/UnitFonts.cpp
new file mode 100644
index 0000000..4ffb17a
--- /dev/null
+++ b/loolwsd/test/UnitFonts.cpp
@@ -0,0 +1,168 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <dlfcn.h>
+#include <ftw.h>
+#include <cassert>
+#include <iostream>
+
+#include "Common.hpp"
+#include "Util.hpp"
+#include "Unit.hpp"
+#include "LOOLProtocol.hpp"
+#include <dlfcn.h>
+
+#include <Poco/Timestamp.h>
+#include <Poco/StringTokenizer.h>
+#include <Poco/Net/HTTPResponse.h>
+#include <Poco/Net/HTTPClientSession.h>
+#include <Poco/Net/HTTPServerRequest.h>
+
+#define UNIT_URI "/loolwsd/unit-font"
+
+namespace {
+ // interrogate the vcl/ fontmanager for its hook ...
+ std::string getFontList()
+ {
+ void *me = dlopen(NULL,RTLD_NOW);
+ typedef const char *(GetFontsFn)(void);
+ GetFontsFn *fn = reinterpret_cast<GetFontsFn *>(
+ dlsym(me, "unit_online_get_fonts"));
+ if (fn)
+ return std::string(fn());
+ else
+ return std::string("can't find unit_online_get_fonts hook");
+ }
+
+ std::string readFontList(const std::shared_ptr< Poco::Net::WebSocket > &socket)
+ {
+ int flags;
+ char buffer[100 * 1000];
+
+ int length = socket->receiveFrame(buffer, sizeof (buffer), flags);
+ if (length > 0)
+ {
+ assert(length<(int)sizeof(buffer));
+ buffer[length] = '\0';
+ return std::string(buffer);
+ }
+ else
+ return std::string("read failure");
+ }
+}
+
+// Inside the WSD process
+class UnitPrefork : public UnitWSD
+{
+ std::string _fontsKit;
+ std::string _fontsBroker;
+public:
+ UnitPrefork()
+ {
+ setHasKitHooks();
+ }
+
+ void check()
+ {
+ if (!_fontsKit.length() || !_fontsBroker.length())
+ return; // defer till we have all the data.
+ if (_fontsKit != _fontsBroker)
+ {
+ std::cout << "Error - font list mismatch" << std::endl;
+ std::cerr << "Kit : '" << _fontsKit << "' vs. Broker : '" << _fontsBroker << "'" << std::endl;
+ exitTest(TestResult::TEST_FAILED);
+ }
+ else
+ {
+ Poco::StringTokenizer tokens(_fontsKit, "\n");
+ if (tokens.count() > 0)
+ std::cout << " " << tokens[0] << std::endl;
+
+ exitTest(TestResult::TEST_OK);
+ }
+ }
+
+ virtual void newChild(const std::shared_ptr<Poco::Net::WebSocket> &socket) override
+ {
+ Log::info("Fetching font list from kit");
+ socket->sendFrame("unit-getfontlist: \n",
+ sizeof("unit-getfontlist: \n") - 1);
+ _fontsKit = readFontList(socket);
+ check();
+ }
+
+ virtual bool filterHandleRequest(
+ TestRequest type,
+ Poco::Net::HTTPServerRequest& request,
+ Poco::Net::HTTPServerResponse& response) override
+ {
+ if (type == UnitWSD::TestRequest::TEST_REQ_PRISONER &&
+ request.getURI().find(UNIT_URI) == 0)
+ {
+ auto ws = std::make_shared<Poco::Net::WebSocket>(request, response);
+ _fontsBroker = readFontList(ws);
+ check();
+ return true;
+ }
+
+ return false;
+ }
+};
+
+// Inside the forkit & kit processes
+class UnitKitPrefork : public UnitKit
+{
+public:
+ UnitKitPrefork()
+ {
+ }
+
+ // Called in the forkit after forking the kit
+ virtual void launchedKit(int /* pid */) override
+ {
+ // Open websocket connection between the child process and WSD.
+ Poco::Net::HTTPClientSession cs("127.0.0.1", MASTER_PORT_NUMBER);
+ cs.setTimeout(0);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET,
+ std::string(UNIT_URI));
+ Poco::Net::HTTPResponse response;
+ auto ws = std::make_shared<Poco::Net::WebSocket>(cs, request, response);
+ ws->setReceiveTimeout(0);
+ Log::info("Fetching font list from forkit");
+ std::string fontListMsg = getFontList() + "\n";
+ ws->sendFrame(fontListMsg.c_str(), fontListMsg.length());
+ }
+
+ // Called from WSD and handled inside the kit.
+ virtual bool filterKitMessage(const std::shared_ptr<Poco::Net::WebSocket> &ws,
+ std::string &message) override
+ {
+ std::string token = LOOLProtocol::getFirstToken(message.c_str(), message.length());
+ if (token == "unit-getfontlist:")
+ {
+ std::string fontListReply = getFontList() + "\n";
+ ws->sendFrame(fontListReply.c_str(), fontListReply.length());
+ return true;
+ }
+
+ return false;
+ }
+};
+
+UnitBase *unit_create_wsd(void)
+{
+ return new UnitPrefork();
+}
+
+UnitBase *unit_create_kit(void)
+{
+ return new UnitKitPrefork();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/test/run_test.sh.in b/loolwsd/test/run_test.sh.in
index b5678f9..c52034e 100755
--- a/loolwsd/test/run_test.sh.in
+++ b/loolwsd/test/run_test.sh.in
@@ -21,6 +21,8 @@ fi
# result logging
echo > $test_output
+echo "Running cppunit test ...";
+
${abs_top_builddir}/loolwsd --systemplate="@SYSTEMPLATE_PATH@" --lotemplate="@LO_PATH@" \
--childroot="@JAILS_PATH@" --allowlocalstorage 2>$test_log_output/run_test.log &
diff --git a/loolwsd/test/run_unit.sh.in b/loolwsd/test/run_unit.sh.in
index 1e0ae15..5491640 100755
--- a/loolwsd/test/run_unit.sh.in
+++ b/loolwsd/test/run_unit.sh.in
@@ -23,7 +23,7 @@ fi
# result logging
echo > run_unit.sh.trs
-for tst in timeout storage prefork; do
+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@" \
commit c7d0067969259d1a1e08d16ff2a2252b5dd00db6
Author: Tor Lillqvist <tml at collabora.com>
Date: Thu Apr 14 11:30:28 2016 +0300
Util::getChildStatus() is unused
Good, now the odd LOOLExitCode can go away, too.
diff --git a/loolwsd/Util.cpp b/loolwsd/Util.cpp
index c6fae82..2162b26 100644
--- a/loolwsd/Util.cpp
+++ b/loolwsd/Util.cpp
@@ -491,33 +491,6 @@ namespace Util
strncpy(FatalGdbString, streamStr.c_str(), sizeof(FatalGdbString));
}
- int getChildStatus(const int code)
- {
- int retVal;
-
- switch (static_cast<const LOOLExitCode>(code))
- {
- case LOOLExitCode::LOOL_SECOND_OFFICE:
- case LOOLExitCode::LOOL_FATAL_ERROR:
- case LOOLExitCode::LOOL_CRASH_WITH_RESTART:
- case LOOLExitCode::LOOL_NORMAL_RESTART:
- case LOOLExitCode::LOOL_EXIT_SOFTWARE:
- retVal = EXIT_FAILURE;
- break;
-
- case LOOLExitCode::LOOL_NO_ERROR:
- retVal = EXIT_SUCCESS;
- break;
-
- // Why are other non-zero exit codes interpreted as success?
- default:
- retVal = EXIT_SUCCESS;
- break;
- }
-
- return retVal;
- }
-
int getSignalStatus(const int code)
{
int retVal;
diff --git a/loolwsd/Util.hpp b/loolwsd/Util.hpp
index b47c4ca..e56528d 100644
--- a/loolwsd/Util.hpp
+++ b/loolwsd/Util.hpp
@@ -24,24 +24,6 @@
#define LOK_USE_UNSTABLE_API
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
-// This is an odd mix of the EExitCodes enum in LibreOffice's desktop/source/inc/exithelper.h and
-// then EX_SOFTWARE (= 70) from the (BSD origin) <sysexits.h>.
-
-enum class LOOLExitCode
-{
- LOOL_NO_ERROR = 0,
- /* pipe was detected - second office must terminate itself */
- LOOL_SECOND_OFFICE = 1,
- /* an uno exception was catched during startup */
- LOOL_FATAL_ERROR = 77, /* Only the low 8 bits are significant 333 % 256 = 77 */
- /* user force automatic restart after crash */
- LOOL_CRASH_WITH_RESTART = 79,
- /* the office restarts itself */
- LOOL_NORMAL_RESTART = 81,
- /* internal software error */
- LOOL_EXIT_SOFTWARE = 70
-};
-
/// Flag to stop pump loops.
extern volatile bool TerminationFlag;
@@ -120,8 +102,6 @@ namespace Util
void setFatalSignals();
/// Returns EXIT_SUCCESS or EXIT_FAILURE from <stdlib.h>
- int getChildStatus(const int code);
- /// Returns EXIT_SUCCESS or EXIT_FAILURE from <stdlib.h>
int getSignalStatus(const int code);
void requestTermination(const Poco::Process::PID& pid);
More information about the Libreoffice-commits
mailing list