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