tdf#107038 Poco::Timestamp replacement with std::chrono
Util added getHttpTime
WhiteBoxTests added test for getHttpTime
Change-Id: Ifb6a3fb2dc9b059b925e7b881362b72759a8b56b
Reviewed-on: https://gerrit.libreoffice.org/79754
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
diff --git a/common/Util.cpp b/common/Util.cpp
index 4433fe6..4fc35f3 100644
--- a/common/Util.cpp
+++ b/common/Util.cpp
@@ -784,6 +784,16 @@
return time_now;
}
std::string getHttpTime(std::chrono::system_clock::time_point time)
{
char http_time[64];
std::time_t time_c = std::chrono::system_clock::to_time_t(time);
std::tm time_tm = *std::gmtime(&time_c);
strftime(http_time, sizeof(http_time), "%a, %d %b %Y %T", &time_tm);
return http_time;
}
size_t findInVector(const std::vector<char>& tokens, const char *cstring)
{
assert(cstring);
diff --git a/common/Util.hpp b/common/Util.hpp
index c1f7999..6c97ece 100644
--- a/common/Util.hpp
+++ b/common/Util.hpp
@@ -926,6 +926,9 @@
//// Return current time in HTTP format.
std::string getHttpTimeNow();
//// Return time in HTTP format.
std::string getHttpTime(std::chrono::system_clock::time_point time);
//// Return timestamp of file
std::chrono::system_clock::time_point getFileTimestamp(std::string str_path);
diff --git a/test/UnitWOPITemplate.cpp b/test/UnitWOPITemplate.cpp
index 9416ea3..d133178 100644
--- a/test/UnitWOPITemplate.cpp
+++ b/test/UnitWOPITemplate.cpp
@@ -54,7 +54,7 @@
fileInfo->set("UserFriendlyName", "test");
fileInfo->set("UserCanWrite", "true");
fileInfo->set("PostMessageOrigin", "localhost");
fileInfo->set("LastModifiedTime", Poco::DateTimeFormatter::format(Poco::DateTime(getFileLastModifiedTime()), Poco::DateTimeFormat::ISO8601_FRAC_FORMAT));
fileInfo->set("LastModifiedTime", Util::getIso8601FracformatTime(getFileLastModifiedTime()));
fileInfo->set("EnableOwnerTermination", "true");
std::ostringstream jsonStream;
@@ -65,7 +65,7 @@
std::ostringstream oss;
oss << "HTTP/1.1 200 OK\r\n"
<< "Last-Modified: " << Poco::DateTimeFormatter::format(getFileLastModifiedTime(), Poco::DateTimeFormat::HTTP_FORMAT) << "\r\n"
<< "Last-Modified: " << Util::getHttpTime(getFileLastModifiedTime()) << "\r\n"
<< "User-Agent: " << WOPI_AGENT_STRING << "\r\n"
<< "Content-Length: " << responseString.size() << "\r\n"
<< "Content-Type: " << mimeType << "\r\n"
@@ -113,7 +113,7 @@
oss << "HTTP/1.1 200 OK\r\n"
<< "User-Agent: " << WOPI_AGENT_STRING << "\r\n"
<< "\r\n"
<< "{\"LastModifiedTime\": \"" << Poco::DateTimeFormatter::format(getFileLastModifiedTime(), Poco::DateTimeFormat::ISO8601_FRAC_FORMAT) << "\" }";
<< "{\"LastModifiedTime\": \"" << Util::getHttpTime(getFileLastModifiedTime()) << "\" }";
socket->send(oss.str());
socket->shutdown();
diff --git a/test/WhiteBoxTests.cpp b/test/WhiteBoxTests.cpp
index e3a6d52..6bb74f6 100644
--- a/test/WhiteBoxTests.cpp
+++ b/test/WhiteBoxTests.cpp
@@ -762,6 +762,12 @@
oss.str(std::string());
oss << t.time_since_epoch().count();
CPPUNIT_ASSERT_EQUAL(first, oss.str());
t = std::chrono::system_clock::time_point();
CPPUNIT_ASSERT_EQUAL(std::string("Thu, 01 Jan 1970 00:00:00"), Util::getHttpTime(t));
t = std::chrono::system_clock::time_point(std::chrono::nanoseconds(1569592993495336798));
CPPUNIT_ASSERT_EQUAL(std::string("Fri, 27 Sep 2019 14:03:13"), Util::getHttpTime(t));
}
CPPUNIT_TEST_SUITE_REGISTRATION(WhiteBoxTests);
diff --git a/test/WopiTestServer.hpp b/test/WopiTestServer.hpp
index bdeecd9..0845ba1 100644
--- a/test/WopiTestServer.hpp
+++ b/test/WopiTestServer.hpp
@@ -41,7 +41,7 @@
std::string _fileContent;
/// Last modified time of the file
Poco::Timestamp _fileLastModifiedTime;
std::chrono::system_clock::time_point _fileLastModifiedTime;
protected:
const std::string& getWopiSrc() const { return _wopiSrc; }
@@ -54,10 +54,10 @@
void setFileContent(const std::string& fileContent)
{
_fileContent = fileContent;
_fileLastModifiedTime = Poco::Timestamp();
_fileLastModifiedTime = std::chrono::system_clock::now();
}
const Poco::Timestamp& getFileLastModifiedTime() const { return _fileLastModifiedTime; }
const std::chrono::system_clock::time_point& getFileLastModifiedTime() const { return _fileLastModifiedTime; }
public:
WopiTestServer(std::string fileContent = "Hello, world")
@@ -126,7 +126,7 @@
fileInfo->set("UserFriendlyName", "test");
fileInfo->set("UserCanWrite", "true");
fileInfo->set("PostMessageOrigin", "localhost");
fileInfo->set("LastModifiedTime", Poco::DateTimeFormatter::format(Poco::DateTime(_fileLastModifiedTime), Poco::DateTimeFormat::ISO8601_FRAC_FORMAT));
fileInfo->set("LastModifiedTime", Util::getIso8601FracformatTime(_fileLastModifiedTime));
fileInfo->set("EnableOwnerTermination", "true");
std::ostringstream jsonStream;
@@ -137,7 +137,7 @@
std::ostringstream oss;
oss << "HTTP/1.1 200 OK\r\n"
"Last-Modified: " << Poco::DateTimeFormatter::format(_fileLastModifiedTime, Poco::DateTimeFormat::HTTP_FORMAT) << "\r\n"
"Last-Modified: " << Util::getHttpTime(_fileLastModifiedTime) << "\r\n"
"User-Agent: " WOPI_AGENT_STRING "\r\n"
"Content-Length: " << responseString.size() << "\r\n"
"Content-Type: " << mimeType << "\r\n"
@@ -160,7 +160,7 @@
std::ostringstream oss;
oss << "HTTP/1.1 200 OK\r\n"
"Last-Modified: " << Poco::DateTimeFormatter::format(_fileLastModifiedTime, Poco::DateTimeFormat::HTTP_FORMAT) << "\r\n"
"Last-Modified: " << Util::getHttpTime(_fileLastModifiedTime) << "\r\n"
"User-Agent: " WOPI_AGENT_STRING "\r\n"
"Content-Length: " << _fileContent.size() << "\r\n"
"Content-Type: " << mimeType << "\r\n"
@@ -194,7 +194,7 @@
std::ostringstream oss;
oss << "HTTP/1.1 200 OK\r\n"
"Last-Modified: " << Poco::DateTimeFormatter::format(_fileLastModifiedTime, Poco::DateTimeFormat::HTTP_FORMAT) << "\r\n"
"Last-Modified: " << Util::getHttpTime(_fileLastModifiedTime) << "\r\n"
"User-Agent: " WOPI_AGENT_STRING "\r\n"
"Content-Length: " << content.size() << "\r\n"
"Content-Type: application/json\r\n"
@@ -214,9 +214,7 @@
if (!wopiTimestamp.empty())
{
const std::string fileModifiedTime =
Poco::DateTimeFormatter::format(Poco::DateTime(_fileLastModifiedTime),
Poco::DateTimeFormat::ISO8601_FRAC_FORMAT);
const std::string fileModifiedTime = Util::getIso8601FracformatTime(_fileLastModifiedTime);
if (wopiTimestamp != fileModifiedTime)
{
std::ostringstream oss;
@@ -242,7 +240,7 @@
oss << "HTTP/1.1 200 OK\r\n"
"User-Agent: " WOPI_AGENT_STRING "\r\n"
"\r\n"
"{\"LastModifiedTime\": \"" << Poco::DateTimeFormatter::format(_fileLastModifiedTime, Poco::DateTimeFormat::ISO8601_FRAC_FORMAT) << "\" }";
"{\"LastModifiedTime\": \"" << Util::getIso8601FracformatTime(_fileLastModifiedTime) << "\" }";
socket->send(oss.str());
socket->shutdown();