@Test public void testInvalidListPaging() { Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>(); rpcOptions.put(ResourceManagerRpc.Option.PAGE_SIZE, -1); try { rpc.list(rpcOptions); } catch (ResourceManagerException e) { assertEquals("Page size must be greater than 0.", e.getMessage()); } }
private void expectInvalidArgumentException( com.google.api.services.cloudresourcemanager.model.Project project, String errorMessageSubstring) { try { rpc.create(project); fail("Should fail because of an invalid argument."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains(errorMessageSubstring)); } }
@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 testTestPermissions() { List<String> permissions = ImmutableList.of("resourcemanager.projects.get"); try { RESOURCE_MANAGER.testPermissions("nonexistent-project", permissions); fail("Nonexistent project"); } catch (ResourceManagerException e) { assertEquals(403, e.getCode()); assertEquals("Project nonexistent-project not found.", e.getMessage()); } RESOURCE_MANAGER.create(PARTIAL_PROJECT); assertEquals( ImmutableList.of(true), RESOURCE_MANAGER.testPermissions(PARTIAL_PROJECT.getProjectId(), permissions)); }
@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 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 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 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")); } }
@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 testDelete() { RESOURCE_MANAGER.create(COMPLETE_PROJECT); RESOURCE_MANAGER.delete(COMPLETE_PROJECT.getProjectId()); assertEquals( ProjectInfo.State.DELETE_REQUESTED, RESOURCE_MANAGER.get(COMPLETE_PROJECT.getProjectId()).getState()); try { RESOURCE_MANAGER.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 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()); } }
@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()); }
@Test public void testReplacePolicy() { try { RESOURCE_MANAGER.replacePolicy("nonexistent-project", POLICY); fail("Project doesn't exist."); } catch (ResourceManagerException e) { assertEquals(403, e.getCode()); assertTrue(e.getMessage().endsWith("project was not found.")); } RESOURCE_MANAGER.create(PARTIAL_PROJECT); Policy oldPolicy = RESOURCE_MANAGER.getPolicy(PARTIAL_PROJECT.getProjectId()); RESOURCE_MANAGER.replacePolicy(PARTIAL_PROJECT.getProjectId(), POLICY); try { RESOURCE_MANAGER.replacePolicy(PARTIAL_PROJECT.getProjectId(), oldPolicy); fail("Policy with an invalid etag didn't cause error."); } catch (ResourceManagerException e) { assertEquals(409, e.getCode()); assertTrue(e.getMessage().contains("Policy etag mismatch")); } String originalEtag = RESOURCE_MANAGER.getPolicy(PARTIAL_PROJECT.getProjectId()).getEtag(); Policy newPolicy = RESOURCE_MANAGER.replacePolicy(PARTIAL_PROJECT.getProjectId(), POLICY); assertEquals(POLICY.getBindings(), newPolicy.getBindings()); assertNotNull(newPolicy.getEtag()); assertNotEquals(originalEtag, newPolicy.getEtag()); }
@Test public void testCreate() { Project returnedProject = RESOURCE_MANAGER.create(PARTIAL_PROJECT); compareReadWriteFields(PARTIAL_PROJECT, returnedProject); assertEquals(ProjectInfo.State.ACTIVE, returnedProject.getState()); assertNull(returnedProject.getName()); assertNull(returnedProject.getParent()); assertNotNull(returnedProject.getProjectNumber()); assertNotNull(returnedProject.getCreateTimeMillis()); assertSame(RESOURCE_MANAGER, returnedProject.getResourceManager()); try { RESOURCE_MANAGER.create(PARTIAL_PROJECT); fail("Should fail, project already exists."); } catch (ResourceManagerException e) { assertEquals(409, e.getCode()); assertTrue( e.getMessage().startsWith("A project with the same project ID") && e.getMessage().endsWith("already exists.")); } returnedProject = RESOURCE_MANAGER.create(COMPLETE_PROJECT); compareReadWriteFields(COMPLETE_PROJECT, returnedProject); assertEquals(ProjectInfo.State.ACTIVE, returnedProject.getState()); assertNotNull(returnedProject.getProjectNumber()); assertNotNull(returnedProject.getCreateTimeMillis()); assertSame(RESOURCE_MANAGER, returnedProject.getResourceManager()); }
@Test public void testUndelete() { RESOURCE_MANAGER.create(COMPLETE_PROJECT); RESOURCE_MANAGER.delete(COMPLETE_PROJECT.getProjectId()); assertEquals( ProjectInfo.State.DELETE_REQUESTED, RESOURCE_MANAGER.get(COMPLETE_PROJECT.getProjectId()).getState()); RESOURCE_MANAGER.undelete(COMPLETE_PROJECT.getProjectId()); ProjectInfo revivedProject = RESOURCE_MANAGER.get(COMPLETE_PROJECT.getProjectId()); compareReadWriteFields(COMPLETE_PROJECT, revivedProject); assertEquals(ProjectInfo.State.ACTIVE, revivedProject.getState()); try { RESOURCE_MANAGER.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 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 testIsInvalidProjectName() { com.google.api.services.cloudresourcemanager.model.Project project = new com.google.api.services.cloudresourcemanager.model.Project() .setProjectId("some-project-id"); rpc.create(project); assertNull(rpc.get(project.getProjectId(), EMPTY_RPC_OPTIONS).getName()); RESOURCE_MANAGER_HELPER.removeProject(project.getProjectId()); project.setName("This is a valid name-'\"!"); rpc.create(project); assertEquals(project.getName(), rpc.get(project.getProjectId(), EMPTY_RPC_OPTIONS).getName()); RESOURCE_MANAGER_HELPER.removeProject(project.getProjectId()); project.setName("invalid-character-,"); try { rpc.create(project); fail("Should fail because of invalid project name."); } catch (ResourceManagerException e) { assertEquals(400, e.getCode()); assertTrue(e.getMessage().contains("invalid name")); } }