private void AddValidation( string validationName, ValidationStatus validationStatus, ValidationFailureBehavior failureBehavior = ValidationFailureBehavior.MustSucceed, DateTime?validationStart = null, TimeSpan?trackAfter = null) { ValidationSet.PackageValidations.Add(new PackageValidation { Type = validationName, Started = validationStart, ValidationStatus = validationStatus, PackageValidationIssues = new List <PackageValidationIssue> { }, }); Configuration.Validations.Add(new ValidationConfigurationItem { Name = validationName, TrackAfter = trackAfter ?? TimeSpan.FromDays(1), RequiredValidations = new List <string> { }, ShouldStart = true, FailureBehavior = failureBehavior }); }
public async Task ProcessesFailedValidationAccordingToFailureBehavior(ValidationFailureBehavior failureBehavior, PackageStatus expectedPackageStatus) { AddValidation("validation1", ValidationStatus.Failed, failureBehavior); var processor = CreateProcessor(); await processor.ProcessValidationOutcomeAsync(ValidationSet, PackageValidatingEntity, ProcessorStats); PackageStateProcessorMock.Verify( x => x.SetStatusAsync(PackageValidatingEntity, ValidationSet, expectedPackageStatus), Times.Once); Assert.Equal(ValidationSetStatus.Completed, ValidationSet.ValidationSetStatus); }
public async Task ProcessesFailedValidationAccordingToFailureBehavior(ValidationFailureBehavior failureBehavior, PackageStatus expectedPackageStatus) { AddValidation("validation1", ValidationStatus.Failed, failureBehavior); var processor = CreateProcessor(); await processor.ProcessValidationOutcomeAsync(ValidationSet, Package); PackageStateProcessorMock.Verify( x => x.SetPackageStatusAsync(Package, ValidationSet, expectedPackageStatus), Times.Once); PackageFileServiceMock.Verify( x => x.DeletePackageForValidationSetAsync(ValidationSet), Times.Once); }
protected Mock <IValidator> AddValidation( string name, TimeSpan failAfter, string[] requiredValidations = null, ValidationStatus validationStatus = ValidationStatus.NotStarted, bool shouldStart = true, ValidationFailureBehavior failureBehavior = ValidationFailureBehavior.MustSucceed) { requiredValidations = requiredValidations ?? new string[0]; AddValidationToSet(name, validationStatus); AddValidationToConfiguration(name, failAfter, shouldStart, failureBehavior, requiredValidations); var validatorMock = new Mock <IValidator>(); Validators.Add(name, validatorMock); return(validatorMock); }
protected ValidationConfigurationItem AddValidationToConfiguration(string name, TimeSpan failAfter, bool shouldStart, ValidationFailureBehavior failureBehavior, params string[] requiredValidations) { var validation = new ValidationConfigurationItem { Name = name, TrackAfter = failAfter, RequiredValidations = requiredValidations.ToList(), ShouldStart = shouldStart, FailureBehavior = failureBehavior }; Configuration.Validations.Add(validation); return(validation); }
public async Task HandlesIncompleteValidationsStatusChanges(ValidationStatus targetStatus, bool shouldStart, ValidationFailureBehavior failureBehavior, bool expectStorageUdpate) { UseDefaultValidatorProvider(); var validator = AddValidation("validation1", TimeSpan.FromDays(1), validationStatus: ValidationStatus.Incomplete, shouldStart: shouldStart, failureBehavior: failureBehavior); var validation = ValidationSet.PackageValidations.First(); validator .Setup(v => v.GetResultAsync(It.IsAny <IValidationRequest>())) .ReturnsAsync(new ValidationResult(targetStatus)) .Verifiable(); ValidationStorageMock .Setup(vs => vs.UpdateValidationStatusAsync(validation, It.Is <IValidationResult>(r => r.Status == targetStatus))) .Returns(Task.FromResult(0)) .Callback <PackageValidation, IValidationResult>((pv, vr) => pv.ValidationStatus = vr.Status) .Verifiable(); var processor = CreateProcessor(); await processor.ProcessValidationsAsync(ValidationSet, Package); validator .Verify(v => v.GetResultAsync(It.IsAny <IValidationRequest>()), Times.AtLeastOnce()); if (expectStorageUdpate) { ValidationStorageMock.Verify( vs => vs.UpdateValidationStatusAsync(validation, It.Is <IValidationResult>(r => r.Status == targetStatus)), Times.Once()); ValidationStorageMock.Verify( vs => vs.UpdateValidationStatusAsync(It.IsAny <PackageValidation>(), It.IsAny <ValidationResult>()), Times.Once()); validator.Verify( x => x.CleanUpAsync(It.IsAny <IValidationRequest>()), Times.Once); } else { ValidationStorageMock.Verify( vs => vs.UpdateValidationStatusAsync(It.IsAny <PackageValidation>(), It.IsAny <ValidationResult>()), Times.Never()); validator.Verify( x => x.CleanUpAsync(It.IsAny <IValidationRequest>()), Times.Never); } Assert.Equal(targetStatus, validation.ValidationStatus); }
public void ConfigurationValidatorDetectsRequiredValidationsThatHasNoChanceToRun(ValidationFailureBehavior lastValidationFailureBehavior, int numIntermediateValidations, ValidationFailureBehavior intermediateValidationsFailureBehavior) { // If validation that must succeed depends on validation that is not going to be started // that validation would have no chance to run, failing all the validations. // So we need to detect such situations early const string firstValidationName = "FirstValidation"; const string lastValidationName = "LastValidation"; var configuration = new ValidationConfiguration { Validations = new List <ValidationConfigurationItem> { new ValidationConfigurationItem { Name = firstValidationName, TrackAfter = TimeSpan.FromHours(1), RequiredValidations = new List <string>(), ShouldStart = false } } }; var previousValidationName = firstValidationName; foreach (var intermediateValidationIndex in Enumerable.Range(1, numIntermediateValidations)) { var intermediateValidationName = $"Validation{intermediateValidationIndex}"; configuration.Validations.Add(new ValidationConfigurationItem { Name = intermediateValidationName, TrackAfter = TimeSpan.FromHours(1), RequiredValidations = new List <string> { previousValidationName }, ShouldStart = true, FailureBehavior = intermediateValidationsFailureBehavior }); previousValidationName = intermediateValidationName; } configuration.Validations.Add(new ValidationConfigurationItem { Name = lastValidationName, TrackAfter = TimeSpan.FromHours(1), RequiredValidations = new List <string> { previousValidationName }, ShouldStart = true, FailureBehavior = lastValidationFailureBehavior }); configuration.Validations.Reverse(); var ex = Record.Exception(() => Validate(configuration)); Assert.NotNull(ex); Assert.Contains(firstValidationName, ex.Message); Assert.Contains("cannot be run", ex.Message, StringComparison.OrdinalIgnoreCase); }