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

Commit b349b71

Browse files
authored
Changed the way Validators are referred by their "names" (#396)
* Changed the way Validators are referred by their "names". Now "names" are explicitly specified through the ValidatorAliasAttribute instead of the class name. Renamed the `ValidatorUtil` * Period * `ValidatorAlias*` -> `ValidatorName*` * Proper file name for the ValidatorName class
1 parent 0102560 commit b349b71

16 files changed

Lines changed: 155 additions & 33 deletions

File tree

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,8 @@ private static void ConfigurePackageSigningValidator(ContainerBuilder builder)
337337
builder
338338
.RegisterType<ValidatorStateService>()
339339
.WithParameter(
340-
(pi, ctx) => pi.ParameterType == typeof(Type),
341-
(pi, ctx) => typeof(PackageSigningValidator))
340+
(pi, ctx) => pi.ParameterType == typeof(string),
341+
(pi, ctx) => ValidatorName.PackageSigning)
342342
.Keyed<IValidatorStateService>(PackageSigningBindingKey);
343343

344344
// Configure the package signature verification enqueuer.
@@ -369,8 +369,8 @@ private static void ConfigurePackageCertificatesValidator(ContainerBuilder build
369369
builder
370370
.RegisterType<ValidatorStateService>()
371371
.WithParameter(
372-
(pi, ctx) => pi.ParameterType == typeof(Type),
373-
(pi, ctx) => typeof(PackageCertificatesValidator))
372+
(pi, ctx) => pi.ParameterType == typeof(string),
373+
(pi, ctx) => ValidatorName.PackageCertificate)
374374
.Keyed<IValidatorStateService>(PackageCertificatesBindingKey);
375375

376376
// Configure the certificate verification enqueuer.

src/NuGet.Services.Validation.Orchestrator/NuGet.Services.Validation.Orchestrator.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
<Compile Include="IValidationSetProcessor.cs" />
5959
<Compile Include="IValidationSetProvider.cs" />
6060
<Compile Include="IValidationStorageService.cs" />
61-
<Compile Include="IValidatorProvider.cs" />
6261
<Compile Include="Job.cs" />
6362
<Compile Include="MessageService.cs" />
6463
<Compile Include="OrchestrationRunner.cs" />
@@ -136,4 +135,4 @@
136135
<SignPath Condition="'$(NuGetBuildPath)' != ''">$(NuGetBuildPath)</SignPath>
137136
</PropertyGroup>
138137
<Import Project="$(SignPath)\sign.targets" Condition="Exists('$(SignPath)\sign.targets')" />
139-
</Project>
138+
</Project>

src/NuGet.Services.Validation.Orchestrator/PackageSigning/ProcessSignature/PackageSigningValidator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
using System.Diagnostics;
66
using System.Threading.Tasks;
77
using Microsoft.Extensions.Logging;
8+
using NuGet.Jobs.Validation;
89
using NuGet.Jobs.Validation.PackageSigning.Storage;
910
using NuGet.Jobs.Validation.Storage;
1011
using NuGet.Services.Validation.Orchestrator.Telemetry;
1112

