synchronized Response replacePolicy(String projectId, Policy policy) { Policy originalPolicy = policies.get(projectId); if (originalPolicy == null) { return Error.PERMISSION_DENIED.response( "Error when replacing the policy for " + projectId + " because the project was not found."); } String etag = policy.getEtag(); if (etag != null && !originalPolicy.getEtag().equals(etag)) { return Error.ABORTED.response( "Policy etag mismatch when replacing the policy for project " + projectId + ", please retry the read."); } policy.setEtag(UUID.randomUUID().toString()); policy.setVersion(originalPolicy.getVersion()); policies.put(projectId, policy); try { return new Response(HTTP_OK, jsonFactory.toString(policy)); } catch (IOException e) { return Error.INTERNAL_ERROR.response( "Error when serializing the policy for project " + projectId); } }
@Override protected Policy fromPb(com.google.api.services.cloudresourcemanager.model.Policy policyPb) { Map<Role, Set<Identity>> bindings = new HashMap<>(); if (policyPb.getBindings() != null) { for (Binding bindingPb : policyPb.getBindings()) { bindings.put( Role.of(bindingPb.getRole()), ImmutableSet.copyOf( Lists.transform( bindingPb.getMembers(), new Function<String, Identity>() { @Override public Identity apply(String s) { return IDENTITY_VALUE_OF_FUNCTION.apply(s); } }))); } } return new Builder(bindings, policyPb.getEtag(), policyPb.getVersion()).build(); }
@Test public void testGetPolicy() { assertNull(rpc.getPolicy("nonexistent-project")); rpc.create(PARTIAL_PROJECT); com.google.api.services.cloudresourcemanager.model.Policy policy = rpc.getPolicy(PARTIAL_PROJECT.getProjectId()); assertEquals(Collections.emptyList(), policy.getBindings()); assertNotNull(policy.getEtag()); }
@Test public void testReplacePolicy() { try { rpc.replacePolicy("nonexistent-project", POLICY); fail("Project doesn't exist."); } catch (ResourceManagerException e) { assertEquals(403, e.getCode()); assertTrue(e.getMessage().contains("project was not found")); } rpc.create(PARTIAL_PROJECT); com.google.api.services.cloudresourcemanager.model.Policy invalidPolicy = new com.google.api.services.cloudresourcemanager.model.Policy().setEtag("wrong-etag"); try { rpc.replacePolicy(PARTIAL_PROJECT.getProjectId(), invalidPolicy); fail("Invalid etag."); } catch (ResourceManagerException e) { assertEquals(409, e.getCode()); assertTrue(e.getMessage().startsWith("Policy etag mismatch")); } String originalEtag = rpc.getPolicy(PARTIAL_PROJECT.getProjectId()).getEtag(); com.google.api.services.cloudresourcemanager.model.Policy newPolicy = rpc.replacePolicy(PARTIAL_PROJECT.getProjectId(), POLICY); assertEquals(POLICY.getBindings(), newPolicy.getBindings()); assertNotNull(newPolicy.getEtag()); assertNotEquals(originalEtag, newPolicy.getEtag()); }
rpc.getPolicy(PARTIAL_PROJECT.getProjectId()); assertEquals(Collections.emptyList(), policy.getBindings()); assertNotNull(policy.getEtag()); assertEquals(0, policy.getVersion().intValue()); rpc.replacePolicy(PARTIAL_PROJECT.getProjectId(), POLICY);
synchronized Response replacePolicy(String projectId, Policy policy) { Policy originalPolicy = policies.get(projectId); if (originalPolicy == null) { return Error.PERMISSION_DENIED.response("Error when replacing the policy for " + projectId + " because the project was not found."); } String etag = policy.getEtag(); if (etag != null && !originalPolicy.getEtag().equals(etag)) { return Error.ABORTED.response("Policy etag mismatch when replacing the policy for project " + projectId + ", please retry the read."); } policy.setEtag(UUID.randomUUID().toString()); policy.setVersion(originalPolicy.getVersion()); policies.put(projectId, policy); try { return new Response(HTTP_OK, jsonFactory.toString(policy)); } catch (IOException e) { return Error.INTERNAL_ERROR.response( "Error when serializing the policy for project " + projectId); } }
synchronized Response replacePolicy(String projectId, Policy policy) { Policy originalPolicy = policies.get(projectId); if (originalPolicy == null) { return Error.PERMISSION_DENIED.response("Error when replacing the policy for " + projectId + " because the project was not found."); } String etag = policy.getEtag(); if (etag != null && !originalPolicy.getEtag().equals(etag)) { return Error.ABORTED.response("Policy etag mismatch when replacing the policy for project " + projectId + ", please retry the read."); } policy.setEtag(UUID.randomUUID().toString()); policy.setVersion(originalPolicy.getVersion()); policies.put(projectId, policy); try { return new Response(HTTP_OK, jsonFactory.toString(policy)); } catch (IOException e) { return Error.INTERNAL_ERROR.response( "Error when serializing the policy for project " + projectId); } }
static Policy fromPb( com.google.api.services.cloudresourcemanager.model.Policy policyPb) { Map<String, Set<Identity>> bindings = new HashMap<>(); for (com.google.api.services.cloudresourcemanager.model.Binding bindingPb : policyPb.getBindings()) { bindings.put( bindingPb.getRole(), ImmutableSet.copyOf( Lists.transform( bindingPb.getMembers(), new Function<String, Identity>() { @Override public Identity apply(String identityPb) { return Identity.valueOf(identityPb); } }))); } return new Policy.Builder(bindings, policyPb.getEtag(), policyPb.getVersion()).build(); } }
static Policy fromPb( com.google.api.services.cloudresourcemanager.model.Policy policyPb) { Map<String, Set<Identity>> bindings = new HashMap<>(); for (com.google.api.services.cloudresourcemanager.model.Binding bindingPb : policyPb.getBindings()) { bindings.put( bindingPb.getRole(), ImmutableSet.copyOf( Lists.transform( bindingPb.getMembers(), new Function<String, Identity>() { @Override public Identity apply(String identityPb) { return Identity.valueOf(identityPb); } }))); } return new Policy.Builder(bindings, policyPb.getEtag(), policyPb.getVersion()).build(); } }