iam/api/AccessTest/AccessTest.cs (101 lines of code) (raw):

// Copyright 2019 Google Inc. // // 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 // // http://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. using Google; using Google.Apis.Auth.OAuth2; using Google.Apis.Iam.v1; using Google.Apis.Iam.v1.Data; using System; using System.Collections.Generic; using System.Net; using Xunit; namespace GoogleCloudSamples { public class AccessTest { private readonly string _project; private readonly string _member1; private readonly string _member2; private readonly string _member3; public AccessTest() { _project = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID"); _member1 = "user:yaraarryn.677500@gmail.com"; _member2 = "user:obaraclegane.724498@gmail.com"; _member3 = "daeneryssnow.827847@gmail.com"; } public IamService InitializeService() { var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(IamService.Scope.CloudPlatform); var service = new IamService(new IamService.Initializer { HttpClientInitializer = credential }); return service; } public Role CreateCustomRole(IamService service) { var role = new Role { Title = "C# Test Custom Role", Description = "Role for AccessTest", IncludedPermissions = new List<string> { "iam.roles.get" }, Stage = "GA" }; var request = new CreateRoleRequest { Role = role, RoleId = "csharpTestCustomRole" + new Random().Next() }; try { return service.Projects.Roles.Create(request, "projects/" + _project).Execute(); } catch(GoogleApiException ex) when (ex.HttpStatusCode == HttpStatusCode.TooManyRequests && ex.Error.Message.Contains("Maximum number of roles reached")) { Skip.If(true, "Maximum number of roles reached."); throw; // We should never throw here (Skip throws), but we need to make the compiler happy. } } public string ParseRoleName(Role role) { var roleNameComponents = role.Name.Split('/'); var roleNameShort = roleNameComponents[2] + "/" + roleNameComponents[3]; return roleNameShort; } [SkippableFact] public void TestAccess() { var service = InitializeService(); var role1 = CreateCustomRole(service); var role1NameShort = ParseRoleName(role1); try { var role2 = CreateCustomRole(service); var role2NameShort = ParseRoleName(role2); try { // Test GetPolicy var policy = AccessManager.GetPolicy(_project); // Test AddBinding by adding _member1 to role1 policy = AccessManager.AddBinding(policy, role1NameShort, _member1); // Test AddMember by adding _member2 to role1 policy = AccessManager.AddMember(policy, role1NameShort, _member2); // Test RemoveMember where role binding doesn't exist (_member1 from role2) policy = AccessManager.RemoveMember(policy, role2NameShort, _member1); // Test RemoveMember where member doesn't exist (_member3 from role1) policy = AccessManager.RemoveMember(policy, role1NameShort, _member3); // Test RemoveMember by removing _member1 from role1 policy = AccessManager.RemoveMember(policy, role1NameShort, _member1); // Test RemoveMember when removing last member from binding (_member2 from role1) policy = AccessManager.RemoveMember(policy, role1NameShort, _member2); // Test SetPolicy policy = AccessManager.SetPolicy(_project, policy); } finally { // Delete custom roles service.Projects.Roles.Delete(role2.Name).Execute(); } } finally { service.Projects.Roles.Delete(role1.Name).Execute(); } } [Fact] public void TestPermissions() { var permissions = AccessManager.TestIamPermissions(_project); } } }