@@ -170,6 +170,58 @@ TEST(InstanceAdminConnectionTest, ListInstances_TooManyTransients) {
170170 EXPECT_EQ (StatusCode::kUnavailable , begin->status ().code ());
171171}
172172
173+ TEST (InstanceAdminConnectionTest, GetIamPolicy_Success) {
174+ std::string const expected_name =
175+ " projects/test-project/instances/test-instance" ;
176+
177+ auto mock = std::make_shared<spanner_testing::MockInstanceAdminStub>();
178+ EXPECT_CALL (*mock, GetIamPolicy (_, _))
179+ .WillOnce (
180+ Invoke ([&expected_name](grpc::ClientContext&,
181+ giam::GetIamPolicyRequest const & request) {
182+ EXPECT_EQ (expected_name, request.resource ());
183+ return Status (StatusCode::kUnavailable , " try-again" );
184+ }))
185+ .WillOnce (
186+ Invoke ([&expected_name](grpc::ClientContext&,
187+ giam::GetIamPolicyRequest const & request) {
188+ EXPECT_EQ (expected_name, request.resource ());
189+ giam::Policy response;
190+ auto & binding = *response.add_bindings ();
191+ binding.set_role (" roles/spanner.databaseReader" );
192+ binding.
add_members (
" user:[email protected] " );
193+ return response;
194+ }));
195+
196+ auto conn = MakeTestConnection (mock);
197+ auto actual = conn->GetIamPolicy ({expected_name});
198+ ASSERT_STATUS_OK (actual);
199+ ASSERT_EQ (1 , actual->bindings_size ());
200+ EXPECT_EQ (" roles/spanner.databaseReader" , actual->bindings (0 ).role ());
201+ ASSERT_EQ (1 , actual->bindings (0 ).members_size ());
202+ ASSERT_EQ (
" user:[email protected] " , actual->
bindings (
0 ).
members (
0 ));
203+ }
204+
205+ TEST (InstanceAdminConnectionTest, GetIamPolicy_PermanentFailure) {
206+ auto mock = std::make_shared<spanner_testing::MockInstanceAdminStub>();
207+ EXPECT_CALL (*mock, GetIamPolicy (_, _))
208+ .WillOnce (Return (Status (StatusCode::kPermissionDenied , " uh-oh" )));
209+
210+ auto conn = MakeTestConnection (mock);
211+ auto actual = conn->GetIamPolicy ({" test-instance-name" });
212+ EXPECT_EQ (StatusCode::kPermissionDenied , actual.status ().code ());
213+ }
214+
215+ TEST (InstanceAdminConnectionTest, GetIamPolicy_TooManyTransients) {
216+ auto mock = std::make_shared<spanner_testing::MockInstanceAdminStub>();
217+ EXPECT_CALL (*mock, GetIamPolicy (_, _))
218+ .WillRepeatedly (Return (Status (StatusCode::kUnavailable , " try-again" )));
219+
220+ auto conn = MakeTestConnection (mock);
221+ auto actual = conn->GetIamPolicy ({" test-instance-name" });
222+ EXPECT_EQ (StatusCode::kUnavailable , actual.status ().code ());
223+ }
224+
173225TEST (InstanceAdminConnectionTest, TestIamPermissions_Success) {
174226 std::string const expected_name =
175227 " projects/test-project/instances/test-instance" ;
0 commit comments