xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/common/platform/api/quiche_time_utils_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/common/platform/api/quiche_time_utils.h"
6 
7 #include <optional>
8 
9 #include "quiche/common/platform/api/quiche_test.h"
10 
11 namespace quiche {
12 namespace {
13 
TEST(QuicheTimeUtilsTest,Basic)14 TEST(QuicheTimeUtilsTest, Basic) {
15   EXPECT_EQ(1, QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 0, 0, 1));
16   EXPECT_EQ(365 * 86400, QuicheUtcDateTimeToUnixSeconds(1971, 1, 1, 0, 0, 0));
17   // Some arbitrary timestamps closer to the present, compared to the output of
18   // "Date(...).getTime()" from the JavaScript console.
19   EXPECT_EQ(1152966896,
20             QuicheUtcDateTimeToUnixSeconds(2006, 7, 15, 12, 34, 56));
21   EXPECT_EQ(1591130001, QuicheUtcDateTimeToUnixSeconds(2020, 6, 2, 20, 33, 21));
22 
23   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 2, 29, 0, 0, 1));
24   EXPECT_NE(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1972, 2, 29, 0, 0, 1));
25 }
26 
TEST(QuicheTimeUtilsTest,Bounds)27 TEST(QuicheTimeUtilsTest, Bounds) {
28   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 32, 0, 0, 1));
29   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 4, 31, 0, 0, 1));
30   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 0, 0, 0, 1));
31   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 13, 1, 0, 0, 1));
32   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 0, 1, 0, 0, 1));
33   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 24, 0, 0));
34   EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 0, 60, 0));
35 }
36 
TEST(QuicheTimeUtilsTest,LeapSecond)37 TEST(QuicheTimeUtilsTest, LeapSecond) {
38   EXPECT_EQ(QuicheUtcDateTimeToUnixSeconds(2015, 6, 30, 23, 59, 60),
39             QuicheUtcDateTimeToUnixSeconds(2015, 7, 1, 0, 0, 0));
40   EXPECT_EQ(QuicheUtcDateTimeToUnixSeconds(2015, 6, 30, 25, 59, 60),
41             std::nullopt);
42 }
43 
44 }  // namespace
45 }  // namespace quiche
46