diff --git a/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs b/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs index 8ed930c1f4..fefd88a906 100644 --- a/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs +++ b/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs @@ -71,11 +71,11 @@ internal static Summary[] Run(BenchmarkRunInfo[] benchmarkRunInfos) PrintValidationErrors(compositeLogger, validationErrors); + eventProcessor.OnEndValidationStage(); // Ensure that OnEndValidationStage() is called when a critical validation error exists. + if (validationErrors.Any(validationError => validationError.IsCritical)) return new[] { Summary.ValidationFailed(title, resultsFolderPath, logFilePath, validationErrors.ToImmutableArray()) }; - eventProcessor.OnEndValidationStage(); - int totalBenchmarkCount = supportedBenchmarks.Sum(benchmarkInfo => benchmarkInfo.BenchmarksCases.Length); int benchmarksToRunCount = totalBenchmarkCount - (idToResume + 1); // ids are indexed from 0 compositeLogger.WriteLineHeader("// ***** BenchmarkRunner: Start *****"); diff --git a/tests/BenchmarkDotNet.IntegrationTests/EventProcessorTests.cs b/tests/BenchmarkDotNet.IntegrationTests/EventProcessorTests.cs index f9272edd2d..d188be01d4 100644 --- a/tests/BenchmarkDotNet.IntegrationTests/EventProcessorTests.cs +++ b/tests/BenchmarkDotNet.IntegrationTests/EventProcessorTests.cs @@ -23,9 +23,10 @@ public class EventProcessorTests public void WhenUsingEventProcessorAndNoBenchmarks() { var events = RunBenchmarksAndRecordEvents(new[] { typeof(ClassEmpty) }); - Assert.Equal(2, events.Count); + Assert.Equal(3, events.Count); Assert.Equal(nameof(EventProcessor.OnStartValidationStage), events[0].EventType); Assert.Equal(nameof(EventProcessor.OnValidationError), events[1].EventType); + Assert.Equal(nameof(EventProcessor.OnEndValidationStage), events[2].EventType); } [Fact] @@ -135,12 +136,13 @@ public void WhenUsingEventProcessorWithUnsupportedBenchmark() var toolchain = new AllUnsupportedToolchain(); var events = RunBenchmarksAndRecordEvents(new[] { typeof(ClassA) }, toolchain: toolchain); - Assert.Equal(3, events.Count); + Assert.Equal(4, events.Count); Assert.Equal(nameof(EventProcessor.OnStartValidationStage), events[0].EventType); Assert.Equal(nameof(EventProcessor.OnValidationError), events[1].EventType); Assert.Equal(typeof(ClassA).GetMethod(nameof(ClassA.Method1)), (events[1].Args[0] as ValidationError).BenchmarkCase.Descriptor.WorkloadMethod); Assert.Equal(nameof(EventProcessor.OnValidationError), events[2].EventType); Assert.Equal(typeof(ClassA).GetMethod(nameof(ClassA.Method2)), (events[2].Args[0] as ValidationError).BenchmarkCase.Descriptor.WorkloadMethod); + Assert.Equal(nameof(EventProcessor.OnEndValidationStage), events[3].EventType); } [Fact]