Skip to content

Commit ab8b9b8

Browse files
author
Ajay Kannan
committed
move to/fromPb functions to Resource Manager
1 parent ff20847 commit ab8b9b8

6 files changed

Lines changed: 154 additions & 127 deletions

File tree

gcloud-java-core/pom.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,6 @@
1616
<site.installationModule>gcloud-java-core</site.installationModule>
1717
</properties>
1818
<dependencies>
19-
<dependency>
20-
<groupId>com.google.apis</groupId>
21-
<artifactId>google-api-services-cloudresourcemanager</artifactId>
22-
<version>v1beta1-rev10-1.21.0</version>
23-
<scope>compile</scope>
24-
<exclusions>
25-
<exclusion>
26-
<groupId>com.google.guava</groupId>
27-
<artifactId>guava-jdk5</artifactId>
28-
</exclusion>
29-
</exclusions>
30-
</dependency>
3119
<dependency>
3220
<groupId>com.google.auth</groupId>
3321
<artifactId>google-auth-library-credentials</artifactId>

gcloud-java-core/src/main/java/com/google/gcloud/IamPolicy.java

Lines changed: 4 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818

1919
import static com.google.common.base.Preconditions.checkNotNull;
2020

21-
import com.google.common.base.Function;
2221
import com.google.common.collect.ImmutableList;
23-
import com.google.common.collect.Lists;
2422

2523
import java.io.Serializable;
2624
import java.util.Arrays;
@@ -176,44 +174,7 @@ public boolean equals(Object obj) {
176174
return false;
177175
}
178176
Identity other = (Identity) obj;
179-
return Objects.equals(toPb(), other.toPb());
180-
}
181-
182-
String toPb() {
183-
switch (type) {
184-
case ALL_USERS:
185-
return "allUsers";
186-
case ALL_AUTHENTICATED_USERS:
187-
return "allAuthenticatedUsers";
188-
case USER:
189-
return "user:" + id;
190-
case SERVICE_ACCOUNT:
191-
return "serviceAccount:" + id;
192-
case GROUP:
193-
return "group:" + id;
194-
default:
195-
return "domain:" + id;
196-
}
197-
}
198-
199-
static Identity fromPb(String identityStr) {
200-
String[] info = identityStr.split(":");
201-
switch (info[0]) {
202-
case "allUsers":
203-
return allUsers();
204-
case "allAuthenticatedUsers":
205-
return allAuthenticatedUsers();
206-
case "user":
207-
return user(info[1]);
208-
case "serviceAccount":
209-
return serviceAccount(info[1]);
210-
case "group":
211-
return group(info[1]);
212-
case "domain":
213-
return domain(info[1]);
214-
default:
215-
throw new IllegalArgumentException("Unexpected identity type: " + info[0]);
216-
}
177+
return Objects.equals(id, other.id()) && Objects.equals(type, other.type());
217178
}
218179
}
219180

@@ -351,31 +312,7 @@ public boolean equals(Object obj) {
351312
return false;
352313
}
353314
Acl other = (Acl) obj;
354-
return Objects.equals(toPb(), other.toPb());
355-
}
356-
357-
com.google.api.services.cloudresourcemanager.model.Binding toPb() {
358-
com.google.api.services.cloudresourcemanager.model.Binding bindingPb =
359-
new com.google.api.services.cloudresourcemanager.model.Binding();
360-
bindingPb.setMembers(Lists.transform(identities, new Function<Identity, String>() {
361-
@Override
362-
public String apply(Identity identity) {
363-
return identity.toPb();
364-
}
365-
}));
366-
bindingPb.setRole("roles/" + role);
367-
return bindingPb;
368-
}
369-
370-
static Acl fromPb(com.google.api.services.cloudresourcemanager.model.Binding bindingPb) {
371-
return of(
372-
bindingPb.getRole().substring("roles/".length()),
373-
Lists.transform(bindingPb.getMembers(), new Function<String, Identity>() {
374-
@Override
375-
public Identity apply(String memberPb) {
376-
return Identity.fromPb(memberPb);
377-
}
378-
}));
315+
return Objects.equals(identities, other.identities()) && Objects.equals(role, other.role());
379316
}
380317
}
381318

@@ -489,7 +426,8 @@ public boolean equals(Object obj) {
489426
return false;
490427
}
491428
IamPolicy other = (IamPolicy) obj;
492-
return Objects.equals(toPb(), other.toPb());
429+
return Objects.equals(acls, other.acls()) && Objects.equals(etag, other.etag())
430+
&& Objects.equals(version, other.version());
493431
}
494432

495433
public static Builder builder() {
@@ -499,32 +437,4 @@ public static Builder builder() {
499437
public Builder toBuilder() {
500438
return new Builder().acls(acls).etag(etag).version(version);
501439
}
502-
503-
com.google.api.services.cloudresourcemanager.model.Policy toPb() {
504-
com.google.api.services.cloudresourcemanager.model.Policy policyPb =
505-
new com.google.api.services.cloudresourcemanager.model.Policy();
506-
policyPb.setBindings(Lists.transform(
507-
acls, new Function<Acl, com.google.api.services.cloudresourcemanager.model.Binding>() {
508-
@Override
509-
public com.google.api.services.cloudresourcemanager.model.Binding apply(Acl acl) {
510-
return acl.toPb();
511-
}
512-
}));
513-
policyPb.setEtag(etag);
514-
policyPb.setVersion(version);
515-
return policyPb;
516-
}
517-
518-
static IamPolicy fromPb(com.google.api.services.cloudresourcemanager.model.Policy policyPb) {
519-
Builder builder = new Builder();
520-
builder.acls(Lists.transform(
521-
policyPb.getBindings(),
522-
new Function<com.google.api.services.cloudresourcemanager.model.Binding, Acl>() {
523-
@Override
524-
public Acl apply(com.google.api.services.cloudresourcemanager.model.Binding binding) {
525-
return Acl.fromPb(binding);
526-
}
527-
}));
528-
return builder.etag(policyPb.getEtag()).version(policyPb.getVersion()).build();
529-
}
530440
}

gcloud-java-core/src/test/java/com/google/gcloud/IamPolicyTest.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,6 @@ public void testIdentityOf() {
5555
assertEquals("google.com", DOMAIN.id());
5656
}
5757

58-
@Test
59-
public void testIdentityToAndFromPb() {
60-
assertEquals(ALL_USERS, Identity.fromPb(ALL_USERS.toPb()));
61-
assertEquals(ALL_AUTHENTICATED_USERS, Identity.fromPb(ALL_AUTHENTICATED_USERS.toPb()));
62-
assertEquals(USER, Identity.fromPb(USER.toPb()));
63-
assertEquals(SERVICE_ACCOUNT, Identity.fromPb(SERVICE_ACCOUNT.toPb()));
64-
assertEquals(GROUP, Identity.fromPb(GROUP.toPb()));
65-
assertEquals(DOMAIN, Identity.fromPb(DOMAIN.toPb()));
66-
}
67-
6858
@Test
6959
public void testAclBuilder() {
7060
Acl acl = Acl.builder("owner").addIdentity(USER, GROUP).build();
@@ -92,11 +82,6 @@ public void testAclToBuilder() {
9282
assertEquals(ACL1, ACL1.toBuilder().build());
9383
}
9484

95-
@Test
96-
public void testAclToAndFromPb() {
97-
assertEquals(ACL1, Acl.fromPb(ACL1.toPb()));
98-
}
99-
10085
@Test
10186
public void testIamPolicyBuilder() {
10287
assertEquals(ImmutableList.of(ACL1, ACL2), FULL_POLICY.acls());
@@ -117,10 +102,4 @@ public void testIamPolicyToBuilder() {
117102
assertEquals(FULL_POLICY, FULL_POLICY.toBuilder().build());
118103
assertEquals(SIMPLE_POLICY, SIMPLE_POLICY.toBuilder().build());
119104
}
120-
121-
@Test
122-
public void testToAndFromPb() {
123-
assertEquals(FULL_POLICY, IamPolicy.fromPb(FULL_POLICY.toPb()));
124-
assertEquals(SIMPLE_POLICY, IamPolicy.fromPb(SIMPLE_POLICY.toPb()));
125-
}
126105
}

gcloud-java-resourcemanager/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@
2121
<artifactId>gcloud-java-core</artifactId>
2222
<version>${project.version}</version>
2323
</dependency>
24+
<dependency>
25+
<groupId>com.google.apis</groupId>
26+
<artifactId>google-api-services-cloudresourcemanager</artifactId>
27+
<version>v1beta1-rev10-1.21.0</version>
28+
<scope>compile</scope>
29+
<exclusions>
30+
<exclusion>
31+
<groupId>com.google.guava</groupId>
32+
<artifactId>guava-jdk5</artifactId>
33+
</exclusion>
34+
</exclusions>
35+
</dependency>
2436
<dependency>
2537
<groupId>junit</groupId>
2638
<artifactId>junit</artifactId>

gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManagerImpl.java

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@
2323
import com.google.common.collect.ImmutableList;
2424
import com.google.common.collect.ImmutableMap;
2525
import com.google.common.collect.Iterables;
26+
import com.google.common.collect.Lists;
2627
import com.google.common.collect.Maps;
2728
import com.google.gcloud.BaseService;
29+
import com.google.gcloud.IamPolicy;
30+
import com.google.gcloud.IamPolicy.Acl;
31+
import com.google.gcloud.IamPolicy.Identity;
2832
import com.google.gcloud.Page;
2933
import com.google.gcloud.PageImpl;
3034
import com.google.gcloud.PageImpl.NextPageFetcher;
@@ -189,4 +193,94 @@ public Void call() {
189193
}
190194
return ImmutableMap.copyOf(temp);
191195
}
196+
197+
static String identityToPb(Identity identity) {
198+
switch (identity.type()) {
199+
case ALL_USERS:
200+
return "allUsers";
201+
case ALL_AUTHENTICATED_USERS:
202+
return "allAuthenticatedUsers";
203+
case USER:
204+
return "user:" + identity.id();
205+
case SERVICE_ACCOUNT:
206+
return "serviceAccount:" + identity.id();
207+
case GROUP:
208+
return "group:" + identity.id();
209+
default:
210+
return "domain:" + identity.id();
211+
}
212+
}
213+
214+
static Identity identityFromPb(String identityStr) {
215+
String[] info = identityStr.split(":");
216+
switch (info[0]) {
217+
case "allUsers":
218+
return Identity.allUsers();
219+
case "allAuthenticatedUsers":
220+
return Identity.allAuthenticatedUsers();
221+
case "user":
222+
return Identity.user(info[1]);
223+
case "serviceAccount":
224+
return Identity.serviceAccount(info[1]);
225+
case "group":
226+
return Identity.group(info[1]);
227+
case "domain":
228+
return Identity.domain(info[1]);
229+
default:
230+
throw new IllegalArgumentException("Unexpected identity type: " + info[0]);
231+
}
232+
}
233+
234+
static com.google.api.services.cloudresourcemanager.model.Binding aclToPb(Acl acl) {
235+
com.google.api.services.cloudresourcemanager.model.Binding bindingPb =
236+
new com.google.api.services.cloudresourcemanager.model.Binding();
237+
bindingPb.setMembers(Lists.transform(acl.identities(), new Function<Identity, String>() {
238+
@Override
239+
public String apply(Identity identity) {
240+
return identityToPb(identity);
241+
}
242+
}));
243+
bindingPb.setRole("roles/" + acl.role());
244+
return bindingPb;
245+
}
246+
247+
static Acl aclFromPb(com.google.api.services.cloudresourcemanager.model.Binding bindingPb) {
248+
return Acl.of(
249+
bindingPb.getRole().substring("roles/".length()),
250+
Lists.transform(bindingPb.getMembers(), new Function<String, Identity>() {
251+
@Override
252+
public Identity apply(String memberPb) {
253+
return identityFromPb(memberPb);
254+
}
255+
}));
256+
}
257+
258+
static com.google.api.services.cloudresourcemanager.model.Policy policyToPb(
259+
final IamPolicy policy) {
260+
com.google.api.services.cloudresourcemanager.model.Policy policyPb =
261+
new com.google.api.services.cloudresourcemanager.model.Policy();
262+
policyPb.setBindings(Lists.transform(policy.acls(),
263+
new Function<Acl, com.google.api.services.cloudresourcemanager.model.Binding>() {
264+
@Override
265+
public com.google.api.services.cloudresourcemanager.model.Binding apply(Acl acl) {
266+
return aclToPb(acl);
267+
}
268+
}));
269+
policyPb.setEtag(policy.etag());
270+
policyPb.setVersion(policy.version());
271+
return policyPb;
272+
}
273+
274+
static IamPolicy policyFromPb(
275+
com.google.api.services.cloudresourcemanager.model.Policy policyPb) {
276+
IamPolicy.Builder builder = new IamPolicy.Builder();
277+
builder.acls(Lists.transform(policyPb.getBindings(),
278+
new Function<com.google.api.services.cloudresourcemanager.model.Binding, Acl>() {
279+
@Override
280+
public Acl apply(com.google.api.services.cloudresourcemanager.model.Binding binding) {
281+
return aclFromPb(binding);
282+
}
283+
}));
284+
return builder.etag(policyPb.getEtag()).version(policyPb.getVersion()).build();
285+
}
192286
}

gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
import static org.junit.Assert.fail;
2626

2727
import com.google.common.collect.ImmutableMap;
28+
import com.google.gcloud.IamPolicy;
29+
import com.google.gcloud.IamPolicy.Acl;
30+
import com.google.gcloud.IamPolicy.Identity;
2831
import com.google.gcloud.Page;
2932
import com.google.gcloud.resourcemanager.ProjectInfo.ResourceId;
3033
import com.google.gcloud.resourcemanager.ResourceManager.ProjectField;
@@ -64,6 +67,18 @@ public class ResourceManagerImplTest {
6467
.parent(PARENT)
6568
.build();
6669
private static final Map<ResourceManagerRpc.Option, ?> EMPTY_RPC_OPTIONS = ImmutableMap.of();
70+
private static final Identity ALL_USERS = Identity.allUsers();
71+
private static final Identity ALL_AUTHENTICATED_USERS = Identity.allAuthenticatedUsers();
72+
private static final Identity USER = Identity.user("abc@gmail.com");
73+
private static final Identity SERVICE_ACCOUNT =
74+
Identity.serviceAccount("service-account@gmail.com");
75+
private static final Identity GROUP = Identity.group("group@gmail.com");
76+
private static final Identity DOMAIN = Identity.domain("google.com");
77+
private static final Acl ACL1 = Acl.of("viewer", USER, SERVICE_ACCOUNT, ALL_USERS);
78+
private static final Acl ACL2 = Acl.of("editor", ALL_AUTHENTICATED_USERS, GROUP, DOMAIN);
79+
private static final IamPolicy FULL_POLICY =
80+
IamPolicy.builder().addAcl(ACL1, ACL2).etag("etag").version(1).build();
81+
private static final IamPolicy SIMPLE_POLICY = IamPolicy.builder().addAcl(ACL1, ACL2).build();
6782

6883
@Rule
6984
public ExpectedException thrown = ExpectedException.none();
@@ -271,6 +286,35 @@ public void testUndelete() {
271286
}
272287
}
273288

