private static TestFileRunResult GenerateStubTestFileResult(TestResultState resultState = TestResultState.Success, bool taskFails = false) { var runResult = new TestFileRunResult { ResultId = taskFails ? (Guid?)null : Guid.NewGuid(), Finished = !taskFails, HasFailedTests = resultState == TestResultState.Failed, ErrorMessage = string.Empty, TestRunFailed = taskFails, TimeTaken = TimeSpan.FromDays(1), TestResults = taskFails ? new LightweightResult[0] : new[] { new LightweightResult { ResultState = resultState, ActualUrl = "some-url", AssertionsSuccess = true, ExceptionMessage = "ExceptionMessage", Message = "some=message", ResponseCodeSuccess = true, ResponseTime = TimeSpan.FromMinutes(4), ScriptCompilationSuccess = true, TestDescription = "supa-init-test-blah-blink-bloom", TestUrl = "♪ ♫ ♬ 'I can't dream anymore, since you leeeeeft' ♪ ♫ ♬" } } }; return(runResult); }
public TestFileRunResult Create(TestFileRunnerTaskInfo runnerInfo, bool timedOut, TimeSpan timeTaken) { TestFileRunResult result; if (timedOut) { // Error result = new TestFileRunResult { Finished = false, TimeTaken = timeTaken, ErrorMessage = "The runner timed out." }; } else { if (!string.IsNullOrEmpty(runnerInfo.Errors)) { result = new TestFileRunResult { Finished = false, TimeTaken = timeTaken, ErrorMessage = runnerInfo.Errors }; } else { int failCount = runnerInfo.TestFileResults?.TestResults?.Count(x => !x.Success) ?? 0; result = new TestFileRunResult { ResultId = runnerInfo.TestFileResults?.Id, HasFailedTests = (failCount > 0), ErrorMessage = string.Empty, Finished = DetectIfTestHasFinished(runnerInfo), TestRunFailed = DetectIfTestFailed(runnerInfo), TimeTaken = GetTimeTaken(runnerInfo, timeTaken), TestResults = GenerateTestResults(runnerInfo) }; } } return(result); }
public BatchStatus GetBatchStatus(int batchId) { string key = $"{KeyPrefix}{batchId}"; if (!_objectCache.Contains(key)) { throw new KeyNotFoundException($"Unknown batch id: {batchId}"); } var batchInfo = (List <int>)_objectCache[key]; var testFilesState = new List <TestFileRunResult>(batchInfo.Count); var failedTests = new List <int>(); foreach (int taskId in batchInfo) { TestFileRunnerTaskInfo taskInfo = _testFileQueue.GetTestFileTaskInfo(taskId); TestFileRunResult testFileRunResult = _testFileResultFactory.Create(taskInfo, false, TimeSpan.Zero); testFilesState.Add(testFileRunResult); if (testFileRunResult.TestRunFailed) { failedTests.Add(taskId); } } bool batchFinished = testFilesState.TrueForAll(x => x.Finished); IEnumerable <Guid> testFilesResultIds = testFilesState .Where(x => x.ResultId.HasValue) .Select(x => x.ResultId.Value); return(new BatchStatus { BatchId = batchId, TestFilesResultIds = testFilesResultIds, BatchFinished = batchFinished, HasFailedTests = testFilesState.Any(x => x.TestRunFailed) || batchFinished && testFilesState.Any(x => x.HasFailedTests), TestFilesRunning = testFilesState.Count(x => !x.Finished), TestFilesFinished = testFilesState.Count(x => x.Finished), TestFilesWithFailedTests = testFilesState.Where(x => x.HasFailedTests && x.ResultId.HasValue).Select(x => x.ResultId.Value), TestFilesFailed = failedTests.Count, FailedTasks = failedTests, }); }
public void should_return_expected_batch_status_when_tests_pass() { // given const int batchId = 8; var testFileQueue = new Mock <ITestFileQueue>(); var memoryCache = new MemoryCache("test"); var resultFactory = new Mock <ITestFileResultFactory>(); memoryCache.Set($"{BatchManager.KeyPrefix}{batchId}", new List <int> { 5 }, DateTimeOffset.MaxValue); var testFileInfo = new TestFileRunnerTaskInfo(5); testFileQueue .Setup(x => x.GetTestFileTaskInfo(5)) .Returns(testFileInfo); TestFileRunResult runResult = GenerateStubTestFileResult(); resultFactory .Setup(x => x.Create(testFileInfo, false, TimeSpan.Zero)) .Returns(runResult); // when var batchManager = new BatchManager(testFileQueue.Object, memoryCache, resultFactory.Object); BatchStatus batchStatus = batchManager.GetBatchStatus(batchId); // then Assert.That(batchStatus, Is.Not.Null); Assert.That(batchStatus.BatchId, Is.EqualTo(batchId)); Assert.That(batchStatus.TestFilesResultIds.First(), Is.EqualTo(runResult.ResultId)); Assert.That(batchStatus.BatchFinished, Is.True); Assert.That(batchStatus.HasFailedTests, Is.False); Assert.That(batchStatus.TestFilesRunning, Is.EqualTo(0)); Assert.That(batchStatus.TestFilesFinished, Is.EqualTo(1)); Assert.That(batchStatus.TestFilesWithFailedTests, Is.Empty); Assert.That(batchStatus.TestFilesFailed, Is.EqualTo(0)); Assert.That(batchStatus.FailedTasks, Is.Empty); }