コード例 #1
0
 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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }