blob: f3ecaf95afe0dd4962c1b08a27321111f3e32d92 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/feedback/utils/time.h"
#include <string>
#include "src/lib/timekeeper/test_clock.h"
#include "third_party/googletest/googletest/include/gtest/gtest.h"
namespace feedback {
namespace {
constexpr zx::duration kZero(zx::sec(0));
constexpr zx::duration kSecsOnly(zx::sec(1));
constexpr zx::duration kMinsOnly(zx::min(2));
constexpr zx::duration kHoursOnly(zx::hour(3));
constexpr zx::duration kDaysOnly(zx::hour(4 * 24));
constexpr zx::duration kSecsAndMins(kSecsOnly + kMinsOnly);
constexpr zx::duration kSecsAndHours(kSecsOnly + kHoursOnly);
constexpr zx::duration kSecsAndDays(kSecsOnly + kDaysOnly);
constexpr zx::duration kMinsAndHours(kMinsOnly + kHoursOnly);
constexpr zx::duration kMinsAndDays(kMinsOnly + kDaysOnly);
constexpr zx::duration kHoursAndDays(kHoursOnly + kDaysOnly);
constexpr zx::duration kSecsAndMinsAndHours(kSecsOnly + kMinsOnly + kHoursOnly);
constexpr zx::duration kSecsAndMinsAndDays(kSecsOnly + kMinsOnly + kDaysOnly);
constexpr zx::duration kSecsAndHoursAndDays(kSecsOnly + kHoursOnly + kDaysOnly);
constexpr zx::duration kMinsAndHoursAndDays(kMinsOnly + kHoursOnly + kDaysOnly);
constexpr zx::duration kAllUnits(kSecsOnly + kMinsOnly + kHoursOnly + kDaysOnly);
constexpr zx::duration kRndmNSecs(zx::nsec(278232000000000));
constexpr zx::duration kNegRndmNSecs(zx::nsec(-278232000000000));
constexpr char kZeroString[] = "0d0h0m0s";
constexpr char kSecsOnlyString[] = "0d0h0m1s";
constexpr char kMinsOnlyString[] = "0d0h2m0s";
constexpr char kHoursOnlyString[] = "0d3h0m0s";
constexpr char kDaysOnlyString[] = "4d0h0m0s";
constexpr char kSecsAndMinsString[] = "0d0h2m1s";
constexpr char kSecsAndHoursString[] = "0d3h0m1s";
constexpr char kSecsAndDaysString[] = "4d0h0m1s";
constexpr char kMinsAndHoursString[] = "0d3h2m0s";
constexpr char kMinsAndDaysString[] = "4d0h2m0s";
constexpr char kHoursAndDaysString[] = "4d3h0m0s";
constexpr char kSecsAndMinsAndHoursString[] = "0d3h2m1s";
constexpr char kSecsAndMinsAndDaysString[] = "4d0h2m1s";
constexpr char kSecsAndHoursAndDaysString[] = "4d3h0m1s";
constexpr char kMinsAndHoursAndDaysString[] = "4d3h2m0s";
constexpr char kAllUnitsString[] = "4d3h2m1s";
constexpr char kRndmNSecsString[] = "3d5h17m12s";
constexpr zx::time_utc kTime1(0);
constexpr zx::time_utc kTime2((zx::hour(7) + zx::min(14) + zx::sec(52)).get());
constexpr zx::time_utc kTime3((zx::hour(3) * 24 + zx::hour(15) + zx::min(33) + zx::sec(17)).get());
constexpr char kTime1Str[] = "1970-01-01 00:00:00 GMT";
constexpr char kTime2Str[] = "1970-01-01 07:14:52 GMT";
constexpr char kTime3Str[] = "1970-01-04 15:33:17 GMT";
TEST(TimeTest, FormatDuration_ZeroDuration) {
EXPECT_EQ(FormatDuration(kZero).value(), kZeroString);
}
TEST(TimeTest, FormatDuration_SecondOnly) {
EXPECT_EQ(FormatDuration(kSecsOnly).value(), kSecsOnlyString);
}
TEST(TimeTest, FormatDuration_MinuteOnly) {
EXPECT_EQ(FormatDuration(kMinsOnly).value(), kMinsOnlyString);
}
TEST(TimeTest, FormatDuration_HourOnly) {
EXPECT_EQ(FormatDuration(kHoursOnly).value(), kHoursOnlyString);
}
TEST(TimeTest, FormatDuration_DayOnly) {
EXPECT_EQ(FormatDuration(kDaysOnly).value(), kDaysOnlyString);
}
TEST(TimeTest, FormatDuration_SecondAndMinute) {
EXPECT_EQ(FormatDuration(kSecsAndMins).value(), kSecsAndMinsString);
}
TEST(TimeTest, FormatDuration_SecondAndHour) {
EXPECT_EQ(FormatDuration(kSecsAndHours).value(), kSecsAndHoursString);
}
TEST(TimeTest, FormatDuration_SecondAndDay) {
EXPECT_EQ(FormatDuration(kSecsAndDays).value(), kSecsAndDaysString);
}
TEST(TimeTest, FormatDuration_MinuteAndHour) {
EXPECT_EQ(FormatDuration(kMinsAndHours).value(), kMinsAndHoursString);
}
TEST(TimeTest, FormatDuration_MinuteAndDay) {
EXPECT_EQ(FormatDuration(kMinsAndDays).value(), kMinsAndDaysString);
}
TEST(TimeTest, FormatDuration_HourAndDay) {
EXPECT_EQ(FormatDuration(kHoursAndDays).value(), kHoursAndDaysString);
}
TEST(TimeTest, FormatDuration_SecAndMinAndHour) {
EXPECT_EQ(FormatDuration(kSecsAndMinsAndHours).value(), kSecsAndMinsAndHoursString);
}
TEST(TimeTest, FormatDuration_SecAndMinAndDay) {
EXPECT_EQ(FormatDuration(kSecsAndMinsAndDays).value(), kSecsAndMinsAndDaysString);
}
TEST(TimeTest, FormatDuration_SecAndHourAndDay) {
EXPECT_EQ(FormatDuration(kSecsAndHoursAndDays).value(), kSecsAndHoursAndDaysString);
}
TEST(TimeTest, FormatDuration_MinAndHourAndDay) {
EXPECT_EQ(FormatDuration(kMinsAndHoursAndDays).value(), kMinsAndHoursAndDaysString);
}
TEST(TimeTest, FormatDuration_AllUnits) {
EXPECT_EQ(FormatDuration(kAllUnits).value(), kAllUnitsString);
}
TEST(TimeTest, FormatDuration_RandomNSec) {
EXPECT_EQ(FormatDuration(kRndmNSecs).value(), kRndmNSecsString);
}
TEST(TimeTest, FormatDuration_NegativeRandomNSec) {
EXPECT_EQ(FormatDuration(kNegRndmNSecs), std::nullopt);
}
TEST(TimeTest, CurrentUTCTimeRaw) {
timekeeper::TestClock clock;
clock.Set(kTime1);
EXPECT_EQ(CurrentUTCTimeRaw(clock), kTime1);
clock.Set(kTime2);
EXPECT_EQ(CurrentUTCTimeRaw(clock), kTime2);
clock.Set(kTime3);
EXPECT_EQ(CurrentUTCTimeRaw(clock), kTime3);
}
TEST(TimeTest, CurrentUTCTime) {
timekeeper::TestClock clock;
clock.Set(kTime1);
EXPECT_EQ(CurrentUTCTime(clock), kTime1Str);
clock.Set(kTime2);
EXPECT_EQ(CurrentUTCTime(clock), kTime2Str);
clock.Set(kTime3);
EXPECT_EQ(CurrentUTCTime(clock), kTime3Str);
}
} // namespace
} // namespace feedback