Exemplo n.º 1
0
        private static IProjector BuildProjector <TProjector>(IServiceProvider sp, IConfiguration config)
            where TProjector : IProjector
        {
            var sharedSettings    = ProjectorsSettings.Get(config);
            var projectorSettings = ProjectorSettings.Get(config, typeof(TProjector).Name);
            var subFactoryOptions = GetSubscriberFactoryOptions(sharedSettings);

            var logger              = sp.GetRequiredService <IStandardLogger <TProjector> >();
            var subscriberFactory   = sp.GetRequiredService <ISubscriberFactory>();
            var streamClientFactory = sp.GetRequiredService <IStreamClientFactory>();
            var streamStateRepo     = new StreamStateRepo(logger, projectorSettings.StreamStateBasePath);
            var resolver            = new AllBusinessEventsResolver(logger);

            var projectorType = typeof(TProjector);

            var baseDependencies = new ProjectorDependencies(logger, subscriberFactory, subFactoryOptions, streamClientFactory, streamStateRepo, resolver, MapSubscriptionStreams(sharedSettings.SubscriptionStreams));

            if (projectorType == typeof(Projections.EmailReport.EmailReportProjector))
            {
                return(new Projections.EmailReport.EmailReportProjector(baseDependencies, sp.GetRequiredService <IDbContextScopeFactory <Projections.EmailReport.EmailReportDb.EmailReportDbContext> >()));
            }

            if (projectorType == typeof(Projections.SalesReport.SalesReportProjector))
            {
                return(new Projections.SalesReport.SalesReportProjector(baseDependencies, sp.GetRequiredService <IDbContextScopeFactory <Projections.SalesReport.SalesReportDb.SalesReportDbContext> >()));
            }

            return(null);
        }
Exemplo n.º 2
0
        public async Task clear_stream_state_errors()
        {
            var basePath  = Directory.GetCurrentDirectory();
            var streamId1 = Guid.NewGuid().ToString();
            var streamId2 = Guid.NewGuid().ToString();
            var position1 = 1;
            var position2 = 1;
            var repo      = new StreamStateRepo(NullStandardLogger.Instance, basePath);

            await repo.SaveStreamStateAsync(streamId1, position1, false);

            await repo.SaveStreamStateAsync(streamId2, position2, true);

            Assert.NotNull(await repo.LoadStreamStateAsync(streamId1));
            Assert.NotNull(await repo.LoadStreamStateAsync(streamId2));

            await repo.ClearStreamStateErrorsAsync();

            var state1 = await repo.LoadStreamStateAsync(streamId1);

            var state2 = await repo.LoadStreamStateAsync(streamId2);

            Assert.False(state1.HasError);
            Assert.False(state2.HasError);
        }
Exemplo n.º 3
0
        public async Task rethrow_when_load_stream_state_has_exception_in_retry_loop()
        {
            var basePath = Directory.GetCurrentDirectory();
            var streamId = Guid.NewGuid().ToString();
            var repo     = new StreamStateRepo(NullStandardLogger.Instance, basePath, true);

            await Assert.ThrowsAnyAsync <Exception>(() => repo.LoadStreamStateAsync(streamId));
        }
Exemplo n.º 4
0
        public void construct_and_create_directory()
        {
            var basePath = Directory.GetCurrentDirectory();
            var repo     = new StreamStateRepo(NullStandardLogger.Instance, basePath);

            Assert.Equal(basePath, repo.BasePath);;
            Assert.True(Directory.Exists(repo.BuildStreamStateDirectoryPath()));
        }
Exemplo n.º 5
0
        public async Task save_and_load_empty_state()
        {
            var basePath = Directory.GetCurrentDirectory();
            var streamId = Guid.NewGuid().ToString();
            var repo     = new StreamStateRepo(NullStandardLogger.Instance, basePath);

            var state = await repo.LoadStreamStateAsync(streamId);

            Assert.Null(state);
        }
Exemplo n.º 6
0
        public void build_stream_state_directory_path()
        {
            var basePath     = Directory.GetCurrentDirectory();
            var repo         = new StreamStateRepo(NullStandardLogger.Instance, basePath);
            var expectedPath = Path.Combine(basePath, StreamStateRepo.STREAM_PATH_PREFIX + Path.DirectorySeparatorChar);

            var actualPath = repo.BuildStreamStateDirectoryPath();

            Assert.Equal(expectedPath, actualPath);
        }
Exemplo n.º 7
0
        public void build_stream_state_file_path()
        {
            var basePath     = Directory.GetCurrentDirectory();
            var repo         = new StreamStateRepo(NullStandardLogger.Instance, basePath);
            var streamId     = "s1";
            var expectedPath = Path.Combine(basePath, StreamStateRepo.STREAM_PATH_PREFIX, streamId);

            var actualPath = repo.BuildStreamStateFilePath(streamId);

            Assert.Equal(expectedPath, actualPath, false);
        }
Exemplo n.º 8
0
        public async Task save_and_load_error_state()
        {
            var basePath = Directory.GetCurrentDirectory();
            var streamId = Guid.NewGuid().ToString();
            var position = 5;
            var hasError = true;
            var repo     = new StreamStateRepo(NullStandardLogger.Instance, basePath);

            await repo.SaveStreamStateAsync(streamId, position, hasError);

            var state = await repo.LoadStreamStateAsync(streamId);

            Assert.Equal(position, state.LastAttemptedPosition);
            Assert.Equal(hasError, state.HasError);
        }
Exemplo n.º 9
0
        public async Task save_and_load_correct_stream()
        {
            var basePath  = Directory.GetCurrentDirectory();
            var streamId1 = Guid.NewGuid().ToString();
            var streamId2 = Guid.NewGuid().ToString();
            var position1 = 1;
            var position2 = 1;
            var repo      = new StreamStateRepo(NullStandardLogger.Instance, basePath);

            await repo.SaveStreamStateAsync(streamId1, position1, false);

            await repo.SaveStreamStateAsync(streamId2, position2, false);

            var state1 = await repo.LoadStreamStateAsync(streamId1);

            var state2 = await repo.LoadStreamStateAsync(streamId2);

            Assert.Equal(position1, state1.LastAttemptedPosition);
            Assert.Equal(position2, state2.LastAttemptedPosition);
        }
Exemplo n.º 10
0
        public async Task reset_stream_states()
        {
            var basePath  = Directory.GetCurrentDirectory();
            var streamId1 = Guid.NewGuid().ToString();
            var streamId2 = Guid.NewGuid().ToString();
            var position1 = 1;
            var position2 = 1;
            var repo      = new StreamStateRepo(NullStandardLogger.Instance, basePath);

            await repo.SaveStreamStateAsync(streamId1, position1, false);

            await repo.SaveStreamStateAsync(streamId2, position2, false);

            Assert.NotNull(await repo.LoadStreamStateAsync(streamId1));
            Assert.NotNull(await repo.LoadStreamStateAsync(streamId2));

            await repo.ResetStreamStatesAsync();

            Assert.Null(await repo.LoadStreamStateAsync(streamId1));
            Assert.Null(await repo.LoadStreamStateAsync(streamId2));
        }