@Before public void setUp() throws Throwable { waitForServiceAvailability(GroupResourcePlacementService.FACTORY_LINK); waitForServiceAvailability(ResourcePoolService.FACTORY_LINK); requestReservationTaskURI = UriUtils.buildUri(host, ManagementUriParts.REQUEST_RESERVATION_TASKS); setPrivateField(VerificationHost.class.getDeclaredField("referer"), host, requestReservationTaskURI); containerDescription = createAndStoreContainerDescription("test-link"); resourcePool = createResourcePool(); CONTAINER_MEMORY = ContainerDescriptionService.getContainerMinMemoryLimit(); }
private GroupResourcePlacementState createAndStoreGroupResourcePlacement() throws Throwable { return createAndStoreGroupResourcePlacement("reservation-test", 8 * CONTAINER_MEMORY + CONTAINER_MEMORY / 2, 0L, 0, 0, resourcePool.documentSelfLink, false); }
private GroupResourcePlacementState createAndStoreGroupResourcePlacement(String link, Long memoryLimit, Long storageLimit, Integer priority, Integer cpuShares, String resourcePoolLink, boolean expectFailure) throws Throwable { // create test placement GroupResourcePlacementState placementState = createPlacement(link, memoryLimit, storageLimit, priority, cpuShares, resourcePoolLink, 10); // attempt saving the test placement return savePlacement(placementState, expectFailure); }
@Test public void testUpdateWhenActiveReservations() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); placementState = makeResourcePlacementReservationRequest(placementState, count); doOperation(placementState, UriUtils.buildUri(host, placementState.documentSelfLink), expectedFailure, Action.PUT); placementState = getDocument(GroupResourcePlacementState.class, placementState.documentSelfLink); placementState.maxNumberInstances = newMaxInstance; try { doOperation(placementState, UriUtils.buildUri(host, placementState.documentSelfLink), expectedFailure, Action.PUT); fail("expect maxNumberInstances validation error"); placementState = getDocument(GroupResourcePlacementState.class, placementState.documentSelfLink); placementState.resourcePoolLink = createResourcePool("new", 0L, 0L).documentSelfLink; try { doOperation(placementState, UriUtils.buildUri(host, placementState.documentSelfLink), expectedFailure, Action.PUT); fail("expect resourcePoolLink can't be changed validation error"); doDelete(UriUtils.buildUri(host, placementState.resourcePoolLink), false); placementState = getDocument(GroupResourcePlacementState.class, placementState.documentSelfLink);
@Test public void testResourcePlacementReservationRequest() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); String descLink = containerDescription.documentSelfLink; int count = 8; boolean expectFailure = false; placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); assertEquals(2, placementState.availableInstancesCount); assertEquals(count, placementState.allocatedInstancesCount); // release resource placements: count = -5; placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); assertEquals(7, placementState.availableInstancesCount); assertEquals(3, placementState.allocatedInstancesCount); // try to release resource placements more than max (success with log warning): count = (int) -(placementState.maxNumberInstances - placementState.availableInstancesCount + 1); placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); // releasing placements within max but more than reserved per desc: descLink = createAndStoreContainerDescription("new-desc").documentSelfLink; count = 4; placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); doDelete(UriUtils.buildUri(host, descLink), false); // release what's left of the provisioned resources releasePlacement(placementState, descLink, count); }
@Test public void testUpdateWhenNoActiveReservations() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); String newName = "newName"; int newMaxInstance = 7; placementState.tenantLinks = newTenantLinks; doOperation(placementState, UriUtils.buildUri(host, placementState.documentSelfLink), false, Action.PUT); placementState = getDocument(GroupResourcePlacementState.class, placementState.documentSelfLink); assertEquals(newTenantLinks, placementState.tenantLinks); doDelete(UriUtils.buildUri(host, placementState.documentSelfLink), false);
createResourcePool("resourcePool1", MIN_MEMORY * 2 + 1, 1000L); linksToDelete.add(resourcePool1.documentSelfLink); createAndStoreGroupResourcePlacement("moreMemoryThanRP", MIN_MEMORY * 2 + 2, 1000L, 0, 0, resourcePool1.documentSelfLink, expectFailure); GroupResourcePlacementState firstPlacement = createAndStoreGroupResourcePlacement( "firstPlacement", MIN_MEMORY, 200L, 0, 0, resourcePool1.documentSelfLink, expectFailure); GroupResourcePlacementState secondPlacement = createAndStoreGroupResourcePlacement( "secondPlacement", MIN_MEMORY, 200L, 0, 0, resourcePool1.documentSelfLink, expectFailure); createAndStoreGroupResourcePlacement("moreMemoryThanWhatsLeft", MIN_MEMORY, 200L, 0, 0, resourcePool1.documentSelfLink, expectFailure); doDelete(UriUtils.buildUri(host, link), false); } catch (Throwable throwable) { throwable.printStackTrace();
@Test public void testDeleteWhenWrongReservationCount() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); createContainer(placementState.documentSelfLink); boolean expectedFailure = true; try { DeploymentProfileConfig.getInstance().setTest(false); doDelete(UriUtils.buildUri(host, placementState.documentSelfLink), expectedFailure); fail("expect validation error during deletion"); } catch (LocalizableValidationException e) { // expected } finally { DeploymentProfileConfig.getInstance().setTest(true); } }
@Test public void testDeleteWhenActiveReservation() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); placementState = makeResourcePlacementReservationRequest(placementState, 5); boolean expectedFailure = true; try { DeploymentProfileConfig.getInstance().setTest(false); doDelete(UriUtils.buildUri(host, placementState.documentSelfLink), expectedFailure); fail("expect validation error during deletion"); } catch (LocalizableValidationException e) { // expected } finally { DeploymentProfileConfig.getInstance().setTest(true); } }
@Test public void testMemoryPlacementPatchRequest() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); String descLink = containerDescription.documentSelfLink; int count = 8; boolean expectFailure = false; placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); // Set the memory limit to something smaller than what's already reserved placementState.memoryLimit = 700; expectFailure = true; host.testStart(1); host.send(Operation .createPut(UriUtils.buildUri(host, placementState.documentSelfLink)) .setBody(placementState) .setCompletion(expectFailure ? host.getExpectedFailureCompletion() : host.getCompletion())); host.testWait("Asd", (int) TimeUnit.MINUTES.toSeconds(1)); releasePlacement(placementState, descLink, count); }
@Test public void testProvisioningWithUnlimitedPlacement() throws Throwable { GroupResourcePlacementState unlimitedInstancesPlacement = createPlacement( "placement-unlimited-test", 8 * CONTAINER_MEMORY + CONTAINER_MEMORY / 2, 0L, 0, 0, resourcePool.documentSelfLink, 0); assertEquals(0, unlimitedInstancesPlacement.maxNumberInstances); assertEquals(0, unlimitedInstancesPlacement.availableInstancesCount); assertEquals(0, unlimitedInstancesPlacement.allocatedInstancesCount); GroupResourcePlacementState savedPlacement = savePlacement(unlimitedInstancesPlacement, false); assertEquals(0, savedPlacement.maxNumberInstances); assertEquals(0, savedPlacement.availableInstancesCount); assertEquals(0, savedPlacement.allocatedInstancesCount); GroupResourcePlacementState placementStateAfterProvisioning = makeResourcePlacementReservationRequest( savedPlacement, 1); assertEquals(0, placementStateAfterProvisioning.maxNumberInstances); assertEquals(0, placementStateAfterProvisioning.availableInstancesCount); assertEquals(1, placementStateAfterProvisioning.allocatedInstancesCount); }
private ContainerDescription createAndStoreContainerDescription( String link, Long memoryLimit) throws Throwable { ContainerDescription containerDesc = new ContainerDescription(); containerDesc.documentSelfLink = link + UUID.randomUUID().toString(); containerDesc.name = "name"; containerDesc.memoryLimit = memoryLimit; containerDesc.image = "image"; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); assertNotNull(containerDesc); return containerDesc; }
@Test public void testDeleteWhenNoActiveReservation() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); try { DeploymentProfileConfig.getInstance().setTest(false); doDelete(UriUtils.buildUri(host, placementState.documentSelfLink), false); } finally { DeploymentProfileConfig.getInstance().setTest(true); } ServiceDocumentQuery<GroupResourcePlacementState> query = new ServiceDocumentQuery<>(host, GroupResourcePlacementState.class); AtomicBoolean deleted = new AtomicBoolean(); CountDownLatch countDownLatch = new CountDownLatch(1); query.queryDocument(placementState.documentSelfLink, (r) -> { if (!r.hasException() && !r.hasResult()) { deleted.set(true); countDownLatch.countDown(); } }); countDownLatch.await(); assertTrue(deleted.get()); }
private GroupResourcePlacementState makeResourcePlacementReservationRequest(int count, String descLink, GroupResourcePlacementState placementState, boolean expectFailure) throws Throwable { ResourcePlacementReservationRequest rsrvRequest = new ResourcePlacementReservationRequest(); rsrvRequest.resourceCount = count; rsrvRequest.resourceDescriptionLink = descLink; rsrvRequest.referer = requestReservationTaskURI.getPath(); host.testStart(1); host.send(Operation .createPatch(UriUtils.buildUri(host, placementState.documentSelfLink)) .setBody(rsrvRequest) .setCompletion(expectFailure ? host.getExpectedFailureCompletion() : host.getCompletion())); host.testWait(); for (int i = 0; i < count; i++) { createContainer(placementState.documentSelfLink); } return getDocument(GroupResourcePlacementState.class, placementState.documentSelfLink); }
private GroupResourcePlacementState makeResourcePlacementReservationRequest( GroupResourcePlacementState placementState, int count) throws Throwable { return makeResourcePlacementReservationRequest(count, containerDescription.documentSelfLink, placementState, false); }
private ContainerDescriptionService.ContainerDescription createAndStoreContainerDescription( String link) throws Throwable { return createAndStoreContainerDescription(link, CONTAINER_MEMORY); }
private ResourcePoolState createResourcePool() throws Throwable { return createResourcePool("test-resource-pool", 1024L * 1024L * 1024L * 46L, 1024L * 1024L * 1024L * 1024L); }
@Test public void testMemoryPlacementReservationRequest() throws Throwable { GroupResourcePlacementState placementState = createAndStoreGroupResourcePlacement(); String descLink = containerDescription.documentSelfLink; int count = 8; placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); assertEquals(CONTAINER_MEMORY / 2, placementState.availableMemory); placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); assertEquals(7, placementState.availableInstancesCount); placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); placementState = makeResourcePlacementReservationRequest(count, descLink, placementState, expectFailure); createAndStoreGroupResourcePlacement( "test", 0L, 0L, 0, 0, resourcePool.documentSelfLink, false); expectFailure = false; noLimitsGroupResourcePlacement = makeResourcePlacementReservationRequest(1, descLink, noLimitsGroupResourcePlacement, expectFailure); createAndStoreContainerDescription( "no-limits", 0L); noLimitsGroupResourcePlacement = makeResourcePlacementReservationRequest(1,
private ContainerState createContainer(String groupResourcePlacementLink) throws Throwable { ContainerState containerState = new ContainerState(); containerState.id = UUID.randomUUID().toString(); containerState.names = new ArrayList<>(Arrays.asList("name_" + containerState.id)); containerState.command = new String[] { "cat" }; containerState.adapterManagementReference = URI .create("http://remote-host:8082/docker-executor"); containerState.address = "http://docker:5432/"; containerState.descriptionLink = UriUtils.buildUriPath( ContainerDescriptionService.FACTORY_LINK, "docker-nginx"); containerState.customProperties = new HashMap<>(); containerState.powerState = ContainerState.PowerState.RUNNING; containerState.parentLink = "/parent/link"; containerState.groupResourcePlacementLink = groupResourcePlacementLink; containerState = doPost(containerState, ContainerFactoryService.SELF_LINK); return containerState; } }
private void releasePlacement( com.vmware.admiral.compute.container.GroupResourcePlacementService.GroupResourcePlacementState placementState, String descLink, int count) throws Throwable { makeResourcePlacementReservationRequest(-count, descLink, placementState, false); }