public async Task UpdateValidationStatusAsync(PackageValidation packageValidation, IValidationResult validationResult)
        {
            packageValidation = packageValidation ?? throw new ArgumentNullException(nameof(packageValidation));

            if (packageValidation.ValidationStatus == validationResult.Status)
            {
                _logger.LogInformation("Validation {ValidationName} {ValidationId} {PackageId} {PackageVersion} already has status {ValidationStatus}",
                                       packageValidation.Type,
                                       packageValidation.PackageValidationSet.ValidationTrackingId,
                                       packageValidation.PackageValidationSet.PackageId,
                                       packageValidation.PackageValidationSet.PackageNormalizedVersion,
                                       validationResult.Status);

                return;
            }

            _logger.LogInformation("Updating the status of the validation {ValidationName} {ValidationId} {PackageId} {PackageVersion} to {ValidationStatus}",
                                   packageValidation.Type,
                                   packageValidation.PackageValidationSet.ValidationTrackingId,
                                   packageValidation.PackageValidationSet.PackageId,
                                   packageValidation.PackageValidationSet.PackageNormalizedVersion,
                                   validationResult.Status);

            await SetValidationStatusAsync(packageValidation, validationResult, DateTime.UtcNow);
        }
예제 #2
0
        private async Task SetValidationStatusAsync(
            PackageValidation packageValidation,
            IValidationResult validationResult,
            DateTime now)
        {
            if (validationResult.Status != ValidationStatus.Incomplete)
            {
                AddValidationIssues(packageValidation, validationResult.Issues);
            }

            if (validationResult.Status == ValidationStatus.Succeeded &&
                validationResult.NupkgUrl != null)
            {
                if (!_validatorProvider.IsProcessor(packageValidation.Type))
                {
                    throw new InvalidOperationException(
                              $"The validator '{packageValidation.Type}' is not a processor but returned a .nupkg URL as " +
                              $"part of the validation result.");
                }

                await _packageFileService.CopyPackageUrlForValidationSetAsync(
                    packageValidation.PackageValidationSet,
                    validationResult.NupkgUrl);
            }

            packageValidation.ValidationStatus          = validationResult.Status;
            packageValidation.ValidationStatusTimestamp = now;
            await _validationContext.SaveChangesAsync();

            TrackValidationStatus(packageValidation);
        }
