[Libreoffice-commits] online.git: loolwsd/test
Pranav Kant
pranavk at collabora.com
Fri Feb 19 21:55:25 UTC 2016
loolwsd/test/data/password-protected.ods |binary
loolwsd/test/httpwstest.cpp | 61 +++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
New commits:
commit b902d80ec7354923f3680aea83b774114be387c4
Author: Pranav Kant <pranavk at collabora.com>
Date: Thu Feb 18 02:45:28 2016 +0530
loolwsd: Add a unit test for password protected documents
Change-Id: Ia675d2750e11cb466b2e80b8f36f2ef04e0a7a09
Reviewed-on: https://gerrit.libreoffice.org/22466
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/test/data/password-protected.ods b/loolwsd/test/data/password-protected.ods
new file mode 100644
index 0000000..d803d8e
Binary files /dev/null and b/loolwsd/test/data/password-protected.ods differ
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index e17702d..351031d 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -22,6 +22,8 @@
#include <Common.hpp>
#include <ChildProcessSession.hpp>
+using Poco::StringTokenizer;
+
/// Tests the HTTP WebSocket API of loolwsd. The server has to be started manually before running this test.
class HTTPWSTest : public CPPUNIT_NS::TestFixture
{
@@ -34,11 +36,13 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testPaste);
CPPUNIT_TEST(testLargePaste);
CPPUNIT_TEST(testRenderingOptions);
+ CPPUNIT_TEST(testPasswordProtectedDocument);
CPPUNIT_TEST_SUITE_END();
void testPaste();
void testLargePaste();
void testRenderingOptions();
+ void testPasswordProtectedDocument();
static
void sendTextFrame(Poco::Net::WebSocket& socket, const std::string& string);
@@ -216,6 +220,63 @@ void HTTPWSTest::testRenderingOptions()
}
}
+void HTTPWSTest::testPasswordProtectedDocument()
+{
+ // Load a password protected document
+ const std::string documentPath = TDOC "/password-protected.ods";
+ const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
+ // Send a load request without password first
+ sendTextFrame(_socket, "load url=" + documentURL);
+
+ int flags;
+ int n;
+ int counter = 0;
+ do
+ {
+ char buffer[READ_BUFFER_SIZE];
+ n = _socket.receiveFrame(buffer, sizeof(buffer), flags);
+ if (n > 0)
+ {
+ std::string line = LOOLProtocol::getFirstLine(buffer, n);
+ StringTokenizer tokens(line, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
+ std::string errorCommand;
+ std::string errorKind;
+ if (counter == 0 &&
+ tokens[0] == "error:" &&
+ LOOLProtocol::getTokenString(tokens[1], "cmd", errorCommand) &&
+ LOOLProtocol::getTokenString(tokens[2], "kind", errorKind) )
+ {
+ CPPUNIT_ASSERT_EQUAL(std::string("load"), errorCommand);
+ // TODO: Do a test for document requiring password to edit
+ CPPUNIT_ASSERT_EQUAL(std::string("passwordrequired:to-view"), errorKind);
+
+ // Send another load request with incorrect password
+ sendTextFrame(_socket, "load url=" + documentURL + " password=2");
+ counter++;
+ }
+ else if (counter == 1 &&
+ tokens[0] == "error:" &&
+ LOOLProtocol::getTokenString(tokens[1], "cmd", errorCommand) &&
+ LOOLProtocol::getTokenString(tokens[2], "kind", errorKind) )
+ {
+ CPPUNIT_ASSERT_EQUAL(std::string("load"), errorCommand);
+ CPPUNIT_ASSERT_EQUAL(std::string("wrongpassword"), errorKind);
+
+ // Send another load request with correct password
+ sendTextFrame(_socket, "load url=" + documentURL + " password=1");
+ counter++;
+ }
+ else if (counter == 2 &&
+ tokens[0] == "status:")
+ {
+ // Entering correct password opened the document
+ break;
+ }
+ }
+ }
+ while (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE);
+}
+
void HTTPWSTest::sendTextFrame(Poco::Net::WebSocket& socket, const std::string& string)
{
socket.sendFrame(string.data(), string.size());
More information about the Libreoffice-commits
mailing list