diff options
Diffstat (limited to 'test/redfish-core/include/utils/time_utils_test.cpp')
-rw-r--r-- | test/redfish-core/include/utils/time_utils_test.cpp | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/test/redfish-core/include/utils/time_utils_test.cpp b/test/redfish-core/include/utils/time_utils_test.cpp new file mode 100644 index 0000000000..035d8ce95b --- /dev/null +++ b/test/redfish-core/include/utils/time_utils_test.cpp @@ -0,0 +1,143 @@ +#include "utils/time_utils.hpp" + +#include <gmock/gmock.h> // IWYU pragma: keep +#include <gtest/gtest.h> // IWYU pragma: keep + +// IWYU pragma: no_include <gtest/gtest-message.h> +// IWYU pragma: no_include <gtest/gtest-test-part.h> +// IWYU pragma: no_include "gtest/gtest_pred_impl.h" +// IWYU pragma: no_include <gmock/gmock-matchers.h> +// IWYU pragma: no_include <gtest/gtest-matchers.h> + +namespace redfish::time_utils +{ +namespace +{ + +TEST(FromDurationTest, PositiveTests) +{ + EXPECT_EQ(fromDurationString("PT12S"), std::chrono::milliseconds(12000)); + EXPECT_EQ(fromDurationString("PT0.204S"), std::chrono::milliseconds(204)); + EXPECT_EQ(fromDurationString("PT0.2S"), std::chrono::milliseconds(200)); + EXPECT_EQ(fromDurationString("PT50M"), std::chrono::milliseconds(3000000)); + EXPECT_EQ(fromDurationString("PT23H"), std::chrono::milliseconds(82800000)); + EXPECT_EQ(fromDurationString("P51D"), + std::chrono::milliseconds(4406400000)); + EXPECT_EQ(fromDurationString("PT2H40M10.1S"), + std::chrono::milliseconds(9610100)); + EXPECT_EQ(fromDurationString("P20DT2H40M10.1S"), + std::chrono::milliseconds(1737610100)); + EXPECT_EQ(fromDurationString(""), std::chrono::milliseconds(0)); +} + +TEST(FromDurationTest, NegativeTests) +{ + EXPECT_EQ(fromDurationString("PTS"), std::nullopt); + EXPECT_EQ(fromDurationString("P1T"), std::nullopt); + EXPECT_EQ(fromDurationString("PT100M1000S100"), std::nullopt); + EXPECT_EQ(fromDurationString("PDTHMS"), std::nullopt); + EXPECT_EQ(fromDurationString("P9999999999999999999999999DT"), std::nullopt); + EXPECT_EQ(fromDurationString("PD222T222H222M222.222S"), std::nullopt); + EXPECT_EQ(fromDurationString("PT99999H9999999999999999999999M99999999999S"), + std::nullopt); + EXPECT_EQ(fromDurationString("PT-9H"), std::nullopt); +} +TEST(ToDurationTest, PositiveTests) +{ + EXPECT_EQ(toDurationString(std::chrono::milliseconds(12000)), "PT12.000S"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(204)), "PT0.204S"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(200)), "PT0.200S"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(3000000)), "PT50M"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(82800000)), "PT23H"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(4406400000)), "P51DT"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(9610100)), + "PT2H40M10.100S"); + EXPECT_EQ(toDurationString(std::chrono::milliseconds(1737610100)), + "P20DT2H40M10.100S"); +} + +TEST(ToDurationTest, NegativeTests) +{ + EXPECT_EQ(toDurationString(std::chrono::milliseconds(-250)), ""); +} + +TEST(ToDurationStringFromUintTest, PositiveTests) +{ + uint64_t maxAcceptedTimeMs = + static_cast<uint64_t>(std::chrono::milliseconds::max().count()); + + EXPECT_NE(toDurationStringFromUint(maxAcceptedTimeMs), std::nullopt); + EXPECT_EQ(toDurationStringFromUint(0), "PT"); + EXPECT_EQ(toDurationStringFromUint(250), "PT0.250S"); + EXPECT_EQ(toDurationStringFromUint(5000), "PT5.000S"); +} + +TEST(ToDurationStringFromUintTest, NegativeTests) +{ + uint64_t minNotAcceptedTimeMs = + static_cast<uint64_t>(std::chrono::milliseconds::max().count()) + 1; + + EXPECT_EQ(toDurationStringFromUint(minNotAcceptedTimeMs), std::nullopt); + EXPECT_EQ(toDurationStringFromUint(static_cast<uint64_t>(-1)), + std::nullopt); +} + +TEST(GetDateTimeStdtime, ConversionTests) +{ + // some time before the epoch + EXPECT_EQ(getDateTimeStdtime(std::time_t{-1234567}), + "1970-01-01T00:00:00+00:00"); + + // epoch + EXPECT_EQ(getDateTimeStdtime(std::time_t{0}), "1970-01-01T00:00:00+00:00"); + + // Limits + EXPECT_EQ(getDateTimeStdtime(std::numeric_limits<std::time_t>::max()), + "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(GetDateTimeUint, ConversionTests) +{ + EXPECT_EQ(getDateTimeUint(uint64_t{1638312095}), + "2021-11-30T22:41:35+00:00"); + // some time in the future, beyond 2038 + EXPECT_EQ(getDateTimeUint(uint64_t{41638312095}), + "3289-06-18T21:48:15+00:00"); + // the maximum time we support + EXPECT_EQ(getDateTimeUint(uint64_t{253402300799}), + "9999-12-31T23:59:59+00:00"); + + // 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(GetDateTimeUintMs, ConverstionTests) +{ + EXPECT_EQ(getDateTimeUintMs(uint64_t{1638312095123}), + "2021-11-30T22:41:35.123+00:00"); + // returns the maximum Redfish date + EXPECT_EQ(getDateTimeUintMs(std::numeric_limits<uint64_t>::max()), + "9999-12-31T23:59:59.999+00:00"); + EXPECT_EQ(getDateTimeUintMs(std::numeric_limits<uint64_t>::min()), + "1970-01-01T00:00:00.000+00:00"); +} + +TEST(Utility, GetDateTimeUintUs) +{ + EXPECT_EQ(getDateTimeUintUs(uint64_t{1638312095123456}), + "2021-11-30T22:41:35.123456+00:00"); + // returns the maximum Redfish date + EXPECT_EQ(getDateTimeUintUs(std::numeric_limits<uint64_t>::max()), + "9999-12-31T23:59:59.999999+00:00"); + EXPECT_EQ(getDateTimeUintUs(std::numeric_limits<uint64_t>::min()), + "1970-01-01T00:00:00.000000+00:00"); +} + +} // namespace +} // namespace redfish::time_utils |