diff --git a/Shared.IntegrationTesting/DockerHelper.cs b/Shared.IntegrationTesting/DockerHelper.cs
index bf9b5acb..b952ea27 100644
--- a/Shared.IntegrationTesting/DockerHelper.cs
+++ b/Shared.IntegrationTesting/DockerHelper.cs
@@ -21,7 +21,7 @@ public abstract class DockerHelper
#region Methods
///
- /// Setups the voucher management acl container.
+ /// Setups the estate management container.
///
/// Name of the container.
/// The logger.
@@ -30,59 +30,234 @@ public abstract class DockerHelper
/// The host folder.
/// The docker credentials.
/// Name of the security service container.
- /// Name of the voucher management container.
+ /// The event store connection string.
+ /// The SQL server details.
/// The client details.
/// if set to true [force latest image].
/// The security service port.
/// The additional environment variables.
///
- public static IContainerService SetupVoucherManagementACLContainer(String containerName, ILogger logger, String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- String securityServiceContainerName,
- String voucherManagementContainerName,
- (string clientId, string clientSecret) clientDetails,
- Boolean forceLatestImage = false,
- Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
- List additionalEnvironmentVariables = null)
+ public static IContainerService SetupEstateManagementContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ String securityServiceContainerName,
+ String eventStoreConnectionString,
+ (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
+ sqlServerDetails,
+ (String clientId, String clientSecret) clientDetails,
+ Boolean forceLatestImage = false,
+ Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
+ List additionalEnvironmentVariables = null)
{
- logger.LogInformation("About to Start Voucher Management ACL Container");
+ logger.LogInformation("About to Start Estate Management Container");
List environmentVariables = new List();
+ environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreConnectionString}");
environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"AppSettings:VoucherManagementApi=http://{voucherManagementContainerName}:{DockerHelper.VoucherManagementDockerPort}");
environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"urls=http://*:{DockerHelper.VoucherManagementACLDockerPort}");
- environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
- environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
+ environmentVariables.Add($"urls=http://*:{DockerHelper.EstateManagementDockerPort}");
+ environmentVariables
+ .Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
if (additionalEnvironmentVariables != null)
{
environmentVariables.AddRange(additionalEnvironmentVariables);
}
- ContainerBuilder voucherManagementAclContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.VoucherManagementACLDockerPort)
- .UseNetwork(networkServices.ToArray());
- if (String.IsNullOrEmpty(hostFolder) == false)
+ ContainerBuilder estateManagementContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EstateManagementDockerPort)
+ .UseNetwork(networkServices.ToArray());
+ if (string.IsNullOrEmpty(hostFolder) == false)
{
- voucherManagementAclContainer = voucherManagementAclContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
+ estateManagementContainer = estateManagementContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
}
if (dockerCredentials.HasValue)
{
- voucherManagementAclContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ estateManagementContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
}
// Now build and return the container
- IContainerService builtContainer = voucherManagementAclContainer.Build().Start().WaitForPort($"{DockerHelper.VoucherManagementACLDockerPort}/tcp", 30000);
+ IContainerService builtContainer = estateManagementContainer.Build().Start().WaitForPort($"{DockerHelper.EstateManagementDockerPort}/tcp", 30000);
- logger.LogInformation("Voucher Management ACL Container Started");
+ logger.LogInformation("Estate Management Container Started");
+
+ return builtContainer;
+ }
+
+ ///
+ /// Setups the estate reporting container.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network services.
+ /// The host folder.
+ /// The docker credentials.
+ /// Name of the security service container.
+ /// The event store connection string.
+ /// The SQL server details.
+ /// The client details.
+ /// if set to true [force latest image].
+ /// The security service port.
+ /// The additional environment variables.
+ ///
+ public static IContainerService SetupEstateReportingContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ String securityServiceContainerName,
+ String eventStoreConnectionString,
+ (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
+ sqlServerDetails,
+ (String clientId, String clientSecret) clientDetails,
+ Boolean forceLatestImage = false,
+ Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
+ List additionalEnvironmentVariables = null)
+ {
+ logger.LogInformation("About to Start Estate Reporting Container");
+
+ List environmentVariables = new List();
+ environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreConnectionString}");
+ environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"urls=http://*:{DockerHelper.EstateReportingDockerPort}");
+ environmentVariables
+ .Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
+
+ if (additionalEnvironmentVariables != null)
+ {
+ environmentVariables.AddRange(additionalEnvironmentVariables);
+ }
+
+ ContainerBuilder estateReportingContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EstateReportingDockerPort)
+ .UseNetwork(networkServices.ToArray());
+
+ if (string.IsNullOrEmpty(hostFolder) == false)
+ {
+ estateReportingContainer = estateReportingContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
+ }
+
+ if (dockerCredentials.HasValue)
+ {
+ estateReportingContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ }
+
+ // Now build and return the container
+ IContainerService builtContainer = estateReportingContainer.Build().Start().WaitForPort($"{DockerHelper.EstateReportingDockerPort}/tcp", 30000);
+
+ logger.LogInformation("Estate Reporting Container Started");
+
+ return builtContainer;
+ }
+
+ ///
+ /// Setups the event store container.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network service.
+ /// The host folder.
+ /// if set to true [force latest image].
+ ///
+ public static IContainerService SetupEventStoreContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ INetworkService networkService,
+ String hostFolder,
+ Boolean forceLatestImage = false)
+ {
+ logger.LogInformation("About to Start Event Store Container");
+
+ List environmentVariables = new List();
+ environmentVariables.Add("EVENTSTORE_RUN_PROJECTIONS=all");
+ environmentVariables.Add("EVENTSTORE_START_STANDARD_PROJECTIONS=true");
+ environmentVariables.Add("EVENTSTORE_INSECURE=true");
+ environmentVariables.Add("EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP=true");
+ environmentVariables.Add("EVENTSTORE_ENABLE_EXTERNAL_TCP=true");
+
+ var eventStoreContainerBuilder = new Builder().UseContainer().UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EventStoreHttpDockerPort)
+ .ExposePort(DockerHelper.EventStoreTcpDockerPort).WithName(containerName)
+ .WithEnvironment(environmentVariables.ToArray()).UseNetwork(networkService);
+
+ if (string.IsNullOrEmpty(hostFolder) == false)
+ {
+ eventStoreContainerBuilder = eventStoreContainerBuilder.Mount(hostFolder, "/var/log/eventstore", MountType.ReadWrite);
+ }
+
+ IContainerService eventStoreContainer = eventStoreContainerBuilder.Build().Start().WaitForPort("2113/tcp", 30000);
+
+ logger.LogInformation("Event Store Container Started");
+
+ return eventStoreContainer;
+ }
+
+ ///
+ /// Setups the messaging service container.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network services.
+ /// The host folder.
+ /// The docker credentials.
+ /// Name of the security service container.
+ /// The event store connection string.
+ /// The client details.
+ /// if set to true [force latest image].
+ /// The security service port.
+ ///
+ public static IContainerService SetupMessagingServiceContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ String securityServiceContainerName,
+ String eventStoreConnectionString,
+ (String clientId, String clientSecret) clientDetails,
+ Boolean forceLatestImage = false,
+ Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
+ {
+ logger.LogInformation("About to Start Messaging Service Container");
+
+ List environmentVariables = new List();
+ environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreConnectionString}");
+ environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"urls=http://*:{DockerHelper.MessagingServiceDockerPort}");
+ environmentVariables.Add("AppSettings:EmailProxy=Integration");
+ environmentVariables.Add("AppSettings:SMSProxy=Integration");
+
+ ContainerBuilder messagingServiceContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.MessagingServiceDockerPort)
+ .UseNetwork(networkServices.ToArray()); //.Mount(hostFolder, "/home", MountType.ReadWrite);
+
+ if (string.IsNullOrEmpty(hostFolder) == false)
+ {
+ messagingServiceContainer = messagingServiceContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
+ }
+
+ if (dockerCredentials.HasValue)
+ {
+ messagingServiceContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ }
+
+ // Now build and return the container
+ IContainerService builtContainer = messagingServiceContainer.Build().Start().WaitForPort($"{DockerHelper.MessagingServiceDockerPort}/tcp", 30000);
+
+ logger.LogInformation("Messaging Service Container Started");
return builtContainer;
}
-
+
///
/// Setups the security service container.
///
@@ -124,7 +299,7 @@ public static IContainerService SetupSecurityServiceContainer(String containerNa
networkService
}.ToArray());
- if (String.IsNullOrEmpty(hostFolder) == false)
+ if (string.IsNullOrEmpty(hostFolder) == false)
{
securityServiceContainer = securityServiceContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
}
@@ -142,7 +317,52 @@ public static IContainerService SetupSecurityServiceContainer(String containerNa
return builtContainer;
}
-
+
+ ///
+ /// Setups the test host container.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network services.
+ /// The host folder.
+ /// The docker credentials.
+ /// The SQL server details.
+ /// if set to true [force latest image].
+ ///
+ public static IContainerService SetupTestHostContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword) sqlServerDetails,
+ Boolean forceLatestImage = false)
+ {
+ logger.LogInformation("About to Start Test Hosts Container");
+
+ List environmentVariables = new List();
+ environmentVariables
+ .Add($"ConnectionStrings:TestBankReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=TestBankReadModel\"");
+ environmentVariables.Add("ASPNETCORE_ENVIRONMENT=IntegrationTest");
+
+ ContainerBuilder testHostContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.TestHostPort)
+ .UseNetwork(networkServices.ToArray()).Mount(hostFolder, "/home", MountType.ReadWrite);
+
+ if (dockerCredentials.HasValue)
+ {
+ testHostContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ }
+
+ // Now build and return the container
+ IContainerService builtContainer = testHostContainer.Build().Start().WaitForPort($"{DockerHelper.TestHostPort}/tcp", 30000);
+
+ logger.LogInformation("Test Hosts Container Started");
+
+ return builtContainer;
+ }
+
///
/// Setups the test network.
///
@@ -217,7 +437,7 @@ public static IContainerService SetupTransactionProcessorACLContainer(String con
networkService
}.ToArray());
- if (String.IsNullOrEmpty(hostFolder) == false)
+ if (string.IsNullOrEmpty(hostFolder) == false)
{
transactionProcessorACLContainer = transactionProcessorACLContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
}
@@ -235,27 +455,243 @@ public static IContainerService SetupTransactionProcessorACLContainer(String con
return builtContainer;
}
-
- ///
- /// Starts the containers for scenario run.
- ///
- /// Name of the scenario.
- ///
- public abstract Task StartContainersForScenarioRun(String scenarioName);
///
- /// Starts the SQL container with open connection.
+ /// Setups the transaction processor container.
///
/// Name of the container.
/// The logger.
/// Name of the image.
- /// The network service.
+ /// The network services.
/// The host folder.
/// The docker credentials.
- /// Name of the SQL user.
- /// The SQL password.
- ///
- public static IContainerService StartSqlContainerWithOpenConnection(String containerName,
+ /// Name of the security service container.
+ /// Name of the estate management container.
+ /// The event store connection string.
+ /// The client details.
+ /// Name of the testhost container.
+ /// Name of the voucher management container.
+ /// if set to true [force latest image].
+ /// The security service port.
+ /// The additional environment variables.
+ ///
+ public static IContainerService SetupTransactionProcessorContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ String securityServiceContainerName,
+ String estateManagementContainerName,
+ String eventStoreConnectionString,
+ (String clientId, String clientSecret) clientDetails,
+ String testhostContainerName,
+ String voucherManagementContainerName,
+ Boolean forceLatestImage = false,
+ Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
+ List additionalEnvironmentVariables = null)
+ {
+ logger.LogInformation("About to Start Transaction Processor Container");
+
+ List environmentVariables = new List();
+ environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreConnectionString}");
+ environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"AppSettings:EstateManagementApi=http://{estateManagementContainerName}:{DockerHelper.EstateManagementDockerPort}");
+ environmentVariables.Add($"AppSettings:VoucherManagementApi=http://{voucherManagementContainerName}:{DockerHelper.VoucherManagementDockerPort}");
+ environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"urls=http://*:{DockerHelper.TransactionProcessorDockerPort}");
+ environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
+ environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
+ environmentVariables.Add("AppSettings:SubscriptionFilter=TransactionProcessor");
+
+ environmentVariables.Add($"OperatorConfiguration:Safaricom:Url=http://{testhostContainerName}:9000/api/safaricom");
+
+ if (additionalEnvironmentVariables != null)
+ {
+ environmentVariables.AddRange(additionalEnvironmentVariables);
+ }
+
+ ContainerBuilder transactionProcessorContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.TransactionProcessorDockerPort)
+ .UseNetwork(networkServices.ToArray());
+
+ if (string.IsNullOrEmpty(hostFolder) == false)
+ {
+ transactionProcessorContainer = transactionProcessorContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
+ }
+
+ if (dockerCredentials.HasValue)
+ {
+ transactionProcessorContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ }
+
+ // Now build and return the container
+ IContainerService builtContainer = transactionProcessorContainer.Build().Start().WaitForPort($"{DockerHelper.TransactionProcessorDockerPort}/tcp", 30000);
+
+ logger.LogInformation("Transaction Processor Container Started");
+
+ return builtContainer;
+ }
+
+ ///
+ /// Setups the voucher management acl container.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network services.
+ /// The host folder.
+ /// The docker credentials.
+ /// Name of the security service container.
+ /// Name of the voucher management container.
+ /// The client details.
+ /// if set to true [force latest image].
+ /// The security service port.
+ /// The additional environment variables.
+ ///
+ public static IContainerService SetupVoucherManagementACLContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ String securityServiceContainerName,
+ String voucherManagementContainerName,
+ (String clientId, String clientSecret) clientDetails,
+ Boolean forceLatestImage = false,
+ Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
+ List additionalEnvironmentVariables = null)
+ {
+ logger.LogInformation("About to Start Voucher Management ACL Container");
+
+ List environmentVariables = new List();
+ environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"AppSettings:VoucherManagementApi=http://{voucherManagementContainerName}:{DockerHelper.VoucherManagementDockerPort}");
+ environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"urls=http://*:{DockerHelper.VoucherManagementACLDockerPort}");
+ environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
+ environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
+
+ if (additionalEnvironmentVariables != null)
+ {
+ environmentVariables.AddRange(additionalEnvironmentVariables);
+ }
+
+ ContainerBuilder voucherManagementAclContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.VoucherManagementACLDockerPort)
+ .UseNetwork(networkServices.ToArray());
+ if (string.IsNullOrEmpty(hostFolder) == false)
+ {
+ voucherManagementAclContainer = voucherManagementAclContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
+ }
+
+ if (dockerCredentials.HasValue)
+ {
+ voucherManagementAclContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ }
+
+ // Now build and return the container
+ IContainerService builtContainer = voucherManagementAclContainer.Build().Start().WaitForPort($"{DockerHelper.VoucherManagementACLDockerPort}/tcp", 30000);
+
+ logger.LogInformation("Voucher Management ACL Container Started");
+
+ return builtContainer;
+ }
+
+ ///
+ /// Setups the voucher management container.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network services.
+ /// The host folder.
+ /// The docker credentials.
+ /// Name of the security service container.
+ /// Name of the estate management container.
+ /// The event store connection string.
+ /// The SQL server details.
+ /// The client details.
+ /// if set to true [force latest image].
+ /// The security service port.
+ /// The additional environment variables.
+ ///
+ public static IContainerService SetupVoucherManagementContainer(String containerName,
+ ILogger logger,
+ String imageName,
+ List networkServices,
+ String hostFolder,
+ (String URL, String UserName, String Password)? dockerCredentials,
+ String securityServiceContainerName,
+ String estateManagementContainerName,
+ String eventStoreConnectionString,
+ (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
+ sqlServerDetails,
+ (String clientId, String clientSecret) clientDetails,
+ Boolean forceLatestImage = false,
+ Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
+ List additionalEnvironmentVariables = null)
+ {
+ logger.LogInformation("About to Start Voucher Management Container");
+
+ List environmentVariables = new List();
+ environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreConnectionString}");
+ environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"AppSettings:EstateManagementApi=http://{estateManagementContainerName}:{DockerHelper.EstateManagementDockerPort}");
+ environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
+ environmentVariables.Add($"urls=http://*:{DockerHelper.VoucherManagementDockerPort}");
+ environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
+ environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
+ environmentVariables
+ .Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
+
+ if (additionalEnvironmentVariables != null)
+ {
+ environmentVariables.AddRange(additionalEnvironmentVariables);
+ }
+
+ ContainerBuilder voucherManagementContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
+ .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.VoucherManagementDockerPort)
+ .UseNetwork(networkServices.ToArray());
+
+ if (string.IsNullOrEmpty(hostFolder) == false)
+ {
+ voucherManagementContainer = voucherManagementContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
+ }
+
+ if (dockerCredentials.HasValue)
+ {
+ voucherManagementContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
+ }
+
+ // Now build and return the container
+ IContainerService builtContainer = voucherManagementContainer.Build().Start().WaitForPort($"{DockerHelper.VoucherManagementDockerPort}/tcp", 30000);
+
+ logger.LogInformation("Voucher Management Container Started");
+
+ return builtContainer;
+ }
+
+ ///
+ /// Starts the containers for scenario run.
+ ///
+ /// Name of the scenario.
+ ///
+ public abstract Task StartContainersForScenarioRun(String scenarioName);
+
+ ///
+ /// Starts the SQL container with open connection.
+ ///
+ /// Name of the container.
+ /// The logger.
+ /// Name of the image.
+ /// The network service.
+ /// The host folder.
+ /// The docker credentials.
+ /// Name of the SQL user.
+ /// The SQL password.
+ ///
+ public static IContainerService StartSqlContainerWithOpenConnection(String containerName,
ILogger logger,
String imageName,
INetworkService networkService,
@@ -356,11 +792,21 @@ public static IContainerService StartSqlContainerWithOpenConnection(String conta
///
public const Int32 EventStoreTcpDockerPort = 1113;
+ ///
+ /// The messaging service docker port
+ ///
+ public const Int32 MessagingServiceDockerPort = 5006;
+
///
/// The security service docker port
///
public const Int32 SecurityServiceDockerPort = 5001;
+ ///
+ /// The test host port
+ ///
+ public const Int32 TestHostPort = 9000;
+
///
/// The transaction processor acl docker port
///
@@ -371,413 +817,16 @@ public static IContainerService StartSqlContainerWithOpenConnection(String conta
///
public const Int32 TransactionProcessorDockerPort = 5002;
- ///
- /// The voucher management docker port
- ///
- public const Int32 VoucherManagementDockerPort = 5007;
///
/// The voucher management acl docker port
///
public const Int32 VoucherManagementACLDockerPort = 5008;
- public const Int32 TestHostPort = 9000;
-
- #endregion
-
- public static IContainerService SetupTestHostContainer(String containerName, ILogger logger, String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
- sqlServerDetails,
- Boolean forceLatestImage = false)
- {
- logger.LogInformation("About to Start Test Hosts Container");
-
- List environmentVariables = new List();
- environmentVariables
- .Add($"ConnectionStrings:TestBankReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=TestBankReadModel\"");
- environmentVariables.Add("ASPNETCORE_ENVIRONMENT=IntegrationTest");
-
- ContainerBuilder testHostContainer = new Builder().UseContainer().WithName(containerName)
- .WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.TestHostPort)
- .UseNetwork(networkServices.ToArray()).Mount(hostFolder, "/home", MountType.ReadWrite);
-
- if (dockerCredentials.HasValue)
- {
- testHostContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
- }
-
- // Now build and return the container
- IContainerService builtContainer = testHostContainer.Build().Start().WaitForPort($"{DockerHelper.TestHostPort}/tcp", 30000);
-
- logger.LogInformation("Test Hosts Container Started");
-
- return builtContainer;
- }
-
///
- /// Setups the voucher management container.
+ /// The voucher management docker port
///
- /// Name of the container.
- /// The logger.
- /// Name of the image.
- /// The network services.
- /// The host folder.
- /// The docker credentials.
- /// Name of the security service container.
- /// Name of the estate management container.
- /// Name of the event store container.
- /// The SQL server details.
- /// The client details.
- /// if set to true [force latest image].
- /// The security service port.
- /// The additional environment variables.
- ///
- public static IContainerService SetupVoucherManagementContainer(String containerName, ILogger logger, String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- String securityServiceContainerName,
- String estateManagementContainerName,
- String eventStoreAddress,
- (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
- sqlServerDetails,
- (string clientId, string clientSecret) clientDetails,
- Boolean forceLatestImage = false,
- Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
- List additionalEnvironmentVariables = null)
- {
- logger.LogInformation("About to Start Voucher Management Container");
-
- List environmentVariables = new List();
- environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreAddress}:{DockerHelper.EventStoreHttpDockerPort}");
- environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"AppSettings:EstateManagementApi=http://{estateManagementContainerName}:{DockerHelper.EstateManagementDockerPort}");
- environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"urls=http://*:{DockerHelper.VoucherManagementDockerPort}");
- environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
- environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
- environmentVariables
- .Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
-
- if (additionalEnvironmentVariables != null)
- {
- environmentVariables.AddRange(additionalEnvironmentVariables);
- }
-
- ContainerBuilder voucherManagementContainer = new Builder().UseContainer().WithName(containerName)
- .WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.VoucherManagementDockerPort)
- .UseNetwork(networkServices.ToArray());
-
- if (String.IsNullOrEmpty(hostFolder) == false)
- {
- voucherManagementContainer = voucherManagementContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
- }
-
- if (dockerCredentials.HasValue)
- {
- voucherManagementContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
- }
-
- // Now build and return the container
- IContainerService builtContainer = voucherManagementContainer.Build().Start().WaitForPort($"{DockerHelper.VoucherManagementDockerPort}/tcp", 30000);
-
- logger.LogInformation("Voucher Management Container Started");
-
- return builtContainer;
- }
-
- ///
- /// Setups the estate management container.
- ///
- /// Name of the container.
- /// The logger.
- /// Name of the image.
- /// The network services.
- /// The host folder.
- /// The docker credentials.
- /// Name of the security service container.
- /// The event store address.
- /// The SQL server details.
- /// The client details.
- /// if set to true [force latest image].
- /// The security service port.
- /// The additional environment variables.
- ///
- public static IContainerService SetupEstateManagementContainer(String containerName,
- ILogger logger,
- String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- String securityServiceContainerName,
- String eventStoreAddress,
- (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
- sqlServerDetails,
- (String clientId, String clientSecret) clientDetails,
- Boolean forceLatestImage = false,
- Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
- List additionalEnvironmentVariables = null)
- {
- logger.LogInformation("About to Start Estate Management Container");
-
- List environmentVariables = new List();
- environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreAddress}:{DockerHelper.EventStoreHttpDockerPort}");
- environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"urls=http://*:{DockerHelper.EstateManagementDockerPort}");
- environmentVariables
- .Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
-
- if (additionalEnvironmentVariables != null)
- {
- environmentVariables.AddRange(additionalEnvironmentVariables);
- }
-
- ContainerBuilder estateManagementContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EstateManagementDockerPort)
- .UseNetwork(networkServices.ToArray());
- if (String.IsNullOrEmpty(hostFolder) == false)
- {
- estateManagementContainer = estateManagementContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
- }
-
- if (dockerCredentials.HasValue)
- {
- estateManagementContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
- }
-
- // Now build and return the container
- IContainerService builtContainer = estateManagementContainer.Build().Start().WaitForPort($"{DockerHelper.EstateManagementDockerPort}/tcp", 30000);
-
- logger.LogInformation("Estate Management Container Started");
-
- return builtContainer;
- }
-
- ///
- /// Setups the estate reporting container.
- ///
- /// Name of the container.
- /// The logger.
- /// Name of the image.
- /// The network services.
- /// The host folder.
- /// The docker credentials.
- /// Name of the security service container.
- /// The SQL server details.
- /// The client details.
- /// if set to true [force latest image].
- /// The security service port.
- /// The additional environment variables.
- ///
- public static IContainerService SetupEstateReportingContainer(String containerName,
- ILogger logger,
- String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- String securityServiceContainerName,
- String eventStoreAddress,
- (String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
- sqlServerDetails,
- (String clientId, String clientSecret) clientDetails,
- Boolean forceLatestImage = false,
- Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
- List additionalEnvironmentVariables = null)
- {
- logger.LogInformation("About to Start Estate Reporting Container");
-
- List environmentVariables = new List();
- environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreAddress}:{DockerHelper.EventStoreHttpDockerPort}");
- environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"urls=http://*:{DockerHelper.EstateReportingDockerPort}");
- environmentVariables
- .Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
-
- if (additionalEnvironmentVariables != null)
- {
- environmentVariables.AddRange(additionalEnvironmentVariables);
- }
-
- ContainerBuilder estateReportingContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EstateReportingDockerPort)
- .UseNetwork(networkServices.ToArray());
-
- if (String.IsNullOrEmpty(hostFolder) == false)
- {
- estateReportingContainer = estateReportingContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
- }
-
- if (dockerCredentials.HasValue)
- {
- estateReportingContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
- }
-
- // Now build and return the container
- IContainerService builtContainer = estateReportingContainer.Build().Start().WaitForPort($"{DockerHelper.EstateReportingDockerPort}/tcp", 30000);
-
- logger.LogInformation("Estate Reporting Container Started");
-
- return builtContainer;
- }
-
- ///
- /// Setups the transaction processor container.
- ///
- /// Name of the container.
- /// The logger.
- /// Name of the image.
- /// The network services.
- /// The host folder.
- /// The docker credentials.
- /// Name of the security service container.
- /// Name of the estate management container.
- /// The event store address.
- /// The client details.
- /// Name of the testhost container.
- /// Name of the voucher management container.
- /// if set to true [force latest image].
- /// The security service port.
- /// The additional environment variables.
- ///
- public static IContainerService SetupTransactionProcessorContainer(String containerName,
- ILogger logger,
- String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- String securityServiceContainerName,
- String estateManagementContainerName,
- String eventStoreAddress,
- (String clientId, String clientSecret) clientDetails,
- String testhostContainerName,
- String voucherManagementContainerName,
- Boolean forceLatestImage = false,
- Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
- List additionalEnvironmentVariables = null)
- {
- logger.LogInformation("About to Start Transaction Processor Container");
-
- List environmentVariables = new List();
- environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreAddress}:{DockerHelper.EventStoreHttpDockerPort}");
- environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"AppSettings:EstateManagementApi=http://{estateManagementContainerName}:{DockerHelper.EstateManagementDockerPort}");
- environmentVariables.Add($"AppSettings:VoucherManagementApi=http://{voucherManagementContainerName}:{DockerHelper.VoucherManagementDockerPort}");
- environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"urls=http://*:{DockerHelper.TransactionProcessorDockerPort}");
- environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
- environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
- environmentVariables.Add($"AppSettings:SubscriptionFilter=TransactionProcessor");
-
- environmentVariables.Add($"OperatorConfiguration:Safaricom:Url=http://{testhostContainerName}:9000/api/safaricom");
-
- if (additionalEnvironmentVariables != null)
- {
- environmentVariables.AddRange(additionalEnvironmentVariables);
- }
-
- ContainerBuilder transactionProcessorContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.TransactionProcessorDockerPort)
- .UseNetwork(networkServices.ToArray());
-
- if (String.IsNullOrEmpty(hostFolder) == false)
- {
- transactionProcessorContainer = transactionProcessorContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
- }
- if (dockerCredentials.HasValue)
- {
- transactionProcessorContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
- }
-
- // Now build and return the container
- IContainerService builtContainer = transactionProcessorContainer.Build().Start().WaitForPort($"{DockerHelper.TransactionProcessorDockerPort}/tcp", 30000);
-
- logger.LogInformation("Transaction Processor Container Started");
-
- return builtContainer;
- }
-
- public static IContainerService SetupEventStoreContainer(String containerName,
- ILogger logger,
- String imageName,
- INetworkService networkService,
- String hostFolder,
- Boolean forceLatestImage = false)
- {
- logger.LogInformation("About to Start Event Store Container");
-
- List environmentVariables = new List();
- environmentVariables.Add("EVENTSTORE_RUN_PROJECTIONS=all");
- environmentVariables.Add("EVENTSTORE_START_STANDARD_PROJECTIONS=true");
- environmentVariables.Add("EVENTSTORE_INSECURE=true");
- environmentVariables.Add("EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP=true");
- environmentVariables.Add("EVENTSTORE_ENABLE_EXTERNAL_TCP=true");
-
- var eventStoreContainerBuilder = new Builder().UseContainer().UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EventStoreHttpDockerPort)
- .ExposePort(DockerHelper.EventStoreTcpDockerPort).WithName(containerName)
- .WithEnvironment(environmentVariables.ToArray()).UseNetwork(networkService);
-
- if (String.IsNullOrEmpty(hostFolder) == false)
- {
- eventStoreContainerBuilder = eventStoreContainerBuilder.Mount(hostFolder, "/var/log/eventstore", MountType.ReadWrite);
- }
-
- IContainerService eventStoreContainer = eventStoreContainerBuilder.Build().Start().WaitForPort("2113/tcp", 30000);
-
- logger.LogInformation("Event Store Container Started");
-
- return eventStoreContainer;
- }
-
- public const int MessagingServiceDockerPort = 5006;
-
- public static IContainerService SetupMessagingServiceContainer(String containerName,
- ILogger logger,
- String imageName,
- List networkServices,
- String hostFolder,
- (String URL, String UserName, String Password)? dockerCredentials,
- String securityServiceContainerName,
- String eventStoreAddress,
- (String clientId, String clientSecret) clientDetails,
- Boolean forceLatestImage = false,
- Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
- {
- logger.LogInformation("About to Start Messaging Service Container");
-
- List environmentVariables = new List();
- environmentVariables.Add($"EventStoreSettings:ConnectionString={eventStoreAddress}:{DockerHelper.EventStoreHttpDockerPort}");
- environmentVariables.Add($"AppSettings:SecurityService=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"SecurityConfiguration:Authority=https://{securityServiceContainerName}:{securityServicePort}");
- environmentVariables.Add($"urls=http://*:{DockerHelper.MessagingServiceDockerPort}");
- environmentVariables.Add("AppSettings:EmailProxy=Integration");
- environmentVariables.Add("AppSettings:SMSProxy=Integration");
-
- ContainerBuilder messagingServiceContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
- .UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.MessagingServiceDockerPort)
- .UseNetwork(networkServices.ToArray());//.Mount(hostFolder, "/home", MountType.ReadWrite);
-
- if (String.IsNullOrEmpty(hostFolder) == false)
- {
- messagingServiceContainer = messagingServiceContainer.Mount(hostFolder, "/home/txnproc/trace", MountType.ReadWrite);
- }
-
- if (dockerCredentials.HasValue)
- {
- messagingServiceContainer.WithCredential(dockerCredentials.Value.URL, dockerCredentials.Value.UserName, dockerCredentials.Value.Password);
- }
-
- // Now build and return the container
- IContainerService builtContainer = messagingServiceContainer.Build().Start().WaitForPort($"{DockerHelper.MessagingServiceDockerPort}/tcp", 30000);
-
- logger.LogInformation("Messaging Service Container Started");
+ public const Int32 VoucherManagementDockerPort = 5007;
- return builtContainer;
- }
+ #endregion
}
}
\ No newline at end of file
diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj
index c3762605..ef0a1bac 100644
--- a/Shared/Shared.csproj
+++ b/Shared/Shared.csproj
@@ -13,12 +13,12 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+