/// <inheritdoc /> public async Task FinalizeAsync(IAgentLogPluginContext context) { using (var timer = new SimpleTimer("Finalize", _logger, new TelemetryDataWrapper(_telemetry, TelemetryConstants.FinalizeAsync), TimeSpan.FromMilliseconds(Int32.MaxValue))) { await _inputDataParser.CompleteAsync(); } await _telemetry.PublishCumulativeTelemetryAsync(); }
/// <inheritdoc /> public async Task CompleteAsync() { try { _telemetry.AddOrUpdate(TelemetryConstants.TotalLines, _counter); _broadcast.Complete(); Task.WaitAll(_subscribers.Values.Select(x => x.Completion).ToArray()); using (var timer = new SimpleTimer("TestRunManagerFinalize", _logger, new TelemetryDataWrapper(_telemetry, TelemetryConstants.TestRunManagerEventArea, TelemetryConstants.FinalizeAsync), TimeSpan.FromMilliseconds(Int32.MaxValue))) { await _testRunManager.FinalizeAsync(); } } catch (Exception ex) { _logger?.Warning($"Failed to finish the complete operation: {ex}"); } }
/// <inheritdoc /> public async Task <TestRun> PublishAsync(TestRun testRun) { using (var timer = new SimpleTimer("PublishTestRun", _logger, new TelemetryDataWrapper(_telemetry, TelemetryConstants.PipelineTestRunPublisherEventArea, TelemetryConstants.PublishTestRun), TimeSpan.FromMilliseconds(int.MaxValue))) { var runCreateModel = new RunCreateModel(name: testRun.TestRunName, buildId: _pipelineConfig.BuildId, state: TestRunState.InProgress.ToString(), isAutomated: true, type: RunType.NoConfigRun.ToString()); runCreateModel.PipelineReference = new PipelineReference() { PipelineId = _pipelineConfig.BuildId, StageReference = new StageReference() { StageName = _pipelineConfig.StageName, Attempt = _pipelineConfig.StageAttempt }, PhaseReference = new PhaseReference() { PhaseName = _pipelineConfig.PhaseName, Attempt = _pipelineConfig.PhaseAttempt }, JobReference = new JobReference() { JobName = _pipelineConfig.JobName, Attempt = _pipelineConfig.JobAttempt } }; // Create the test run on the server var run = await _httpClient.CreateTestRunAsync(runCreateModel, _pipelineConfig.Project); _logger.Info($"PipelineTestRunPublisher : PublishAsync : Created test run with id {run.Id}."); _telemetry.AddAndAggregate(TelemetryConstants.TestRunIds, new List <int> { run.Id }, TelemetryConstants.PipelineTestRunPublisherEventArea); _telemetry.AddAndAggregate($"{testRun.ParserUri.Split('/')[0]}RunsCount", 1, TelemetryConstants.PipelineTestRunPublisherEventArea); // Populate test reulsts var testResults = new List <TestCaseResult>(); foreach (var passedTest in testRun.PassedTests) { testResults.Add(new TestCaseResult { TestCaseTitle = passedTest.Name, AutomatedTestName = passedTest.Name, DurationInMs = passedTest.ExecutionTime.TotalMilliseconds, State = "Completed", AutomatedTestType = "NoConfig", Outcome = TestOutcome.Passed.ToString() }); } foreach (var failedTest in testRun.FailedTests) { testResults.Add(new TestCaseResult { TestCaseTitle = failedTest.Name, AutomatedTestName = failedTest.Name, DurationInMs = failedTest.ExecutionTime.TotalMilliseconds, State = "Completed", AutomatedTestType = "NoConfig", Outcome = TestOutcome.Failed.ToString(), StackTrace = failedTest.StackTrace }); } foreach (var skippedTest in testRun.SkippedTests) { testResults.Add(new TestCaseResult { TestCaseTitle = skippedTest.Name, AutomatedTestName = skippedTest.Name, DurationInMs = skippedTest.ExecutionTime.TotalMilliseconds, State = "Completed", AutomatedTestType = "NoConfig", Outcome = TestOutcome.NotExecuted.ToString() }); } var batchedResults = testResults.Batch(BatchSize); foreach (var batch in batchedResults) { // Update the run with test results await _httpClient.AddTestResultsToTestRunAsync(batch.ToArray(), _pipelineConfig.Project, run.Id); } var runUpdateModel = new RunUpdateModel(state: TestRunState.Completed.ToString()) { RunSummary = new List <RunSummaryModel>() }; runUpdateModel.RunSummary.Add(new RunSummaryModel(resultCount: testRun.TestRunSummary.TotalFailed, testOutcome: TestOutcome.Failed)); runUpdateModel.RunSummary.Add(new RunSummaryModel(resultCount: testRun.TestRunSummary.TotalPassed, testOutcome: TestOutcome.Passed)); runUpdateModel.RunSummary.Add(new RunSummaryModel(resultCount: testRun.TestRunSummary.TotalSkipped, testOutcome: TestOutcome.NotExecuted)); // Complete the run await _httpClient.UpdateTestRunAsync(runUpdateModel, _pipelineConfig.Project, run.Id); return(new PipelineTestRun(testRun.ParserUri, testRun.RunNamePrefix, testRun.TestRunId, run.Id)); } }