[Libreoffice-commits] online.git: test/Makefile.am test/UnitWOPIWatermark.cpp
mert (via logerrit)
logerrit at kemper.freedesktop.org
Sun Nov 10 22:43:05 UTC 2019
test/Makefile.am | 6 +
test/UnitWOPIWatermark.cpp | 158 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 162 insertions(+), 2 deletions(-)
New commits:
commit e09b5f4226a6fb3d0a58e1d95a228656defc9ccc
Author: mert <mert.tumer at collabora.com>
AuthorDate: Tue Oct 29 16:26:27 2019 +0300
Commit: Ashod Nakashian <ashnakash at gmail.com>
CommitDate: Sun Nov 10 23:42:47 2019 +0100
Added Unit Test for new Watermarking feature
Change-Id: Id30015731d7ea562bfeb63fc70ffc6813945e492
Reviewed-on: https://gerrit.libreoffice.org/81674
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index 4907ae898..f3d4fcf6f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -20,7 +20,7 @@ noinst_LTLIBRARIES = \
unit-fuzz.la unit-oob.la unit-http.la unit-oauth.la \
unit-wopi.la unit-wopi-saveas.la \
unit-wopi-ownertermination.la unit-wopi-versionrestore.la \
- unit-wopi-documentconflict.la unit_wopi_renamefile.la \
+ unit-wopi-documentconflict.la unit_wopi_renamefile.la unit_wopi_watermark.la \
unit-tiff-load.la \
unit-large-paste.la \
unit-paste.la \
@@ -122,6 +122,8 @@ unit_wopi_documentconflict_la_SOURCES = UnitWOPIDocumentConflict.cpp
unit_wopi_documentconflict_la_LIBADD = $(CPPUNIT_LIBS)
unit_wopi_renamefile_la_SOURCES = UnitWOPIRenameFile.cpp
unit_wopi_renamefile_la_LIBADD = $(CPPUNIT_LIBS)
+unit_wopi_watermark_la_SOURCES = UnitWOPIWatermark.cpp
+unit_wopi_watermark_la_LIBADD = $(CPPUNIT_LIBS)
unit_wopi_loadencoded_la_SOURCES = UnitWOPILoadEncoded.cpp
unit_wopi_loadencoded_la_LIBADD = $(CPPUNIT_LIBS)
unit_wopi_temp_la_SOURCES = UnitWOPITemplate.cpp
@@ -157,7 +159,7 @@ check-local:
TESTS = unit-copy-paste.la unit-typing.la unit-convert.la unit-prefork.la unit-tilecache.la unit-timeout.la \
unit-oauth.la unit-wopi.la unit-wopi-saveas.la \
unit-wopi-ownertermination.la unit-wopi-versionrestore.la \
- unit-wopi-documentconflict.la unit_wopi_renamefile.la \
+ unit-wopi-documentconflict.la unit_wopi_renamefile.la unit_wopi_watermark.la \
unit-http.la \
unit-tiff-load.la \
unit-large-paste.la \
diff --git a/test/UnitWOPIWatermark.cpp b/test/UnitWOPIWatermark.cpp
new file mode 100644
index 000000000..a5d244ee5
--- /dev/null
+++ b/test/UnitWOPIWatermark.cpp
@@ -0,0 +1,158 @@
+/* -*- 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 UnitWOPIWatermark : public WopiTestServer
+{
+ enum class Phase
+ {
+ Load,
+ TileRequest,
+ Polling
+ } _phase;
+
+public:
+ UnitWOPIWatermark() :
+ _phase(Phase::Load)
+ {
+ }
+
+ virtual bool handleHttpRequest(const Poco::Net::HTTPRequest& request, Poco::MemoryInputStream& /*message*/, std::shared_ptr<StreamSocket>& socket) override
+ {
+ Poco::URI uriReq(request.getURI());
+ Poco::RegularExpression regInfo("/wopi/files/[0-9]");
+ Poco::RegularExpression regContent("/wopi/files/[0-9]/contents");
+ LOG_INF("Fake wopi host request: " << uriReq.toString());
+
+ // CheckFileInfo
+ if (request.getMethod() == "GET" && regInfo.match(uriReq.getPath()))
+ {
+ LOG_INF("Fake wopi host request, handling CheckFileInfo: " << uriReq.getPath());
+
+ assertCheckFileInfoRequest(request);
+
+ Poco::LocalDateTime now;
+ const std::string fileName(uriReq.getPath() == "/wopi/files/3" ? "he%llo.txt" : "hello.txt");
+ Poco::JSON::Object::Ptr fileInfo = new Poco::JSON::Object();
+ fileInfo->set("BaseFileName", fileName);
+ fileInfo->set("Size", getFileContent().size());
+ fileInfo->set("Version", "1.0");
+ fileInfo->set("OwnerId", "test");
+ fileInfo->set("UserId", "test");
+ fileInfo->set("UserFriendlyName", "test");
+ fileInfo->set("UserCanWrite", "true");
+ fileInfo->set("PostMessageOrigin", "localhost");
+ fileInfo->set("LastModifiedTime", Util::getIso8601FracformatTime(getFileLastModifiedTime()));
+ fileInfo->set("EnableOwnerTermination", "true");
+ fileInfo->set("WatermarkText", "WatermarkTest");
+
+ std::ostringstream jsonStream;
+ fileInfo->stringify(jsonStream);
+ std::string responseString = jsonStream.str();
+
+ const std::string mimeType = "application/json; charset=utf-8";
+
+ std::ostringstream oss;
+ oss << "HTTP/1.1 200 OK\r\n"
+ "Last-Modified: " << Util::getHttpTime(getFileLastModifiedTime()) << "\r\n"
+ "User-Agent: " WOPI_AGENT_STRING "\r\n"
+ "Content-Length: " << responseString.size() << "\r\n"
+ "Content-Type: " << mimeType << "\r\n"
+ "\r\n"
+ << responseString;
+
+ socket->send(oss.str());
+ socket->shutdown();
+
+ return true;
+ }
+ // GetFile
+ else if (request.getMethod() == "GET" && regContent.match(uriReq.getPath()))
+ {
+ LOG_INF("Fake wopi host request, handling GetFile: " << uriReq.getPath());
+
+ assertGetFileRequest(request);
+
+ const std::string mimeType = "text/plain; charset=utf-8";
+
+ std::ostringstream oss;
+ oss << "HTTP/1.1 200 OK\r\n"
+ "Last-Modified: " << Util::getHttpTime(getFileLastModifiedTime()) << "\r\n"
+ "User-Agent: " WOPI_AGENT_STRING "\r\n"
+ "Content-Length: " << getFileContent().size() << "\r\n"
+ "Content-Type: " << mimeType << "\r\n"
+ "\r\n"
+ << getFileContent();
+
+ socket->send(oss.str());
+ socket->shutdown();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ void invokeTest() override
+ {
+ constexpr char testName[] = "UnitWOPIWatermark";
+
+ switch (_phase)
+ {
+ case Phase::Load:
+ {
+ initWebsocket("/wopi/files/5?access_token=anything");
+
+ helpers::sendTextFrame(*getWs()->getLOOLWebSocket(), "load url=" + getWopiSrc(), testName);
+ SocketPoll::wakeupWorld();
+
+ _phase = Phase::TileRequest;
+ break;
+ }
+ case Phase::Polling:
+ {
+ exitTest(TestResult::Ok);
+ break;
+ }
+ case Phase::TileRequest:
+ {
+ helpers::sendTextFrame(*getWs()->getLOOLWebSocket(), "tilecombine nviewid=0 part=0 width=256 height=256 tileposx=0,3840 tileposy=0,0 tilewidth=3840 tileheight=3840", testName);
+ std::string tile = helpers::getResponseString(*getWs()->getLOOLWebSocket(), "tile:", testName);
+
+ if(!tile.empty())
+ {
+ Poco::StringTokenizer tokens(tile, " ", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
+ std::string nviewid = tokens[1].substr(std::string("nviewid=").size());
+ if (!nviewid.empty() && nviewid != "0")
+ {
+ LOG_INF("Watermark is hashed into integer successfully nviewid=" << nviewid);
+ _phase = Phase::Polling;
+ }
+ }
+ break;
+ }
+ }
+ }
+};
+
+UnitBase *unit_create_wsd(void)
+{
+ return new UnitWOPIWatermark();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list