1213
namespace NuGet.Services.Validation.PackageSigning.ProcessSignature
1314
{
15+
[ValidatorName(ValidatorName.PackageSigning)]
1416
public class PackageSigningValidator : IProcessor
1517
{
1618
private readonly IValidatorStateService _validatorStateService;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
using System.Linq;
99
using System.Threading.Tasks;
1010
using Microsoft.Extensions.Logging;
11+
using NuGet.Jobs.Validation;
1112
using NuGet.Jobs.Validation.PackageSigning.Storage;
1213
using NuGet.Services.Validation.Orchestrator;
1314
using NuGet.Services.Validation.Orchestrator.Telemetry;
15+
using Error = NuGet.Services.Validation.Orchestrator.Error;
1416

1517
namespace NuGet.Services.Validation.PackageSigning.ValidateCertificate
1618
{
19+
[ValidatorName(ValidatorName.PackageCertificate)]
1720
public class PackageCertificatesValidator : BaseValidator, IValidator
1821
{
1922
private static readonly TimeSpan DefaultCertificateRevalidationThresholdTime = TimeSpan.FromDays(1);

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Reflection;
88
using Microsoft.Extensions.DependencyInjection;
99
using Microsoft.Extensions.Logging;
10+
using NuGet.Jobs.Validation;
1011

1112
namespace NuGet.Services.Validation.Orchestrator
1213
{
@@ -55,13 +56,14 @@ private void InitializeEvaluatedTypes(Assembly callingAssembly)
5556
var validatorTypes = candidateTypes
5657
.Where(type => typeof(IValidator).IsAssignableFrom(type)
5758
&& type != typeof(IValidator)
58-
&& type != typeof(IProcessor))
59-
.ToDictionary(type => type.Name);
59+
&& type != typeof(IProcessor)
60+
&& ValidatorUtility.HasValidatorNameAttribute(type))
61+
.ToDictionary(ValidatorUtility.GetValidatorName);
6062

6163
var processorTypes = validatorTypes
6264
.Values
6365
.Where(IsProcessorType)
64-
.ToDictionary(type => type.Name);
66+
.ToDictionary(ValidatorUtility.GetValidatorName);
6567

6668
_logger.LogTrace("After enumeration, got {NumImplementations} implementations: {TypeNames}",
6769
validatorTypes.Count,

src/NuGet.Services.Validation.Orchestrator/Vcs/VcsValidator.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@
88
using Microsoft.Extensions.Logging;
99
using Microsoft.Extensions.Options;
1010
using Microsoft.WindowsAzure.Storage;
11+
using NuGet.Jobs.Validation;
1112
using NuGet.Jobs.Validation.Common;
1213
using NuGet.Services.Validation.Orchestrator;
1314
using NuGet.Versioning;
1415
using NuGetGallery;
16+
using Error = NuGet.Services.Validation.Orchestrator.Error;
1517

1618
namespace NuGet.Services.Validation.Vcs
1719
{
20+
[ValidatorName(ValidatorName.Vcs)]
1821
public class VcsValidator : BaseValidator, IValidator
1922
{
20-
private const string ValidatorName = Jobs.Validation.Common.Validators.Vcs.VcsValidator.ValidatorName;
23+
private const string InternalValidatorName = Jobs.Validation.Common.Validators.Vcs.VcsValidator.ValidatorName;
2124

2225
private readonly IPackageValidationService _validationService;
2326
private readonly IPackageValidationAuditor _validationAuditor;
@@ -61,7 +64,7 @@ public async Task<IValidationResult> GetResultAsync(IValidationRequest request)
6164

6265
var validationStatusList = audit
6366
.Entries
64-
.Where(x => x.ValidatorName == ValidatorName)
67+
.Where(x => x.ValidatorName == InternalValidatorName)
6568
.Select(x => GetValidationStatus(request, x.EventId))
6669
.ToList();
6770

@@ -127,8 +130,8 @@ await _validationService.StartValidationProcessAsync(
127130
Version = normalizedPackageVerison,
128131
DownloadUrl = new Uri(request.NupkgUrl),
129132
},
130-
new[] { ValidatorName },
131-
request.ValidationId);
133+
validators: new[] { InternalValidatorName },
134+
validationId: request.ValidationId);
132135
}
133136
catch (StorageException e) when (e.RequestInformation?.HttpStatusCode == (int)HttpStatusCode.Conflict
134137
|| e.RequestInformation?.HttpStatusCode == (int)HttpStatusCode.PreconditionFailed)

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Threading.Tasks;
1010
using Microsoft.Extensions.Logging;
1111
using NuGet.Services.Validation;
12+
using NuGet.Services.Validation.Orchestrator;
1213

1314
namespace NuGet.Jobs.Validation.PackageSigning.Storage
1415
{
@@ -20,23 +21,21 @@ public class ValidatorStateService : IValidatorStateService
2021

2122
public ValidatorStateService(
2223
IValidationEntitiesContext validationContext,
23-
Type validatorType,
24+
IValidatorProvider validatorProvider,
25+
string validatorName,
2426
ILogger<ValidatorStateService> logger)
2527
{
2628
_validationContext = validationContext ?? throw new ArgumentNullException(nameof(validationContext));
2729
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
28-
29-
if (validatorType == null)
30+
if (validatorProvider == null)
3031
{
31-
throw new ArgumentNullException(nameof(validatorType));
32+
throw new ArgumentNullException(nameof(validatorProvider));
3233
}
33-
34-
if (!typeof(IValidator).IsAssignableFrom(validatorType))
34+
if (!validatorProvider.IsValidator(validatorName))
3535
{
36-
throw new ArgumentException($"The validator type {validatorType} must implement {nameof(IValidator)}.", nameof(validatorType));
36+
throw new ArgumentException($"\"{validatorName}\" is not a proper validator alias.", nameof(validatorName));
3737
}
38-
39-
_validatorName = validatorType.Name;
38+
_validatorName = validatorName ?? throw new ArgumentNullException(nameof(validatorName));
4039
}
4140

4241
public async Task<ValidatorStatus> GetStatusAsync(IValidationRequest request)

src/Validation.Common.Job/Validation.Common.Job.csproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@
5959
<Compile Include="Storage\ValidatorStatusExtensions.cs" />
6060
<Compile Include="SubcriptionProcessorJob.cs" />
6161
<Compile Include="JsonConfigurationJob.cs" />
62+
<Compile Include="Validation\IValidatorProvider.cs" />
63+
<Compile Include="Validation\ValidatorName.cs" />
64+
<Compile Include="Validation\ValidatorNameAttribute.cs" />
65+
<Compile Include="Validation\ValidatorUtility.cs" />
6266
</ItemGroup>
6367
<ItemGroup>
6468
<PackageReference Include="Autofac">
@@ -114,4 +118,4 @@
114118
<SignPath Condition="'$(NuGetBuildPath)' != ''">$(NuGetBuildPath)</SignPath>
115119
</PropertyGroup>
116120
<Import Project="$(SignPath)\sign.targets" Condition="Exists('$(SignPath)\sign.targets')" />
117-
</Project>
121+
</Project>

src/NuGet.Services.Validation.Orchestrator/IValidatorProvider.cs renamed to src/Validation.Common.Job/Validation/IValidatorProvider.cs

File renamed without changes.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
namespace NuGet.Jobs.Validation
5+
{
6+
public static class ValidatorName
7+
{
8+
public const string Vcs = "VcsValidator";
9+
public const string PackageCertificate = "PackageCertificatesValidator";
10+
public const string PackageSigning = "PackageSigningValidator";
11+
}
12+
}

0 commit comments

Comments
 (0)