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)); }
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); } } }