public async Task <RunTestResponse> RunTest(RunTestRequest request) { var listRequest = new ListTestsDataRequest(request.FilteringOrders, new Vectors.IntInterval(0, 1000), true, false); var listResponse = await TestsStorage.ListTestsDataAsync(listRequest); var testsQuery = Db.TestRuns .IncludeGroup(RunnerService.Db.EntityGroups.ALL, Db) .Filter(Logger, request.FilteringOrders); var tests = await testsQuery.ToArrayAsync(); foreach (var testFromStorge in listResponse.Tests) { var exists = tests.Any(r => r.TestName == testFromStorge.TestName); if (!exists) { tests.Add(new RunnerService.Db.TestRunInfo() { TestId = testFromStorge.TestId, Results = new List <Result>(), RunPlan = new ManualRunPlan(), TestName = testFromStorge.TestName, }); await Db.TestRuns.AddAsync(tests.LastElement()); } } var messages = new List <Func <BeginTestMessage> >(); foreach (var test in tests) { var result = new Result() { ResultBase = new PendingCompletionResult() { StartTime = DateTime.UtcNow, StartedByUser = request.StartedByUser, TestId = test.TestId, TestName = test.TestName, State = new StateInfo("", null, false) } }; test.Results.Add(result); var data = listResponse.Tests.First(t => t.TestName == test.TestName).Data; messages.Add(() => new BeginTestMessage(test.TestId, result.Id, data.Type, data.Data)); } await Db.SaveChangesAsync(); foreach (var message in messages) { MessageProducer.FireBeginTest(message()); } return(new RunTestResponse()); }