예제 #3
0
        public async Task MarkValidationStartedAsync(PackageValidation packageValidation, IValidationResult validationResult)
        {
            packageValidation = packageValidation ?? throw new ArgumentNullException(nameof(packageValidation));

            _logger.LogInformation("Marking validation {ValidationName} {ValidationId} {PackageId} {PackageVersion} as started with status {ValidationStatus}",
                                   packageValidation.Type,
                                   packageValidation.PackageValidationSet.ValidationTrackingId,
                                   packageValidation.PackageValidationSet.PackageId,
                                   packageValidation.PackageValidationSet.PackageNormalizedVersion,
                                   validationResult.Status);

            if (validationResult.Status == ValidationStatus.NotStarted)
            {
                throw new ArgumentOutOfRangeException(
                          nameof(validationResult),
                          $"Cannot mark validation {packageValidation.Type} for " +
                          $"{packageValidation.PackageValidationSet.PackageId} " +
                          $"{packageValidation.PackageValidationSet.PackageNormalizedVersion} as started " +
                          $"with status {ValidationStatus.NotStarted}");
            }

            var now = DateTime.UtcNow;

            packageValidation.Started = now;

            await SetValidationStatusAsync(packageValidation, validationResult, now);
        }
        private void PerformValidation()
        {
            var canBuildCompleteName = true;

            if (!PackageValidation.ValidateOrganizationName(m_OrganizationName.stringValue) && !string.IsNullOrWhiteSpace(m_OrganizationName.stringValue))
            {
                canBuildCompleteName = false;
                errorMessages.Add($"Invalid Package Organization Name '{m_OrganizationName.stringValue}'");
            }
            if (!PackageValidation.ValidateName(m_Name.stringValue))
            {
                canBuildCompleteName = false;
                errorMessages.Add($"Invalid Package Name '{m_Name.stringValue}'");
            }
            if (canBuildCompleteName)
            {
                var completePackageName = BuildCompletePackageName(packageState.info.packageName.domain, m_OrganizationName.stringValue, m_Name.stringValue);
                if (!PackageValidation.ValidateCompleteName(completePackageName))
                {
                    errorMessages.Add($"Invalid Complete Package Name '{completePackageName}'");
                }
            }

            ValidateVersion(null, m_Version.stringValue, errorMessages, warningMessages);

            if (m_UnityVersionEnabled.boolValue)
            {
                if (!PackageValidation.ValidateUnityVersion(m_UnityMajor.stringValue, m_UnityMinor.stringValue,
                                                            m_UnityRelease.stringValue))
                {
                    var unityVersion = string.Join(".", new[] { m_UnityMajor.stringValue, m_UnityMinor.stringValue });
                    if (!string.IsNullOrWhiteSpace(m_UnityRelease.stringValue))
                    {
                        unityVersion += "." + m_UnityRelease.stringValue.Trim();
                    }

                    errorMessages.Add($"Invalid Unity Version '{unityVersion}'");
                }
            }

            if (string.IsNullOrWhiteSpace(m_DisplayName.stringValue) || m_DisplayName.stringValue.Trim().Length == 0)
            {
                warningMessages.Add("Display name should be provided.");
            }

            if (string.IsNullOrWhiteSpace(m_Description.stringValue) || m_Description.stringValue.Trim().Length == 0)
            {
                warningMessages.Add("Package description should be provided.");
            }

            if ((PackageVisibility)m_Visibility.intValue == PackageVisibility.AlwaysHidden)
            {
                warningMessages.Add("This package and all its assets will be hidden by default in Editor because its visibility is set to 'Always Hidden'");
            }
            if ((PackageVisibility)m_Visibility.intValue == PackageVisibility.AlwaysVisible)
            {
                warningMessages.Add("This package and all its assets will be visible by default in Editor because its visibility is set to 'Always Visible'");
            }
        }
        private async Task OnUnknownValidation(PackageValidation packageValidation)
        {
            _logger.LogWarning("Failing validation {Validation} for package {PackageId} {PackageVersion} for which we don't have a configuration",
                               packageValidation.Type,
                               packageValidation.PackageValidationSet.PackageId,
                               packageValidation.PackageValidationSet.PackageNormalizedVersion);

            await _validationStorageService.UpdateValidationStatusAsync(packageValidation, ValidationResult.Failed);
        }
예제 #6
0
 private void AddValidationIssues(PackageValidation packageValidation, IReadOnlyList <IValidationIssue> validationIssues)
 {
     foreach (var validationIssue in validationIssues)
     {
         packageValidation.PackageValidationIssues.Add(new PackageValidationIssue
         {
             IssueCode = validationIssue.IssueCode,
             Data      = validationIssue.Serialize(),
         });
     }
 }
        private bool ArePrerequisitesMet(PackageValidation packageValidation, PackageValidationSet packageValidationSet)
        {
            var completeValidations = new HashSet <string>(packageValidationSet
                                                           .PackageValidations
                                                           .Where(v => v.ValidationStatus == ValidationStatus.Succeeded)
                                                           .Select(v => v.Type));
            var requiredValidations = _validationConfiguration
                                      .Validations
                                      .Single(v => v.Name == packageValidation.Type).RequiredValidations;

            return(completeValidations.IsSupersetOf(requiredValidations));
        }
 internal static void ValidateVersion(string packageName, string version, List <string> errorMessages, List <string> warningMessages)
 {
     if (!PackageValidation.ValidateVersion(version, out var majorStr, out var minorStr, out var patchStr))
     {
         if (string.IsNullOrEmpty(packageName))
         {
             errorMessages.Add($"Invalid version '{version}'");
         }
         else
         {
             errorMessages.Add($"Invalid version '{version}' for dependency '{packageName}'");
         }
     }
예제 #9
0
        public Task <PackageValidation> ValidatePackageAsync(string packageUrl, string sha1HashToValidate, int submissionId, string workingFolder)
        {
            lock (Lock_Verify_Package)
            {
                if (string.IsNullOrWhiteSpace(packageUrl))
                {
                    return(Task.FromResult(PackageValidation.Fail(packageUrl, sha1HashToValidate, workingFolder, "The package URL is empty or contains white space(s).")));
                }

                var packageFileName = Guid.NewGuid().ToString() + "package.zip";
                var tempPackagePath = Path.Combine(workingFolder, $@"SIR\temp\{packageFileName}");

                // download this package and save it under ~\SIR\temp\
                var packageZipFile = StreamHelper.DownloadFrom(packageUrl, tempPackagePath);
                if (packageZipFile == null)
                {
                    logger.Info($"Package: {packageUrl} download fail.");
                    return(Task.FromResult(PackageValidation.Fail(packageUrl, sha1HashToValidate, workingFolder, "This package can't be downloaded for validating.")));
                }

                // update FileSize for the package specified by the url
                UpdateFileSizeForPackage(packageUrl, (int)packageZipFile.Length, submissionId);

                // start SIR validation
                var packageValidation = new PackageValidation(tempPackagePath, sha1HashToValidate, workingFolder);
                var validator         = new SirPackageValidator(packageValidation);
                try
                {
                    validator.Validate();
                }
                catch (Exception ex)
                {
                    packageValidation.ErrorMessage = ex.Message;
                    packageValidation.Result       = AppGallery.SIR.ILog.ValidationResult.Fail;
                    logger.Error(ex, $"An error happened in validating package. Package Url: {packageUrl}");
                }

                // try to delete the package zip file
                try
                {
                    packageZipFile.Delete();
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"An error happened in deleting package. Package Url: {packageUrl}");
                } // it's okay if deleting throws exceptions.

                return(Task.FromResult(packageValidation));
            }
        }
