libreoffice-online/test/UnitWopiOwnertermination.cpp
Pranav Kant 5476774af1 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>
2018-02-07 14:30:33 +01:00

89 lines
2.3 KiB
C++

/* -*- 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: */