test/Makefile.am           |    6 +
 test/UnitWOPIWatermark.cpp |  158 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 162 insertions(+), 2 deletions(-)

New commits:
commit e09b5f4226a6fb3d0a58e1d95a228656defc9ccc
Author:     mert <mert.tu...@collabora.com>
AuthorDate: Tue Oct 29 16:26:27 2019 +0300
Commit:     Ashod Nakashian <ashnak...@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 <ashnak...@gmail.com>
    Tested-by: Ashod Nakashian <ashnak...@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: */
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to