diff options
author | Pranav Kant <pranavk@collabora.co.uk> | 2016-12-16 13:16:31 +0530 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2016-12-16 10:25:15 +0000 |
commit | 0e043853ea68e68354de5d9c87a32029319dfdc6 (patch) | |
tree | 14f2169a1657a645f6e7bb89c7bec7e80d215330 /test | |
parent | wsd: set minimum socket buffer size in debug mode (diff) | |
download | online-0e043853ea68e68354de5d9c87a32029319dfdc6.tar.gz online-0e043853ea68e68354de5d9c87a32029319dfdc6.zip |
tdf#104695: Unit test for missing tiles due to low socket buffer size
Change-Id: I278c5d532cb9b6340dee71a4b66410b32a164704
Reviewed-on: https://gerrit.libreoffice.org/32072
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile.am | 6 | ||||
-rw-r--r-- | test/UnitMinSocketBufferSize.cpp | 84 |
2 files changed, 88 insertions, 2 deletions
diff --git a/test/Makefile.am b/test/Makefile.am index 2a285bc32e..68f8c81d40 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -16,7 +16,8 @@ noinst_LTLIBRARIES = \ unit-timeout.la unit-prefork.la \ unit-storage.la unit-fonts.la \ unit-admin.la unit-tilecache.la \ - unit-fuzz.la unit-oob.la + unit-fuzz.la unit-oob.la \ + unit-minsocketbuffersize.la MAGIC_TO_FORCE_SHLIB_CREATION = -rpath /dummy AM_LDFLAGS = -pthread -module $(MAGIC_TO_FORCE_SHLIB_CREATION) @@ -59,6 +60,7 @@ unit_timeout_la_SOURCES = UnitTimeout.cpp unit_prefork_la_SOURCES = UnitPrefork.cpp unit_storage_la_SOURCES = UnitStorage.cpp unit_tilecache_la_SOURCES = UnitTileCache.cpp +unit_minsocketbuffersize_la_SOURCES = UnitMinSocketBufferSize.cpp if HAVE_LO_PATH SYSTEM_STAMP = @SYSTEMPLATE_PATH@/system_stamp @@ -70,7 +72,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-oob.la unit-tilecache.la unit-storage.la unit-timeout.la unit-prefork.la unit-admin.la +TESTS = unit-oob.la unit-tilecache.la unit-storage.la unit-timeout.la unit-prefork.la unit-admin.la unit-minsocketbuffersize.la else TESTS = ${top_builddir}/test/test endif diff --git a/test/UnitMinSocketBufferSize.cpp b/test/UnitMinSocketBufferSize.cpp new file mode 100644 index 0000000000..00e1dba440 --- /dev/null +++ b/test/UnitMinSocketBufferSize.cpp @@ -0,0 +1,84 @@ +/* -*- 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 "Log.hpp" +#include "Protocol.hpp" +#include "Unit.hpp" +#include "UnitHTTP.hpp" +#include "helpers.hpp" + +using namespace helpers; + +class UnitMinSocketBufferSize: public UnitWSD +{ + enum { + PHASE_LOAD, // load the document + PHASE_REQUEST, // Request tiles etc. + PHASE_CHECK_RESPONSE // Check if we got correct response + } _phase; + std::string _docURL, _docPath; + std::unique_ptr<UnitWebSocket> _ws; +public: + UnitMinSocketBufferSize() : + _phase(PHASE_LOAD) + { + } + + virtual void invokeTest() + { + switch (_phase) + { + case PHASE_LOAD: + { + getDocumentPathAndURL("Example.odt", _docPath, _docURL); + _ws = std::unique_ptr<UnitWebSocket>(new UnitWebSocket(_docURL)); + assert(_ws.get()); + + _phase = PHASE_REQUEST; + LOG_DBG("Document loaded successfully."); + break; + } + case PHASE_REQUEST: + { + const std::string loadMsg = "load url=" + _docURL; + const std::string tilecombineMsg = "tilecombine part=0 width=256 height=256 tileposx=0,3840,7680,11520,0,3840,7680,11520,0,3840,7680,11520,0,3840,7680,11520,0,3840,7680,11520 tileposy=0,0,0,0,3840,3840,3840,3840,7680,7680,7680,7680,11520,11520,11520,11520,15360,15360,15360,15360 tilewidth=3840 tileheight=3840"; + _ws->getLOOLWebSocket()->sendFrame(loadMsg.data(), loadMsg.size()); + _ws->getLOOLWebSocket()->sendFrame(tilecombineMsg.data(), tilecombineMsg.size()); + + LOG_DBG("Tilecombine request sent"); + _phase = PHASE_CHECK_RESPONSE; + break; + } + case PHASE_CHECK_RESPONSE: + LOG_DBG("Checking if get back all the tiles"); + int nTiles = 20; + bool success = true; + while (nTiles--) + { + const auto tile = getResponseMessage(*_ws->getLOOLWebSocket(), "tile: part=0 width=256 height=256", "Waiting for tiles ..."); + const auto firstLine = LOOLProtocol::getFirstLine(tile); + LOG_DBG("Tile received " << firstLine); + if (!LOOLProtocol::matchPrefix("tile:", firstLine)) + { + success = false; + } + } + + exitTest(success ? TestResult::TEST_OK : TestResult::TEST_FAILED); + break; + } + } +}; + +UnitBase *unit_create_wsd(void) +{ + return new UnitMinSocketBufferSize(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |