-
Notifications
You must be signed in to change notification settings - Fork 444
Expand file tree
/
Copy pathiam_policy_test.cc
More file actions
90 lines (80 loc) · 3.13 KB
/
iam_policy_test.cc
File metadata and controls
90 lines (80 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright 2019 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 "google/cloud/bigtable/iam_policy.h"
#include "google/cloud/bigtable/expr.h"
#include <google/protobuf/text_format.h>
#include <gmock/gmock.h>
namespace google {
namespace cloud {
namespace bigtable {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
namespace {
template <typename Iter>
std::vector<std::string> BindingRoles(Iter first_binding, Iter last_binding) {
std::vector<std::string> binding_roles;
std::transform(
first_binding, last_binding, std::back_inserter(binding_roles),
[](google::iam::v1::Binding const& binding) { return binding.role(); });
return binding_roles;
}
std::vector<std::string> BindingRoles(google::iam::v1::Policy const& policy) {
return BindingRoles(policy.bindings().begin(), policy.bindings().end());
}
std::vector<std::string> BindingRoles(
std::vector<google::iam::v1::Binding> bindings) {
return BindingRoles(bindings.begin(), bindings.end());
}
TEST(IamPolicy, IterCtor) {
auto binding1 = IamBinding("role1", {"mem1"});
auto binding2 = IamBinding("role2", {"mem2"});
std::vector<google::iam::v1::Binding> expected({binding1, binding2});
auto policy = IamPolicy(expected.begin(), expected.end(), "etag1", 13);
EXPECT_EQ("etag1", policy.etag());
EXPECT_EQ(13, policy.version());
EXPECT_EQ(BindingRoles(expected), BindingRoles(policy));
}
TEST(IamPolicy, IniListCtor) {
auto binding1 = IamBinding("role1", {"mem1"});
auto binding2 = IamBinding("role2", {"mem2"});
auto policy = IamPolicy({binding1, binding2}, "etag1", 13);
EXPECT_EQ("etag1", policy.etag());
EXPECT_EQ(13, policy.version());
std::vector<google::iam::v1::Binding> expected({binding1, binding2});
EXPECT_EQ(BindingRoles(expected), BindingRoles(policy));
}
TEST(IamPolicy, VectorCtor) {
auto binding1 = IamBinding("role1", {"mem1"});
auto binding2 = IamBinding("role2", {"mem2"});
std::vector<google::iam::v1::Binding> expected({binding1, binding2});
auto policy = IamPolicy(expected, "etag1", 13);
EXPECT_EQ("etag1", policy.etag());
EXPECT_EQ(13, policy.version());
EXPECT_EQ(BindingRoles(expected), BindingRoles(policy));
}
TEST(IamPolicy, Printing) {
auto binding = IamBinding("role", {"mem1", "mem2", "mem3", "mem1"},
Expression("condition"));
auto policy = IamPolicy({binding});
std::stringstream stream;
stream << policy;
EXPECT_EQ(
"IamPolicy={version=0, bindings=IamBindings={role: [mem1, mem2, mem3, "
"mem1] when (condition)}, etag=}",
stream.str());
}
} // namespace
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
} // namespace bigtable
} // namespace cloud
} // namespace google