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

Commit 96375ff

Browse files
committed
Drop validation messages for soft deleted packages (#383)
Fix NuGet/Engineering#1285
1 parent 7a58028 commit 96375ff

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,19 @@ public async Task<bool> HandleAsync(PackageValidationMessageData message)
9999
}
100100
}
101101

102+
// Immediately halt validation of a soft deleted package.
103+
if (package.PackageStatusKey == PackageStatus.Deleted)
104+
{
105+
_logger.LogWarning(
106+
"Package {PackageId} {PackageVersion} (package key {PackageKey}) is soft deleted. Dropping message for validation set {ValidationSetId}.",
107+
message.PackageId,
108+
message.PackageVersion,
109+
package.Key,
110+
message.ValidationTrackingId);
111+
112+
return true;
113+
}
114+
102115
var validationSet = await _validationSetProvider.TryGetOrCreateValidationSetAsync(message.ValidationTrackingId, package);
103116

104117
if (validationSet == null)

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,26 @@ public async Task DropsMessageOnDuplicateValidationRequest()
106106
.Verify(vsp => vsp.TryGetOrCreateValidationSetAsync(messageData.ValidationTrackingId, package), Times.Once());
107107
}
108108

109+
[Fact]
110+
public async Task DropsMessageIfPackageIsSoftDeleted()
111+
{
112+
var messageData = new PackageValidationMessageData("packageId", "1.2.3", Guid.NewGuid());
113+
var validationConfiguration = new ValidationConfiguration();
114+
var package = new Package { PackageStatusKey = PackageStatus.Deleted };
115+
116+
CorePackageServiceMock
117+
.Setup(ps => ps.FindPackageByIdAndVersionStrict(messageData.PackageId, messageData.PackageVersion))
118+
.Returns(package);
119+
120+
var handler = CreateHandler();
121+
122+
var result = await handler.HandleAsync(messageData);
123+
124+
Assert.True(result);
125+
CorePackageServiceMock
126+
.Verify(ps => ps.FindPackageByIdAndVersionStrict(messageData.PackageId, messageData.PackageVersion), Times.Once);
127+
}
128+
109129
private class MessageWithCustomDeliveryCount : IBrokeredMessage
110130
{
111131
private readonly IBrokeredMessage _inner;

0 commit comments

Comments
 (0)