예제 #10
0
        //add data to the database
        private void btnAddPkg_Click(object sender, EventArgs e)
        {
            DateTime newStartDate = new DateTime();
            DateTime newEndDate   = new DateTime();
            decimal  newBasePrice;
            decimal  newCommission;

            // Check that the input data can be parsed
            if (!DateTime.TryParse(textBoxAddStartDate.Text, out newStartDate))
            {
                MessageBox.Show("Please enter a date for the start date", "Error");
            }
            if (!DateTime.TryParse(textBoxAddEndDate.Text, out newEndDate))
            {
                MessageBox.Show("Please enter a date for the end date", "Error");
            }

            if (!Decimal.TryParse(textBoxAddBasePrice.Text, out newBasePrice))
            {
                MessageBox.Show("Please enter a decimal value for the base price", "Error");
            }
            if (!Decimal.TryParse(textBoxAddComission.Text, out newCommission))
            {
                MessageBox.Show("Please enter a decimal value for the agency commission", "Error");
            }

            // Create the package object to be added
            Package newPkg = new Package(0, textBoxAddPkgName.Text, newStartDate, newEndDate, textBoxAddDesc.Text, newBasePrice, newCommission);

            // Validate the values of the input data.  If the input is valid, add the new package
            // to the Packages table in the database.
            try
            {
                if (PackageValidation.ValidatePackageData(newPkg))
                {
                    PackageDB.AddPackage(newPkg);
                }
                LoadUIforPackages();
                comboBoxPkgName.SelectedIndex = (packages.Count() - 1);

                panelDetailPkg.Visible    = true;
                panelAddPkg.Visible       = false;
                btnEditPkgClick.Enabled   = true;
                btnDeletePkgClick.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ex.GetType().ToString());
            }
        }
            public FactsBase()
            {
                _packageKey       = 42;
                _symbolPackageKey = 420;
                _package          = new Package {
                    Key = _packageKey
                };
                _symbolPackage = new SymbolPackage()
                {
                    Key = _symbolPackageKey
                };
                _validationKey = new Guid("ae05c5f9-eb2a-415b-ae42-92829bf201a7");
                _validation    = new PackageValidation
                {
                    Key = _validationKey
                };
                _validationSetKey        = 1001;
                _validationSetTrackingId = new Guid("490e8d72-967a-485f-a035-67d5bba0af9f");
                _validationSet           = new PackageValidationSet
                {
                    Key = _validationSetKey,
                    ValidationTrackingId = _validationSetTrackingId,
                    PackageValidations   = new[] { _validation },
                };
                _validation.PackageValidationSet = _validationSet;

                _validationSets = new Mock <IEntityRepository <PackageValidationSet> >();
                _validations    = new Mock <IEntityRepository <PackageValidation> >();
                _packages       = new Mock <IEntityRepository <Package> >();
                _symbolPackages = new Mock <IEntityRepository <SymbolPackage> >();

                _packages
                .Setup(x => x.GetAll())
                .Returns(() => new[] { _package }.AsQueryable());
                _symbolPackages
                .Setup(x => x.GetAll())
                .Returns(() => new[] { _symbolPackage }.AsQueryable());
                _validations
                .Setup(x => x.GetAll())
                .Returns(() => new[] { _validation }.AsQueryable());
                _validationSets
                .Setup(x => x.GetAll())
                .Returns(() => new[] { _validationSet }.AsQueryable());

                _target = new ValidationAdminService(
                    _validationSets.Object,
                    _validations.Object,
                    _packages.Object,
                    _symbolPackages.Object);
            }
