loolwsd/test/Makefile.am | 5 +- loolwsd/test/UnitRequests.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 2 deletions(-)
New commits: commit c511cf1d76b1ded992d9570d0253902b8094ecd1 Author: Pranav Kant <pran...@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(); +} _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits