[Libreoffice-commits] online.git: loolwsd/Storage.hpp loolwsd/test loolwsd/Util.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Wed Mar 23 00:00:54 UTC 2016
loolwsd/Storage.hpp | 2 +-
loolwsd/Util.hpp | 16 ++++++++++++++++
loolwsd/test/httpposttest.cpp | 8 +++++++-
loolwsd/test/httpwstest.cpp | 30 ++++++++++++++++++++++--------
4 files changed, 46 insertions(+), 10 deletions(-)
New commits:
commit d48d9044a1d0263d4865de9df143233948c9bee0
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Mar 19 17:35:24 2016 -0400
loolwsd: run tests on doc copies
Tests can modify the test documents they use.
Currently there is data-loss protection that
saves an open doc if connection is lost with
the client. For tests this means modification
are saved when a connection is terminated
ungracefully and this both adds noise
to the git checkout and makes subsequent
tests fail.
This patch makes temp copies of the original
doc before a test is run and deletes them
afterwards.
Change-Id: I1dd6ff2b839701e85c8bd502ba75170c01fa106e
Reviewed-on: https://gerrit.libreoffice.org/23447
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/Storage.hpp b/loolwsd/Storage.hpp
index b3605c5..d185957 100644
--- a/loolwsd/Storage.hpp
+++ b/loolwsd/Storage.hpp
@@ -104,7 +104,7 @@ public:
if (!Poco::File(_jailedFilePath).exists() && link(publicFilePath.c_str(), _jailedFilePath.c_str()) == -1)
{
// Failed
- Log::error("link(\"" + publicFilePath + "\", \"" + _jailedFilePath + "\") failed.");
+ Log::warn("link(\"" + publicFilePath + "\", \"" + _jailedFilePath + "\") failed. Will copy.");
}
try
diff --git a/loolwsd/Util.hpp b/loolwsd/Util.hpp
index 2e83ea8..c496287 100644
--- a/loolwsd/Util.hpp
+++ b/loolwsd/Util.hpp
@@ -111,6 +111,22 @@ namespace Util
removeFile(path.toString(), recursive);
}
+ /// Make a temp copy of a file.
+ /// Primarily used by tests to avoid tainting the originals.
+ /// srcDir shouldn't end with '/' and srcFilename shouldn't contain '/'.
+ /// Returns the created file path.
+ inline
+ std::string getTempFilePath(const std::string srcDir, const std::string& srcFilename)
+ {
+ const std::string srcPath = srcDir + '/' + srcFilename;
+
+ std::string dstPath = std::tmpnam(nullptr);
+ dstPath += '_' + srcFilename;
+
+ Poco::File(srcPath).copyTo(dstPath);
+ return dstPath;
+ }
+
/// Returns the name of the signal.
std::string signalName(int signo);
diff --git a/loolwsd/test/httpposttest.cpp b/loolwsd/test/httpposttest.cpp
index 0f843ed..5f43061 100644
--- a/loolwsd/test/httpposttest.cpp
+++ b/loolwsd/test/httpposttest.cpp
@@ -21,6 +21,7 @@
#include <cppunit/extensions/HelperMacros.h>
#include <Common.hpp>
+#include <Util.hpp>
#include <ChildProcessSession.hpp>
/// Tests the HTTP POST API of loolwsd. The server has to be started manually before running this test.
@@ -51,6 +52,8 @@ public:
void HTTPPostTest::testConvertTo()
{
+ const auto srcPath = Util::getTempFilePath(TDOC, "hello.odt");
+
Poco::URI uri("https://127.0.0.1:" + std::to_string(ClientPortNumber));
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort());
@@ -58,7 +61,7 @@ void HTTPPostTest::testConvertTo()
Poco::Net::HTMLForm form;
form.setEncoding(Poco::Net::HTMLForm::ENCODING_MULTIPART);
form.set("format", "txt");
- form.addPart("data", new Poco::Net::FilePartSource(TDOC "/hello.odt"));
+ form.addPart("data", new Poco::Net::FilePartSource(srcPath));
form.prepareSubmit(request);
// If this results in a Poco::Net::ConnectionRefusedException, loolwsd is not running.
form.write(session.sendRequest(request));
@@ -73,6 +76,9 @@ void HTTPPostTest::testConvertTo()
std::stringstream expectedStream;
expectedStream << fileStream.rdbuf();
+ // Remove the temp files.
+ Util::removeFile(srcPath);
+
// In some cases the result is prefixed with (the UTF-8 encoding of) the Unicode BOM
// (U+FEFF). Skip that.
std::string actualString = actualStream.str();
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index 9b097fd..2e4ff0a 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -24,8 +24,10 @@
#include <Poco/JSON/JSON.h>
#include <Poco/JSON/Parser.h>
#include <Poco/Dynamic/Var.h>
-#include <LOOLProtocol.hpp>
+
#include <Common.hpp>
+#include <Util.hpp>
+#include <LOOLProtocol.hpp>
#include <ChildProcessSession.hpp>
/// Tests the HTTP WebSocket API of loolwsd. The server has to be started manually before running this test.
@@ -90,7 +92,12 @@ public:
void tearDown()
{
+ // Remove the temp files.
+ Util::removeFile(_tmpFilePath);
}
+
+private:
+ std::string _tmpFilePath;
};
void HTTPWSTest::testPaste()
@@ -98,7 +105,8 @@ void HTTPWSTest::testPaste()
try
{
// Load a document and make it empty.
- const std::string documentPath = TDOC "/hello.odt";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "hello.odt");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
@@ -152,7 +160,8 @@ void HTTPWSTest::testLargePaste()
try
{
// Load a document and make it empty.
- const std::string documentPath = TDOC "/hello.odt";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "hello.odt");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
@@ -203,7 +212,8 @@ void HTTPWSTest::testRenderingOptions()
try
{
// Load a document and get its size.
- const std::string documentPath = TDOC "/hide-whitespace.odt";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "hide-whitespace.odt");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
const std::string options = "{\"rendering\":{\".uno:HideWhitespace\":{\"type\":\"boolean\",\"value\":\"true\"}}}";
@@ -256,7 +266,8 @@ void HTTPWSTest::testPasswordProtectedDocumentWithoutPassword()
{
try
{
- const std::string documentPath = TDOC "/password-protected.ods";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "password-protected.ods");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
@@ -291,7 +302,8 @@ void HTTPWSTest::testPasswordProtectedDocumentWithWrongPassword()
{
try
{
- const std::string documentPath = TDOC "/password-protected.ods";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "password-protected.ods");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
@@ -326,7 +338,8 @@ void HTTPWSTest::testPasswordProtectedDocumentWithCorrectPassword()
{
try
{
- const std::string documentPath = TDOC "/password-protected.ods";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "password-protected.ods");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
@@ -354,7 +367,8 @@ void HTTPWSTest::testImpressPartCountChanged()
try
{
// Load a document
- const std::string documentPath = TDOC "/insert-delete.odp";
+ const std::string documentPath = Util::getTempFilePath(TDOC, "insert-delete.odp");
+ _tmpFilePath = documentPath;
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
More information about the Libreoffice-commits
mailing list