diff options
author | Pranav Kant <pranavk@collabora.co.uk> | 2018-02-02 09:58:20 +0530 |
---|---|---|
committer | Ashod Nakashian <ashnakash@gmail.com> | 2018-02-07 14:30:33 +0100 |
commit | 5476774af1510751127cdb0c605149f05d43394b (patch) | |
tree | e8dec86db6e9cff0f9dc4a53eb425884763d684d /test/UnitWopiOwnertermination.cpp | |
parent | 1dde430bcf9b9cd6febd18547c3d3992d76cef61 (diff) |
wsd: Use a close request flag to break out of doc broker poll thread
... instead of directly stop()ing it. The close request approach also
makes sure that outgoing document is saved to storage.
Change-Id: I44f61db00dbd326dec80f59f4a2cbb617048aa94
Reviewed-on: https://gerrit.libreoffice.org/49122
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
Diffstat (limited to 'test/UnitWopiOwnertermination.cpp')
-rw-r--r-- | test/UnitWopiOwnertermination.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/test/UnitWopiOwnertermination.cpp b/test/UnitWopiOwnertermination.cpp new file mode 100644 index 000000000..8ddb02a46 --- /dev/null +++ b/test/UnitWopiOwnertermination.cpp @@ -0,0 +1,89 @@ +/* -*- 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 "config.h" + +#include "WopiTestServer.hpp" +#include "Log.hpp" +#include "Unit.hpp" +#include "UnitHTTP.hpp" +#include "helpers.hpp" +#include <Poco/Net/HTTPRequest.h> +#include <Poco/Util/LayeredConfiguration.h> + +class UnitWopiOwnertermination : public WopiTestServer +{ + enum class Phase + { + Load, + Modify, + OwnerTermination, + Polling + } _phase; + +public: + UnitWopiOwnertermination() : + _phase(Phase::Load) + { + } + + void assertPutFileRequest(const Poco::Net::HTTPRequest& /*request*/) override + { + if (_phase == Phase::Polling) + { + // Document got saved, that's what we wanted + exitTest(TestResult::Ok); + } + } + + void invokeTest() override + { + constexpr char testName[] = "UnitWopiOwnertermination"; + + switch (_phase) + { + case Phase::Load: + { + initWebsocket("/wopi/files/0?access_token=anything"); + + helpers::sendTextFrame(*_ws->getLOOLWebSocket(), "load url=" + _wopiSrc, testName); + + _phase = Phase::Modify; + break; + } + case Phase::Modify: + { + helpers::sendTextFrame(*_ws->getLOOLWebSocket(), "key type=input char=97 key=0", testName); + helpers::sendTextFrame(*_ws->getLOOLWebSocket(), "key type=up char=0 key=512", testName); + + _phase = Phase::OwnerTermination; + SocketPoll::wakeupWorld(); + break; + } + case Phase::OwnerTermination: + { + _phase = Phase::Polling; + helpers::sendTextFrame(*_ws->getLOOLWebSocket(), "closedocument", testName); + break; + } + case Phase::Polling: + { + // just wait for the results + break; + } + } + } +}; + +UnitBase *unit_create_wsd(void) +{ + return new UnitWopiOwnertermination(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |