xref: /aosp_15_r20/external/cronet/net/cert/time_conversions_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2023 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "net/cert/time_conversions.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
8*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
9*6777b538SAndroid Build Coastguard Worker #include "third_party/boringssl/src/pki/parse_values.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace net::test {
12*6777b538SAndroid Build Coastguard Worker 
TEST(TimeConversionsTest,EncodeTimeAsGeneralizedTime)13*6777b538SAndroid Build Coastguard Worker TEST(TimeConversionsTest, EncodeTimeAsGeneralizedTime) {
14*6777b538SAndroid Build Coastguard Worker   // Fri, 24 Jun 2016 17:04:54 GMT
15*6777b538SAndroid Build Coastguard Worker   base::Time time = base::Time::UnixEpoch() + base::Seconds(1466787894);
16*6777b538SAndroid Build Coastguard Worker   bssl::der::GeneralizedTime generalized_time;
17*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
18*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(2016, generalized_time.year);
19*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(6, generalized_time.month);
20*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(24, generalized_time.day);
21*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(17, generalized_time.hours);
22*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(4, generalized_time.minutes);
23*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(54, generalized_time.seconds);
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker   time = base::Time::UnixEpoch() + base::Seconds(253402300799);
26*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
27*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(9999, generalized_time.year);
28*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(12, generalized_time.month);
29*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(31, generalized_time.day);
30*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(23, generalized_time.hours);
31*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(59, generalized_time.minutes);
32*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(59, generalized_time.seconds);
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   time = base::Time::UnixEpoch() + base::Seconds(-62167219200);
35*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
36*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.year);
37*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1, generalized_time.month);
38*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1, generalized_time.day);
39*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.hours);
40*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.minutes);
41*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.seconds);
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   time = base::Time::UnixEpoch() + base::Seconds(253402300800);
44*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   time = base::Time::UnixEpoch() + base::Seconds(-62167219201);
47*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   time = base::Time::Max();
50*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker   time = base::Time::Min();
53*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
54*6777b538SAndroid Build Coastguard Worker }
55*6777b538SAndroid Build Coastguard Worker 
TEST(TimeConversionsTest,GeneralizedTimeToTime)56*6777b538SAndroid Build Coastguard Worker TEST(TimeConversionsTest, GeneralizedTimeToTime) {
57*6777b538SAndroid Build Coastguard Worker   bssl::der::GeneralizedTime generalized_time;
58*6777b538SAndroid Build Coastguard Worker   generalized_time.year = 2016;
59*6777b538SAndroid Build Coastguard Worker   generalized_time.month = 6;
60*6777b538SAndroid Build Coastguard Worker   generalized_time.day = 24;
61*6777b538SAndroid Build Coastguard Worker   generalized_time.hours = 17;
62*6777b538SAndroid Build Coastguard Worker   generalized_time.minutes = 4;
63*6777b538SAndroid Build Coastguard Worker   generalized_time.seconds = 54;
64*6777b538SAndroid Build Coastguard Worker   base::Time time;
65*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(GeneralizedTimeToTime(generalized_time, &time));
66*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(base::Time::UnixEpoch() + base::Seconds(1466787894), time);
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker   // Invalid and out of range values should be rejected
69*6777b538SAndroid Build Coastguard Worker   generalized_time.day = 0;
70*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(GeneralizedTimeToTime(generalized_time, &time));
71*6777b538SAndroid Build Coastguard Worker   generalized_time.day = 24;
72*6777b538SAndroid Build Coastguard Worker   generalized_time.year = 10000;
73*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(GeneralizedTimeToTime(generalized_time, &time));
74*6777b538SAndroid Build Coastguard Worker   generalized_time.year = -1;
75*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(GeneralizedTimeToTime(generalized_time, &time));
76*6777b538SAndroid Build Coastguard Worker }
77*6777b538SAndroid Build Coastguard Worker 
78*6777b538SAndroid Build Coastguard Worker // A time from before the Windows epoch should work.
TEST(TimeConversionsTest,TimeBeforeWindowsEpoch)79*6777b538SAndroid Build Coastguard Worker TEST(TimeConversionsTest, TimeBeforeWindowsEpoch) {
80*6777b538SAndroid Build Coastguard Worker   bssl::der::GeneralizedTime generalized_time;
81*6777b538SAndroid Build Coastguard Worker   generalized_time.year = 1570;
82*6777b538SAndroid Build Coastguard Worker   generalized_time.month = 1;
83*6777b538SAndroid Build Coastguard Worker   generalized_time.day = 1;
84*6777b538SAndroid Build Coastguard Worker   generalized_time.hours = 0;
85*6777b538SAndroid Build Coastguard Worker   generalized_time.minutes = 0;
86*6777b538SAndroid Build Coastguard Worker   generalized_time.seconds = 0;
87*6777b538SAndroid Build Coastguard Worker 
88*6777b538SAndroid Build Coastguard Worker   base::Time time;
89*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(GeneralizedTimeToTime(generalized_time, &time));
90*6777b538SAndroid Build Coastguard Worker 
91*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
92*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1570, generalized_time.year);
93*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1, generalized_time.month);
94*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1, generalized_time.day);
95*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.hours);
96*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.minutes);
97*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.seconds);
98*6777b538SAndroid Build Coastguard Worker }
99*6777b538SAndroid Build Coastguard Worker 
100*6777b538SAndroid Build Coastguard Worker // A time in seconds larger than a 32 bit signed integer should work.
TEST(TimeConversionsTest,TimeAfter32BitPosixMaxYear)101*6777b538SAndroid Build Coastguard Worker TEST(TimeConversionsTest, TimeAfter32BitPosixMaxYear) {
102*6777b538SAndroid Build Coastguard Worker   bssl::der::GeneralizedTime generalized_time;
103*6777b538SAndroid Build Coastguard Worker   generalized_time.year = 2039;
104*6777b538SAndroid Build Coastguard Worker   generalized_time.month = 1;
105*6777b538SAndroid Build Coastguard Worker   generalized_time.day = 1;
106*6777b538SAndroid Build Coastguard Worker   generalized_time.hours = 0;
107*6777b538SAndroid Build Coastguard Worker   generalized_time.minutes = 0;
108*6777b538SAndroid Build Coastguard Worker   generalized_time.seconds = 0;
109*6777b538SAndroid Build Coastguard Worker 
110*6777b538SAndroid Build Coastguard Worker   base::Time time;
111*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(GeneralizedTimeToTime(generalized_time, &time));
112*6777b538SAndroid Build Coastguard Worker 
113*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(EncodeTimeAsGeneralizedTime(time, &generalized_time));
114*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(2039, generalized_time.year);
115*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1, generalized_time.month);
116*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1, generalized_time.day);
117*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.hours);
118*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.minutes);
119*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0, generalized_time.seconds);
120*6777b538SAndroid Build Coastguard Worker }
121*6777b538SAndroid Build Coastguard Worker 
122*6777b538SAndroid Build Coastguard Worker }  // namespace net::test
123