예제 #12
0
        private void TrackValidationStatus(PackageValidation packageValidation)
        {
            if (packageValidation.ValidationStatus != ValidationStatus.Failed &&
                packageValidation.ValidationStatus != ValidationStatus.Succeeded)
            {
                return;
            }

            var isSuccess = packageValidation.ValidationStatus == ValidationStatus.Succeeded;

            TimeSpan validatorDuration = TimeSpan.Zero;

            if (packageValidation.Started.HasValue)
            {
                validatorDuration = packageValidation.ValidationStatusTimestamp - packageValidation.Started.Value;
            }

            var validationSet = packageValidation.PackageValidationSet;

            _telemetryService.TrackValidatorDuration(
                validationSet.PackageId,
                validationSet.PackageNormalizedVersion,
                validationSet.ValidationTrackingId,
                validatorDuration,
                packageValidation.Type,
                isSuccess);

            var issues = (packageValidation.PackageValidationIssues ?? Enumerable.Empty <PackageValidationIssue>()).ToList();

            _telemetryService.TrackValidationIssueCount(
                validationSet.PackageId,
                validationSet.PackageNormalizedVersion,
                validationSet.ValidationTrackingId,
                issues.Count,
                packageValidation.Type,
                isSuccess);

            foreach (var issue in issues)
            {
                _telemetryService.TrackValidationIssue(validationSet.PackageId, validationSet.PackageNormalizedVersion, validationSet.ValidationTrackingId, packageValidation.Type, issue.IssueCode);

                var deserializedIssue = ValidationIssue.Deserialize(issue.IssueCode, issue.Data);
                if (issue.IssueCode == ValidationIssueCode.ClientSigningVerificationFailure &&
                    deserializedIssue is ClientSigningVerificationFailure typedIssue)
                {
                    _telemetryService.TrackClientValidationIssue(validationSet.PackageId, validationSet.PackageNormalizedVersion, validationSet.ValidationTrackingId, packageValidation.Type, typedIssue.ClientCode);
                }
            }
        }
예제 #13
0
        private async Task <IValidationRequest> CreateValidationRequest(
            PackageValidationSet packageValidationSet,
            PackageValidation packageValidation,
            Package package,
            ValidationConfigurationItem validationConfiguration)
        {
            var validationRequest = new ValidationRequest(
                validationId: packageValidation.Key,
                packageKey: packageValidationSet.PackageKey,
                packageId: packageValidationSet.PackageId,
                packageVersion: packageValidationSet.PackageNormalizedVersion,
                nupkgUrl: (await GetNupkgUrl(package, validationConfiguration)).AbsoluteUri
                );

            return(validationRequest);
        }
