xref: /aosp_15_r20/external/tink/cc/core/kms_clients_test.cc (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1 // Copyright 2019 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 //      http://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 ////////////////////////////////////////////////////////////////////////////////
16 
17 #include "tink/kms_clients.h"
18 
19 #include <memory>
20 #include <string>
21 
22 #include "gtest/gtest.h"
23 #include "absl/status/status.h"
24 #include "absl/strings/string_view.h"
25 #include "tink/aead.h"
26 #include "tink/kms_client.h"
27 #include "tink/util/status.h"
28 #include "tink/util/statusor.h"
29 #include "tink/util/test_matchers.h"
30 #include "tink/util/test_util.h"
31 
32 namespace crypto {
33 namespace tink {
34 namespace {
35 
36 using crypto::tink::test::IsOk;
37 using crypto::tink::test::StatusIs;
38 using crypto::tink::test::DummyKmsClient;
39 
TEST(KmsClientsTest,Empty)40 TEST(KmsClientsTest, Empty) {
41   auto client_result = KmsClients::Get("some uri");
42   EXPECT_THAT(client_result.status(), StatusIs(absl::StatusCode::kNotFound));
43 
44   client_result = KmsClients::Get("");
45   EXPECT_THAT(client_result.status(),
46               StatusIs(absl::StatusCode::kInvalidArgument));
47 
48   auto status = KmsClients::Add(nullptr);
49   EXPECT_THAT(status, StatusIs(absl::StatusCode::kInvalidArgument));
50 }
51 
52 struct UriData {
53   std::string prefix;
54   std::string uri;
55 };
56 
TEST(KmsClientsTest,AddAndGet)57 TEST(KmsClientsTest, AddAndGet) {
58   UriData data_1 = {"prefix1", "prefix1:uri1"};
59   UriData data_2 = {"prefix1", "prefix1:uri2"};
60   UriData data_3 = {"prefix2", "prefix2:uri42"};
61 
62   // Add client for data_1, and verify it.
63   auto status = KmsClients::Add(
64       absl::make_unique<DummyKmsClient>(data_1.prefix, data_1.uri));
65   EXPECT_THAT(status, IsOk());
66   auto client_result = KmsClients::Get(data_1.uri);
67   EXPECT_THAT(client_result, IsOk());
68   EXPECT_TRUE(client_result.value()->DoesSupport(data_1.uri));
69   EXPECT_FALSE(client_result.value()->DoesSupport(data_2.uri));
70 
71   // Verify there is no client for data_2.
72   client_result = KmsClients::Get(data_2.uri);
73   EXPECT_THAT(client_result.status(), StatusIs(absl::StatusCode::kNotFound));
74 
75   // Add client for data_2, and verify it.
76   status = KmsClients::Add(
77       absl::make_unique<DummyKmsClient>(data_2.prefix, data_2.uri));
78   EXPECT_THAT(status, IsOk());
79   client_result = KmsClients::Get(data_2.uri);
80   EXPECT_THAT(client_result, IsOk());
81   EXPECT_TRUE(client_result.value()->DoesSupport(data_2.uri));
82   EXPECT_FALSE(client_result.value()->DoesSupport(data_1.uri));
83 
84   // Verify there is no client for data_3.
85   client_result = KmsClients::Get(data_3.uri);
86   EXPECT_THAT(client_result.status(), StatusIs(absl::StatusCode::kNotFound));
87 
88   // Add client for data_3, and verify it.
89   status = KmsClients::Add(
90       absl::make_unique<DummyKmsClient>(data_3.prefix, data_3.uri));
91   EXPECT_THAT(status, IsOk());
92   client_result = KmsClients::Get(data_3.uri);
93   EXPECT_THAT(client_result, IsOk());
94   EXPECT_TRUE(client_result.value()->DoesSupport(data_3.uri));
95   EXPECT_FALSE(client_result.value()->DoesSupport(data_2.uri));
96   EXPECT_FALSE(client_result.value()->DoesSupport(data_1.uri));
97 
98   // Verify that clients for data_1 and data_2 are still present.
99   client_result = KmsClients::Get(data_1.uri);
100   EXPECT_THAT(client_result, IsOk());
101   EXPECT_TRUE(client_result.value()->DoesSupport(data_1.uri));
102   EXPECT_FALSE(client_result.value()->DoesSupport(data_2.uri));
103 
104   client_result = KmsClients::Get(data_2.uri);
105   EXPECT_THAT(client_result, IsOk());
106   EXPECT_TRUE(client_result.value()->DoesSupport(data_2.uri));
107   EXPECT_FALSE(client_result.value()->DoesSupport(data_1.uri));
108 }
109 
110 
111 }  // namespace
112 }  // namespace tink
113 }  // namespace crypto
114