public async Task RunAsync_WithFakeIAzureStorage_WhenPackageIsAlreadySynchronizedButDoesNotHaveRequiredProperties_ProcessesPackage()
        {
            _catalogToDnxStorage = new AzureSynchronizedMemoryStorageStub(new[]
            {
                new Uri("http://tempuri.org/packages/listedpackage.1.0.0.nupkg")
            }, areRequiredPropertiesPresentAsync: false);
            _catalogToDnxStorageFactory = new TestStorageFactory(name => _catalogToDnxStorage.WithName(name));

            var indexJsonUri  = _catalogToDnxStorage.ResolveUri("/listedpackage/index.json");
            var nupkgUri      = _catalogToDnxStorage.ResolveUri("/listedpackage/1.0.0/listedpackage.1.0.0.nupkg");
            var nuspecUri     = _catalogToDnxStorage.ResolveUri("/listedpackage/1.0.0/listedpackage.nuspec");
            var nupkgStream   = File.OpenRead("Packages\\ListedPackage.1.0.0.zip");
            var expectedNupkg = GetStreamBytes(nupkgStream);

            await _catalogToDnxStorage.SaveAsync(
                new Uri("http://tempuri.org/listedpackage/index.json"),
                new StringStorageContent(GetExpectedIndexJsonContent("1.0.0")),
                CancellationToken.None);

            _target = new DnxCatalogCollector(
                new Uri("http://tempuri.org/index.json"),
                _catalogToDnxStorageFactory,
                _nullPreferredPackageSourceStorage,
                _contentBaseAddress,
                Mock.Of <ITelemetryService>(),
                _logger,
                _maxDegreeOfParallelism,
                () => _mockServer);

            var catalogStorage = Catalogs.CreateTestCatalogWithOnePackage();
            await _mockServer.AddStorageAsync(catalogStorage);

            _mockServer.SetAction(
                "/packages/listedpackage.1.0.0.nupkg",
                request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StreamContent(nupkgStream)
            }));

            var        front = new DurableCursor(_cursorJsonUri, _catalogToDnxStorage, MemoryCursor.MinValue);
            ReadCursor back  = MemoryCursor.CreateMax();

            await _target.RunAsync(front, back, CancellationToken.None);

            Assert.Equal(4, _catalogToDnxStorage.Content.Count);
            Assert.True(_catalogToDnxStorage.Content.ContainsKey(_cursorJsonUri));
            Assert.True(_catalogToDnxStorage.Content.ContainsKey(indexJsonUri));
            Assert.True(_catalogToDnxStorage.Content.ContainsKey(nupkgUri));
            Assert.True(_catalogToDnxStorage.Content.ContainsKey(nuspecUri));
            Assert.True(_catalogToDnxStorage.ContentBytes.ContainsKey(_cursorJsonUri));
            Assert.True(_catalogToDnxStorage.ContentBytes.TryGetValue(indexJsonUri, out var indexJson));
            Assert.True(_catalogToDnxStorage.ContentBytes.ContainsKey(nupkgUri));
            Assert.True(_catalogToDnxStorage.ContentBytes.ContainsKey(nuspecUri));

            Assert.Equal(GetExpectedIndexJsonContent("1.0.0"), Encoding.UTF8.GetString(indexJson));
        }
示例#2
0
        public async Task ThrowsIfCommitTimesOut()
        {
            // Arrange
            var storage        = new MemoryStorage();
            var storageFactory = new TestStorageFactory(name => storage.WithName(name));

            MockServerHttpClientHandler mockServer;

            mockServer = new MockServerHttpClientHandler();
            mockServer.SetAction("/", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)));

            var catalogStorage = Catalogs.CreateTestCatalogWithOnePackage();
            await mockServer.AddStorageAsync(catalogStorage);

            ReadWriteCursor front = new DurableCursor(
                storage.ResolveUri("cursor.json"),
                storage,
                MemoryCursor.MinValue);
            ReadCursor back = MemoryCursor.CreateMax();

            var commitTimeout = TimeSpan.FromSeconds(1);
            var stuckDuration = TimeSpan.FromMinutes(1);

            var telemetryService          = new Mock <ITelemetryService>();
            var indexCommitDurationMetric = new Mock <IDisposable>();

            telemetryService.Setup(t => t.TrackIndexCommitDuration()).Returns(indexCommitDurationMetric.Object);

            using (var testDirectory = TestDirectory.Create())
            {
                var luceneDirectory = new SimpleFSDirectory(new DirectoryInfo(testDirectory));
                using (var indexWriter = Catalog2LuceneJob.CreateIndexWriter(luceneDirectory))
                    using (var stuckIndexWriter = StuckIndexWriter.FromIndexWriter(indexWriter, stuckDuration))
                    {
                        var target = new SearchIndexFromCatalogCollector(
                            new Uri("http://tempuri.org/index.json"),
                            stuckIndexWriter,
                            commitEachBatch: true,
                            commitTimeout: commitTimeout,
                            baseAddress: null,
                            telemetryService: telemetryService.Object,
                            logger: new TestLogger(),
                            handlerFunc: () => mockServer,
                            httpRetryStrategy: new NoRetryStrategy());

                        // Act & Assert
                        await Assert.ThrowsAsync <OperationCanceledException>(() => target.RunAsync(front, back, CancellationToken.None));

                        telemetryService.Verify(t => t.TrackIndexCommitDuration(), Times.Once);
                        telemetryService.Verify(t => t.TrackIndexCommitTimeout(), Times.Once);
                        indexCommitDurationMetric.Verify(m => m.Dispose(), Times.Never);
                    }
            }
        }