public async Task StartAsync()

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);
        }