diff --git a/gcloud-java-core/pom.xml b/gcloud-java-core/pom.xml index 67d3af27d1a8..3463f40b52bd 100644 --- a/gcloud-java-core/pom.xml +++ b/gcloud-java-core/pom.xml @@ -16,18 +16,6 @@ gcloud-java-core - - com.google.apis - google-api-services-cloudresourcemanager - v1beta1-rev10-1.21.0 - compile - - - com.google.guava - guava-jdk5 - - - com.google.auth google-auth-library-credentials diff --git a/gcloud-java-core/src/main/java/com/google/gcloud/IamPolicy.java b/gcloud-java-core/src/main/java/com/google/gcloud/IamPolicy.java index 31099729564a..a16ab790b363 100644 --- a/gcloud-java-core/src/main/java/com/google/gcloud/IamPolicy.java +++ b/gcloud-java-core/src/main/java/com/google/gcloud/IamPolicy.java @@ -18,9 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; import java.io.Serializable; import java.util.Arrays; @@ -176,44 +174,7 @@ public boolean equals(Object obj) { return false; } Identity other = (Identity) obj; - return Objects.equals(toPb(), other.toPb()); - } - - String toPb() { - switch (type) { - case ALL_USERS: - return "allUsers"; - case ALL_AUTHENTICATED_USERS: - return "allAuthenticatedUsers"; - case USER: - return "user:" + id; - case SERVICE_ACCOUNT: - return "serviceAccount:" + id; - case GROUP: - return "group:" + id; - default: - return "domain:" + id; - } - } - - static Identity fromPb(String identityStr) { - String[] info = identityStr.split(":"); - switch (info[0]) { - case "allUsers": - return allUsers(); - case "allAuthenticatedUsers": - return allAuthenticatedUsers(); - case "user": - return user(info[1]); - case "serviceAccount": - return serviceAccount(info[1]); - case "group": - return group(info[1]); - case "domain": - return domain(info[1]); - default: - throw new IllegalArgumentException("Unexpected identity type: " + info[0]); - } + return Objects.equals(id, other.id()) && Objects.equals(type, other.type()); } } @@ -351,31 +312,7 @@ public boolean equals(Object obj) { return false; } Acl other = (Acl) obj; - return Objects.equals(toPb(), other.toPb()); - } - - com.google.api.services.cloudresourcemanager.model.Binding toPb() { - com.google.api.services.cloudresourcemanager.model.Binding bindingPb = - new com.google.api.services.cloudresourcemanager.model.Binding(); - bindingPb.setMembers(Lists.transform(identities, new Function() { - @Override - public String apply(Identity identity) { - return identity.toPb(); - } - })); - bindingPb.setRole("roles/" + role); - return bindingPb; - } - - static Acl fromPb(com.google.api.services.cloudresourcemanager.model.Binding bindingPb) { - return of( - bindingPb.getRole().substring("roles/".length()), - Lists.transform(bindingPb.getMembers(), new Function() { - @Override - public Identity apply(String memberPb) { - return Identity.fromPb(memberPb); - } - })); + return Objects.equals(identities, other.identities()) && Objects.equals(role, other.role()); } } @@ -489,7 +426,8 @@ public boolean equals(Object obj) { return false; } IamPolicy other = (IamPolicy) obj; - return Objects.equals(toPb(), other.toPb()); + return Objects.equals(acls, other.acls()) && Objects.equals(etag, other.etag()) + && Objects.equals(version, other.version()); } public static Builder builder() { @@ -499,32 +437,4 @@ public static Builder builder() { public Builder toBuilder() { return new Builder().acls(acls).etag(etag).version(version); } - - com.google.api.services.cloudresourcemanager.model.Policy toPb() { - com.google.api.services.cloudresourcemanager.model.Policy policyPb = - new com.google.api.services.cloudresourcemanager.model.Policy(); - policyPb.setBindings(Lists.transform( - acls, new Function() { - @Override - public com.google.api.services.cloudresourcemanager.model.Binding apply(Acl acl) { - return acl.toPb(); - } - })); - policyPb.setEtag(etag); - policyPb.setVersion(version); - return policyPb; - } - - static IamPolicy fromPb(com.google.api.services.cloudresourcemanager.model.Policy policyPb) { - Builder builder = new Builder(); - builder.acls(Lists.transform( - policyPb.getBindings(), - new Function() { - @Override - public Acl apply(com.google.api.services.cloudresourcemanager.model.Binding binding) { - return Acl.fromPb(binding); - } - })); - return builder.etag(policyPb.getEtag()).version(policyPb.getVersion()).build(); - } } diff --git a/gcloud-java-core/src/test/java/com/google/gcloud/IamPolicyTest.java b/gcloud-java-core/src/test/java/com/google/gcloud/IamPolicyTest.java index a87a0b5f287d..b1a7a4e57c14 100644 --- a/gcloud-java-core/src/test/java/com/google/gcloud/IamPolicyTest.java +++ b/gcloud-java-core/src/test/java/com/google/gcloud/IamPolicyTest.java @@ -55,16 +55,6 @@ public void testIdentityOf() { assertEquals("google.com", DOMAIN.id()); } - @Test - public void testIdentityToAndFromPb() { - assertEquals(ALL_USERS, Identity.fromPb(ALL_USERS.toPb())); - assertEquals(ALL_AUTHENTICATED_USERS, Identity.fromPb(ALL_AUTHENTICATED_USERS.toPb())); - assertEquals(USER, Identity.fromPb(USER.toPb())); - assertEquals(SERVICE_ACCOUNT, Identity.fromPb(SERVICE_ACCOUNT.toPb())); - assertEquals(GROUP, Identity.fromPb(GROUP.toPb())); - assertEquals(DOMAIN, Identity.fromPb(DOMAIN.toPb())); - } - @Test public void testAclBuilder() { Acl acl = Acl.builder("owner").addIdentity(USER, GROUP).build(); @@ -92,11 +82,6 @@ public void testAclToBuilder() { assertEquals(ACL1, ACL1.toBuilder().build()); } - @Test - public void testAclToAndFromPb() { - assertEquals(ACL1, Acl.fromPb(ACL1.toPb())); - } - @Test public void testIamPolicyBuilder() { assertEquals(ImmutableList.of(ACL1, ACL2), FULL_POLICY.acls()); @@ -117,10 +102,4 @@ public void testIamPolicyToBuilder() { assertEquals(FULL_POLICY, FULL_POLICY.toBuilder().build()); assertEquals(SIMPLE_POLICY, SIMPLE_POLICY.toBuilder().build()); } - - @Test - public void testToAndFromPb() { - assertEquals(FULL_POLICY, IamPolicy.fromPb(FULL_POLICY.toPb())); - assertEquals(SIMPLE_POLICY, IamPolicy.fromPb(SIMPLE_POLICY.toPb())); - } } diff --git a/gcloud-java-resourcemanager/pom.xml b/gcloud-java-resourcemanager/pom.xml index 5e77ab48f5b5..1311e4dc1bb5 100644 --- a/gcloud-java-resourcemanager/pom.xml +++ b/gcloud-java-resourcemanager/pom.xml @@ -21,6 +21,18 @@ gcloud-java-core ${project.version} + + com.google.apis + google-api-services-cloudresourcemanager + v1beta1-rev10-1.21.0 + compile + + + com.google.guava + guava-jdk5 + + + junit junit diff --git a/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManagerImpl.java b/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManagerImpl.java index 4176b4e610ba..e641f3c75a31 100644 --- a/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManagerImpl.java +++ b/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManagerImpl.java @@ -23,8 +23,12 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.gcloud.BaseService; +import com.google.gcloud.IamPolicy; +import com.google.gcloud.IamPolicy.Acl; +import com.google.gcloud.IamPolicy.Identity; import com.google.gcloud.Page; import com.google.gcloud.PageImpl; import com.google.gcloud.PageImpl.NextPageFetcher; @@ -189,4 +193,94 @@ public Void call() { } return ImmutableMap.copyOf(temp); } + + static String identityToPb(Identity identity) { + switch (identity.type()) { + case ALL_USERS: + return "allUsers"; + case ALL_AUTHENTICATED_USERS: + return "allAuthenticatedUsers"; + case USER: + return "user:" + identity.id(); + case SERVICE_ACCOUNT: + return "serviceAccount:" + identity.id(); + case GROUP: + return "group:" + identity.id(); + default: + return "domain:" + identity.id(); + } + } + + static Identity identityFromPb(String identityStr) { + String[] info = identityStr.split(":"); + switch (info[0]) { + case "allUsers": + return Identity.allUsers(); + case "allAuthenticatedUsers": + return Identity.allAuthenticatedUsers(); + case "user": + return Identity.user(info[1]); + case "serviceAccount": + return Identity.serviceAccount(info[1]); + case "group": + return Identity.group(info[1]); + case "domain": + return Identity.domain(info[1]); + default: + throw new IllegalArgumentException("Unexpected identity type: " + info[0]); + } + } + + static com.google.api.services.cloudresourcemanager.model.Binding aclToPb(Acl acl) { + com.google.api.services.cloudresourcemanager.model.Binding bindingPb = + new com.google.api.services.cloudresourcemanager.model.Binding(); + bindingPb.setMembers(Lists.transform(acl.identities(), new Function() { + @Override + public String apply(Identity identity) { + return identityToPb(identity); + } + })); + bindingPb.setRole("roles/" + acl.role()); + return bindingPb; + } + + static Acl aclFromPb(com.google.api.services.cloudresourcemanager.model.Binding bindingPb) { + return Acl.of( + bindingPb.getRole().substring("roles/".length()), + Lists.transform(bindingPb.getMembers(), new Function() { + @Override + public Identity apply(String memberPb) { + return identityFromPb(memberPb); + } + })); + } + + static com.google.api.services.cloudresourcemanager.model.Policy policyToPb( + final IamPolicy policy) { + com.google.api.services.cloudresourcemanager.model.Policy policyPb = + new com.google.api.services.cloudresourcemanager.model.Policy(); + policyPb.setBindings(Lists.transform(policy.acls(), + new Function() { + @Override + public com.google.api.services.cloudresourcemanager.model.Binding apply(Acl acl) { + return aclToPb(acl); + } + })); + policyPb.setEtag(policy.etag()); + policyPb.setVersion(policy.version()); + return policyPb; + } + + static IamPolicy policyFromPb( + com.google.api.services.cloudresourcemanager.model.Policy policyPb) { + IamPolicy.Builder builder = new IamPolicy.Builder(); + builder.acls(Lists.transform(policyPb.getBindings(), + new Function() { + @Override + public Acl apply(com.google.api.services.cloudresourcemanager.model.Binding binding) { + return aclFromPb(binding); + } + })); + return builder.etag(policyPb.getEtag()).version(policyPb.getVersion()).build(); + } } diff --git a/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java b/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java index 37c54718fb4a..8a6f06fcaae3 100644 --- a/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java +++ b/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java @@ -25,6 +25,9 @@ import static org.junit.Assert.fail; import com.google.common.collect.ImmutableMap; +import com.google.gcloud.IamPolicy; +import com.google.gcloud.IamPolicy.Acl; +import com.google.gcloud.IamPolicy.Identity; import com.google.gcloud.Page; import com.google.gcloud.resourcemanager.ProjectInfo.ResourceId; import com.google.gcloud.resourcemanager.ResourceManager.ProjectField; @@ -64,6 +67,18 @@ public class ResourceManagerImplTest { .parent(PARENT) .build(); private static final Map EMPTY_RPC_OPTIONS = ImmutableMap.of(); + private static final Identity ALL_USERS = Identity.allUsers(); + private static final Identity ALL_AUTHENTICATED_USERS = Identity.allAuthenticatedUsers(); + private static final Identity USER = Identity.user("abc@gmail.com"); + private static final Identity SERVICE_ACCOUNT = + Identity.serviceAccount("service-account@gmail.com"); + private static final Identity GROUP = Identity.group("group@gmail.com"); + private static final Identity DOMAIN = Identity.domain("google.com"); + private static final Acl ACL1 = Acl.of("viewer", USER, SERVICE_ACCOUNT, ALL_USERS); + private static final Acl ACL2 = Acl.of("editor", ALL_AUTHENTICATED_USERS, GROUP, DOMAIN); + private static final IamPolicy FULL_POLICY = + IamPolicy.builder().addAcl(ACL1, ACL2).etag("etag").version(1).build(); + private static final IamPolicy SIMPLE_POLICY = IamPolicy.builder().addAcl(ACL1, ACL2).build(); @Rule public ExpectedException thrown = ExpectedException.none(); @@ -271,6 +286,35 @@ public void testUndelete() { } } + @Test + public void testIdentityToAndFromPb() { + assertEquals(ALL_USERS, + ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(ALL_USERS))); + assertEquals(ALL_AUTHENTICATED_USERS, + ResourceManagerImpl.identityFromPb( + ResourceManagerImpl.identityToPb(ALL_AUTHENTICATED_USERS))); + assertEquals(USER, ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(USER))); + assertEquals(SERVICE_ACCOUNT, + ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(SERVICE_ACCOUNT))); + assertEquals(GROUP, + ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(GROUP))); + assertEquals(DOMAIN, + ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(DOMAIN))); + } + + @Test + public void testAclToAndFromPb() { + assertEquals(ACL1, ResourceManagerImpl.aclFromPb(ResourceManagerImpl.aclToPb(ACL1))); + } + + @Test + public void testToAndFromPb() { + assertEquals(FULL_POLICY, + ResourceManagerImpl.policyFromPb(ResourceManagerImpl.policyToPb(FULL_POLICY))); + assertEquals(SIMPLE_POLICY, + ResourceManagerImpl.policyFromPb(ResourceManagerImpl.policyToPb(SIMPLE_POLICY))); + } + @Test public void testRetryableException() { ResourceManagerRpcFactory rpcFactoryMock = EasyMock.createMock(ResourceManagerRpcFactory.class);