public async Task CorrectlyReplacesRegistrationBaseUrlsInSecondaryStorage() { // Arrange var storageToReplay = Registrations.CreateTestRegistrations(); var storage1 = new MemoryStorage(storageToReplay.BaseAddress); var storage2 = new MemoryStorage(new Uri("http://tempuri.org/secondone")); var storage3 = new MemoryStorage(new Uri("http://tempuri.org/thirdone")); var secondaryStorageBaseUrlRewriter = new SecondaryStorageBaseUrlRewriter(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>(storage1.BaseAddress.ToString(), storage2.BaseAddress.ToString()), new KeyValuePair <string, string>(storage1.BaseAddress.ToString(), storage3.BaseAddress.ToString()) }); var aggregateStorageFactory = CreateWithInterceptor(secondaryStorageBaseUrlRewriter.Rewrite, storage1, storage2, storage3); var aggregateStorage = aggregateStorageFactory.Create(); var storage1BaseAddress = storage1.BaseAddress.ToString(); var storage2BaseAddress = storage2.BaseAddress.ToString(); var storage3BaseAddress = storage3.BaseAddress.ToString(); // Act foreach (var content in storageToReplay.Content) { await aggregateStorage.SaveAsync(content.Key, content.Value, CancellationToken.None); } // Assert Assert.Equal(storageToReplay.Content.Count, storage1.Content.Count); Assert.Equal(storageToReplay.Content.Count, storage2.Content.Count); Assert.Equal(storageToReplay.Content.Count, storage3.Content.Count); foreach (var content in storage1.Content) { AssertContentDoesNotContain(content.Value, storage1BaseAddress); AssertContentDoesNotContain(content.Value, storage2BaseAddress); AssertContentDoesNotContain(content.Value, storage3BaseAddress); } foreach (var content in storage2.Content) { AssertContentDoesNotContain(content.Value, storage1BaseAddress); AssertContentDoesNotContain(content.Value, storage2BaseAddress); AssertContentDoesNotContain(content.Value, storage3BaseAddress); } foreach (var content in storage3.Content) { AssertContentDoesNotContain(content.Value, storage1BaseAddress); AssertContentDoesNotContain(content.Value, storage2BaseAddress); AssertContentDoesNotContain(content.Value, storage3BaseAddress); } }
protected override void Init(IDictionary<string, string> arguments, CancellationToken cancellationToken) { var source = arguments.GetOrThrow<string>(Arguments.Source); var unlistShouldDelete = arguments.GetOrDefault(Arguments.UnlistShouldDelete, false); var verbose = arguments.GetOrDefault(Arguments.Verbose, false); var contentBaseAddress = arguments.GetOrDefault<string>(Arguments.ContentBaseAddress); StorageFactory storageFactoryToUse; var storageFactory = CommandHelpers.CreateStorageFactory(arguments, verbose); var compressedStorageFactory = CommandHelpers.CreateCompressedStorageFactory(arguments, verbose); Logger.LogInformation("CONFIG source: \"{ConfigSource}\" storage: \"{Storage}\"", source, storageFactory); RegistrationMakerCatalogItem.PackagePathProvider = new PackagesFolderPackagePathProvider(); if (compressedStorageFactory != null) { var secondaryStorageBaseUrlRewriter = new SecondaryStorageBaseUrlRewriter(new List<KeyValuePair<string, string>> { // always rewrite storage root url in seconary new KeyValuePair<string, string>(storageFactory.BaseAddress.ToString(), compressedStorageFactory.BaseAddress.ToString()) }); var aggregateStorageFactory = new AggregateStorageFactory( storageFactory, new[] { compressedStorageFactory }, secondaryStorageBaseUrlRewriter.Rewrite); storageFactoryToUse = aggregateStorageFactory; } else { storageFactoryToUse = storageFactory; } _collector = new RegistrationCollector(new Uri(source), storageFactoryToUse, CommandHelpers.GetHttpMessageHandlerFactory(verbose)) { ContentBaseAddress = contentBaseAddress == null ? null : new Uri(contentBaseAddress) }; var storage = storageFactoryToUse.Create(); _front = new DurableCursor(storage.ResolveUri("cursor.json"), storage, MemoryCursor.MinValue); _back = MemoryCursor.CreateMax(); }