@Override public void run(ResourceManager resourceManager, String... args) { String projectId = args[0]; Map<String, String> labels = new HashMap<>(); for (int i = 1; i < args.length; i += 2) { if (i + 1 < args.length) { labels.put(args[i], args[i + 1]); } else { labels.put(args[i], ""); } } Project project = resourceManager.create(ProjectInfo.newBuilder(projectId).setLabels(labels).build()); System.out.printf( "Successfully created project '%s': %s.%n", projectId, projectDetails(project)); }
public static void main(String... args) { // Create Resource Manager service object. // By default, credentials are inferred from the runtime environment. ResourceManager resourceManager = ResourceManagerOptions.getDefaultInstance().getService(); String projectId = "my-globally-unique-project-id"; // Change to a unique project ID. // Get a project from the server. Project project = resourceManager.get(projectId); if (project == null) { // Create a project. project = resourceManager.create(ProjectInfo.newBuilder(projectId).build()); } System.out.println("Got project " + project.getProjectId() + " from the server."); } }
@Test public void testListPaging() { RESOURCE_MANAGER.create(PARTIAL_PROJECT); RESOURCE_MANAGER.create(COMPLETE_PROJECT); Page<Project> page = RESOURCE_MANAGER.list(ProjectListOption.pageSize(1)); assertNotNull(page.getNextPageToken()); Iterator<Project> iterator = page.getValues().iterator(); compareReadWriteFields(COMPLETE_PROJECT, iterator.next()); assertFalse(iterator.hasNext()); page = page.getNextPage(); iterator = page.getValues().iterator(); compareReadWriteFields(PARTIAL_PROJECT, iterator.next()); assertFalse(iterator.hasNext()); assertNull(page.getNextPageToken()); }
@Test public void testList() { Page<Project> projects = RESOURCE_MANAGER.list(); assertFalse(projects.getValues().iterator().hasNext()); RESOURCE_MANAGER.create(PARTIAL_PROJECT); RESOURCE_MANAGER.create(COMPLETE_PROJECT); for (Project p : RESOURCE_MANAGER.list().getValues()) { if (p.getProjectId().equals(PARTIAL_PROJECT.getProjectId())) { compareReadWriteFields(PARTIAL_PROJECT, p); } else if (p.getProjectId().equals(COMPLETE_PROJECT.getProjectId())) { compareReadWriteFields(COMPLETE_PROJECT, p); } else { fail("Some unexpected project returned by list."); } assertSame(RESOURCE_MANAGER, p.getResourceManager()); } }
@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 testListFilterOptions() { ProjectInfo matchingProject = ProjectInfo.newBuilder("matching-project") .setName("MyProject") .setLabels(ImmutableMap.of("color", "blue", "size", "big")) .build(); ProjectInfo nonMatchingProject1 = ProjectInfo.newBuilder("non-matching-project1") .setName("myProject") .setLabels(ImmutableMap.of("color", "blue")) .build(); ProjectInfo nonMatchingProject2 = ProjectInfo.newBuilder("non-matching-project2") .setName("myProj") .setLabels(ImmutableMap.of("color", "blue", "size", "big")) .build(); ProjectInfo nonMatchingProject3 = ProjectInfo.newBuilder("non-matching-project3").build(); RESOURCE_MANAGER.create(matchingProject); RESOURCE_MANAGER.create(nonMatchingProject1); RESOURCE_MANAGER.create(nonMatchingProject2); RESOURCE_MANAGER.create(nonMatchingProject3); for (Project p : RESOURCE_MANAGER.list(LIST_FILTER).getValues()) { assertFalse(p.equals(nonMatchingProject1)); assertFalse(p.equals(nonMatchingProject2)); compareReadWriteFields(matchingProject, p); assertSame(RESOURCE_MANAGER, p.getResourceManager()); } }
@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 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 testGet() { RESOURCE_MANAGER.create(COMPLETE_PROJECT); Project returnedProject = RESOURCE_MANAGER.get(COMPLETE_PROJECT.getProjectId()); compareReadWriteFields(COMPLETE_PROJECT, returnedProject); assertEquals(RESOURCE_MANAGER, returnedProject.getResourceManager()); RESOURCE_MANAGER_HELPER.removeProject(COMPLETE_PROJECT.getProjectId()); assertNull(RESOURCE_MANAGER.get(COMPLETE_PROJECT.getProjectId())); }
@Test public void testListFieldOptions() { RESOURCE_MANAGER.create(COMPLETE_PROJECT); Page<Project> projects = RESOURCE_MANAGER.list(LIST_FIELDS); Project returnedProject = projects.iterateAll().iterator().next(); assertEquals(COMPLETE_PROJECT.getProjectId(), returnedProject.getProjectId()); assertEquals(COMPLETE_PROJECT.getName(), returnedProject.getName()); assertEquals(COMPLETE_PROJECT.getLabels(), returnedProject.getLabels()); assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getState()); assertNull(returnedProject.getCreateTimeMillis()); assertSame(RESOURCE_MANAGER, returnedProject.getResourceManager()); }
@Test public void testGetPolicy() { assertNull(RESOURCE_MANAGER.getPolicy(COMPLETE_PROJECT.getProjectId())); RESOURCE_MANAGER.create(COMPLETE_PROJECT); RESOURCE_MANAGER.replacePolicy(COMPLETE_PROJECT.getProjectId(), POLICY); Policy retrieved = RESOURCE_MANAGER.getPolicy(COMPLETE_PROJECT.getProjectId()); assertEquals(POLICY.getBindings(), retrieved.getBindings()); assertNotNull(retrieved.getEtag()); assertEquals(0, retrieved.getVersion()); }
@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 testGetWithOptions() { Project originalProject = RESOURCE_MANAGER.create(COMPLETE_PROJECT); Project returnedProject = RESOURCE_MANAGER.get(COMPLETE_PROJECT.getProjectId(), GET_FIELDS); assertFalse(COMPLETE_PROJECT.equals(returnedProject)); assertEquals(COMPLETE_PROJECT.getProjectId(), returnedProject.getProjectId()); assertEquals(COMPLETE_PROJECT.getName(), returnedProject.getName()); assertEquals(originalProject.getCreateTimeMillis(), returnedProject.getCreateTimeMillis()); assertNull(returnedProject.getParent()); assertNull(returnedProject.getProjectNumber()); assertNull(returnedProject.getState()); assertTrue(returnedProject.getLabels().isEmpty()); assertEquals(RESOURCE_MANAGER, originalProject.getResourceManager()); assertEquals(RESOURCE_MANAGER, returnedProject.getResourceManager()); }
@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 testReplace() { ProjectInfo createdProject = RESOURCE_MANAGER.create(COMPLETE_PROJECT); Map<String, String> newLabels = ImmutableMap.of("new k1", "new v1"); ProjectInfo anotherCompleteProject = ProjectInfo.newBuilder(COMPLETE_PROJECT.getProjectId()) .setLabels(newLabels) .setProjectNumber(987654321L) .setCreateTimeMillis(230682061315L) .setState(ProjectInfo.State.DELETE_REQUESTED) .setParent(createdProject.getParent()) .build(); Project returnedProject = RESOURCE_MANAGER.replace(anotherCompleteProject); compareReadWriteFields(anotherCompleteProject, returnedProject); assertEquals(createdProject.getProjectNumber(), returnedProject.getProjectNumber()); assertEquals(createdProject.getCreateTimeMillis(), returnedProject.getCreateTimeMillis()); assertEquals(createdProject.getState(), returnedProject.getState()); assertEquals(RESOURCE_MANAGER, returnedProject.getResourceManager()); ProjectInfo nonexistantProject = ProjectInfo.newBuilder("some-project-id-that-does-not-exist").build(); try { RESOURCE_MANAGER.replace(nonexistantProject); 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")); } }