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

Pranav Kant pranavk at collabora.co.uk
Thu Nov 17 17:37:53 UTC 2016


 loolwsd/test/Makefile.am      |    5 +-
 loolwsd/test/UnitRequests.cpp |   95 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+), 2 deletions(-)

New commits:
commit c511cf1d76b1ded992d9570d0253902b8094ecd1
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Nov 17 23:04:52 2016 +0530

    loolwsd: New test to check if request uris are valid
    
    The current test tests if the embedded doc url recieved in websocket
    URI endpoint is encoded or not.
    
    Change-Id: I1e5d6639d6791be4e1e56701a9e444e33fc89aa2

diff --git a/loolwsd/test/Makefile.am b/loolwsd/test/Makefile.am
index 7600797..fec8969 100644
--- a/loolwsd/test/Makefile.am
+++ b/loolwsd/test/Makefile.am
@@ -15,7 +15,7 @@ noinst_LTLIBRARIES = \
         unit-timeout.la unit-prefork.la \
         unit-storage.la unit-fonts.la \
         unit-admin.la unit-tilecache.la \
-	unit-fuzz.la
+	unit-fuzz.la unit-requests.la
 
 MAGIC_TO_FORCE_SHLIB_CREATION = -rpath /dummy
 AM_LDFLAGS = -pthread -module $(MAGIC_TO_FORCE_SHLIB_CREATION)
@@ -49,6 +49,7 @@ unittest_SOURCES = TileQueueTests.cpp WhiteBoxTests.cpp test.cpp $(wsd_sources)
 unittest_LDADD = $(CPPUNIT_LIBS)
 
 # unit test modules:
+unit_requests_la_SOURCES = UnitRequests.cpp
 unit_fuzz_la_SOURCES = UnitFuzz.cpp
 unit_admin_la_SOURCES = UnitAdmin.cpp
 unit_admin_la_LIBADD = $(CPPUNIT_LIBS)
@@ -68,7 +69,7 @@ if HAVE_LO_PATH
 check-local:
 	./run_unit.sh --log-file test.log --trs-file test.trs
 # FIXME unit-fonts.la is unstable, disabled for now.
-TESTS = unit-tilecache.la unit-storage.la unit-timeout.la unit-prefork.la unit-admin.la
+TESTS = unit-tilecache.la unit-storage.la unit-timeout.la unit-prefork.la unit-admin.la unit-requests.la
 else
 TESTS = ${top_builddir}/test/test
 endif
diff --git a/loolwsd/test/UnitRequests.cpp b/loolwsd/test/UnitRequests.cpp
new file mode 100644
index 0000000..6b4ee4b
--- /dev/null
+++ b/loolwsd/test/UnitRequests.cpp
@@ -0,0 +1,95 @@
+/* -*- 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 <iostream>
+
+#include <Poco/Net/HTTPClientSession.h>
+#include <Poco/Net/HTTPResponse.h>
+#include <Poco/Net/HTTPServerRequest.h>
+#include <Poco/URI.h>
+
+#include "Log.hpp"
+#include "Unit.hpp"
+#include "UnitHTTP.hpp"
+#include "helpers.hpp"
+
+using namespace helpers;
+
+// Inside the WSD process
+class UnitRequests : public UnitWSD
+{
+    enum {
+	PHASE_LOAD,
+	PHASE_FILTER
+    } _phase;
+
+    TestResult _testResult;
+    std::unique_ptr<UnitWebSocket> _ws;
+public:
+    UnitRequests() :
+	_phase(PHASE_LOAD)
+    {
+        std::cerr << "UnitRequests startup\n";
+    }
+
+    virtual bool filterHandleRequest(
+        TestRequest type,
+	    Poco::Net::HTTPServerRequest& request,
+	    Poco::Net::HTTPServerResponse& /*response*/) override
+    {
+	if (type == UnitWSD::TestRequest::TEST_REQ_CLIENT)
+	{
+	    std::string uri = request.getURI();
+	    // Get the embedded document URL: '/lool/docUrl/ws/'
+	    uri = uri.substr(uri.find("lool/") + std::string("lool/").size());
+	    uri = uri.substr(0, uri.find("/ws"));
+
+	    Poco::URI requestUri(uri);
+	    _testResult = TestResult::TEST_OK;
+	    // If this is a simple encoded string, it would be treated as
+	    // relative, otherwise non-relative.
+	    // We require this embedded url to be encoded as otherwise it would
+	    // be treated as a resource on the server due to the presence of
+	    // un-encoded '/'
+	    if (!requestUri.isRelative())
+	    {
+		_testResult = TestResult::TEST_FAILED;
+	    }
+	}
+        return false;
+    }
+
+    void loadDocument()
+    {
+	std::string docPath;
+	std::string docURL;
+	getDocumentPathAndURL("empty.odt", docPath, docURL);
+	_ws = std::unique_ptr<UnitWebSocket>(new UnitWebSocket(docURL));
+	assert(_ws.get());
+    }
+
+    virtual void invokeTest()
+    {
+	switch(_phase)
+	{
+	case PHASE_LOAD:
+	    _phase = PHASE_FILTER;
+	    loadDocument();
+	    break;
+	case PHASE_FILTER:
+	    exitTest(_testResult);
+	    break;
+	}
+    }
+};
+
+UnitBase *unit_create_wsd(void)
+{
+    return new UnitRequests();
+}


More information about the Libreoffice-commits mailing list