@Override public Project replace(Project project) { try { return resourceManager.projects().update(project.getProjectId(), project).execute(); } catch (IOException ex) { throw translate(ex); } }
@Test public void testGet() { rpc.create(COMPLETE_PROJECT); com.google.api.services.cloudresourcemanager.model.Project returnedProject = rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS); compareReadWriteFields(COMPLETE_PROJECT, returnedProject); RESOURCE_MANAGER_HELPER.removeProject(COMPLETE_PROJECT.getProjectId()); assertNull(rpc.get(COMPLETE_PROJECT.getProjectId(), EMPTY_RPC_OPTIONS)); }
@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())); }
Response get(String projectId, String[] fields) { Project project = projects.get(projectId); if (project != null) { try { return new Response(HTTP_OK, jsonFactory.toString(extractFields(project, fields))); } catch (IOException e) { return Error.INTERNAL_ERROR.response( "Error when serializing project " + project.getProjectId()); } } else { return Error.PERMISSION_DENIED.response("Project " + projectId + " not found."); } }
private void clearProjects() { for (com.google.api.services.cloudresourcemanager.model.Project project : rpc.list(EMPTY_RPC_OPTIONS).y()) { RESOURCE_MANAGER_HELPER.removeProject(project.getProjectId()); } }
@Test public void testDeleteWhenDeleteInProgress() { rpc.create(COMPLETE_PROJECT); RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "DELETE_IN_PROGRESS"); try { rpc.delete(COMPLETE_PROJECT.getProjectId()); fail("Should fail because the project is not ACTIVE."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("the lifecycle state was not ACTIVE")); } }
@Test public void testDeleteWhenDeleteRequested() { rpc.create(COMPLETE_PROJECT); RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "DELETE_REQUESTED"); try { rpc.delete(COMPLETE_PROJECT.getProjectId()); fail("Should fail because the project is not ACTIVE."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("the lifecycle state was not ACTIVE")); } }
@Test public void testUndeleteWhenDeleteInProgress() { rpc.create(COMPLETE_PROJECT); RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "DELETE_IN_PROGRESS"); try { rpc.undelete(COMPLETE_PROJECT.getProjectId()); fail("Should fail because the project is in the process of being deleted."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("lifecycle state was not DELETE_REQUESTED")); } }
@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")); } }
@Test public void testReplaceWhenDeleteRequested() { rpc.create(COMPLETE_PROJECT); rpc.delete(COMPLETE_PROJECT.getProjectId()); com.google.api.services.cloudresourcemanager.model.Project anotherProject = new com.google.api.services.cloudresourcemanager.model.Project() .setProjectId(COMPLETE_PROJECT.getProjectId()); try { rpc.replace(anotherProject); fail("Should fail because the project is not ACTIVE."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("the lifecycle state was not ACTIVE")); } }
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()); } }
@Test public void testReplaceWhenDeleteInProgress() { rpc.create(COMPLETE_PROJECT); RESOURCE_MANAGER_HELPER.changeLifecycleState( COMPLETE_PROJECT.getProjectId(), "DELETE_IN_PROGRESS"); com.google.api.services.cloudresourcemanager.model.Project anotherProject = new com.google.api.services.cloudresourcemanager.model.Project() .setProjectId(COMPLETE_PROJECT.getProjectId()); try { rpc.replace(anotherProject); fail("Should fail because the project is not ACTIVE."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("the lifecycle state was not ACTIVE")); } }
@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 testUndeleteWhenActive() { rpc.create(COMPLETE_PROJECT); try { rpc.undelete(COMPLETE_PROJECT.getProjectId()); fail("Should fail because the project is not deleted."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("lifecycle state was not DELETE_REQUESTED")); } }
@Test public void testTestPermissions() { List<String> permissions = ImmutableList.of("resourcemanager.projects.get"); try { rpc.testPermissions("nonexistent-project", permissions); fail("Nonexistent project."); } catch (ResourceManagerException e) { assertEquals(403, e.getCode()); assertEquals("Project nonexistent-project not found.", e.getMessage()); } rpc.create(PARTIAL_PROJECT); assertEquals( ImmutableList.of(true), rpc.testPermissions(PARTIAL_PROJECT.getProjectId(), permissions)); }
@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 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()); }
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 testReplaceRemovingParent() { rpc.create(PROJECT_WITH_PARENT); com.google.api.services.cloudresourcemanager.model.Project anotherProject = new com.google.api.services.cloudresourcemanager.model.Project() .setProjectId(PROJECT_WITH_PARENT.getProjectId()); try { rpc.replace(anotherProject); fail("Should fail because the project's parent was unset."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertEquals( "The server currently only supports setting the parent once " + "and does not allow unsetting it.", e.getMessage()); } }
@Test public void testReplaceAddingParent() { rpc.create(COMPLETE_PROJECT); com.google.api.services.cloudresourcemanager.model.Project anotherProject = new com.google.api.services.cloudresourcemanager.model.Project() .setProjectId(COMPLETE_PROJECT.getProjectId()) .setParent(PARENT); try { rpc.replace(anotherProject); fail("Should fail because the project's parent was modified after creation."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertEquals( "The server currently only supports setting the parent once " + "and does not allow unsetting it.", e.getMessage()); } }