예제 #1
0
        public void FromContentReturnsEmptyIfNullETag()
        {
            var content = new StringStorageContentWithETag("content", null);

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

            PackageMonitoringStatusTestUtility.AssertAccessCondition(
                AccessCondition.GenerateIfMatchCondition(eTag),
                PackageMonitoringStatusAccessConditionHelper.FromContent(content));
        }
        public async Task UpdateDeletesOldStatuses(PackageState?previousState)
        {
            // Arrange
            var feedPackageIdentity = new FeedPackageIdentity("howdy", "3.4.6");

            var packageValidationResult = new PackageValidationResult(
                new PackageIdentity(feedPackageIdentity.Id, new NuGetVersion(feedPackageIdentity.Version)),
                null,
                null,
                Enumerable.Empty <AggregateValidationResult>());
            var status = new PackageMonitoringStatus(packageValidationResult);

            var storageFactory = new MemoryStorageFactory();

            var statusService = new PackageMonitoringStatusService(
                storageFactory,
                new Mock <ILogger <PackageMonitoringStatusService> >().Object);

            var etag = "theETag";

            foreach (var state in Enum.GetValues(typeof(PackageState)).Cast <PackageState>())
            {
                if (previousState != state)
                {
                    status.ExistingState[state] = AccessCondition.GenerateIfNotExistsCondition();
                    continue;
                }

                var content = new StringStorageContentWithETag("{}", etag);
                await SaveToStorage(storageFactory, state, feedPackageIdentity, content);

                status.ExistingState[state] = AccessCondition.GenerateIfMatchCondition(etag);
            }

            // Act
            await statusService.UpdateAsync(status, CancellationToken.None);

            // Assert
            foreach (var state in Enum.GetValues(typeof(PackageState)).Cast <PackageState>())
            {
                Assert.Equal(
                    state == status.State,
                    DoesPackageExists(storageFactory, state, feedPackageIdentity));
            }

            PackageMonitoringStatusTestUtility.AssertStatus(
                status,
                await statusService.GetAsync(feedPackageIdentity, CancellationToken.None));
        }
예제 #4
0
        protected override async Task OnSaveAsync(Uri resourceUri, StorageContent content, CancellationToken cancellationToken)
        {
            if (content is StringStorageContentWithAccessCondition accessConditionContent)
            {
                // Verify the access condition of this request.
                var accessCondition = accessConditionContent.AccessCondition;
                AssertAccessCondition(resourceUri, accessCondition);
            }

            if (content is StringStorageContent stringStorageContent && !(content is StringStorageContentWithETag))
            {
                // Give this content an ETag
                content = new StringStorageContentWithETag(
                    stringStorageContent.Content,
                    Guid.NewGuid().ToString(),
                    stringStorageContent.ContentType,
                    stringStorageContent.CacheControl);
            }

            Content[resourceUri] = content;

            using (var memoryStream = new MemoryStream())
            {
                var contentStream = content.GetContentStream();
                await contentStream.CopyToAsync(memoryStream);

                if (contentStream.CanSeek)
                {
                    contentStream.Position = 0;
                }

                ContentBytes[resourceUri] = memoryStream.ToArray();
            }

            ListMock[resourceUri] = CreateStorageListItem(resourceUri);
        }