예제 #14
0
        private async Task ProcessIncompleteValidation(PackageValidation packageValidation, ValidationConfigurationItem validationConfiguration)
        {
            // need to check validation timeout
            var duration = DateTime.UtcNow - packageValidation.Started;

            if (duration > validationConfiguration.FailAfter)
            {
                _logger.LogWarning("Failing validation {Validation} for package {PackageId} {PackageVersion} that runs longer than configured failure timout {FailAfter}",
                                   packageValidation.Type,
                                   packageValidation.PackageValidationSet.PackageId,
                                   packageValidation.PackageValidationSet.PackageNormalizedVersion,
                                   validationConfiguration.FailAfter);
                await _validationStorageService.UpdateValidationStatusAsync(packageValidation, ValidationStatus.Failed);

                return;
            }
        }
        private async Task <IValidationRequest> CreateValidationRequest(
            PackageValidationSet packageValidationSet,
            PackageValidation packageValidation)
        {
            var nupkgUrl = await _packageFileService.GetPackageForValidationSetReadUriAsync(
                packageValidationSet,
                DateTimeOffset.UtcNow.Add(_validationConfiguration.TimeoutValidationSetAfter));

            var validationRequest = new ValidationRequest(
                validationId: packageValidation.Key,
                packageKey: packageValidationSet.PackageKey,
                packageId: packageValidationSet.PackageId,
                packageVersion: packageValidationSet.PackageNormalizedVersion,
                nupkgUrl: nupkgUrl.AbsoluteUri);

            return(validationRequest);
        }
예제 #16
0
        public async Task UpdateValidationStatusAsync(PackageValidation packageValidation, ValidationStatus validationStatus)
        {
            packageValidation = packageValidation ?? throw new ArgumentNullException(nameof(packageValidation));
            _logger.LogInformation("Updating the status of the validation {ValidationName} {ValidationId} {PackageId} {PackageVersion} to {ValidationStatus}",
                                   packageValidation.Type,
                                   packageValidation.PackageValidationSet.ValidationTrackingId,
                                   packageValidation.PackageValidationSet.PackageId,
                                   packageValidation.PackageValidationSet.PackageNormalizedVersion,
                                   validationStatus);
            if (packageValidation.ValidationStatus == validationStatus)
            {
                return;
            }

            packageValidation.ValidationStatus          = validationStatus;
            packageValidation.ValidationStatusTimestamp = DateTime.UtcNow;
            await _validationContext.SaveChangesAsync();
        }
        protected PackageValidation AddValidationToSet(
            string type,
            ValidationStatus validationStatus = ValidationStatus.NotStarted,
            DateTime?startTime = null)
        {
            var validation = new PackageValidation
            {
                Type = type,
                PackageValidationSet = ValidationSet,
                Key = Guid.NewGuid(),
                ValidationStatus          = validationStatus,
                PackageValidationSetKey   = ValidationSet.Key,
                ValidationStatusTimestamp = DateTime.UtcNow,
                Started = startTime.HasValue ? startTime : (validationStatus == ValidationStatus.NotStarted ? (DateTime?)null : DateTime.UtcNow)
            };

            ValidationSet.PackageValidations.Add(validation);
            return(validation);
        }
        private PackageValidationSet InitializeValidationSet(ProcessValidationSetData message, IValidatingEntity <T> validatingEntity)
        {
            // If message would have the package Key the package will not need to be passed as an argument
            _logger.LogInformation("Initializing validation set {ValidationSetId} for package {PackageId} {PackageVersion} (package key {PackageKey})",
                                   message.ValidationTrackingId,
                                   message.PackageId,
                                   message.PackageVersion,
                                   validatingEntity.Key);

            var now = DateTime.UtcNow;

            var validationSet = new PackageValidationSet
            {
                Created   = now,
                PackageId = message.PackageId,
                PackageNormalizedVersion = message.PackageNormalizedVersion,
                PackageKey           = validatingEntity.Key,
                PackageValidations   = new List <PackageValidation>(),
                Updated              = now,
                ValidationTrackingId = message.ValidationTrackingId,
                ValidatingType       = message.ValidatingType,
                ValidationSetStatus  = ValidationSetStatus.InProgress,
            };

            var validationsToStart = _validationConfiguration
                                     .Validations
                                     .Where(v => v.ShouldStart);

            foreach (var validation in validationsToStart)
            {
                var packageValidation = new PackageValidation
                {
                    PackageValidationSet = validationSet,
                    ValidationStatus     = ValidationStatus.NotStarted,
                    Type = validation.Name,
                    ValidationStatusTimestamp = now,
                };

                validationSet.PackageValidations.Add(packageValidation);
            }

            return(validationSet);
        }
