public virtual void Dispose() { var busControl = _serviceProvider.GetRequiredService <IBusControl>(); busControl.Stop(); JaneBlobStorageClient.Dispose(); JohnBlobStorageClient.Dispose(); }
public BlobStorageTestHarness() { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true, true) .AddEnvironmentVariables() .Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .MinimumLevel.ControlledBy(new EnvironmentVariableLoggingLevelSwitch("%OSDR_LOG_LEVEL%")) .CreateLogger(); Log.Information("Staring integration tests"); JaneBlobStorageClient.Authorize("jane", "qqq123").Wait(); JohnBlobStorageClient.Authorize("john", "qqq123").Wait(); var services = new ServiceCollection(); services.AddOptions(); services.Configure <MassTransitSettings>(configuration.GetSection("MassTransit")); services.AddSingleton(container => Bus.Factory.CreateUsingRabbitMq(x => { var mtSettings = container.GetService <IOptions <MassTransitSettings> >().Value; IRabbitMqHost host = x.Host(new Uri(Environment.ExpandEnvironmentVariables(mtSettings.ConnectionString)), h => { }); x.ReceiveEndpoint(host, "processing_fault_queue", e => { e.Handler <Fault>(async context => { Faults.AddRange(context.Message.Exceptions.Where(ex => !ex.ExceptionType.Equals("System.InvalidOperationException"))); await Task.CompletedTask; }); }); x.ReceiveEndpoint(host, "processing_update_queue", e => { e.Handler <BlobLoaded>(context => { Received.Add(context); return(Task.CompletedTask); }); }); })); _serviceProvider = services.BuildServiceProvider(); var busControl = _serviceProvider.GetRequiredService <IBusControl>(); busControl.ConnectPublishObserver(new PublishObserver()); busControl.ConnectConsumeObserver(new ConsumeObserver()); busControl.Start(); }
public OsdrTestHarness() { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true, true) .AddEnvironmentVariables() .Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .MinimumLevel.ControlledBy(new EnvironmentVariableLoggingLevelSwitch("%OSDR_LOG_LEVEL%")) .CreateLogger(); Log.Information("Staring integration tests"); JaneBlobStorageClient.Authorize("jane", "qqq123").Wait(); JohnBlobStorageClient.Authorize("john", "qqq123").Wait(); var services = new ServiceCollection(); services.AddOptions(); services.Configure <MassTransitSettings>(configuration.GetSection("MassTransit")); services.AddSingleton <IEventStore>(y => new GetEventStore(Environment.ExpandEnvironmentVariables(configuration["EventStore:ConnectionString"]))); services.AddSingleton <IEventPublisher, CqrsLite.MassTransit.MassTransitBus>(); services.AddTransient <ISession, Session>(); services.AddSingleton <IRepository, Repository>(); services.AddSingleton <EventStore.IEventStore>(new EventStore.EventStore(Environment.ExpandEnvironmentVariables(configuration["EventStore:ConnectionString"]))); var mongoUrl = new MongoUrl(Environment.ExpandEnvironmentVariables(configuration["MongoDb:ConnectionString"])); services.AddSingleton(new MongoClient(mongoUrl)); services.AddScoped(service => service.GetService <MongoClient>().GetDatabase(mongoUrl.DatabaseName)); services.AddTransient <IBlobStorage, GridFsStorage>(x => { var blobStorageUrl = new MongoUrl(Environment.ExpandEnvironmentVariables(configuration["GridFs:ConnectionString"])); var client = new MongoClient(blobStorageUrl); return(new GridFsStorage(client.GetDatabase(blobStorageUrl.DatabaseName))); }); services.AddSingleton <IConsumerScopeProvider, DependencyInjectionConsumerScopeProvider>(); var integrationTestsAssembly = Assembly.LoadFrom("Sds.Osdr.IntegrationTests.dll"); services.AddAllConsumers(integrationTestsAssembly); services.AddSingleton(container => Bus.Factory.CreateUsingRabbitMq(x => { var mtSettings = container.GetService <IOptions <MassTransitSettings> >().Value; IRabbitMqHost host = x.Host(new Uri(Environment.ExpandEnvironmentVariables(mtSettings.ConnectionString)), h => { }); x.RegisterConsumers(host, container, e => { e.UseDelayedRedelivery(r => { r.Interval(mtSettings.RedeliveryCount, TimeSpan.FromMilliseconds(mtSettings.RedeliveryInterval)); r.Handle <ConcurrencyException>(); }); e.UseMessageRetry(r => { r.Interval(mtSettings.RetryCount, TimeSpan.FromMilliseconds(mtSettings.RetryInterval)); r.Handle <ConcurrencyException>(); }); e.PrefetchCount = mtSettings.PrefetchCount; e.UseInMemoryOutbox(); }, integrationTestsAssembly); x.ReceiveEndpoint(host, "processing_fault_queue", e => { e.Handler <Fault>(async context => { Faults.AddRange(context.Message.Exceptions.Where(ex => !ex.ExceptionType.Equals("System.InvalidOperationException"))); await Task.CompletedTask; }); }); x.ReceiveEndpoint(host, "processing_update_queue", e => { e.Handler <Storage.Blob.Events.BlobLoaded>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Users.UserPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.UserPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Folders.FolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.FolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Files.FileCreated>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Files.NodeStatusPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Files.StatusPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Sagas.Events.FileProcessed>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Sagas.Events.RecordsFileProcessed>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Sagas.Events.RecordProcessed>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Sagas.Events.InvalidRecordProcessed>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Domain.Events.Records.NodeStatusPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Domain.Events.Records.StatusPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Domain.Events.Records.RecordPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <RecordsFile.Domain.Events.Records.NodeRecordPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <MachineLearning.Domain.Events.TrainingFinished>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <MachineLearning.Sagas.Events.ModelTrainingFinished>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <MachineLearning.Sagas.Events.PropertiesPredictionFinished>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <MachineLearning.Domain.Events.ModelPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <MachineLearning.Domain.Events.PermissionChangedPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Folders.DeletedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.DeletedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Folders.MovedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.MovedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Folders.RenamedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.RenamedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.RenamedFolderPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Nodes.PermissionChangedPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); e.Handler <Generic.Domain.Events.Files.PermissionChangedPersisted>(context => { Received.Add(context); return(Task.CompletedTask); }); }); x.UseConcurrencyLimit(mtSettings.ConcurrencyLimit); })); _serviceProvider = services.BuildServiceProvider(); var busControl = _serviceProvider.GetRequiredService <IBusControl>(); busControl.ConnectPublishObserver(new PublishObserver()); busControl.ConnectConsumeObserver(new ConsumeObserver()); busControl.Start(); Seed(); // Specify how to compare DateTimes inside FluentAssertions AssertionOptions.AssertEquivalencyUsing(options => options .Using <DateTime>(ctx => ctx.Subject.Should().BeCloseTo(ctx.Expectation, 10000)).WhenTypeIs <DateTime>() .Using <DateTimeOffset>(ctx => ctx.Subject.Should().BeCloseTo(ctx.Expectation, 10000)).WhenTypeIs <DateTimeOffset>() ); }