blob: 5c7d84533d7c5e52266d6db9dfd5e0ecf4e27804 [file] [log] [blame]
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.h"
#include "quiche/blind_sign_auth/proto/timestamp.pb.h"
#include "quiche/common/platform/api/quiche_test.h"
#include "quiche/common/test_tools/quiche_test_utils.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/time/time.h"
#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
#include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
namespace private_membership {
namespace anonymous_tokens {
namespace {
TEST(ProtoUtilsTest, EmptyUseCase) {
EXPECT_THAT(ParseUseCase("").status().code(),
absl::StatusCode::kInvalidArgument);
}
TEST(ProtoUtilsTest, InvalidUseCase) {
EXPECT_THAT(ParseUseCase("NOT_A_USE_CASE").status().code(),
absl::StatusCode::kInvalidArgument);
}
TEST(ProtoUtilsTest, UndefinedUseCase) {
EXPECT_THAT(
ParseUseCase("ANONYMOUS_TOKENS_USE_CASE_UNDEFINED").status().code(),
absl::StatusCode::kInvalidArgument);
}
TEST(ProtoUtilsTest, ValidUseCase) {
ANON_TOKENS_ASSERT_OK_AND_ASSIGN(AnonymousTokensUseCase use_case,
ParseUseCase("TEST_USE_CASE"));
EXPECT_EQ(use_case, AnonymousTokensUseCase::TEST_USE_CASE);
}
TEST(ProtoUtilsTest, TimeFromProtoGood) {
quiche::protobuf::Timestamp timestamp;
timestamp.set_seconds(1234567890);
timestamp.set_nanos(12345);
ANON_TOKENS_ASSERT_OK_AND_ASSIGN(absl::Time time, TimeFromProto(timestamp));
ASSERT_EQ(time, absl::FromUnixNanos(1234567890000012345));
}
TEST(ProtoUtilsTest, TimeFromProtoBad) {
quiche::protobuf::Timestamp proto;
proto.set_nanos(-1);
EXPECT_THAT(TimeFromProto(proto).status().code(),
absl::StatusCode::kInvalidArgument);
proto.set_nanos(0);
proto.set_seconds(253402300800);
EXPECT_THAT(TimeFromProto(proto).status().code(),
absl::StatusCode::kInvalidArgument);
}
TEST(ProtoUtilsTest, TimeToProtoGood) {
quiche::protobuf::Timestamp proto;
ANON_TOKENS_ASSERT_OK_AND_ASSIGN(
proto, TimeToProto(absl::FromUnixSeconds(1596762373)));
EXPECT_EQ(proto.seconds(), 1596762373);
EXPECT_EQ(proto.nanos(), 0);
ANON_TOKENS_ASSERT_OK_AND_ASSIGN(
proto, TimeToProto(absl::FromUnixMillis(1596762373123L)));
EXPECT_EQ(proto.seconds(), 1596762373);
EXPECT_EQ(proto.nanos(), 123000000);
}
TEST(ProtoUtilsTest, TimeToProtoBad) {
absl::StatusOr<quiche::protobuf::Timestamp> proto;
proto = TimeToProto(absl::FromUnixSeconds(253402300800));
EXPECT_THAT(proto.status().code(), absl::StatusCode::kInvalidArgument);
}
} // namespace
} // namespace anonymous_tokens
} // namespace private_membership