use of com.vmware.photon.controller.model.tasks.ProvisionComputeTaskService.ProvisionComputeTaskState in project photon-model by vmware.
the class TestAzureLongRunningEnumeration method testLongRunEnumeration.
@Test
public void testLongRunEnumeration() throws Throwable {
// Log node stats at the beginning of the test
logNodeStats(this.host.getServiceStats(this.nodeStatsUri));
// 1. Provision VMs
List<ProvisionComputeTaskState> taskStates = new ArrayList<>();
for (int i = 0; i < numOfVMsToTest; i++) {
this.storageDescriptions.add(createDefaultStorageAccountDescription(this.host, this.mockedStorageAccountName, computeHost, endpointState));
this.resourceGroupStates.add(createDefaultResourceGroupState(this.host, this.mockedStorageAccountName, computeHost, endpointState, ResourceGroupStateType.AzureResourceGroup));
this.diskStates.add(createDefaultDiskState(this.host, this.mockedStorageAccountName, this.mockedStorageAccountName, computeHost, endpointState));
// create an Azure VM compute resource (this also creates a disk and a storage account)
this.vmStates.add(createDefaultVMResource(this.host, azureVMNames.get(i), computeHost, endpointState, nicSpecs.get(i)));
// kick off a provision task to do the actual VM creation
ProvisionComputeTaskState provisionTask = new ProvisionComputeTaskState();
provisionTask.computeLink = this.vmStates.get(i).documentSelfLink;
provisionTask.isMockRequest = this.isMock;
provisionTask.taskSubStage = SubStage.CREATING_HOST;
taskStates.add(TestUtils.doPost(this.host, provisionTask, ProvisionComputeTaskState.class, UriUtils.buildUri(this.host, ProvisionComputeTaskService.FACTORY_LINK)));
}
for (ProvisionComputeTaskState taskState : taskStates) {
this.host.waitForFinishedTask(ProvisionComputeTaskState.class, taskState.documentSelfLink);
}
this.host.log(Level.INFO, "VMs provisioned successfully.");
// Check resources have been created
// expected VM count = numOfVMsToTest + 1 (1 compute host instance + numOfVMsToTest vm compute state)
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest + 1, ComputeService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest, StorageDescriptionService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest, ResourceGroupService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest, DiskService.FACTORY_LINK, false);
Map<String, ComputeState> azLrtComputeStates = getVMComputeStatesWithPrefix();
Assert.assertEquals(numOfVMsToTest, azLrtComputeStates.size());
if (this.isMock) {
runEnumeration(this.host, computeHost.documentSelfLink, computeHost.resourcePoolLink, endpointState, this.isMock);
for (int i = 0; i < numOfVMsToTest; i++) {
deleteVMs(this.host, this.vmStates.get(i).documentSelfLink, this.isMock, 1);
this.vmStates.set(i, null);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest - i, ComputeService.FACTORY_LINK, false);
deleteServiceDocument(this.host, this.storageDescriptions.get(i).documentSelfLink);
this.storageDescriptions.set(i, null);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest - i - 1, StorageDescriptionService.FACTORY_LINK, true);
deleteServiceDocument(this.host, this.resourceGroupStates.get(i).documentSelfLink);
this.resourceGroupStates.set(i, null);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest - i - 1, ResourceGroupService.FACTORY_LINK, false);
deleteServiceDocument(this.host, this.diskStates.get(i).documentSelfLink);
this.diskStates.set(i, null);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, numOfVMsToTest - i - 1, DiskService.FACTORY_LINK, false);
}
return;
}
// 2. Create extra resources
createStaleResource();
tagAzureResources();
// stale resources + 1 compute host instance + 1 vm compute state
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, STALE_VM_RESOURCES_COUNT + (numOfVMsToTest + 1), ComputeService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, STALE_STORAGE_ACCOUNTS_COUNT + numOfVMsToTest, StorageDescriptionService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, STALE_CONTAINERS_COUNT + STALE_RG_COUNT + 1, ResourceGroupService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, STALE_DISKS_COUNT + numOfVMsToTest, DiskService.FACTORY_LINK, false);
ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, STALE_SECURITY_GROUPS_COUNT, SecurityGroupService.FACTORY_LINK, false);
this.vmCount = getAzureVMCount(this.computeManagementClient);
this.host.log(Level.INFO, "Initial VM Count: %d", this.vmCount);
// 3. Run multiple enumerations over a period of time.
this.host.log(Level.INFO, "Waiting for multiple enumeration runs...");
ScheduledFuture<?> enums = runEnumerationAndLogNodeStatsPeriodically();
this.host.waitFor("Timeout while waiting for test run duration", () -> {
TimeUnit.MINUTES.sleep(this.testRunDurationInMinutes);
enums.cancel(false);
return true;
});
this.host.waitFor("Timeout while waiting for last enumeration to clear out.", () -> {
TimeUnit.MINUTES.sleep(1);
return true;
});
verifyResourceDuplicates();
// 4. Validate extra resources
assertRemoteResources();
assertStaleResources();
ServiceDocumentQueryResult result = ProvisioningUtils.queryDocumentsAndAssertExpectedCount(this.host, this.vmCount, ComputeService.FACTORY_LINK, false);
// validate type field for enumerated VMs
result.documents.entrySet().stream().map(e -> Utils.fromJson(e.getValue(), ComputeState.class)).filter(c -> !c.documentSelfLink.equals(computeHost.documentSelfLink)).forEach(c -> assertEquals(ComputeType.VM_GUEST, c.type));
// validate internal tags for enumerated VMs
TagService.TagState expectedInternalTypeTag = newTagState(TAG_KEY_TYPE, AzureConstants.AzureResourceType.azure_vm.toString(), false, endpointState.tenantLinks);
result.documents.entrySet().stream().map(e -> Utils.fromJson(e.getValue(), ComputeState.class)).filter(c -> c.type.equals(ComputeType.VM_GUEST)).forEach(c -> {
assertNotNull(c.tagLinks);
assertTrue(c.tagLinks.contains(expectedInternalTypeTag.documentSelfLink));
});
// validate environment name field for enumerated VMs
result.documents.entrySet().stream().map(e -> Utils.fromJson(e.getValue(), ComputeState.class)).forEach(c -> assertEquals(ComputeDescription.ENVIRONMENT_NAME_AZURE, c.environmentName));
// 5. Validate enumerated compute states have not changed.
Map<String, ComputeState> azLrtComputeStatesEnd = getVMComputeStatesWithPrefix();
assertTrue(numOfVMsToTest <= azLrtComputeStatesEnd.size());
assertComputeStatesEqual(azLrtComputeStates, azLrtComputeStatesEnd);
// 1 network per each stale vm resource + 1 network for original vm compute state.
ServiceDocumentQueryResult networkResults = ProvisioningUtils.queryAllFactoryResources(this.host, NetworkService.FACTORY_LINK);
// validate internal tags for enumerated networks
TagService.TagState expectedNetworkInternalTypeTag = newTagState(TAG_KEY_TYPE, NETWORK_TAG_TYPE_VALUE, false, endpointState.tenantLinks);
networkResults.documents.entrySet().stream().map(e -> Utils.fromJson(e.getValue(), NetworkState.class)).forEach(c -> {
assertNotNull(c.tagLinks);
assertTrue(c.tagLinks.contains(expectedNetworkInternalTypeTag.documentSelfLink));
});
// 1 subnet per network, 1 network per each stale vm resource + 1 subnet for the original
// compute state.
ServiceDocumentQueryResult subnetResults = ProvisioningUtils.queryAllFactoryResources(this.host, SubnetService.FACTORY_LINK);
// validate internal tags for enumerated subnets
TagService.TagState expectedSubnetInternalTypeTag = newTagState(TAG_KEY_TYPE, SUBNET_TAG_TYPE_VALUE, false, endpointState.tenantLinks);
subnetResults.documents.entrySet().stream().map(e -> Utils.fromJson(e.getValue(), SubnetState.class)).forEach(c -> {
assertNotNull(c.tagLinks);
assertTrue(c.tagLinks.contains(expectedSubnetInternalTypeTag.documentSelfLink));
});
ServiceDocumentQueryResult nicResults = ProvisioningUtils.queryAllFactoryResources(this.host, NetworkInterfaceService.FACTORY_LINK);
// validate internal tags for enumerated network interfaces
TagService.TagState expectedNicInternalTypeTag = newTagState(TAG_KEY_TYPE, NETWORK_INTERFACE_TAG_TYPE_VALUE, false, endpointState.tenantLinks);
nicResults.documents.entrySet().stream().map(e -> Utils.fromJson(e.getValue(), NetworkInterfaceState.class)).forEach(c -> {
assertNotNull(c.tagLinks);
assertTrue(c.tagLinks.contains(expectedNicInternalTypeTag.documentSelfLink));
});
for (int i = 0; i < numOfVMsToTest; i++) {
this.host.log(Level.INFO, "Deleting vm: %s", azureVMNames.get(i));
this.computeManagementClient.virtualMachines().beginDelete(azureVMNames.get(i), azureVMNames.get(i));
}
runEnumeration(this.host, computeHost.documentSelfLink, computeHost.resourcePoolLink, endpointState, this.isMock);
for (int i = 0; i < numOfVMsToTest; i++) {
assertResourceDisassociated(this.host, ComputeService.FACTORY_LINK, azureVMNames.get(i), true);
// clean up
this.vmStates.set(i, null);
this.resourceManagementClient.resourceGroups().beginDelete(azureVMNames.get(i));
this.host.log(Level.INFO, "Deleting vm resource group %s", azureVMNames.get(i));
}
// Log node stats at the end of the test
logNodeStats(this.host.getServiceStats(this.nodeStatsUri));
}
use of com.vmware.photon.controller.model.tasks.ProvisionComputeTaskService.ProvisionComputeTaskState in project photon-model by vmware.
the class AzureLifecycleOperationServiceTest method kickOffProvisionTask.
private void kickOffProvisionTask() throws Throwable {
ProvisionComputeTaskState provisionTask = new ProvisionComputeTaskState();
provisionTask.computeLink = this.vmState.documentSelfLink;
provisionTask.isMockRequest = this.isMock;
provisionTask.taskSubStage = ProvisionComputeTaskState.SubStage.CREATING_HOST;
provisionTask = TestUtils.doPost(this.host, provisionTask, ProvisionComputeTaskState.class, UriUtils.buildUri(this.host, ProvisionComputeTaskService.FACTORY_LINK));
this.host.waitForFinishedTask(ProvisionComputeTaskState.class, provisionTask.documentSelfLink);
}
use of com.vmware.photon.controller.model.tasks.ProvisionComputeTaskService.ProvisionComputeTaskState in project photon-model by vmware.
the class BaseVSphereAdapterTest method createProvisionTask.
protected ProvisionComputeTaskState createProvisionTask(ComputeState vm) throws Throwable {
ProvisionComputeTaskState provisionTask = new ProvisionComputeTaskState();
provisionTask.computeLink = vm.documentSelfLink;
provisionTask.isMockRequest = isMock();
provisionTask.taskSubStage = ProvisionComputeTaskState.SubStage.CREATING_HOST;
ProvisionComputeTaskState outTask = TestUtils.doPost(this.host, provisionTask, ProvisionComputeTaskState.class, UriUtils.buildUri(this.host, ProvisionComputeTaskService.FACTORY_LINK));
return outTask;
}
use of com.vmware.photon.controller.model.tasks.ProvisionComputeTaskService.ProvisionComputeTaskState in project photon-model by vmware.
the class AWSPowerServiceTest method test.
@Test
public void test() throws Throwable {
EndpointState endpoint = configureEndpoint();
assertNotNull(endpoint.resourcePoolLink);
ComputeState computeHost = this.host.getServiceState(null, ComputeState.class, UriUtils.buildUri(this.host, endpoint.computeLink));
assertNotNull(computeHost);
ComputeDescription computeHostDesc = this.host.getServiceState(null, ComputeDescription.class, UriUtils.buildUri(this.host, endpoint.computeDescriptionLink));
assertNotNull(computeHostDesc);
assertNotNull("Power addpter must be configured", computeHostDesc.powerAdapterReference);
boolean addNonExistingSecurityGroup = false;
ComputeState cs = TestAWSSetupUtils.createAWSVMResource(this.host, computeHost, endpoint, getClass(), "trainingVM", zoneId, this.regionId, null, this.singleNicSpec, addNonExistingSecurityGroup, this.awsTestContext);
this.computesToRemove.add(cs.documentSelfLink);
assertEquals(PowerState.UNKNOWN, cs.powerState);
ProvisionComputeTaskState state = new ProvisionComputeTaskState();
state.computeLink = cs.documentSelfLink;
state.isMockRequest = this.isMock;
state.taskSubStage = ProvisionComputeTaskState.SubStage.CREATING_HOST;
state = TestUtils.doPost(this.host, state, ProvisionComputeTaskState.class, UriUtils.buildUri(this.host, ProvisionComputeTaskService.FACTORY_LINK));
this.host.waitForFinishedTask(ProvisionComputeTaskState.class, state.documentSelfLink);
ComputeState compute = this.host.getServiceState(null, ComputeState.class, UriUtils.buildUri(this.host, cs.documentSelfLink));
changePowerState(computeHostDesc, compute.documentSelfLink, PowerState.OFF);
if (!this.isMock) {
waitForInstancesToBeStopped(this.client, this.host, Arrays.asList(compute.id));
}
changePowerState(computeHostDesc, compute.documentSelfLink, PowerState.ON);
if (!this.isMock) {
final int errorRate = 0;
waitForProvisioningToComplete(Arrays.asList(compute.id), this.host, this.client, errorRate);
}
}
use of com.vmware.photon.controller.model.tasks.ProvisionComputeTaskService.ProvisionComputeTaskState in project photon-model by vmware.
the class AWSResetServiceTest method provisionSingleAWS.
private void provisionSingleAWS() throws Throwable {
initResourcePoolAndComputeHost();
// create a AWS VM compute resource
boolean addNonExistingSecurityGroup = true;
this.vmState = createAWSVMResource(this.host, this.computeHost, this.endpointState, this.getClass(), this.currentTestName.getMethodName() + "_vm1", zoneId, regionId, null, /* tagLinks */
this.singleNicSpec, addNonExistingSecurityGroup, this.awsTestContext);
// kick off a provision task to do the actual VM creation
ProvisionComputeTaskState provisionTask = new ProvisionComputeTaskService.ProvisionComputeTaskState();
provisionTask.computeLink = this.vmState.documentSelfLink;
provisionTask.isMockRequest = this.isMock;
provisionTask.taskSubStage = ProvisionComputeTaskState.SubStage.CREATING_HOST;
// Wait for default request timeout in minutes for the machine to be powered ON before
// reporting failure to the parent task.
provisionTask.documentExpirationTimeMicros = Utils.getNowMicrosUtc() + TimeUnit.MINUTES.toMicros(AWS_VM_REQUEST_TIMEOUT_MINUTES);
provisionTask.tenantLinks = this.endpointState.tenantLinks;
provisionTask = TestUtils.doPost(this.host, provisionTask, ProvisionComputeTaskState.class, UriUtils.buildUri(this.host, ProvisionComputeTaskService.FACTORY_LINK));
this.host.waitForFinishedTask(ProvisionComputeTaskState.class, provisionTask.documentSelfLink);
}
Aggregations