示例#1
0
 /// <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;
 }
示例#2
0
        /// <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);
        }