/// <summary> /// Initializes a new instance of the <see cref="FileRequestHandler"/> class. /// </summary> /// <param name="fileProcessorManager">The file processor manager.</param> /// <param name="fileAggregateRepository">The file aggregate repository.</param> /// <param name="transactionProcessorClient">The transaction processor client.</param> /// <param name="estateClient">The estate client.</param> /// <param name="securityServiceClient">The security service client.</param> /// <param name="fileFormatHandlerResolver">The file format handler resolver.</param> /// <param name="fileSystem">The file system.</param> public FileRequestHandler(IFileProcessorManager fileProcessorManager, IAggregateRepository <FileImportLogAggregate, DomainEventRecord.DomainEvent> fileImportLogAggregateRepository, IAggregateRepository <FileAggregate, DomainEventRecord.DomainEvent> fileAggregateRepository, ITransactionProcessorClient transactionProcessorClient, IEstateClient estateClient, ISecurityServiceClient securityServiceClient, Func <String, IFileFormatHandler> fileFormatHandlerResolver, IFileSystem fileSystem) { this.FileProcessorManager = fileProcessorManager; this.FileImportLogAggregateRepository = fileImportLogAggregateRepository; this.FileAggregateRepository = fileAggregateRepository; this.TransactionProcessorClient = transactionProcessorClient; this.EstateClient = estateClient; this.SecurityServiceClient = securityServiceClient; this.FileFormatHandlerResolver = fileFormatHandlerResolver; this.FileSystem = fileSystem; }
/// <summary> /// Starts the containers for scenario run. /// </summary> /// <param name="scenarioName">Name of the scenario.</param> public override async Task StartContainersForScenarioRun(String scenarioName) { this.HostTraceFolder = FdOs.IsWindows() ? $"D:\\home\\txnproc\\trace\\{scenarioName}" : $"//home//txnproc//trace//{scenarioName}"; this.ClientDetails = ("serviceClient", "Secret1"); this.SqlServerDetails = (Setup.SqlServerContainerName, Setup.SqlUserName, Setup.SqlPassword); Logging.Enabled(); Guid testGuid = Guid.NewGuid(); this.TestId = testGuid; this.Logger.LogInformation($"Test Id is {testGuid}"); // Setup the container names this.SecurityServiceContainerName = $"securityservice{testGuid:N}"; this.EstateManagementContainerName = $"estate{testGuid:N}"; this.EventStoreContainerName = $"eventstore{testGuid:N}"; this.EstateReportingContainerName = $"estatereporting{testGuid:N}"; this.TransactionProcessorContainerName = $"txnprocessor{testGuid:N}"; this.TestHostContainerName = $"testhosts{testGuid:N}"; this.VoucherManagementContainerName = $"vouchermanagement{testGuid:N}"; this.DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland"); INetworkService testNetwork = DockerHelper.SetupTestNetwork(); this.TestNetworks.Add(testNetwork); IContainerService eventStoreContainer = this.SetupEventStoreContainer("eventstore/eventstore:21.2.0-bionic", testNetwork); this.EventStoreHttpPort = eventStoreContainer.ToHostExposedEndpoint("2113/tcp").Port; String insecureEventStoreEnvironmentVariable = "EventStoreSettings:Insecure=true"; String persistentSubscriptionPollingInSeconds = "AppSettings:PersistentSubscriptionPollingInSeconds=10"; String internalSubscriptionServiceCacheDuration = "AppSettings:InternalSubscriptionServiceCacheDuration=0"; IContainerService estateManagementContainer = this.SetupEstateManagementContainer("stuartferguson/estatemanagement", new List <INetworkService> { testNetwork, Setup.DatabaseServerNetwork }, true, additionalEnvironmentVariables: new List <String> { insecureEventStoreEnvironmentVariable, persistentSubscriptionPollingInSeconds, internalSubscriptionServiceCacheDuration }); IContainerService securityServiceContainer = this.SetupSecurityServiceContainer("stuartferguson/securityservice", testNetwork, true); IContainerService voucherManagementContainer = this.SetupVoucherManagementContainer("stuartferguson/vouchermanagement", new List <INetworkService> { testNetwork }, true, additionalEnvironmentVariables: new List <String> { insecureEventStoreEnvironmentVariable, persistentSubscriptionPollingInSeconds, internalSubscriptionServiceCacheDuration }); IContainerService transactionProcessorContainer = this.SetupTransactionProcessorContainer("stuartferguson/transactionprocessor", new List <INetworkService> { testNetwork }, true, additionalEnvironmentVariables: new List <String> { insecureEventStoreEnvironmentVariable, persistentSubscriptionPollingInSeconds, internalSubscriptionServiceCacheDuration, $"AppSettings:VoucherManagementApi=http://{this.VoucherManagementContainerName}:{DockerHelper.VoucherManagementDockerPort}" }); IContainerService estateReportingContainer = this.SetupEstateReportingContainer("estatereporting", new List <INetworkService> { testNetwork, Setup.DatabaseServerNetwork }, additionalEnvironmentVariables: new List <String> { insecureEventStoreEnvironmentVariable, persistentSubscriptionPollingInSeconds, internalSubscriptionServiceCacheDuration }); IContainerService testhostContainer = this.SetupTestHostContainer("stuartferguson/testhosts", new List <INetworkService> { testNetwork, Setup.DatabaseServerNetwork }, true); this.Containers.AddRange(new List <IContainerService> { eventStoreContainer, estateManagementContainer, securityServiceContainer, transactionProcessorContainer, estateReportingContainer, testhostContainer, voucherManagementContainer }); // Cache the ports this.EstateManagementApiPort = estateManagementContainer.ToHostExposedEndpoint("5000/tcp").Port; this.SecurityServicePort = securityServiceContainer.ToHostExposedEndpoint("5001/tcp").Port; this.TransactionProcessorPort = transactionProcessorContainer.ToHostExposedEndpoint("5002/tcp").Port; this.EstateReportingPort = estateReportingContainer.ToHostExposedEndpoint("5005/tcp").Port; this.VoucherManagementPort = voucherManagementContainer.ToHostExposedEndpoint("5007/tcp").Port; // Setup the base address resolvers String EstateManagementBaseAddressResolver(String api) => $"http://127.0.0.1:{this.EstateManagementApiPort}"; String SecurityServiceBaseAddressResolver(String api) => $"https://127.0.0.1:{this.SecurityServicePort}"; String TransactionProcessorBaseAddressResolver(String api) => $"http://127.0.0.1:{this.TransactionProcessorPort}"; String EstateReportingBaseAddressResolver(String api) => $"http://127.0.0.1:{this.EstateReportingPort}"; HttpClientHandler clientHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => { return(true); } }; HttpClient httpClient = new HttpClient(clientHandler); this.EstateClient = new EstateClient(EstateManagementBaseAddressResolver, httpClient); this.SecurityServiceClient = new SecurityServiceClient(SecurityServiceBaseAddressResolver, httpClient); this.TransactionProcessorClient = new TransactionProcessorClient(TransactionProcessorBaseAddressResolver, httpClient); this.EstateReportingClient = new EstateReportingClient(EstateReportingBaseAddressResolver, httpClient); await this.LoadEventStoreProjections().ConfigureAwait(false); }