loolwsd/test/httpwstest.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+)
New commits: commit 385359824a1f4f37d61a9af637df768e7e55f531 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sun Apr 17 23:31:17 2016 -0400 loolwsd: unittest to validate correct doc reloading while unloading Change-Id: Id956fc9e243c44ecd3914b448ab92f87e011d3ee Reviewed-on: https://gerrit.libreoffice.org/24185 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp index 38e7f16..101824e 100644 --- a/loolwsd/test/httpwstest.cpp +++ b/loolwsd/test/httpwstest.cpp @@ -57,6 +57,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture CPPUNIT_TEST(testBadLoad); CPPUNIT_TEST(testReload); CPPUNIT_TEST(testSaveOnDisconnect); + CPPUNIT_TEST(testReloadWhileDisconnecting); CPPUNIT_TEST(testExcelLoad); CPPUNIT_TEST(testPaste); CPPUNIT_TEST(testLargePaste); @@ -79,6 +80,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture void testBadLoad(); void testReload(); void testSaveOnDisconnect(); + void testReloadWhileDisconnecting(); void testExcelLoad(); void testPaste(); void testLargePaste(); @@ -454,6 +456,89 @@ void HTTPWSTest::testSaveOnDisconnect() } } +void HTTPWSTest::testReloadWhileDisconnecting() +{ + const std::string documentPath = Util::getTempFilePath(TDOC, "hello.odt"); + const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString(); + + int kitcount = -1; + try + { + // Load a document and get its status. + Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL); + Poco::Net::WebSocket socket = *connectLOKit(request, _response); + + sendTextFrame(socket, "load url=" + documentURL); + CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(socket)); + + sendTextFrame(socket, "uno .uno:SelectAll"); + sendTextFrame(socket, "uno .uno:Delete"); + sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\naaa bbb ccc"); + + kitcount = countLoolKitProcesses(); + + // Shutdown abruptly. + socket.shutdown(); + } + catch (const Poco::Exception& exc) + { + CPPUNIT_FAIL(exc.displayText()); + } + + std::cout << "Loading again." << std::endl; + try + { + // Load the same document and check that the last changes (pasted text) is saved. + Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL); + Poco::Net::WebSocket socket = *connectLOKit(request, _response); + + sendTextFrame(socket, "load url=" + documentURL); + sendTextFrame(socket, "status"); + CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(socket)); + + // Should have no new instances. + CPPUNIT_ASSERT_EQUAL(kitcount, countLoolKitProcesses()); + + // Check if the document contains the pasted text. + sendTextFrame(socket, "uno .uno:SelectAll"); + sendTextFrame(socket, "gettextselection mimetype=text/plain;charset=utf-8"); + std::string selection; + int flags; + int n; + do + { + char buffer[READ_BUFFER_SIZE]; + n = socket.receiveFrame(buffer, sizeof(buffer), flags); + std::cout << "Got " << n << " bytes, flags: " << std::hex << flags << std::dec << '\n'; + if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE) + { + std::cout << "Received message: " << LOOLProtocol::getAbbreviatedMessage(buffer, n) << '\n'; + const std::string line = LOOLProtocol::getFirstLine(buffer, n); + if (line.find("editlock: ") == 0) + { + // We must have the editlock, otherwise we aren't alone. + CPPUNIT_ASSERT_EQUAL(std::string("editlock: 1"), line); + } + + const std::string prefix = "textselectioncontent: "; + if (line.find(prefix) == 0) + { + selection = line.substr(prefix.length()); + break; + } + } + } + while (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE); + socket.shutdown(); + Util::removeFile(documentPath); + CPPUNIT_ASSERT_EQUAL(std::string("aaa bbb ccc"), selection); + } + catch (const Poco::Exception& exc) + { + CPPUNIT_FAIL(exc.displayText()); + } +} + void HTTPWSTest::testExcelLoad() { try _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits