Skip to content

Commit c445710

Browse files
Merge pull request #53 from StuartFerguson/task/#50_adhocenvironmentvars
Allow ad hoc environment variables
2 parents 2ae5d22 + c1f4e85 commit c445710

1 file changed

Lines changed: 59 additions & 27 deletions

File tree

Shared.IntegrationTesting/DockerHelper.cs

Lines changed: 59 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Data;
6-
using System.IO;
76
using System.Net;
8-
using System.Runtime.CompilerServices;
97
using System.Threading;
108
using System.Threading.Tasks;
119
using Ductus.FluentDocker.Builders;
@@ -33,9 +31,11 @@ public abstract class DockerHelper
3331
/// <param name="dockerCredentials">The docker credentials.</param>
3432
/// <param name="securityServiceContainerName">Name of the security service container.</param>
3533
/// <param name="eventStoreContainerName">Name of the event store container.</param>
34+
/// <param name="sqlServerDetails">The SQL server details.</param>
3635
/// <param name="clientDetails">The client details.</param>
3736
/// <param name="forceLatestImage">if set to <c>true</c> [force latest image].</param>
3837
/// <param name="securityServicePort">The security service port.</param>
38+
/// <param name="additionalEnvironmentVariables">The additional environment variables.</param>
3939
/// <returns></returns>
4040
public static IContainerService SetupEstateManagementContainer(String containerName,
4141
ILogger logger,
@@ -45,12 +45,12 @@ public static IContainerService SetupEstateManagementContainer(String containerN
4545
(String URL, String UserName, String Password)? dockerCredentials,
4646
String securityServiceContainerName,
4747
String eventStoreContainerName,
48-
String sqlServerContainerName,
49-
String sqlServerUserName,
50-
String sqlServerPassword,
48+
(String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
49+
sqlServerDetails,
5150
(String clientId, String clientSecret) clientDetails,
5251
Boolean forceLatestImage = false,
53-
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
52+
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
53+
List<String> additionalEnvironmentVariables = null)
5454
{
5555
logger.LogInformation("About to Start Estate Management Container");
5656

@@ -61,9 +61,12 @@ public static IContainerService SetupEstateManagementContainer(String containerN
6161
environmentVariables.Add($"SecurityConfiguration:Authority=http://{securityServiceContainerName}:{securityServicePort}");
6262
environmentVariables.Add($"urls=http://*:{DockerHelper.EstateManagementDockerPort}");
6363
environmentVariables
64-
.Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerContainerName};user id={sqlServerUserName};password={sqlServerPassword};database=EstateReportingReadModel\"");
65-
64+
.Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
6665

66+
if (additionalEnvironmentVariables != null)
67+
{
68+
environmentVariables.AddRange(additionalEnvironmentVariables);
69+
}
6770

6871
ContainerBuilder estateManagementContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
6972
.UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EstateManagementDockerPort)
@@ -92,12 +95,11 @@ public static IContainerService SetupEstateManagementContainer(String containerN
9295
/// <param name="hostFolder">The host folder.</param>
9396
/// <param name="dockerCredentials">The docker credentials.</param>
9497
/// <param name="securityServiceContainerName">Name of the security service container.</param>
95-
/// <param name="sqlServerContainerName">Name of the SQL server container.</param>
96-
/// <param name="sqlServerUserName">Name of the SQL server user.</param>
97-
/// <param name="sqlServerPassword">The SQL server password.</param>
98+
/// <param name="sqlServerDetails">The SQL server details.</param>
9899
/// <param name="clientDetails">The client details.</param>
99100
/// <param name="forceLatestImage">if set to <c>true</c> [force latest image].</param>
100101
/// <param name="securityServicePort">The security service port.</param>
102+
/// <param name="additionalEnvironmentVariables">The additional environment variables.</param>
101103
/// <returns></returns>
102104
public static IContainerService SetupEstateReportingContainer(String containerName,
103105
ILogger logger,
@@ -106,12 +108,12 @@ public static IContainerService SetupEstateReportingContainer(String containerNa
106108
String hostFolder,
107109
(String URL, String UserName, String Password)? dockerCredentials,
108110
String securityServiceContainerName,
109-
String sqlServerContainerName,
110-
String sqlServerUserName,
111-
String sqlServerPassword,
111+
(String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
112+
sqlServerDetails,
112113
(String clientId, String clientSecret) clientDetails,
113114
Boolean forceLatestImage = false,
114-
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
115+
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
116+
List<String> additionalEnvironmentVariables = null)
115117
{
116118
logger.LogInformation("About to Start Estate Reporting Container");
117119

@@ -120,7 +122,12 @@ public static IContainerService SetupEstateReportingContainer(String containerNa
120122
environmentVariables.Add($"SecurityConfiguration:Authority=http://{securityServiceContainerName}:{securityServicePort}");
121123
environmentVariables.Add($"urls=http://*:{DockerHelper.EstateReportingDockerPort}");
122124
environmentVariables
123-
.Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerContainerName};user id={sqlServerUserName};password={sqlServerPassword};database=EstateReportingReadModel\"");
125+
.Add($"ConnectionStrings:EstateReportingReadModel=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=EstateReportingReadModel\"");
126+
127+
if (additionalEnvironmentVariables != null)
128+
{
129+
environmentVariables.AddRange(additionalEnvironmentVariables);
130+
}
124131

125132
ContainerBuilder estateReportingContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
126133
.UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.EstateReportingDockerPort)
@@ -179,14 +186,16 @@ public static IContainerService SetupEventStoreContainer(String containerName,
179186
/// <param name="hostFolder">The host folder.</param>
180187
/// <param name="dockerCredentials">The docker credentials.</param>
181188
/// <param name="forceLatestImage">if set to <c>true</c> [force latest image].</param>
189+
/// <param name="additionalEnvironmentVariables">The additional environment variables.</param>
182190
/// <returns></returns>
183191
public static IContainerService SetupSecurityServiceContainer(String containerName,
184192
ILogger logger,
185193
String imageName,
186194
INetworkService networkService,
187195
String hostFolder,
188196
(String URL, String UserName, String Password)? dockerCredentials,
189-
Boolean forceLatestImage = false)
197+
Boolean forceLatestImage = false,
198+
List<String> additionalEnvironmentVariables = null)
190199
{
191200
logger.LogInformation("About to Start Security Container");
192201

@@ -196,6 +205,11 @@ public static IContainerService SetupSecurityServiceContainer(String containerNa
196205
environmentVariables.Add("ASPNETCORE_ENVIRONMENT=IntegrationTest");
197206
environmentVariables.Add("urls=http://*:5001");
198207

208+
if (additionalEnvironmentVariables != null)
209+
{
210+
environmentVariables.AddRange(additionalEnvironmentVariables);
211+
}
212+
199213
ContainerBuilder securityServiceContainer = new Builder().UseContainer().WithName(containerName)
200214
.WithEnvironment(environmentVariables.ToArray()).UseImage(imageName, forceLatestImage)
201215
.ExposePort(DockerHelper.SecurityServiceDockerPort).UseNetwork(new List<INetworkService>
@@ -230,13 +244,12 @@ public static IContainerService SetupSecurityServiceContainer(String containerNa
230244
/// <param name="hostFolder">The host folder.</param>
231245
/// <param name="dockerCredentials">The docker credentials.</param>
232246
/// <param name="securityServiceContainerName">Name of the security service container.</param>
233-
/// <param name="sqlServerContainerName">Name of the SQL server container.</param>
234-
/// <param name="sqlServerUserName">Name of the SQL server user.</param>
235-
/// <param name="sqlServerPassword">The SQL server password.</param>
247+
/// <param name="sqlServerDetails">The SQL server details.</param>
236248
/// <param name="eventStoreServerId">The event store server identifier.</param>
237249
/// <param name="clientDetails">The client details.</param>
238250
/// <param name="forceLatestImage">if set to <c>true</c> [force latest image].</param>
239251
/// <param name="securityServicePort">The security service port.</param>
252+
/// <param name="additionalEnvironmentVariables">The additional environment variables.</param>
240253
/// <returns></returns>
241254
public static IContainerService SetupSubscriptionServiceContainer(String containerName,
242255
ILogger logger,
@@ -245,13 +258,13 @@ public static IContainerService SetupSubscriptionServiceContainer(String contain
245258
String hostFolder,
246259
(String URL, String UserName, String Password)? dockerCredentials,
247260
String securityServiceContainerName,
248-
String sqlServerContainerName,
249-
String sqlServerUserName,
250-
String sqlServerPassword,
261+
(String sqlServerContainerName, String sqlServerUserName, String sqlServerPassword)
262+
sqlServerDetails,
251263
Guid eventStoreServerId,
252264
(String clientId, String clientSecret) clientDetails,
253265
Boolean forceLatestImage = false,
254-
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
266+
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
267+
List<String> additionalEnvironmentVariables = null)
255268
{
256269
logger.LogInformation("About to Start Subscription Service Container");
257270

@@ -260,7 +273,12 @@ public static IContainerService SetupSubscriptionServiceContainer(String contain
260273
environmentVariables.Add($"AppSettings:EventStoreServerId={eventStoreServerId}");
261274
environmentVariables.Add($"SecurityConfiguration:Authority=http://{securityServiceContainerName}:{securityServicePort}");
262275
environmentVariables
263-
.Add($"ConnectionStrings:SubscriptionService=\"server={sqlServerContainerName};user id={sqlServerUserName};password={sqlServerPassword};database=SubscriptionServiceConfiguration\"");
276+
.Add($"ConnectionStrings:SubscriptionService=\"server={sqlServerDetails.sqlServerContainerName};user id={sqlServerDetails.sqlServerUserName};password={sqlServerDetails.sqlServerPassword};database=SubscriptionServiceConfiguration\"");
277+
278+
if (additionalEnvironmentVariables != null)
279+
{
280+
environmentVariables.AddRange(additionalEnvironmentVariables);
281+
}
264282

265283
ContainerBuilder subscriptionServiceContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
266284
.UseImage(imageName, forceLatestImage).UseNetwork(networkServices.ToArray())
@@ -315,6 +333,7 @@ public static INetworkService SetupTestNetwork(String networkName = null,
315333
/// <param name="clientDetails">The client details.</param>
316334
/// <param name="forceLatestImage">if set to <c>true</c> [force latest image].</param>
317335
/// <param name="securityServicePort">The security service port.</param>
336+
/// <param name="additionalEnvironmentVariables">The additional environment variables.</param>
318337
/// <returns></returns>
319338
public static IContainerService SetupTransactionProcessorACLContainer(String containerName,
320339
ILogger logger,
@@ -326,7 +345,8 @@ public static IContainerService SetupTransactionProcessorACLContainer(String con
326345
String transactionProcessorContainerName,
327346
(String clientId, String clientSecret) clientDetails,
328347
Boolean forceLatestImage = false,
329-
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
348+
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
349+
List<String> additionalEnvironmentVariables = null)
330350
{
331351
logger.LogInformation("About to Start Transaction Processor ACL Container");
332352

@@ -338,6 +358,11 @@ public static IContainerService SetupTransactionProcessorACLContainer(String con
338358
environmentVariables.Add($"AppSettings:ClientId={clientDetails.clientId}");
339359
environmentVariables.Add($"AppSettings:ClientSecret={clientDetails.clientSecret}");
340360

361+
if (additionalEnvironmentVariables != null)
362+
{
363+
environmentVariables.AddRange(additionalEnvironmentVariables);
364+
}
365+
341366
ContainerBuilder transactionProcessorACLContainer = new Builder()
342367
.UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
343368
.UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.TransactionProcessorACLDockerPort)
@@ -376,6 +401,7 @@ public static IContainerService SetupTransactionProcessorACLContainer(String con
376401
/// <param name="testhostContainerName">Name of the testhost container.</param>
377402
/// <param name="forceLatestImage">if set to <c>true</c> [force latest image].</param>
378403
/// <param name="securityServicePort">The security service port.</param>
404+
/// <param name="additionalEnvironmentVariables">The additional environment variables.</param>
379405
/// <returns></returns>
380406
public static IContainerService SetupTransactionProcessorContainer(String containerName,
381407
ILogger logger,
@@ -389,7 +415,8 @@ public static IContainerService SetupTransactionProcessorContainer(String contai
389415
(String clientId, String clientSecret) clientDetails,
390416
String testhostContainerName,
391417
Boolean forceLatestImage = false,
392-
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort)
418+
Int32 securityServicePort = DockerHelper.SecurityServiceDockerPort,
419+
List<String> additionalEnvironmentVariables = null)
393420
{
394421
logger.LogInformation("About to Start Transaction Processor Container");
395422

@@ -405,6 +432,11 @@ public static IContainerService SetupTransactionProcessorContainer(String contai
405432

406433
environmentVariables.Add($"OperatorConfiguration:Safaricom:Url=http://{testhostContainerName}:9000/api/safaricom");
407434

435+
if (additionalEnvironmentVariables != null)
436+
{
437+
environmentVariables.AddRange(additionalEnvironmentVariables);
438+
}
439+
408440
ContainerBuilder transactionProcessorContainer = new Builder().UseContainer().WithName(containerName).WithEnvironment(environmentVariables.ToArray())
409441
.UseImage(imageName, forceLatestImage).ExposePort(DockerHelper.TransactionProcessorDockerPort)
410442
.UseNetwork(networkServices.ToArray()).Mount(hostFolder, "/home", MountType.ReadWrite);

0 commit comments

Comments
 (0)