Fix Boost exceptions in GetDateTime series
In cases when the input time is too large, we return the maximum
supported date in the ISO Extended format.
Tested: Unit tests pass
Signed-off-by: Nan Zhou <nanzhoumails@gmail.com>
Change-Id: I0dcd60d10d4357bd8700f0dbc1ef86d94bcc82bb
diff --git a/http/ut/utility_test.cpp b/http/ut/utility_test.cpp
index 4748c25..5dafdce 100644
--- a/http/ut/utility_test.cpp
+++ b/http/ut/utility_test.cpp
@@ -2,11 +2,16 @@
#include "gmock/gmock.h"
+namespace crow::utility
+{
+namespace
+{
+
TEST(Utility, Base64DecodeAuthString)
{
std::string authString("dXNlcm40bWU6cGFzc3cwcmQ=");
std::string result;
- EXPECT_TRUE(crow::utility::base64Decode(authString, result));
+ EXPECT_TRUE(base64Decode(authString, result));
EXPECT_EQ(result, "usern4me:passw0rd");
}
@@ -14,7 +19,7 @@
{
std::string junkString("\xff\xee\xdd\xcc\x01\x11\x22\x33");
std::string result;
- EXPECT_FALSE(crow::utility::base64Decode(junkString, result));
+ EXPECT_FALSE(base64Decode(junkString, result));
}
TEST(Utility, Base64EncodeString)
@@ -22,28 +27,28 @@
using namespace std::string_literals;
std::string encoded;
- encoded = crow::utility::base64encode("");
+ encoded = base64encode("");
EXPECT_EQ(encoded, "");
- encoded = crow::utility::base64encode("f");
+ encoded = base64encode("f");
EXPECT_EQ(encoded, "Zg==");
- encoded = crow::utility::base64encode("f0");
+ encoded = base64encode("f0");
EXPECT_EQ(encoded, "ZjA=");
- encoded = crow::utility::base64encode("f0\0"s);
+ encoded = base64encode("f0\0"s);
EXPECT_EQ(encoded, "ZjAA");
- encoded = crow::utility::base64encode("f0\0 "s);
+ encoded = base64encode("f0\0 "s);
EXPECT_EQ(encoded, "ZjAAIA==");
- encoded = crow::utility::base64encode("f0\0 B"s);
+ encoded = base64encode("f0\0 B"s);
EXPECT_EQ(encoded, "ZjAAIEI=");
- encoded = crow::utility::base64encode("f0\0 Ba"s);
+ encoded = base64encode("f0\0 Ba"s);
EXPECT_EQ(encoded, "ZjAAIEJh");
- encoded = crow::utility::base64encode("f0\0 Bar"s);
+ encoded = base64encode("f0\0 Bar"s);
EXPECT_EQ(encoded, "ZjAAIEJhcg==");
}
@@ -51,9 +56,9 @@
{
using namespace std::string_literals;
std::string data("Data fr\0m 90 reading a \nFile"s);
- std::string encoded = crow::utility::base64encode(data);
+ std::string encoded = base64encode(data);
std::string decoded;
- EXPECT_TRUE(crow::utility::base64Decode(encoded, decoded));
+ EXPECT_TRUE(base64Decode(encoded, decoded));
EXPECT_EQ(data, decoded);
}
@@ -67,19 +72,16 @@
// epoch
EXPECT_EQ(getDateTimeStdtime(std::time_t{0}), "1970-01-01T00:00:00+00:00");
- // some time in the past after the epoch
// Limits
EXPECT_EQ(getDateTimeStdtime(std::numeric_limits<std::time_t>::max()),
- "1969-12-31T23:59:59+00:00");
+ "9999-12-31T23:59:59+00:00");
EXPECT_EQ(getDateTimeStdtime(std::numeric_limits<std::time_t>::min()),
"1970-01-01T00:00:00+00:00");
}
-TEST(Utility, getDateTimeUint)
+TEST(Utility, GetDateTimeUint)
{
- using crow::utility::getDateTimeUint;
-
EXPECT_EQ(getDateTimeUint(uint64_t{1638312095}),
"2021-11-30T22:41:35+00:00");
// some time in the future, beyond 2038
@@ -89,22 +91,21 @@
EXPECT_EQ(getDateTimeUint(uint64_t{253402300799}),
"9999-12-31T23:59:59+00:00");
- // This test currently throws an exception
- // EXPECT_EQ(getDateTimeUint(std::numeric_limits<uint64_t>::max()), "");
+ // returns the maximum Redfish date
+ EXPECT_EQ(getDateTimeUint(std::numeric_limits<uint64_t>::max()),
+ "9999-12-31T23:59:59+00:00");
EXPECT_EQ(getDateTimeUint(std::numeric_limits<uint64_t>::min()),
"1970-01-01T00:00:00+00:00");
}
-TEST(Utility, getDateTimeUintMs)
+TEST(Utility, GetDateTimeUintMs)
{
- using crow::utility::getDateTimeUintMs;
-
- // Note, this is the wrong result, but is here to make sure that we don't
- // have worse behavior (ie seg faults, exceptions) when this happens
+ // returns the maximum Redfish date
EXPECT_EQ(getDateTimeUintMs(std::numeric_limits<uint64_t>::max()),
- "1969-12-31T23:59:59.999000+00:00");
-
+ "9999-12-31T23:59:59.999000+00:00");
EXPECT_EQ(getDateTimeUintMs(std::numeric_limits<uint64_t>::min()),
"1970-01-01T00:00:00+00:00");
}
+} // namespace
+} // namespace crow::utility