55using System . Collections . Generic ;
66using System . Threading . Tasks ;
77using Microsoft . Extensions . Logging ;
8+ using Microsoft . Extensions . Options ;
89using Moq ;
910using NuGet . Jobs . Validation . PackageSigning . Storage ;
1011using NuGet . Services . Validation ;
1112using NuGet . Services . Validation . Orchestrator ;
1213using NuGet . Services . Validation . Orchestrator . PackageSigning . ScanAndSign ;
14+ using NuGet . Services . Validation . Vcs ;
15+ using NuGetGallery ;
1316using Xunit ;
1417
1518namespace Validation . PackageSigning . ScanAndSign . Tests
@@ -22,6 +25,9 @@ public void ThrowsWhenValidatorStateServiceIsNull()
2225 var ex = Assert . Throws < ArgumentNullException > ( ( ) => new ScanAndSignProcessor (
2326 null ,
2427 _enqueuerMock . Object ,
28+ _packageServiceMock . Object ,
29+ _criteriaEvaluatorMock . Object ,
30+ _configurationAccessorMock . Object ,
2531 _loggerMock . Object ) ) ;
2632
2733 Assert . Equal ( "validatorStateService" , ex . ParamName ) ;
@@ -33,6 +39,9 @@ public void ThrowsWhenScanAndSignEnqueuerIsNull()
3339 var ex = Assert . Throws < ArgumentNullException > ( ( ) => new ScanAndSignProcessor (
3440 _validatorStateServiceMock . Object ,
3541 null ,
42+ _packageServiceMock . Object ,
43+ _criteriaEvaluatorMock . Object ,
44+ _configurationAccessorMock . Object ,
3645 _loggerMock . Object ) ) ;
3746
3847 Assert . Equal ( "scanAndSignEnqueuer" , ex . ParamName ) ;
@@ -44,10 +53,73 @@ public void ThrowsWhenLoggerIsNull()
4453 var ex = Assert . Throws < ArgumentNullException > ( ( ) => new ScanAndSignProcessor (
4554 _validatorStateServiceMock . Object ,
4655 _enqueuerMock . Object ,
56+ _packageServiceMock . Object ,
57+ _criteriaEvaluatorMock . Object ,
58+ _configurationAccessorMock . Object ,
4759 null ) ) ;
4860
4961 Assert . Equal ( "logger" , ex . ParamName ) ;
5062 }
63+
64+ [ Fact ]
65+ public void ThrowsWhenPackageServiceIsNull ( )
66+ {
67+ var ex = Assert . Throws < ArgumentNullException > ( ( ) => new ScanAndSignProcessor (
68+ _validatorStateServiceMock . Object ,
69+ _enqueuerMock . Object ,
70+ null ,
71+ _criteriaEvaluatorMock . Object ,
72+ _configurationAccessorMock . Object ,
73+ _loggerMock . Object ) ) ;
74+
75+ Assert . Equal ( "packageService" , ex . ParamName ) ;
76+ }
77+
78+ [ Fact ]
79+ public void ThrowsWhenCriteriaEvaluatorIsNull ( )
80+ {
81+ var ex = Assert . Throws < ArgumentNullException > ( ( ) => new ScanAndSignProcessor (
82+ _validatorStateServiceMock . Object ,
83+ _enqueuerMock . Object ,
84+ _packageServiceMock . Object ,
85+ null ,
86+ _configurationAccessorMock . Object ,
87+ _loggerMock . Object ) ) ;
88+
89+ Assert . Equal ( "criteriaEvaluator" , ex . ParamName ) ;
90+ }
91+
92+ [ Fact ]
93+ public void ThrowsWhenConfigurationAccessorIsNull ( )
94+ {
95+ var ex = Assert . Throws < ArgumentNullException > ( ( ) => new ScanAndSignProcessor (
96+ _validatorStateServiceMock . Object ,
97+ _enqueuerMock . Object ,
98+ _packageServiceMock . Object ,
99+ _criteriaEvaluatorMock . Object ,
100+ null ,
101+ _loggerMock . Object ) ) ;
102+
103+ Assert . Equal ( "configurationAccessor" , ex . ParamName ) ;
104+ }
105+
106+ [ Fact ]
107+ public void ThrowsWhenConfigurationIsNull ( )
108+ {
109+ _configurationAccessorMock
110+ . SetupGet ( ca => ca . Value )
111+ . Returns ( ( ScanAndSignConfiguration ) null ) ;
112+
113+ var ex = Assert . Throws < ArgumentException > ( ( ) => new ScanAndSignProcessor (
114+ _validatorStateServiceMock . Object ,
115+ _enqueuerMock . Object ,
116+ _packageServiceMock . Object ,
117+ _criteriaEvaluatorMock . Object ,
118+ _configurationAccessorMock . Object ,
119+ _loggerMock . Object ) ) ;
120+
121+ Assert . Equal ( "configurationAccessor" , ex . ParamName ) ;
122+ }
51123 }
52124
53125 public class TheCleanUpAsyncMethod : ScanAndSignProcessorFactsBase
@@ -96,6 +168,24 @@ public async Task ForwardsCallToValidatorStateService()
96168 Assert . Equal ( status . State , result . Status ) ;
97169 Assert . Equal ( status . NupkgUrl , result . NupkgUrl ) ;
98170 }
171+
172+ [ Fact ]
173+ public async Task SkipsCheckWhenPackageFitsCriteria ( )
174+ {
175+ var request = new ValidationRequest ( Guid . NewGuid ( ) , 42 , "somepackage" , "somversion" , "https://example.com/package.nupkg" ) ;
176+ _criteriaEvaluatorMock
177+ . Setup ( ce => ce . IsMatch ( It . IsAny < IPackageCriteria > ( ) , It . IsAny < Package > ( ) ) )
178+ . Returns ( false ) ;
179+
180+ var result = await _target . GetResultAsync ( request ) ;
181+
182+ Assert . Equal ( ValidationStatus . Succeeded , result . Status ) ;
183+
184+ _validatorStateServiceMock
185+ . Verify ( vss => vss . GetStatusAsync ( It . IsAny < ValidationRequest > ( ) ) , Times . Never ) ;
186+ _validatorStateServiceMock
187+ . Verify ( vss => vss . GetStatusAsync ( It . IsAny < Guid > ( ) ) , Times . Never ) ;
188+ }
99189 }
100190
101191 public class TheStartAsyncMethod : ScanAndSignProcessorFactsBase
@@ -148,6 +238,27 @@ public async Task EnqueuesNewOperations()
148238 . Verify ( vss => vss . TryAddValidatorStatusAsync ( It . IsAny < IValidationRequest > ( ) , It . IsAny < ValidatorStatus > ( ) , It . IsAny < ValidationStatus > ( ) ) , Times . Once ) ;
149239 }
150240
241+ [ Fact ]
242+ public async Task SkipsCheckWhenPackageFitsCriteria ( )
243+ {
244+ _criteriaEvaluatorMock
245+ . Setup ( ce => ce . IsMatch ( It . IsAny < IPackageCriteria > ( ) , It . IsAny < Package > ( ) ) )
246+ . Returns ( false ) ;
247+
248+ var result = await _target . StartAsync ( _request ) ;
249+
250+ Assert . Equal ( ValidationStatus . Succeeded , result . Status ) ;
251+
252+ _validatorStateServiceMock
253+ . Verify ( vss => vss . GetStatusAsync ( It . IsAny < ValidationRequest > ( ) ) , Times . Never ) ;
254+ _validatorStateServiceMock
255+ . Verify ( vss => vss . GetStatusAsync ( It . IsAny < Guid > ( ) ) , Times . Never ) ;
256+ _enqueuerMock
257+ . Verify ( e => e . EnqueueScanAsync ( It . IsAny < IValidationRequest > ( ) ) , Times . Never ) ;
258+ _validatorStateServiceMock
259+ . Verify ( vss => vss . TryAddValidatorStatusAsync ( It . IsAny < IValidationRequest > ( ) , It . IsAny < ValidatorStatus > ( ) , It . IsAny < ValidationStatus > ( ) ) , Times . Never ) ;
260+ }
261+
151262 private ValidationRequest _request ;
152263 private ValidatorStatus _status ;
153264
@@ -174,18 +285,38 @@ public class ScanAndSignProcessorFactsBase
174285 {
175286 protected Mock < IValidatorStateService > _validatorStateServiceMock ;
176287 protected Mock < IScanAndSignEnqueuer > _enqueuerMock ;
288+ protected Mock < ICorePackageService > _packageServiceMock ;
289+ protected Mock < IPackageCriteriaEvaluator > _criteriaEvaluatorMock ;
290+ protected Mock < IOptionsSnapshot < ScanAndSignConfiguration > > _configurationAccessorMock ;
177291 protected Mock < ILogger < ScanAndSignProcessor > > _loggerMock ;
178292 protected ScanAndSignProcessor _target ;
293+ protected ScanAndSignConfiguration _configuration ;
179294
180295 public ScanAndSignProcessorFactsBase ( )
181296 {
182297 _validatorStateServiceMock = new Mock < IValidatorStateService > ( ) ;
183298 _enqueuerMock = new Mock < IScanAndSignEnqueuer > ( ) ;
299+ _packageServiceMock = new Mock < ICorePackageService > ( ) ;
300+ _criteriaEvaluatorMock = new Mock < IPackageCriteriaEvaluator > ( ) ;
301+ _configurationAccessorMock = new Mock < IOptionsSnapshot < ScanAndSignConfiguration > > ( ) ;
184302 _loggerMock = new Mock < ILogger < ScanAndSignProcessor > > ( ) ;
185303
304+ _configuration = new ScanAndSignConfiguration ( ) ;
305+
306+ _configurationAccessorMock
307+ . SetupGet ( ca => ca . Value )
308+ . Returns ( _configuration ) ;
309+
310+ _criteriaEvaluatorMock
311+ . Setup ( ce => ce . IsMatch ( It . IsAny < IPackageCriteria > ( ) , It . IsAny < Package > ( ) ) )
312+ . Returns ( true ) ;
313+
186314 _target = new ScanAndSignProcessor (
187315 _validatorStateServiceMock . Object ,
188316 _enqueuerMock . Object ,
317+ _packageServiceMock . Object ,
318+ _criteriaEvaluatorMock . Object ,
319+ _configurationAccessorMock . Object ,
189320 _loggerMock . Object ) ;
190321 }
191322 }
0 commit comments