summaryrefslogtreecommitdiff
path: root/test/UnitWopiOwnertermination.cpp
diff options
context:
space:
mode:
authorPranav Kant <pranavk@collabora.co.uk>2018-02-02 09:58:20 +0530
committerAshod Nakashian <ashnakash@gmail.com>2018-02-07 14:30:33 +0100
commit5476774af1510751127cdb0c605149f05d43394b (patch)
treee8dec86db6e9cff0f9dc4a53eb425884763d684d /test/UnitWopiOwnertermination.cpp
parent1dde430bcf9b9cd6febd18547c3d3992d76cef61 (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.cpp89
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: */