[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