static async Task Main(string[] args)
        {
            Log.Info("Building services...");
            var config   = BuildConfig();
            var links    = config.GetSection("links").Get <IEnumerable <Link> >();
            var services = new List <LinkerService>();

            foreach (var link in links)
            {
                if (link.Filters == null || !link.Filters.Any())
                {
                    Log.Info("Setting 'include all' default filter");
                    var defaultFilter = new Filter(FilterType.Stream, "*", FilterOperation.Include);
                    link.Filters = new List <Filter> {
                        defaultFilter
                    };
                }
                var filters = link.Filters.Select(linkFilter => new Filter
                {
                    FilterOperation = linkFilter.FilterOperation, FilterType = linkFilter.FilterType,
                    Value           = linkFilter.Value
                }).ToList();
                var filterService = new FilterService(filters);
                var service       = new LinkerService(new LinkerConnectionBuilder(new Uri(link.Origin.ConnectionString),
                                                                                  ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Origin.User, link.Origin.Pass)),
                                                                                  link.Origin.ConnectionName), new LinkerConnectionBuilder(new Uri(link.Destination.ConnectionString),
                                                                                                                                           ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Destination.User, link.Destination.Pass)),
                                                                                                                                           link.Destination.ConnectionName), filterService, Settings.Default(), new NLogger());
                services.Add(service);
            }
            await StartServices(services);

            Log.Info("Press enter to exit the program");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            ConfigureLogging();
            var connSettings = ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials("admin", "changeit"));
            var origin       = new LinkerConnectionBuilder(new Uri("tcp://localhost:1112"), connSettings, "origin-01");
            var destination  = new LinkerConnectionBuilder(new Uri("tcp://localhost:2112"), connSettings, "destination-01");
            var service      = new LinkerService(origin, destination, new FilterService(new List <Filter>
            {
                new Filter(FilterType.EventType, "User*", FilterOperation.Include),
                new Filter(FilterType.Stream, "domain-*", FilterOperation.Include),
                new Filter(FilterType.EventType, "Basket*", FilterOperation.Exclude)
            }), Settings.Default(), new NLogLogger());

            service.Start().Wait();
            Log.Info("Replica Service started");
            TestReplicaForSampleEvent(connSettings, destination, "domain-test-01", "UserReplicaTested");
            Log.Info("Press enter to exit the program");
            Console.ReadLine();
        }
        public void Replica_start_without_errors()
        {
            // Set up
            var originBuilder = new Mock <Linker.ILinkerConnectionBuilder>();
            var connection    = new Mock <IEventStoreConnection>();

            originBuilder.Setup(a => a.Build()).Returns(connection.Object);
            var destinationBuilder = new Mock <Linker.ILinkerConnectionBuilder>();

            destinationBuilder.Setup(a => a.Build()).Returns(connection.Object);
            var positionRepo = new Mock <IPositionRepository>();
            var sut          = new LinkerService(originBuilder.Object, destinationBuilder.Object, positionRepo.Object, null,
                                                 Settings.Default());

            // Act
            var result = sut.Start().Result;

            // Verify
            Assert.IsTrue(result);
        }