[Libreoffice-commits] online.git: loolwsd/test

Ashod Nakashian ashod.nakashian at collabora.co.uk
Wed May 11 03:53:46 UTC 2016


 loolwsd/test/helpers.hpp |  129 +++++++++++++++++++++--------------------------
 1 file changed, 58 insertions(+), 71 deletions(-)

New commits:
commit 7c7d6c31ccc7ad0a79e79e9c90fc9498c446ce55
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Tue May 10 21:38:03 2016 -0400

    loolwsd: refactored socket helpers
    
    Change-Id: I9f6bca81f830d9a8f1726abbe29d9343bd41d666
    Reviewed-on: https://gerrit.libreoffice.org/24867
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/test/helpers.hpp b/loolwsd/test/helpers.hpp
index 57937ba..126f351 100644
--- a/loolwsd/test/helpers.hpp
+++ b/loolwsd/test/helpers.hpp
@@ -154,61 +154,6 @@ std::string getTestServerURI()
     return serverURI;
 }
 
-// Connecting to a Kit process is managed by document broker, that it does several
-// jobs to establish the bridge connection between the Client and Kit process,
-// The result, it is mostly time outs to get messages in the unit test and it could fail.
-// connectLOKit ensures the websocket is connected to a kit process.
-inline
-std::shared_ptr<Poco::Net::WebSocket>
-connectLOKit(Poco::URI uri,
-             Poco::Net::HTTPRequest& request,
-             Poco::Net::HTTPResponse& response)
-{
-    int flags;
-    int received = 0;
-    int retries = 3;
-    bool ready = false;
-    char buffer[READ_BUFFER_SIZE];
-    std::shared_ptr<Poco::Net::WebSocket> ws;
-
-    do
-    {
-        std::unique_ptr<Poco::Net::HTTPClientSession> session(createSession(uri));
-
-        std::cerr << "Connecting... ";
-        ws = std::make_shared<Poco::Net::WebSocket>(*session, request, response);
-
-        do
-        {
-            try
-            {
-                received = ws->receiveFrame(buffer, sizeof(buffer), flags);
-                if (received > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
-                {
-                    const std::string message = LOOLProtocol::getFirstLine(buffer, received);
-                    std::cerr << message << std::endl;
-                    if (message.find("ready") != std::string::npos)
-                    {
-                        ready = true;
-                        break;
-                    }
-                }
-            }
-            catch (const Poco::TimeoutException& exc)
-            {
-                std::cerr << exc.displayText() << std::endl;
-            }
-        }
-        while (received > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE);
-    }
-    while (retries-- && !ready);
-
-    if (!ready)
-        throw Poco::Net::WebSocketException("Failed to connect to lokit process", Poco::Net::WebSocket::WS_ENDPOINT_GOING_AWAY);
-
-    return ws;
-}
-
 inline
 void getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std::string& response, const bool isLine)
 {
@@ -262,20 +207,18 @@ void getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std
 }
 
 inline
-void getResponseMessage(const std::shared_ptr<Poco::Net::WebSocket>& ws, const std::string& prefix, std::string& response, const bool isLine)
+std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std::string name = "")
 {
-    getResponseMessage(*ws, prefix, response, isLine);
-}
+    if (!name.empty())
+    {
+        name += ": ";
+    }
 
-inline
-std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix)
-{
     try
     {
-        int flags;
-        int bytes;
+        int flags = 0;
         int retries = 20;
-        const Poco::Timespan waitTime(1000000);
+        static const Poco::Timespan waitTime(1000000);
         std::vector<char> response;
 
         ws.setReceiveTimeout(0);
@@ -284,10 +227,10 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string
             if (ws.poll(waitTime, Poco::Net::Socket::SELECT_READ))
             {
                 response.resize(READ_BUFFER_SIZE);
-                bytes = ws.receiveFrame(response.data(), response.size(), flags);
+                int bytes = ws.receiveFrame(response.data(), response.size(), flags);
                 response.resize(bytes >= 0 ? bytes : 0);
                 auto message = LOOLProtocol::getAbbreviatedMessage(response);
-                std::cerr << "Got " << bytes << " bytes: " << message << std::endl;
+                std::cerr << name << "Got " << bytes << " bytes: " << message << std::endl;
                 if (bytes > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
                 {
                     if (message.find(prefix) == 0)
@@ -305,7 +248,7 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string
                             bytes = ws.receiveFrame(response.data(), response.size(), flags);
                             response.resize(bytes >= 0 ? bytes : 0);
                             message = LOOLProtocol::getAbbreviatedMessage(response);
-                            std::cerr << "Got " << bytes << " bytes: " << message << std::endl;
+                            std::cerr << name << "Got " << bytes << " bytes: " << message << std::endl;
                             if (bytes > 0 && message.find(prefix) == 0)
                             {
                                 return response;
@@ -316,14 +259,14 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string
                 else
                 {
                     response.resize(0);
-                    std::cerr << "Got " << bytes << " bytes, flags: " << std::hex << flags << std::dec << '\n';
+                    std::cerr << name << "Got " << bytes << " bytes, flags: " << std::hex << flags << std::dec << std::endl;
                 }
 
                 retries = 10;
             }
             else
             {
-                std::cerr << "Timeout\n";
+                std::cerr << name << "Timeout\n";
                 --retries;
             }
         }
@@ -338,9 +281,53 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string
 }
 
 inline
-std::vector<char> getResponseMessage(const std::shared_ptr<Poco::Net::WebSocket>& ws, const std::string& prefix)
+std::vector<char> getResponseMessage(const std::shared_ptr<Poco::Net::WebSocket>& ws, const std::string& prefix, const std::string name = "")
+{
+    return getResponseMessage(*ws, prefix, name);
+}
+
+template <typename T>
+std::string getResponseLine(T& ws, const std::string& prefix, const std::string name = "")
+{
+    return LOOLProtocol::getFirstLine(getResponseMessage(ws, prefix, name));
+}
+
+template <typename T>
+void assertResponseLine(T& ws, const std::string& prefix, const std::string name = "")
+{
+    CPPUNIT_ASSERT_EQUAL(prefix, LOOLProtocol::getFirstToken(getResponseLine(ws, prefix, name)));
+}
+
+inline
+void getResponseMessage(const std::shared_ptr<Poco::Net::WebSocket>& ws, const std::string& prefix, std::string& response, const bool isLine)
+{
+    getResponseMessage(*ws, prefix, response, isLine);
+}
+
+// Connecting to a Kit process is managed by document broker, that it does several
+// jobs to establish the bridge connection between the Client and Kit process,
+// The result, it is mostly time outs to get messages in the unit test and it could fail.
+// connectLOKit ensures the websocket is connected to a kit process.
+inline
+std::shared_ptr<Poco::Net::WebSocket>
+connectLOKit(Poco::URI uri,
+             Poco::Net::HTTPRequest& request,
+             Poco::Net::HTTPResponse& response)
 {
-    return getResponseMessage(*ws, prefix);
+    int retries = 10;
+    do
+    {
+        std::unique_ptr<Poco::Net::HTTPClientSession> session(createSession(uri));
+
+            std::cerr << "Connecting... ";
+        auto ws = std::make_shared<Poco::Net::WebSocket>(*session, request, response);
+        getResponseMessage(ws, "statusindicator: ready");
+
+        return ws;
+    }
+    while (retries--);
+
+    CPPUNIT_FAIL("Cannot connect to [" + uri.toString() + "].");
 }
 
 inline


More information about the Libreoffice-commits mailing list