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, "{}"); } }
synchronized Response undelete(String projectId) { Project project = projects.get(projectId); Response response; if (project == null) { response = Error.PERMISSION_DENIED.response( "Error when undeleting " + projectId + " because the project was not found."); } else if (!project.getLifecycleState().equals("DELETE_REQUESTED")) { response = Error.FAILED_PRECONDITION.response( "Error when undeleting " + projectId + " because the lifecycle state was not DELETE_REQUESTED."); } else { project.setLifecycleState("ACTIVE"); response = new Response(HTTP_OK, "{}"); } return response; }
synchronized Response replace(String projectId, Project project) { Project originalProject = projects.get(projectId); if (originalProject == null) { return Error.PERMISSION_DENIED.response( "Error when replacing " + projectId + " because the project was not found."); } else if (!originalProject.getLifecycleState().equals("ACTIVE")) { return Error.FAILED_PRECONDITION.response( "Error when replacing " + projectId + " because the lifecycle state was not ACTIVE."); } else if (!Objects.equal(originalProject.getParent(), project.getParent())) { return Error.INVALID_ARGUMENT.response( "The server currently only supports setting the parent once " + "and does not allow unsetting it."); } project.setProjectId(projectId); project.setLifecycleState(originalProject.getLifecycleState()); project.setCreateTime(originalProject.getCreateTime()); project.setProjectNumber(originalProject.getProjectNumber()); // replace cannot fail because both this method and removeProject are synchronized projects.replace(projectId, project); try { return new Response(HTTP_OK, jsonFactory.toString(project)); } catch (IOException e) { return Error.INTERNAL_ERROR.response("Error when serializing project " + projectId); } }
static ProjectInfo fromPb(com.google.api.services.cloudresourcemanager.model.Project projectPb) { Builder builder = newBuilder(projectPb.getProjectId()).setProjectNumber(projectPb.getProjectNumber()); if (projectPb.getName() != null && !projectPb.getName().equals("Unnamed")) { builder.setName(projectPb.getName()); } if (projectPb.getLabels() != null) { builder.setLabels(projectPb.getLabels()); } if (projectPb.getLifecycleState() != null) { builder.setState(State.valueOf(projectPb.getLifecycleState())); } if (projectPb.getCreateTime() != null) { builder.setCreateTimeMillis( DATE_TIME_FORMATTER.parse(projectPb.getCreateTime(), Instant.FROM).toEpochMilli()); } if (projectPb.getParent() != null) { builder.setParent(ResourceId.fromPb(projectPb.getParent())); } return builder.build(); } }
@Test public void testListNoPageTokenFieldOptions() { Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>(); rpcOptions.put(ResourceManagerRpc.Option.PAGE_SIZE, 1); rpcOptions.put(ResourceManagerRpc.Option.FIELDS, "projects(projectId,name)"); rpc.create(PARTIAL_PROJECT); rpc.create(COMPLETE_PROJECT); Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects = rpc.list(rpcOptions); assertNull(projects.x()); Iterator<com.google.api.services.cloudresourcemanager.model.Project> iterator = projects.y().iterator(); com.google.api.services.cloudresourcemanager.model.Project returnedProject = iterator.next(); assertEquals(COMPLETE_PROJECT.getProjectId(), returnedProject.getProjectId()); assertEquals(COMPLETE_PROJECT.getName(), returnedProject.getName()); assertNull(returnedProject.getLabels()); assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getLifecycleState()); assertNull(returnedProject.getCreateTime()); assertFalse(iterator.hasNext()); }
@Test public void testDelete() { rpc.create(COMPLETE_PROJECT); rpc.delete(COMPLETE_PROJECT.getProjectId()); assertEquals( "DELETE_REQUESTED", rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS).getLifecycleState()); try { rpc.delete("some-nonexistant-project-id"); fail("Should fail because the project doesn't exist."); } catch (ResourceManagerException e) { assertEquals(403, e.getCode()); assertTrue(e.getMessage().contains("not found.")); } }
@Test public void testListFieldOptions() { Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>(); rpcOptions.put( ResourceManagerRpc.Option.FIELDS, "projects(projectId,name,labels),nextPageToken"); rpc.create(PROJECT_WITH_PARENT); Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects = rpc.list(rpcOptions); com.google.api.services.cloudresourcemanager.model.Project returnedProject = projects.y().iterator().next(); assertFalse(PROJECT_WITH_PARENT.equals(returnedProject)); assertEquals(PROJECT_WITH_PARENT.getProjectId(), returnedProject.getProjectId()); assertEquals(PROJECT_WITH_PARENT.getName(), returnedProject.getName()); assertEquals(PROJECT_WITH_PARENT.getLabels(), returnedProject.getLabels()); assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getLifecycleState()); assertNull(returnedProject.getCreateTime()); }
@Test public void testUndelete() { rpc.create(COMPLETE_PROJECT); rpc.delete(COMPLETE_PROJECT.getProjectId()); assertEquals( "DELETE_REQUESTED", rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS).getLifecycleState()); rpc.undelete(COMPLETE_PROJECT.getProjectId()); com.google.api.services.cloudresourcemanager.model.Project revivedProject = rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS); compareReadWriteFields(COMPLETE_PROJECT, revivedProject); assertEquals("ACTIVE", revivedProject.getLifecycleState()); try { rpc.undelete("invalid-project-id"); fail("Should fail because the project doesn't exist."); } catch (ResourceManagerException e) { assertEquals(403, e.getCode()); assertTrue(e.getMessage().contains("the project was not found")); } }
break; case "lifecycleState": project.setLifecycleState(fullProject.getLifecycleState()); break; case "name":
assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getLifecycleState()); assertNull(returnedProject.getCreateTime()); assertFalse(iterator.hasNext()); assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getLifecycleState()); assertNull(returnedProject.getCreateTime()); assertNull(projects.x());
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 testGetWithOptions() { com.google.api.services.cloudresourcemanager.model.Project originalProject = rpc.create(COMPLETE_PROJECT); Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>(); rpcOptions.put(ResourceManagerRpc.Option.FIELDS, "projectId,name,createTime"); com.google.api.services.cloudresourcemanager.model.Project returnedProject = rpc.get(COMPLETE_PROJECT.getProjectId(), rpcOptions); assertFalse(COMPLETE_PROJECT.equals(returnedProject)); assertEquals(COMPLETE_PROJECT.getProjectId(), returnedProject.getProjectId()); assertEquals(COMPLETE_PROJECT.getName(), returnedProject.getName()); assertEquals(originalProject.getCreateTime(), returnedProject.getCreateTime()); assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getLifecycleState()); assertNull(returnedProject.getLabels()); }
assertEquals(createdProject.getProjectNumber(), returnedProject.getProjectNumber()); assertEquals(createdProject.getCreateTime(), returnedProject.getCreateTime()); assertEquals(createdProject.getLifecycleState(), returnedProject.getLifecycleState()); com.google.api.services.cloudresourcemanager.model.Project nonexistantProject = new com.google.api.services.cloudresourcemanager.model.Project();
@Test public void testChangeLifecycleStatus() { assertFalse( RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "DELETE_IN_PROGRESS")); rpc.create(COMPLETE_PROJECT); assertTrue( RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "DELETE_IN_PROGRESS")); assertEquals( "DELETE_IN_PROGRESS", rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS).getLifecycleState()); try { RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "INVALID_STATE"); fail("Should fail because of an invalid lifecycle state"); } catch (IllegalArgumentException e) { // ignore } }
rpc.create(PARTIAL_PROJECT); compareReadWriteFields(PARTIAL_PROJECT, returnedProject); assertEquals("ACTIVE", returnedProject.getLifecycleState()); assertNull(returnedProject.getLabels()); assertNull(returnedProject.getName()); assertEquals("ACTIVE", returnedProject.getLifecycleState()); assertNotNull(returnedProject.getProjectNumber()); assertNotNull(returnedProject.getCreateTime());
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, "{}"); } }
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, "{}"); } }
synchronized Response undelete(String projectId) { Project project = projects.get(projectId); Response response; if (project == null) { response = Error.PERMISSION_DENIED.response( "Error when undeleting " + projectId + " because the project was not found."); } else if (!project.getLifecycleState().equals("DELETE_REQUESTED")) { response = Error.FAILED_PRECONDITION.response("Error when undeleting " + projectId + " because the lifecycle state was not DELETE_REQUESTED."); } else { project.setLifecycleState("ACTIVE"); response = new Response(HTTP_OK, "{}"); } return response; }
synchronized Response undelete(String projectId) { Project project = projects.get(projectId); Response response; if (project == null) { response = Error.PERMISSION_DENIED.response( "Error when undeleting " + projectId + " because the project was not found."); } else if (!project.getLifecycleState().equals("DELETE_REQUESTED")) { response = Error.FAILED_PRECONDITION.response("Error when undeleting " + projectId + " because the lifecycle state was not DELETE_REQUESTED."); } else { project.setLifecycleState("ACTIVE"); response = new Response(HTTP_OK, "{}"); } return response; }
static ProjectInfo fromPb(com.google.api.services.cloudresourcemanager.model.Project projectPb) { Builder builder = builder(projectPb.getProjectId()).projectNumber(projectPb.getProjectNumber()); if (projectPb.getName() != null && !projectPb.getName().equals("Unnamed")) { builder.name(projectPb.getName()); } if (projectPb.getLabels() != null) { builder.labels(projectPb.getLabels()); } if (projectPb.getLifecycleState() != null) { builder.state(State.valueOf(projectPb.getLifecycleState())); } if (projectPb.getCreateTime() != null) { builder.createTimeMillis(DateTime.parse(projectPb.getCreateTime()).getMillis()); } if (projectPb.getParent() != null) { builder.parent(ResourceId.fromPb(projectPb.getParent())); } return builder.build(); } }