289+
@Test
290+
public void testIdentityToAndFromPb() {
291+
assertEquals(ALL_USERS,
292+
ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(ALL_USERS)));
293+
assertEquals(ALL_AUTHENTICATED_USERS,
294+
ResourceManagerImpl.identityFromPb(
295+
ResourceManagerImpl.identityToPb(ALL_AUTHENTICATED_USERS)));
296+
assertEquals(USER, ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(USER)));
297+
assertEquals(SERVICE_ACCOUNT,
298+
ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(SERVICE_ACCOUNT)));
299+
assertEquals(GROUP,
300+
ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(GROUP)));
301+
assertEquals(DOMAIN,
302+
ResourceManagerImpl.identityFromPb(ResourceManagerImpl.identityToPb(DOMAIN)));
303+
}
304+
305+
@Test
306+
public void testAclToAndFromPb() {
307+
assertEquals(ACL1, ResourceManagerImpl.aclFromPb(ResourceManagerImpl.aclToPb(ACL1)));
308+
}
309+
310+
@Test
311+
public void testToAndFromPb() {
312+
assertEquals(FULL_POLICY,
313+
ResourceManagerImpl.policyFromPb(ResourceManagerImpl.policyToPb(FULL_POLICY)));
314+
assertEquals(SIMPLE_POLICY,
315+
ResourceManagerImpl.policyFromPb(ResourceManagerImpl.policyToPb(SIMPLE_POLICY)));
316+
}
317+
274318
@Test
275319
public void testRetryableException() {
276320
ResourceManagerRpcFactory rpcFactoryMock = EasyMock.createMock(ResourceManagerRpcFactory.class);

0 commit comments

Comments
 (0)