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

Commit 2dd06be

Browse files
Update Orchestrator APIs to include ValidatingType in queries that could return packages and symbols if they have the same key. (#551)
1 parent 241e1c7 commit 2dd06be

11 files changed

Lines changed: 84 additions & 22 deletions

File tree

src/NuGet.Services.Validation.Orchestrator/PackageSigning/ValidateCertificate/PackageCertificatesValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ private async Task<ValidatorStatus> StartInternalAsync(IValidationRequest reques
186186

187187
// If any of the author signature's certificates are known to be revoked, invalidate any the signatures.
188188
// A revoked certificate is assumed to remain revoked forever.
189-
var isRevalidationRequest = await _validatorStateService.IsRevalidationRequestAsync(request);
189+
var isRevalidationRequest = await _validatorStateService.IsRevalidationRequestAsync(request, ValidatingType.Package);
190190

191191
if (ShouldInvalidateSignature(signature, isRevalidationRequest))
192192
{

src/NuGet.Services.Validation.Orchestrator/ValidatingEntitites/IValidatingEntity.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,10 @@ public interface IValidatingEntity<T> where T : class, IEntity
2828
/// The time when the entity was created in Gallery.
2929
/// </summary>
3030
DateTime Created { get; }
31+
32+
/// <summary>
33+
/// The ValidatingType.
34+
/// </summary>
35+
ValidatingType ValidatingType { get; }
3136
}
3237
}

src/NuGet.Services.Validation.Orchestrator/ValidatingEntitites/PackageValidatingEntity.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ public PackageValidatingEntity(Package entity)
2020
public PackageStatus Status => EntityRecord.PackageStatusKey;
2121

2222
public DateTime Created => EntityRecord.Created;
23+
24+
public ValidatingType ValidatingType => ValidatingType.Package;
2325
}
2426
}

src/NuGet.Services.Validation.Orchestrator/ValidatingEntitites/SymbolPackageValidatingEntity.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ public SymbolPackageValidatingEntity(SymbolPackage entity)
2020
public PackageStatus Status => EntityRecord.StatusKey;
2121

2222
public DateTime Created => EntityRecord.Created;
23+
24+
public ValidatingType ValidatingType => ValidatingType.SymbolPackage;
2325
}
2426
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,15 @@ public async Task<bool> OtherRecentValidationSetForPackageExists<T>(
211211
.PackageValidationSets
212212
.AnyAsync(pvs => pvs.PackageKey == validatingEntity.Key
213213
&& pvs.Created > cutoffTimestamp
214-
&& pvs.ValidationTrackingId != currentValidationSetTrackingId);
214+
&& pvs.ValidationTrackingId != currentValidationSetTrackingId
215+
&& pvs.ValidatingType == validatingEntity.ValidatingType);
215216
}
216217

217218
public async Task<int> GetValidationSetCountAsync<T>(IValidatingEntity<T> validatingEntity) where T : class, IEntity
218219
{
219220
return await _validationContext
220221
.PackageValidationSets
221-
.CountAsync(x => x.PackageKey == validatingEntity.Key);
222+
.CountAsync(x => x.PackageKey == validatingEntity.Key && x.ValidatingType == validatingEntity.ValidatingType);
222223
}
223224

224225
private void AddValidationIssues(PackageValidation packageValidation, IReadOnlyList<IValidationIssue> validationIssues)

src/Validation.Common.Job/Storage/IValidatorStateService.cs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,9 @@ public interface IValidatorStateService
3131
/// a different validation request.
3232
/// </summary>
3333
/// <param name="request">The package validation request.</param>
34+
/// <param name="validatingType">The <see cref="ValidatingType"/>.</param>
3435
/// <returns>Whether the <see cref="TValidator"/> has already validated this request's package in a different validation request.</returns>
35-
Task<bool> IsRevalidationRequestAsync(IValidationRequest request);
36-
37-
/// <summary>
38-
/// Check if the request intends to revalidate a package that has already been validated by <see cref="TValidator"/> by
39-
/// a different validation request.
40-
/// </summary>
41-
/// <param name="packageKey">The package key for the validation request.</param>
42-
/// <param name="validationId">The validation id for the validation request.</param>
43-
/// <returns>Whether the <see cref="TValidator"/> has already validated this request's package in a different validation request.</returns>
44-
Task<bool> IsRevalidationRequestAsync(int packageKey, Guid validationId);
36+
Task<bool> IsRevalidationRequestAsync(IValidationRequest request, ValidatingType validatingType);
4537

