in e2etest/GuestProxyAgentTest/GuestProxyAgentScenarioTests.cs [21:105]
public async Task StartAsync(List<TestScenarioSetting> testScenarioList)
{
var groupTestResultBuilderMap = new Dictionary<string, JunitTestResultBuilder>();
foreach(var testGroupName in testScenarioList.Select(x => x.testGroupName).ToHashSet())
{
groupTestResultBuilderMap[testGroupName] = new JunitTestResultBuilder(TestSetting.Instance.testResultFolder, testGroupName);
}
var taskList = new List<Task>();
var testScenarioStatusList = new List<TestScenarioStatusDetails>();
foreach (var testScenario in testScenarioList)
{
var testScenarioStatusDetails = new TestScenarioStatusDetails()
{
ScenarioName = testScenario.testScenarioName,
GroupName = testScenario.testGroupName,
Status = ScenarioTestStatus.NotStarted,
ErrorMessage = "",
Result = ScenarioTestResult.Succeed,
};
Task testScenarioTask = null!;
try
{
if (Activator.CreateInstance(Type.GetType(testScenario.testScenarioClassName)!) is TestScenarioBase @scenario)
{
testScenarioTask = @scenario
.TestScenarioSetting(testScenario)
.JUnitTestResultBuilder(groupTestResultBuilderMap[testScenario.testGroupName])
.StartAsync(testScenarioStatusDetails);
taskList.Add(testScenarioTask);
}
else
{
testScenarioStatusDetails.Result = ScenarioTestResult.Failed;
testScenarioStatusDetails.Status = ScenarioTestStatus.Completed;
testScenarioStatusDetails.ErrorMessage = "Failed to create the scenario class instance: " + testScenario.testScenarioClassName;
}
}
catch (Exception ex)
{
testScenarioStatusDetails.Result = ScenarioTestResult.Failed;
testScenarioStatusDetails.Status = ScenarioTestStatus.Completed;
testScenarioStatusDetails.ErrorMessage = ex.Message;
}
finally
{
testScenarioStatusList.Add(testScenarioStatusDetails);
if (testScenarioTask != null)
{
taskList.Add(testScenarioTask);
}
}
}
var stopMonitor = new ManualResetEvent(false);
var monitoringTask = Task.Run(() =>
{
while (!stopMonitor.WaitOne(5000))
{
ConsolePrintTestScenariosStatusSummary(testScenarioStatusList);
}
});
try
{
await Task.WhenAll(taskList).TimeoutAfter(TestSetting.Instance.testMapTimeoutMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine($"Test execution exception: {ex.Message}");
}
stopMonitor.Set();
foreach (var groupName in groupTestResultBuilderMap.Keys)
{
Console.WriteLine("building test result report for test group: " + groupName);
groupTestResultBuilderMap[groupName].Build();
}
ConsolePrintTestScenariosStatusSummary(testScenarioStatusList);
ConsolePrintTestScenariosDetailsSummary(testScenarioStatusList);
}