in e2etest/GuestProxyAgentTest/TestScenarios/TestScenarioBase.cs [144:203]
private async Task DoStartAsync(TestScenarioStatusDetails testScenarioStatusDetails, CancellationToken cancellationToken)
{
try
{
ConsoleLog("Running test.");
testScenarioStatusDetails.Status = ScenarioTestStatus.Running;
VirtualMachineResource vmr;
Stopwatch sw = Stopwatch.StartNew();
var vmCreateTestName = "CreateVM";
try
{
vmr = await _vmBuilder.Build(this.EnableProxyAgentForNewVM, cancellationToken);
ConsoleLog("VM Create succeed");
sw.Stop();
_junitTestResultBuilder.AddSuccessTestResult(_testScenarioSetting.testScenarioName, vmCreateTestName, "VM Create succeed", "", sw.ElapsedMilliseconds);
}
catch (Exception ex)
{
// if the VM Creation operation failed, try check the VM instance view for 5 minutes
var startTime = DateTime.UtcNow;
while (true)
{
vmr = await _vmBuilder.GetVirtualMachineResource();
var instanceView = await vmr.InstanceViewAsync(cancellationToken: cancellationToken);
if (instanceView?.Value?.Statuses?.Count > 0 && (instanceView.Value.Statuses[0].DisplayStatus == "Provisioning succeeded"
|| instanceView.Value.Statuses[0].DisplayStatus == "VM running"))
{
ConsoleLog("VM Create succeed");
sw.Stop();
_junitTestResultBuilder.AddSuccessTestResult(_testScenarioSetting.testScenarioName, vmCreateTestName, "VM Create succeed", "", sw.ElapsedMilliseconds);
break;
}
if (DateTime.UtcNow - startTime > TimeSpan.FromMinutes(5))
{
// poll timed out, rethrow the exception
sw.Stop();
_junitTestResultBuilder.AddFailureTestResult(testScenarioStatusDetails.ScenarioName, vmCreateTestName, "", ex.Message + ex.StackTrace ?? "", "", sw.ElapsedMilliseconds);
throw;
}
// wait for 10 seconds before polling again
await Task.Delay(10000);
}
}
ConsoleLog("Running scenario test: " + _testScenarioSetting.testScenarioName);
await ScenarioTestAsync(vmr, testScenarioStatusDetails, cancellationToken);
}
catch (Exception ex)
{
testScenarioStatusDetails.ErrorMessage = ex.Message;
testScenarioStatusDetails.Result = ScenarioTestResult.Failed;
ConsoleLog("Exception occurs: " + ex.Message);
}
testScenarioStatusDetails.Status = ScenarioTestStatus.Completed;
ConsoleLog("Test scenario run finished.");
}