4638
/// <summary>
4739
/// Persist the status of a new validation request.

src/Validation.Common.Job/Storage/ValidatorStateService.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,18 @@ public Task<ValidatorStatus> GetStatusAsync(Guid validationId)
6868
.FirstOrDefaultAsync();
6969
}
7070

71-
public Task<bool> IsRevalidationRequestAsync(IValidationRequest request)
71+
public Task<bool> IsRevalidationRequestAsync(IValidationRequest request, ValidatingType validatingType)
7272
{
73-
return IsRevalidationRequestAsync(request.PackageKey, request.ValidationId);
73+
return IsRevalidationRequestAsync(request.PackageKey, request.ValidationId, validatingType);
7474
}
7575

76-
public Task<bool> IsRevalidationRequestAsync(int packageKey, Guid validationId)
76+
private Task<bool> IsRevalidationRequestAsync(int packageKey, Guid validationId, ValidatingType validatingType)
7777
{
7878
return _validationContext
7979
.ValidatorStatuses
8080
.Where(s => s.PackageKey == packageKey)
8181
.Where(s => s.ValidatorName == _validatorName)
82+
.Where(s => s.ValidatingType == validatingType)
8283
.Where(s => s.ValidationId != validationId)
8384
.AnyAsync();
8485
}

tests/NuGet.Services.Validation.Orchestrator.Tests/NuGet.Services.Validation.Orchestrator.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<Compile Include="PackageSigning\ProcessSignature\PackageSignatureProcessorFacts.cs" />
5656
<Compile Include="PackageStatusProcessorFacts.cs" />
5757
<Compile Include="Properties\AssemblyInfo.cs" />
58+
<Compile Include="Symbol\SymbolPackageValidatingEntityFacts.cs" />
5859
<Compile Include="Symbol\SymbolMessageEnqueuerFacts.cs" />
5960
<Compile Include="Symbol\SymbolEntityServiceFacts.cs" />
6061
<Compile Include="Symbol\SymbolScanValidatorFacts.cs" />

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public void PropertiesValidation()
2828
Assert.Equal(PackageKey, validatingEntity.Key);
2929
Assert.Equal(PackageId, validatingEntity.EntityRecord.PackageRegistration.Id);
3030
Assert.Equal(PackageNormalizedVersion, validatingEntity.EntityRecord.NormalizedVersion);
31+
Assert.Equal(ValidatingType.Package, validatingEntity.ValidatingType);
3132
}
3233

3334
private static Package CreatePackage()
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using NuGetGallery;
6+
using NuGet.Services.Validation.Orchestrator;
7+
using Xunit;
8+
9+
namespace NuGet.Services.Validation
10+
{
11+
public class SymbolPackageValidatingEntityFacts
12+
{
13+
private const int PackageKey = 1001;
14+
private const int SymbolPackageKey = 1002;
15+
private const string PackageId = "NuGet.Versioning";
16+
private const string PackageNormalizedVersion = "1.0.0";
17+
private static DateTime PackageCreated = new DateTime(2018, 4, 4, 4, 4, 4);
18+
private static DateTime SymbolPackageCreated = new DateTime(2018, 5, 4, 4, 4, 4);
19+
20+
[Fact]
21+
public void PropertiesValidation()
22+
{
23+
// Arrange
24+
var symbolPackage = CreateSymbolPackage();
25+
26+
// Act & Assert
27+
var validatingEntity = new SymbolPackageValidatingEntity(symbolPackage);
28+
29+
Assert.Equal(SymbolPackageCreated, validatingEntity.Created);
30+
Assert.Equal(SymbolPackageKey, validatingEntity.Key);
31+
Assert.Equal(ValidatingType.SymbolPackage, validatingEntity.ValidatingType);
32+
Assert.Equal(PackageStatus.Available, validatingEntity.Status);
33+
}
34+
35+
private static SymbolPackage CreateSymbolPackage()
36+
{
37+
var package = new Package()
38+
{
39+
NormalizedVersion = PackageNormalizedVersion,
40+
PackageRegistration = new PackageRegistration()
41+
{
42+
Id = PackageId
43+
},
44+
Key = PackageKey,
45+
Created = PackageCreated
46+
};
47+
48+
return new SymbolPackage()
49+
{
50+
Created = SymbolPackageCreated,
51+
Key = SymbolPackageKey,
52+
StatusKey = PackageStatus.Available
53+
};
54+
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)