예제 #19
0
            public Facts(ITestOutputHelper output)
            {
                _packageKey = 23;

                _validatorType     = "ExampleValidator";
                _packageValidation = new PackageValidation
                {
                    Key                     = Guid.Parse("dc10bf5a-0557-459c-b33f-ea6738b8a044"),
                    Type                    = _validatorType,
                    ValidationStatus        = ValidationStatus.Incomplete,
                    Started                 = new DateTime(2017, 1, 1, 8, 30, 0, DateTimeKind.Utc),
                    PackageValidationIssues = new List <PackageValidationIssue>(),
                    PackageValidationSet    = new PackageValidationSet(),
                };

                var package = new Package()
                {
                    Key = _packageKey
                };

                _packageValidatingEntity = new PackageValidatingEntity(package);
                _nupkgUrl = "https://example/nuget.versioning.4.3.0.nupkg";

                _entitiesContext = new Mock <IValidationEntitiesContext>();
                _entitiesContext
                .Setup(x => x.PackageValidationSets)
                .Returns(DbSetMockFactory.Create <PackageValidationSet>());
                _entitiesContext
                .Setup(x => x.PackageValidations)
                .Returns(DbSetMockFactory.Create <PackageValidation>());

                _packageFileService = new Mock <IValidationFileService>();

                _validatorProvider = new Mock <IValidatorProvider>();

                _telemetryService = new Mock <ITelemetryService>();

                _loggerFactory = new LoggerFactory();
                _loggerFactory.AddXunit(output);

                InitializeTarget();
            }
        private void DrawDependencyListElement(Rect rect, int index, bool isActive, bool isFocused)
        {
            var list        = m_DependenciesList.serializedProperty;
            var dependency  = list.GetArrayElementAtIndex(index);
            var packageName = dependency.FindPropertyRelative("packageName");
            var version     = dependency.FindPropertyRelative("version");

            var w = rect.width;

            if (!isFeatureSet)
            {
                rect.x    += 4;
                rect.width = w / 3 * 2 - 2;
            }
            rect.height            -= EditorGUIUtility.standardVerticalSpacing;
            packageName.stringValue = EditorGUI.DelayedTextField(rect, packageName.stringValue);

            if (!string.IsNullOrWhiteSpace(packageName.stringValue) && !PackageValidation.ValidateName(packageName.stringValue))
            {
                errorMessages.Add($"Invalid Dependency Package Name '{packageName.stringValue}'");
            }

            if (isFeatureSet)
            {
                return;
            }

            using (new EditorGUI.DisabledScope(string.IsNullOrWhiteSpace(packageName.stringValue)))
            {
                rect.x             += w / 3 * 2;
                rect.width          = w / 3 - 4;
                version.stringValue = EditorGUI.DelayedTextField(rect, version.stringValue);

                if (!string.IsNullOrWhiteSpace(version.stringValue))
                {
                    ValidateVersion(packageName.stringValue, version.stringValue, errorMessages, warningMessages);
                }
            }
        }
예제 #21
0
        private async Task <PackageValidationSet> CreateValidationSet(Guid validationTrackingId, Package package)
        {
            _logger.LogInformation("Creating validation set {ValidationSetId} for package {PackageId} {PackageVersion}",
                                   validationTrackingId,
                                   package.PackageRegistration.Id,
                                   package.NormalizedVersion);

            PackageValidationSet validationSet;
            var packageValidations = new List <PackageValidation>();
            var now = DateTime.UtcNow;

            validationSet = new PackageValidationSet
            {
                Created   = now,
                PackageId = package.PackageRegistration.Id,
                PackageNormalizedVersion = package.NormalizedVersion,
                PackageKey           = package.Key,
                PackageValidations   = packageValidations,
                Updated              = now,
                ValidationTrackingId = validationTrackingId,
            };

            foreach (var validation in _validationConfiguration.Validations)
            {
                var packageValidation = new PackageValidation
                {
                    PackageValidationSet = validationSet,
                    ValidationStatus     = ValidationStatus.NotStarted,
                    Type = validation.Name,
                    ValidationStatusTimestamp = now,
                };

                packageValidations.Add(packageValidation);
            }

            return(await _validationStorageService.CreateValidationSetAsync(validationSet));
        }
예제 #22
0
        private PackageValidationSet InitializeValidationSet(Guid validationTrackingId, Package package)
        {
            _logger.LogInformation("Initializing validation set {ValidationSetId} for package {PackageId} {PackageVersion} (package key {PackageKey})",
                                   validationTrackingId,
                                   package.PackageRegistration.Id,
                                   package.NormalizedVersion,
                                   package.Key);

            var now = DateTime.UtcNow;

            var validationSet = new PackageValidationSet
            {
                Created   = now,
                PackageId = package.PackageRegistration.Id,
                PackageNormalizedVersion = package.NormalizedVersion,
                PackageKey           = package.Key,
                PackageValidations   = new List <PackageValidation>(),
                Updated              = now,
                ValidationTrackingId = validationTrackingId,
            };

            foreach (var validation in _validationConfiguration.Validations)
            {
                var packageValidation = new PackageValidation
                {
                    PackageValidationSet = validationSet,
                    ValidationStatus     = ValidationStatus.NotStarted,
                    Type = validation.Name,
                    ValidationStatusTimestamp = now,
                };

                validationSet.PackageValidations.Add(packageValidation);
            }

            return(validationSet);
        }
            public void FetchesValidationIssues()
            {
                // Arrange
                _package.Key = 123;
                _package.PackageStatusKey = PackageStatus.FailedValidation;

                // This is the latest failed validation set. Its issues should be fetched.
                var packageValidationSet1 = new PackageValidationSet
                {
                    PackageKey = 123,
                    Updated    = DateTime.UtcNow.AddDays(-5),
                };

                // This is an old validation set. Its issues should be ignored.
                var packageValidationSet2 = new PackageValidationSet
                {
                    PackageKey = 123,
                    Updated    = DateTime.UtcNow.AddDays(-10),
                };

                // This is a validation set for anotehr package. Its issues should be ignored.
                var packageValidationSet3 = new PackageValidationSet
                {
                    PackageKey = 456,
                    Updated    = DateTime.UtcNow,
                };

                var packageValidation1 = new PackageValidation {
                    ValidationStatus = ValidationStatus.Failed
                };
                var packageValidation2 = new PackageValidation {
                    ValidationStatus = ValidationStatus.Failed
                };
                var packageValidation3 = new PackageValidation {
                    ValidationStatus = ValidationStatus.Failed
                };

                var validationIssue1 = new PackageValidationIssue
                {
                    IssueCode = ValidationIssueCode.PackageIsSigned,
                    Data      = "{}",
                };

                var validationIssue2 = new PackageValidationIssue
                {
                    IssueCode = ValidationIssueCode.PackageIsSigned,
                    Data      = "{}",
                };

                var validationIssue3 = new PackageValidationIssue
                {
                    IssueCode = ValidationIssueCode.PackageIsSigned,
                    Data      = "{}",
                };

                packageValidationSet1.PackageValidations = new[] { packageValidation1 };
                packageValidationSet2.PackageValidations = new[] { packageValidation2 };
                packageValidationSet3.PackageValidations = new[] { packageValidation3 };

                packageValidation1.PackageValidationIssues = new[] { validationIssue1 };
                packageValidation2.PackageValidationIssues = new[] { validationIssue2 };
                packageValidation3.PackageValidationIssues = new[] { validationIssue3 };

                _validationSets.Setup(x => x.GetAll())
                .Returns(new[] { packageValidationSet1, packageValidationSet2, packageValidationSet3 }.AsQueryable());

                // Act
                var issues = _target.GetLatestValidationIssues(_package);

                // Assert
                _validationSets.Verify(x => x.GetAll(), Times.Once());

                Assert.Single(issues);
                Assert.Equal(ValidationIssueCode.PackageIsSigned, issues.First().IssueCode);
            }
예제 #24
0
        private void PerformValidation()
        {
            if (!PackageValidation.ValidateOrganizationName(m_OrganizationName.stringValue) && !IsNullOrEmptyTrim(m_OrganizationName.stringValue))
            {
                errorMessages.Add($"Invalid Package Organization Name '{m_OrganizationName.stringValue}'");
            }

            if (!PackageValidation.ValidateName(m_Name.stringValue))
            {
                errorMessages.Add($"Invalid Package Name '{m_Name.stringValue}'");
            }

            if (!PackageValidation.ValidateVersion(m_Version.stringValue))
            {
                errorMessages.Add($"Invalid Version '{m_Version.stringValue}'");
            }

            if (m_UnityVersionEnabled.boolValue)
            {
                if (!PackageValidation.ValidateUnityVersion(m_UnityMajor.stringValue, m_UnityMinor.stringValue,
                                                            m_UnityRelease.stringValue))
                {
                    var unityVersion = string.Join(".", new[] { m_UnityMajor.stringValue, m_UnityMinor.stringValue });
                    if (!IsNullOrEmptyTrim(m_UnityRelease.stringValue))
                    {
                        unityVersion += "." + m_UnityRelease.stringValue.Trim();
                    }

                    errorMessages.Add($"Invalid Unity Version '{unityVersion}'");
                }
            }

            if (IsNullOrEmptyTrim(m_DisplayName.stringValue) || m_DisplayName.stringValue.Trim().Length == 0)
            {
                warningMessages.Add("Display name should be provided.");
            }

            if (IsNullOrEmptyTrim(m_Description.stringValue) || m_Description.stringValue.Trim().Length == 0)
            {
                warningMessages.Add("Package description should be provided.");
            }

            if ((PackageVisibility)m_Visibility.intValue == PackageVisibility.AlwaysHidden)
            {
                warningMessages.Add("This package and all its assets will be hidden by default in Editor because its visibility is set to 'Always Hidden'");
            }
            if ((PackageVisibility)m_Visibility.intValue == PackageVisibility.AlwaysVisible)
            {
                warningMessages.Add("This package and all its assets will be visible by default in Editor because its visibility is set to 'Always Visible'");
            }
            else
            {
                if (IsNullOrEmptyTrim(packageState.info.type))
                {
                    warningMessages.Add("This package and all its assets will be hidden by default in Editor because its type is empty");
                }
                else if (PackageInfo.GetPredefinedHiddenByDefaultPackageTypes().Contains(packageState.info.type))
                {
                    warningMessages.Add($"This package and all its assets will be hidden by default in Editor because its type is '{packageState.info.type}'");
                }
                else
                {
                    warningMessages.Add($"This package and all its assets will be visible by default in Editor because its type is '{packageState.info.type}'");
                }
            }
        }
예제 #25
0
        //edit the selected package
        private void btnEditPkg_Click(object sender, EventArgs e)
        {
            // ------ Corinne Mullan ------
            // Obtain the original package data for the package currently selected in
            // the combo box.
            // If the nth index is selected in the combo box, the current package
            // is the nth entry in the "packages" list
            int     curCboIndex = comboBoxPkgName.SelectedIndex;
            Package currPkg     = packages[curCboIndex];

            // Next, obtain and verify the edited data entered by the user
            DateTime edStartDate = new DateTime();
            DateTime edEndDate   = new DateTime();
            decimal  edBasePrice;
            decimal  edCommission;

            // Check that the input data can be parsed
            if (!DateTime.TryParse(textBoxEditStartDate.Text, out edStartDate))
            {
                MessageBox.Show("Please enter a date for the start date", "Error");
            }
            if (!DateTime.TryParse(textBoxEditEndDate.Text, out edEndDate))
            {
                MessageBox.Show("Please enter a date for the end date", "Error");
            }

            if (!Decimal.TryParse(textBoxEditBasePrice.Text, out edBasePrice))
            {
                MessageBox.Show("Please enter a decimal value for the base price", "Error");
            }
            if (!Decimal.TryParse(textBoxEditComission.Text, out edCommission))
            {
                MessageBox.Show("Please enter a decimal value for the agency commission", "Error");
            }

            // Create the edited package object.  The package ID will be the same as the original
            // package.
            Package edPkg = new Package(currPkg.PackageId, textBoxEditPkgName.Text, edStartDate, edEndDate, textBoxEditDesc.Text, edBasePrice, edCommission);

            // Validate the values of the input data.  If the input is valid, add the new package
            // to the Packages table in the database.
            try
            {
                if (PackageValidation.ValidatePackageData(edPkg))
                {
                    PackageDB.UpdatePackage(currPkg, edPkg);
                }

                LoadUIforPackages();
                comboBoxPkgName.SelectedIndex = curCboIndex;

                panelDetailPkg.Visible    = true;
                panelEditPkg.Visible      = false;
                btnAddPkgClick.Enabled    = true;
                btnDeletePkgClick.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ex.GetType().ToString());
            }
            // ----------------------------
        }