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