loolwsd/ChildSession.cpp | 1 - loolwsd/ChildSession.hpp | 1 + loolwsd/LOOLKit.cpp | 11 ++++++++++- loolwsd/test/helpers.hpp | 12 ++++++------ loolwsd/test/httpwstest.cpp | 32 ++++++++++++++++++-------------- 5 files changed, 35 insertions(+), 22 deletions(-)
New commits: commit c6c20408495bf594e3020c26fde2dd57023c4a05 Author: Henry Castro <hcas...@collabora.com> Date: Sat Sep 17 17:47:06 2016 -0400 loolwsd: test: log more info for each view diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp index d511808..2fdba45 100644 --- a/loolwsd/test/httpwstest.cpp +++ b/loolwsd/test/httpwstest.cpp @@ -2130,7 +2130,7 @@ void HTTPWSTest::testOptimalResize() } } -void HTTPWSTest::testEachView(const std::string& doc, const std::string& type, const std::string& protocol, const std::string& view) +void HTTPWSTest::testEachView(const std::string& doc, const std::string& type, const std::string& protocol, const std::string& protocolView) { int docPart = -1; int docParts = 0; @@ -2141,6 +2141,9 @@ void HTTPWSTest::testEachView(const std::string& doc, const std::string& type, c // 0..N Views std::vector<std::shared_ptr<Poco::Net::WebSocket>> views; + const std::string view = "view %d -> "; + const std::string load = "view %d, cannot load the document "; + const std::string error = "view %d, did not receive a %s message as expected"; // Load a document std::string documentPath, documentURL, response, text; @@ -2150,21 +2153,21 @@ void HTTPWSTest::testEachView(const std::string& doc, const std::string& type, c Poco::Net::WebSocket socket0 = *connectLOKit(_uri, request, _response); sendTextFrame(socket0, "load url=" + documentURL); - CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(socket0)); + CPPUNIT_ASSERT_MESSAGE(Poco::format(load, itView) + documentURL, isDocumentLoaded(socket0, Poco::format(view, itView))); // Check document size sendTextFrame(socket0, "status"); - getResponseMessage(socket0, "status:", response, false); - CPPUNIT_ASSERT_MESSAGE("did not receive a status: message as expected", !response.empty()); + getResponseMessage(socket0, "status:", response, false, Poco::format(view, itView)); + CPPUNIT_ASSERT_MESSAGE(Poco::format(error, itView, std::string("status:")), !response.empty()); parseDocSize(response, type, docPart, docParts, docWidth, docHeight, docViewId); - // Click to show a cursor + // Send click message Poco::format(text, "mouse type=%s x=%d y=%d count=1 buttons=1 modifier=0", std::string("buttondown"), docWidth/2, docHeight/6); sendTextFrame(socket0, text); text.clear(); Poco::format(text, "mouse type=%s x=%d y=%d count=1 buttons=1 modifier=0", std::string("buttonup"), docWidth/2, docHeight/6); sendTextFrame(socket0, text); - getResponseMessage(socket0, protocol, response, false); - CPPUNIT_ASSERT_MESSAGE(Poco::format("did not receive a %s message as expected", protocol), !response.empty()); + getResponseMessage(socket0, protocol, response, false, Poco::format(view, itView)); + CPPUNIT_ASSERT_MESSAGE(Poco::format(error, itView, protocol), !response.empty()); // Connect 0..N Views, where N=10 for (itView = 0; itView < 10; ++itView) @@ -2172,24 +2175,25 @@ void HTTPWSTest::testEachView(const std::string& doc, const std::string& type, c views.emplace_back(connectLOKit(_uri, request, _response)); } - const std::string error = Poco::format("did not receive a %s message as expected", view); - + itView = 1; // Load 0..N view for (auto socketView : views) { sendTextFrame(*socketView, "load url=" + documentURL); - CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(*socketView, "", true)); + CPPUNIT_ASSERT_MESSAGE(Poco::format(load, itView) + documentURL, isDocumentLoaded(*socketView, Poco::format(view, itView), true)); // Expected to receive response each view - getResponseMessage(*socketView, view, response, false); - CPPUNIT_ASSERT_MESSAGE(error, !response.empty()); + getResponseMessage(*socketView, protocolView, response, false, Poco::format(view, itView)); + CPPUNIT_ASSERT_MESSAGE(Poco::format(error, itView, protocolView), !response.empty()); + ++itView; } + itView = 0; // main view should receive response each view for (auto socketView : views) { - getResponseMessage(socket0, view, response, false); - CPPUNIT_ASSERT_MESSAGE(error, !response.empty()); + getResponseMessage(socket0, protocolView, response, false, Poco::format(view, itView)); + CPPUNIT_ASSERT_MESSAGE(Poco::format(error, itView, protocolView), !response.empty()); } } commit a613025b0e48f85a15a08138ac7ce34c6fb44bef Author: Henry Castro <hcas...@collabora.com> Date: Sat Sep 17 17:20:52 2016 -0400 loolwsd: test: add view name verbose diff --git a/loolwsd/test/helpers.hpp b/loolwsd/test/helpers.hpp index d6b519d..32f009b 100644 --- a/loolwsd/test/helpers.hpp +++ b/loolwsd/test/helpers.hpp @@ -188,7 +188,7 @@ std::string getTestServerURI() } inline -void getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std::string& response, const bool isLine) +void getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std::string& response, const bool isLine, const std::string& name = "") { try { @@ -206,7 +206,7 @@ void getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std int bytes = ws.receiveFrame(buffer, sizeof(buffer), flags); if (bytes > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE) { - std::cerr << "Got " << bytes << " bytes: " << LOOLProtocol::getAbbreviatedMessage(buffer, bytes) << std::endl; + std::cerr << name << "Got " << bytes << " bytes: " << LOOLProtocol::getAbbreviatedMessage(buffer, bytes) << std::endl; const std::string message = isLine ? LOOLProtocol::getFirstLine(buffer, bytes) : std::string(buffer, bytes); @@ -219,13 +219,13 @@ void getResponseMessage(Poco::Net::WebSocket& ws, const std::string& prefix, std } else { - std::cerr << "Got " << bytes << " bytes, flags: " << std::hex << flags << std::dec << '\n'; + std::cerr << name << "Got " << bytes << " bytes, flags: " << std::hex << flags << std::dec << '\n'; } retries = 10; } else { - std::cerr << "Timeout waiting for " << prefix << "\n"; + std::cerr << name << "Timeout waiting for " << prefix << "\n"; --retries; } } @@ -335,9 +335,9 @@ std::string assertResponseLine(T& ws, const std::string& prefix, const std::stri } inline -void getResponseMessage(const std::shared_ptr<Poco::Net::WebSocket>& ws, const std::string& prefix, std::string& response, const bool isLine) +void getResponseMessage(const std::shared_ptr<Poco::Net::WebSocket>& ws, const std::string& prefix, std::string& response, const bool isLine, const std::string& name = "") { - getResponseMessage(*ws, prefix, response, isLine); + getResponseMessage(*ws, prefix, response, isLine, name); } // Connecting to a Kit process is managed by document broker, that it does several commit 7243e485d014e72bf8af3b0229b5bf91e0db9a07 Author: Henry Castro <hcas...@collabora.com> Date: Sat Sep 17 17:52:54 2016 -0400 loolwsd: assign view id after loading When session, it is not assigned, ViewCallback thread will not enqueue the message diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp index 93a2312..2e44eeb 100644 --- a/loolwsd/ChildSession.cpp +++ b/loolwsd/ChildSession.cpp @@ -326,7 +326,6 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT if (_multiView) { std::ostringstream ossViewInfo; - _viewId = _loKitDocument->getView(); const auto viewId = std::to_string(_viewId); // Create a message object diff --git a/loolwsd/ChildSession.hpp b/loolwsd/ChildSession.hpp index e0b9df5..4cb7970 100644 --- a/loolwsd/ChildSession.hpp +++ b/loolwsd/ChildSession.hpp @@ -69,6 +69,7 @@ public: bool getStatus(const char *buffer, int length); bool getPartPageRectangles(const char *buffer, int length); int getViewId() const { return _viewId; } + void setViewId(const int viewId) { _viewId = viewId; } const std::string getViewUserName() const { return _userName; } void loKitCallback(const int nType, const std::string& rPayload); diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 65cab36..b8ae37c 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -1175,7 +1175,7 @@ private: if (_multiView) { - viewId = _loKitDocument->getView(); + session->setViewId((viewId = _loKitDocument->getView())); _viewIdToCallbackDescr.emplace(viewId, std::unique_ptr<CallbackDescriptor>(new CallbackDescriptor({ this, viewId }))); _loKitDocument->registerCallback(ViewCallback, _viewIdToCallbackDescr[viewId].get()); commit 722ca5daf5466401c596a41fa8e53407cf8223d2 Author: Henry Castro <hcas...@collabora.com> Date: Sat Sep 17 18:10:01 2016 -0400 loolwsd: log: warn lost messages diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index e1b0a12..65cab36 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -846,6 +846,7 @@ private: // Forward to the same view only. // Demultiplexing is done by Core. // TODO: replace with a map to be faster. + bool isFound = false; for (auto& it : pDescr->Doc->_connections) { if (it.second->isRunning()) @@ -853,11 +854,19 @@ private: auto session = it.second->getSession(); if (session && session->getViewId() == pDescr->ViewId) { + isFound = true; auto pNotif = new CallbackNotification(session, nType, payload); pDescr->Doc->_callbackQueue.enqueueNotification(pNotif); } } } + + if (!isFound) + { + Log::warn() << "Document::ViewCallback. The message [" << pDescr->ViewId + << "] [" << LOKitHelper::kitCallbackTypeToString(nType) + << "] [" << payload << "] is not sent to Master Session." << Log::end; + } } static void DocumentCallback(const int nType, const char* pPayload, void* pData) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits