示例#1
0
        private async Task RunPackageValidatorAsync(
            PackageValidatorContext queuedContext,
            CancellationToken token)
        {
            var feedPackage = queuedContext.Package;

            Logger.LogInformation("Running PackageValidator on PackageValidatorContext for {PackageId} {PackageVersion}.", feedPackage.Id, feedPackage.Version);
            var catalogEntries = queuedContext.CatalogEntries;
            var existingStatus = await _statusService.GetAsync(feedPackage, token);

            if (catalogEntries != null && existingStatus?.ValidationResult?.CatalogEntries != null && CompareCatalogEntries(catalogEntries, existingStatus.ValidationResult.CatalogEntries))
            {
                // A newer catalog entry of this package has already been validated.
                Logger.LogInformation("A newer catalog entry of {PackageId} {PackageVersion} has already been processed ({OldCommitTimeStamp} < {NewCommitTimeStamp}).",
                                      feedPackage.Id, feedPackage.Version,
                                      catalogEntries.Max(c => c.CommitTimeStamp),
                                      existingStatus.ValidationResult.CatalogEntries.Max(c => c.CommitTimeStamp));

                return;
            }

            var context = new PackageValidatorContext(feedPackage, catalogEntries);
            var result  = await _packageValidator.ValidateAsync(context, _client, token);

            await _notificationService.OnPackageValidationFinishedAsync(result, token);

            var status = new PackageMonitoringStatus(result);

            PackageMonitoringStatusAccessConditionHelper.UpdateFromExisting(status, existingStatus);
            await _statusService.UpdateAsync(status, token);
        }
示例#2
0
        public void UpdateFromExistingUpdatesExistingStatus(PackageState previousState, AccessCondition accessCondition, PackageState newState)
        {
            // Arrange
            var feedPackageIdentity = new FeedPackageIdentity("howdy", "3.4.6");

            var existingStatus = PackageMonitoringStatusTestUtility.CreateStatusWithPackageValidationResult(
                feedPackageIdentity.Id,
                feedPackageIdentity.Version,
                PackageMonitoringStatusTestUtility.GetTestResultFromPackageState(previousState));

            existingStatus.AccessCondition = accessCondition;

            var newStatus = PackageMonitoringStatusTestUtility.CreateStatusWithPackageValidationResult(
                feedPackageIdentity.Id,
                feedPackageIdentity.Version,
                PackageMonitoringStatusTestUtility.GetTestResultFromPackageState(newState));

            // Act
            PackageMonitoringStatusAccessConditionHelper.UpdateFromExisting(newStatus, existingStatus);

            // Assert
            foreach (var state in Enum.GetValues(typeof(PackageState)).Cast <PackageState>())
            {
                PackageMonitoringStatusTestUtility.AssertAccessCondition(
                    state == previousState ? accessCondition : AccessCondition.GenerateIfNotExistsCondition(),
                    newStatus.ExistingState[state]);
            }
        }
示例#3
0
        public void FromContentReturnsEmptyIfNullETag()
        {
            var content = new StringStorageContentWithETag("content", null);

            PackageMonitoringStatusTestUtility.AssertAccessCondition(
                AccessCondition.GenerateEmptyCondition(),
                PackageMonitoringStatusAccessConditionHelper.FromContent(content));
        }
示例#4
0
        public void FromContentReturnsMatchIfETag()
        {
            var eTag    = "etag";
            var content = new StringStorageContentWithETag("content", eTag);

            PackageMonitoringStatusTestUtility.AssertAccessCondition(
                AccessCondition.GenerateIfMatchCondition(eTag),
                PackageMonitoringStatusAccessConditionHelper.FromContent(content));
        }
示例#5
0
 public void FromUnknownReturnsEmptyCondition()
 {
     PackageMonitoringStatusTestUtility.AssertAccessCondition(
         AccessCondition.GenerateEmptyCondition(),
         PackageMonitoringStatusAccessConditionHelper.FromUnknown());
 }