• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
18 #include <gmock/gmock.h>
19 #include <gtest/gtest.h>
20 #include "absl/status/status.h"
21 #include "absl/status/statusor.h"
22 #include "absl/time/time.h"
23 #include "anonymous_tokens/cpp/testing/utils.h"
24 #include "anonymous_tokens/proto/anonymous_tokens.pb.h"
25 
26 
27 namespace anonymous_tokens {
28 namespace {
29 
TEST(ProtoUtilsTest,EmptyUseCase)30 TEST(ProtoUtilsTest, EmptyUseCase) {
31   EXPECT_THAT(ParseUseCase("").status().code(),
32               absl::StatusCode::kInvalidArgument);
33 }
34 
TEST(ProtoUtilsTest,InvalidUseCase)35 TEST(ProtoUtilsTest, InvalidUseCase) {
36   EXPECT_THAT(ParseUseCase("NOT_A_USE_CASE").status().code(),
37               absl::StatusCode::kInvalidArgument);
38 }
39 
TEST(ProtoUtilsTest,UndefinedUseCase)40 TEST(ProtoUtilsTest, UndefinedUseCase) {
41   EXPECT_THAT(
42       ParseUseCase("ANONYMOUS_TOKENS_USE_CASE_UNDEFINED").status().code(),
43       absl::StatusCode::kInvalidArgument);
44 }
45 
TEST(ProtoUtilsTest,ValidUseCase)46 TEST(ProtoUtilsTest, ValidUseCase) {
47   ANON_TOKENS_ASSERT_OK_AND_ASSIGN(AnonymousTokensUseCase use_case,
48                                    ParseUseCase("TEST_USE_CASE"));
49   EXPECT_EQ(use_case, AnonymousTokensUseCase::TEST_USE_CASE);
50 }
51 
TEST(ProtoUtilsTest,TimeFromProtoGood)52 TEST(ProtoUtilsTest, TimeFromProtoGood) {
53   Timestamp timestamp;
54   timestamp.set_seconds(1234567890);
55   timestamp.set_nanos(12345);
56   ANON_TOKENS_ASSERT_OK_AND_ASSIGN(absl::Time time, TimeFromProto(timestamp));
57   ASSERT_EQ(time, absl::FromUnixNanos(1234567890000012345));
58 }
59 
TEST(ProtoUtilsTest,TimeFromProtoBad)60 TEST(ProtoUtilsTest, TimeFromProtoBad) {
61   Timestamp proto;
62   proto.set_nanos(-1);
63   EXPECT_THAT(TimeFromProto(proto).status().code(),
64               absl::StatusCode::kInvalidArgument);
65 
66   proto.set_nanos(0);
67   proto.set_seconds(253402300800);
68   EXPECT_THAT(TimeFromProto(proto).status().code(),
69               absl::StatusCode::kInvalidArgument);
70 }
71 
TEST(ProtoUtilsTest,TimeToProtoGood)72 TEST(ProtoUtilsTest, TimeToProtoGood) {
73   Timestamp proto;
74   ANON_TOKENS_ASSERT_OK_AND_ASSIGN(
75       proto, TimeToProto(absl::FromUnixSeconds(1596762373)));
76   EXPECT_EQ(proto.seconds(), 1596762373);
77   EXPECT_EQ(proto.nanos(), 0);
78 
79   ANON_TOKENS_ASSERT_OK_AND_ASSIGN(
80       proto, TimeToProto(absl::FromUnixMillis(1596762373123L)));
81   EXPECT_EQ(proto.seconds(), 1596762373);
82   EXPECT_EQ(proto.nanos(), 123000000);
83 }
84 
TEST(ProtoUtilsTest,TimeToProtoBad)85 TEST(ProtoUtilsTest, TimeToProtoBad) {
86   absl::StatusOr<Timestamp> proto;
87   proto = TimeToProto(absl::FromUnixSeconds(253402300800));
88   EXPECT_THAT(proto.status().code(), absl::StatusCode::kInvalidArgument);
89 }
90 
91 }  // namespace
92 }  // namespace anonymous_tokens
93 
94