1 // Copyright 2023 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "anonymous_tokens/cpp/shared/proto_utils.h"
16
17 #include <gmock/gmock.h>
18 #include <gtest/gtest.h>
19 #include "absl/status/status.h"
20 #include "absl/status/statusor.h"
21 #include "absl/time/time.h"
22 #include "anonymous_tokens/cpp/testing/utils.h"
23 #include "anonymous_tokens/proto/anonymous_tokens.pb.h"
24
25 namespace anonymous_tokens {
26 namespace {
27
TEST(ProtoUtilsTest,EmptyUseCase)28 TEST(ProtoUtilsTest, EmptyUseCase) {
29 EXPECT_THAT(ParseUseCase("").status().code(),
30 absl::StatusCode::kInvalidArgument);
31 }
32
TEST(ProtoUtilsTest,InvalidUseCase)33 TEST(ProtoUtilsTest, InvalidUseCase) {
34 EXPECT_THAT(ParseUseCase("NOT_A_USE_CASE").status().code(),
35 absl::StatusCode::kInvalidArgument);
36 }
37
TEST(ProtoUtilsTest,UndefinedUseCase)38 TEST(ProtoUtilsTest, UndefinedUseCase) {
39 EXPECT_THAT(
40 ParseUseCase("ANONYMOUS_TOKENS_USE_CASE_UNDEFINED").status().code(),
41 absl::StatusCode::kInvalidArgument);
42 }
43
TEST(ProtoUtilsTest,ValidUseCase)44 TEST(ProtoUtilsTest, ValidUseCase) {
45 ANON_TOKENS_ASSERT_OK_AND_ASSIGN(AnonymousTokensUseCase use_case,
46 ParseUseCase("TEST_USE_CASE"));
47 EXPECT_EQ(use_case, AnonymousTokensUseCase::TEST_USE_CASE);
48 }
49
TEST(ProtoUtilsTest,TimeFromProtoGood)50 TEST(ProtoUtilsTest, TimeFromProtoGood) {
51 Timestamp timestamp;
52 timestamp.set_seconds(1234567890);
53 timestamp.set_nanos(12345);
54 ANON_TOKENS_ASSERT_OK_AND_ASSIGN(absl::Time time, TimeFromProto(timestamp));
55 ASSERT_EQ(time, absl::FromUnixNanos(1234567890000012345));
56 }
57
TEST(ProtoUtilsTest,TimeFromProtoBad)58 TEST(ProtoUtilsTest, TimeFromProtoBad) {
59 Timestamp proto;
60 proto.set_nanos(-1);
61 EXPECT_THAT(TimeFromProto(proto).status().code(),
62 absl::StatusCode::kInvalidArgument);
63
64 proto.set_nanos(0);
65 proto.set_seconds(253402300800);
66 EXPECT_THAT(TimeFromProto(proto).status().code(),
67 absl::StatusCode::kInvalidArgument);
68 }
69
TEST(ProtoUtilsTest,TimeToProtoGood)70 TEST(ProtoUtilsTest, TimeToProtoGood) {
71 Timestamp proto;
72 ANON_TOKENS_ASSERT_OK_AND_ASSIGN(
73 proto, TimeToProto(absl::FromUnixSeconds(1596762373)));
74 EXPECT_EQ(proto.seconds(), 1596762373);
75 EXPECT_EQ(proto.nanos(), 0);
76
77 ANON_TOKENS_ASSERT_OK_AND_ASSIGN(
78 proto, TimeToProto(absl::FromUnixMillis(1596762373123L)));
79 EXPECT_EQ(proto.seconds(), 1596762373);
80 EXPECT_EQ(proto.nanos(), 123000000);
81 }
82
TEST(ProtoUtilsTest,TimeToProtoBad)83 TEST(ProtoUtilsTest, TimeToProtoBad) {
84 absl::StatusOr<Timestamp> proto;
85 proto = TimeToProto(absl::FromUnixSeconds(253402300800));
86 EXPECT_THAT(proto.status().code(), absl::StatusCode::kInvalidArgument);
87 }
88
89 } // namespace
90 } // namespace anonymous_tokens
91