com.google.api.services.cloudresourcemanager.model.ResourceId toPb() { com.google.api.services.cloudresourcemanager.model.ResourceId resourceIdPb = new com.google.api.services.cloudresourcemanager.model.ResourceId(); resourceIdPb.setId(id); resourceIdPb.setType(type.toLowerCase()); return resourceIdPb; }
return fullProject; Project project = new Project(); for (String field : fields) { switch (field) { case "createTime": project.setCreateTime(fullProject.getCreateTime()); break; case "labels": project.setLabels(fullProject.getLabels()); break; case "lifecycleState": project.setLifecycleState(fullProject.getLifecycleState()); break; case "name": project.setName(fullProject.getName()); break; case "parent": project.setParent(fullProject.getParent()); break; case "projectId": project.setProjectId(fullProject.getProjectId()); break; case "projectNumber": project.setProjectNumber(fullProject.getProjectNumber()); break;
@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()); }
private void compareReadWriteFields( com.google.api.services.cloudresourcemanager.model.Project expected, com.google.api.services.cloudresourcemanager.model.Project actual) { assertEquals(expected.getProjectId(), actual.getProjectId()); assertEquals(expected.getName(), actual.getName()); assertEquals(expected.getLabels(), actual.getLabels()); assertEquals(expected.getParent(), actual.getParent()); } }
@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()); }
@Override public Project replace(Project project) { try { return resourceManager.projects().update(project.getProjectId(), project).execute(); } catch (IOException ex) { throw translate(ex); } }
synchronized Response delete(String projectId) { Project project = projects.get(projectId); if (project == null) { return Error.PERMISSION_DENIED.response( "Error when deleting " + projectId + " because the project was not found."); } if (!project.getLifecycleState().equals("ACTIVE")) { return Error.FAILED_PRECONDITION.response( "Error when deleting " + projectId + " because the lifecycle state was not ACTIVE."); } else { project.setLifecycleState("DELETE_REQUESTED"); return new Response(HTTP_OK, "{}"); } }
@Override public Policy replacePolicy(String projectId, Policy newPolicy) throws ResourceManagerException { try { return resourceManager .projects() .setIamPolicy(projectId, new SetIamPolicyRequest().setPolicy(newPolicy)) .execute(); } catch (IOException ex) { throw translate(ex); } }
synchronized Response testPermissions(String projectId, List<String> permissions) { if (!projects.containsKey(projectId)) { return Error.PERMISSION_DENIED.response("Project " + projectId + " not found."); } try { return new Response( HTTP_OK, jsonFactory.toString(new TestIamPermissionsResponse().setPermissions(permissions))); } catch (IOException e) { return Error.INTERNAL_ERROR.response("Error when serializing permissions " + permissions); } }
/** * Utility method to change the lifecycle state of the specified project. * * @return true if the lifecycle state was successfully updated, false otherwise */ public synchronized boolean changeLifecycleState(String projectId, String lifecycleState) { checkArgument( "ACTIVE".equals(lifecycleState) || "DELETE_REQUESTED".equals(lifecycleState) || "DELETE_IN_PROGRESS".equals(lifecycleState), "Lifecycle state must be ACTIVE, DELETE_REQUESTED, or DELETE_IN_PROGRESS"); Project project = projects.get(checkNotNull(projectId)); if (project != null) { project.setLifecycleState(lifecycleState); return true; } return false; }
@Test public void testToAndFromPb() { assertTrue(FULL_PROJECT_INFO.toPb().getCreateTime().endsWith("Z")); compareProjects(FULL_PROJECT_INFO, ProjectInfo.fromPb(FULL_PROJECT_INFO.toPb())); compareProjects(PARTIAL_PROJECT_INFO, ProjectInfo.fromPb(PARTIAL_PROJECT_INFO.toPb())); compareProjects(PARTIAL_PROJECT_INFO, ProjectInfo.fromPb(UNNAMED_PROJECT_FROM_LIST.toPb())); }
private static ResourceManagerException translate(Status status) { Integer code = RPC_TO_HTTP_CODES.get(status.getCode()); if (code == null) { code = BaseHttpServiceException.UNKNOWN_CODE; } return new ResourceManagerException(code, status.getMessage()); }
@Override public Operation call() { try { return resourceManager.operations().get(operation.getName()).execute(); } catch (IOException ex) { throw translate(ex); } } },
@Override public void undelete(String projectId) { try { resourceManager.projects().undelete(projectId, new UndeleteProjectRequest()).execute(); } catch (IOException ex) { throw translate(ex); } }
private static com.google.api.services.cloudresourcemanager.model.Project copyFrom( com.google.api.services.cloudresourcemanager.model.Project from) { return new com.google.api.services.cloudresourcemanager.model.Project() .setProjectId(from.getProjectId()) .setName(from.getName()) .setLabels(from.getLabels() != null ? ImmutableMap.copyOf(from.getLabels()) : null) .setProjectNumber(from.getProjectNumber()) .setCreateTime(from.getCreateTime()) .setLifecycleState(from.getLifecycleState()) .setParent(from.getParent() != null ? from.getParent().clone() : null); }
@Test public void testRemoveProject() { assertFalse(RESOURCE_MANAGER_HELPER.removeProject(COMPLETE_PROJECT.getProjectId())); rpc.create(COMPLETE_PROJECT); assertNotNull(rpc.getPolicy(COMPLETE_PROJECT.getProjectId())); assertTrue(RESOURCE_MANAGER_HELPER.removeProject(COMPLETE_PROJECT.getProjectId())); assertNull(rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS)); assertNull(rpc.getPolicy(COMPLETE_PROJECT.getProjectId())); }
private void clearProjects() { for (com.google.api.services.cloudresourcemanager.model.Project project : rpc.list(EMPTY_RPC_OPTIONS).y()) { RESOURCE_MANAGER_HELPER.removeProject(project.getProjectId()); } }