Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 9a4cf1c

Browse files
committed
Call CleanUpAsync on the validator after reaching a terminal status (#375)
Progress on NuGet/Engineering#1190
1 parent 3e45ecf commit 9a4cf1c

2 files changed

Lines changed: 47 additions & 12 deletions

File tree

src/NuGet.Services.Validation.Orchestrator/ValidationSetProcessor.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,12 @@ private async Task<bool> ProcessIncompleteValidations(PackageValidationSet valid
127127

128128
case ValidationStatus.Failed:
129129
await _validationStorageService.UpdateValidationStatusAsync(packageValidation, validationResult);
130+
await validator.CleanUpAsync(validationRequest);
130131
break;
131132

132133
case ValidationStatus.Succeeded:
133134
await _validationStorageService.UpdateValidationStatusAsync(packageValidation, validationResult);
135+
await validator.CleanUpAsync(validationRequest);
134136
// need another iteration to try running new validations
135137
tryMoreValidations = true;
136138
break;
@@ -217,6 +219,12 @@ private async Task<bool> ProcessNotStartedValidations(PackageValidationSet valid
217219
{
218220
await _validationStorageService.MarkValidationStartedAsync(packageValidation, validationResult);
219221

222+
if (validationResult.Status == ValidationStatus.Succeeded
223+
|| validationResult.Status == ValidationStatus.Failed)
224+
{
225+
await validator.CleanUpAsync(validationRequest);
226+
}
227+
220228
_telemetryService.TrackValidatorStarted(packageValidation.Type);
221229
}
222230

tests/NuGet.Services.Validation.Orchestrator.Tests/ValidationSetProcessorFacts.cs

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
namespace NuGet.Services.Validation.Orchestrator.Tests
1717
{
18-
public class StrictStorageFacts : ValidationSetProcessorFactsBase
18+
public class StrictMockValidationSetProcessorFacts : ValidationSetProcessorFactsBase
1919
{
20-
public StrictStorageFacts()
20+
public StrictMockValidationSetProcessorFacts()
2121
: base(validationStorageMockBehavior: MockBehavior.Strict)
2222
{
2323
}
@@ -39,14 +39,14 @@ public async Task FailsUnknownValidations()
3939
}
4040
}
4141

42-
public class DefaultMockFacts : ValidationSetProcessorFactsBase
42+
public class DefaultMockValidationSetProcessorFacts : ValidationSetProcessorFactsBase
4343
{
4444
[Theory]
45-
[InlineData(ValidationStatus.NotStarted, false)]
46-
[InlineData(ValidationStatus.Incomplete, true)]
47-
[InlineData(ValidationStatus.Succeeded, true)]
48-
[InlineData(ValidationStatus.Failed, true)]
49-
public async Task StartsNotStartedValidations(ValidationStatus startStatus, bool expectStorageUpdate)
45+
[InlineData(ValidationStatus.NotStarted, false, false)]
46+
[InlineData(ValidationStatus.Incomplete, true, false)]
47+
[InlineData(ValidationStatus.Succeeded, true, true)]
48+
[InlineData(ValidationStatus.Failed, true, true)]
49+
public async Task StartsNotStartedValidations(ValidationStatus startStatus, bool expectStorageUpdate, bool expectCleanup)
5050
{
5151
UseDefaultValidatorProvider();
5252
const string validationName = "validation1";
@@ -96,6 +96,19 @@ public async Task StartsNotStartedValidations(ValidationStatus startStatus, bool
9696
TelemetryServiceMock.Verify(
9797
ts => ts.TrackValidatorStarted(It.IsAny<string>()), Times.Never);
9898
}
99+
100+
if (expectCleanup)
101+
{
102+
validator.Verify(
103+
x => x.CleanUpAsync(It.IsAny<IValidationRequest>()),
104+
Times.Once);
105+
}
106+
else
107+
{
108+
validator.Verify(
109+
x => x.CleanUpAsync(It.IsAny<IValidationRequest>()),
110+
Times.Never);
111+
}
99112
}
100113

101114
[Fact]
@@ -123,8 +136,12 @@ public async Task DoesNotStartValidationWithUnmetPrerequisites()
123136
var processor = CreateProcessor();
124137
await processor.ProcessValidationsAsync(ValidationSet, Package);
125138

126-
validator2
127-
.Verify(v => v.StartAsync(It.IsAny<IValidationRequest>()), Times.Never());
139+
validator1.Verify(v => v.StartAsync(It.IsAny<IValidationRequest>()), Times.Never);
140+
validator1.Verify(v => v.GetResultAsync(It.IsAny<IValidationRequest>()), Times.Once);
141+
validator1.Verify(v => v.CleanUpAsync(It.IsAny<IValidationRequest>()), Times.Never);
142+
validator2.Verify(v => v.StartAsync(It.IsAny<IValidationRequest>()), Times.Never);
143+
validator2.Verify(v => v.GetResultAsync(It.IsAny<IValidationRequest>()), Times.Never);
144+
validator2.Verify(v => v.CleanUpAsync(It.IsAny<IValidationRequest>()), Times.Never);
128145
}
129146

130147
[Fact]
@@ -185,19 +202,23 @@ public async Task HandlesIncompleteValidationsStatusChanges(ValidationStatus tar
185202
vs => vs.UpdateValidationStatusAsync(validation, It.Is<IValidationResult>(r => r.Status == targetStatus)), Times.Once());
186203
ValidationStorageMock.Verify(
187204
vs => vs.UpdateValidationStatusAsync(It.IsAny<PackageValidation>(), It.IsAny<ValidationResult>()), Times.Once());
205+
validator.Verify(
206+
x => x.CleanUpAsync(It.IsAny<IValidationRequest>()), Times.Once);
188207
}
189208
else
190209
{
191210
ValidationStorageMock.Verify(
192211
vs => vs.UpdateValidationStatusAsync(It.IsAny<PackageValidation>(), It.IsAny<ValidationResult>()), Times.Never());
212+
validator.Verify(
213+
x => x.CleanUpAsync(It.IsAny<IValidationRequest>()), Times.Never);
193214
}
194215
Assert.Equal(targetStatus, validation.ValidationStatus);
195216
}
196217

197218
[Theory]
198219
[InlineData(ValidationStatus.Failed)]
199220
[InlineData(ValidationStatus.Succeeded)]
200-
public async Task PersistsValidationIssuesOnStart(ValidationStatus targetStatus)
221+
public async Task HandlesTerminalStatusOnStart(ValidationStatus targetStatus)
201222
{
202223
UseDefaultValidatorProvider();
203224
var validator = AddValidation("validation1", TimeSpan.FromDays(1), validationStatus: ValidationStatus.NotStarted);
@@ -228,12 +249,15 @@ public async Task PersistsValidationIssuesOnStart(ValidationStatus targetStatus)
228249
validation,
229250
It.Is<IValidationResult>(r => r.Status == targetStatus && r.Issues.Any())),
230251
Times.Once());
252+
validator.Verify(
253+
x => x.CleanUpAsync(It.Is<IValidationRequest>(y => y != null)),
254+
Times.Once);
231255
}
232256

233257
[Theory]
234258
[InlineData(ValidationStatus.Failed)]
235259
[InlineData(ValidationStatus.Succeeded)]
236-
public async Task PersistsValidationIssuesOnUpdate(ValidationStatus targetStatus)
260+
public async Task HandlesTerminalStatusOnUpdate(ValidationStatus targetStatus)
237261
{
238262
UseDefaultValidatorProvider();
239263
var validator = AddValidation("validation1", TimeSpan.FromDays(1), validationStatus: ValidationStatus.Incomplete);
@@ -263,6 +287,9 @@ public async Task PersistsValidationIssuesOnUpdate(ValidationStatus targetStatus
263287
validation,
264288
It.Is<IValidationResult>(r => r.Status == targetStatus && r.Issues.Any())),
265289
Times.Once());
290+
validator.Verify(
291+
x => x.CleanUpAsync(It.Is<IValidationRequest>(y => y != null)),
292+
Times.Once);
266293
}
267294

268295
[Fact]

0 commit comments

Comments
 (0)