Skip to content

Commit e6548a0

Browse files
Merge pull request #1210 from TransactionProcessing/task/#1081_test_containers_migration
Task/#1081 test containers migration
2 parents 149e3ea + 87b1b84 commit e6548a0

5 files changed

Lines changed: 70 additions & 103 deletions

File tree

Shared.IntegrationTesting.Tests/GenericSteps.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ public async Task StartSystem() {
4040

4141
this.TestingContext.DockerHelper = new TestDockerHelper();
4242
this.TestingContext.DockerHelper.Logger = logger;
43-
this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer;
44-
this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork;
45-
this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials;
46-
this.TestingContext.DockerHelper.SqlCredentials = Setup.SqlCredentials;
47-
this.TestingContext.DockerHelper.SqlServerContainerName = "sharedsqlserver";
43+
//this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer;
44+
//this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork;
45+
//this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials;
46+
//this.TestingContext.DockerHelper.SqlCredentials = Setup.SqlCredentials;
47+
//this.TestingContext.DockerHelper.SqlServerContainerName = "sharedsqlserver";
4848

49-
DockerServices services = DockerServices.EventStore | DockerServices.MessagingService | DockerServices.SecurityService |
49+
DockerServices services = DockerServices.SqlServer | DockerServices.EventStore | DockerServices.MessagingService | DockerServices.SecurityService |
5050
DockerServices.CallbackHandler | DockerServices.FileProcessor |
5151
DockerServices.TestHost | DockerServices.TransactionProcessor |
5252
DockerServices.TransactionProcessorAcl;
@@ -62,7 +62,7 @@ public async Task StartSystem() {
6262

6363
[AfterScenario()]
6464
public async Task StopSystem(){
65-
DockerServices sharedDockerServices = DockerServices.SqlServer;
65+
DockerServices sharedDockerServices = DockerServices.None;
6666

6767
this.TestingContext.Logger.LogInformation("About to Stop Containers for Scenario Run");
6868
await this.TestingContext.DockerHelper.StopContainersForScenarioRun(sharedDockerServices).ConfigureAwait(false);

Shared.IntegrationTesting.Tests/Setup.cs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,56 +16,56 @@ namespace Shared.IntegrationTesting.Tests;
1616
[Binding]
1717
public class Setup
1818
{
19-
public static IContainer DatabaseServerContainer;
20-
public static INetwork DatabaseServerNetwork;
21-
public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!");
22-
public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland");
19+
//public static IContainer DatabaseServerContainer;
20+
//public static INetwork DatabaseServerNetwork;
21+
//public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!");
22+
//public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland");
2323

2424
[BeforeTestRun]
2525
protected static async Task GlobalSetup(){
2626
ShouldlyConfiguration.DefaultTaskTimeout = TimeSpan.FromMinutes(1);
2727

28-
DockerHelper dockerHelper = new TestDockerHelper();
29-
dockerHelper.RequiredDockerServices = DockerServices.SqlServer;
28+
//DockerHelper dockerHelper = new TestDockerHelper();
29+
//dockerHelper.RequiredDockerServices = DockerServices.SqlServer;
3030

31-
NlogLogger logger = new();
32-
logger.Initialise(LogManager.GetLogger("Reqnroll"), "Reqnroll");
33-
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);
34-
dockerHelper.Logger = logger;
35-
dockerHelper.SqlCredentials = Setup.SqlCredentials;
36-
dockerHelper.DockerCredentials = Setup.DockerCredentials;
37-
dockerHelper.SqlServerContainerName = "sharedsqlserver";
31+
//NlogLogger logger = new();
32+
//logger.Initialise(LogManager.GetLogger("Reqnroll"), "Reqnroll");
33+
//LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);
34+
//dockerHelper.Logger = logger;
35+
//dockerHelper.SqlCredentials = Setup.SqlCredentials;
36+
//dockerHelper.DockerCredentials = Setup.DockerCredentials;
37+
//dockerHelper.SqlServerContainerName = "sharedsqlserver";
3838

3939
String? isCi = Environment.GetEnvironmentVariable("IsCI");
40-
dockerHelper.Logger.LogInformation($"IsCI [{isCi}]");
41-
if (String.Compare(isCi, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0){
42-
// override teh SQL Server image
43-
dockerHelper.Logger.LogInformation("Sql Image overridden");
44-
dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mssqlserver:2022-ltsc2022", false));
45-
}
40+
//dockerHelper.Logger.LogInformation($"IsCI [{isCi}]");
41+
//if (String.Compare(isCi, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0){
42+
// // override teh SQL Server image
43+
// dockerHelper.Logger.LogInformation("Sql Image overridden");
44+
// dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mssqlserver:2022-ltsc2022", false));
45+
//}
4646

4747
// Only one thread can execute this block at a time
48-
await SetupLock.WaitAsync();
49-
try {
50-
Boolean networkExists = await dockerHelper.DoesNetworkExist("sharednetwork");
51-
if (networkExists == false) {
52-
Setup.DatabaseServerNetwork = await dockerHelper.SetupTestNetwork("sharednetwork", true);
48+
//await SetupLock.WaitAsync();
49+
//try {
50+
// Boolean networkExists = await dockerHelper.DoesNetworkExist("sharednetwork");
51+
// if (networkExists == false) {
52+
// Setup.DatabaseServerNetwork = await dockerHelper.SetupTestNetwork("sharednetwork", true);
5353

54-
if (dockerHelper.DockerPlatform == DockerEnginePlatform.Windows) {
55-
await DatabaseServerNetwork.CreateAsync();
56-
}
57-
}
58-
else {
59-
Setup.DatabaseServerNetwork = await dockerHelper.SetupTestNetwork("sharednetwork", true);
60-
}
54+
// if (dockerHelper.DockerPlatform == DockerEnginePlatform.Windows) {
55+
// await DatabaseServerNetwork.CreateAsync();
56+
// }
57+
// }
58+
// else {
59+
// Setup.DatabaseServerNetwork = await dockerHelper.SetupTestNetwork("sharednetwork", true);
60+
// }
6161

62-
dockerHelper.Logger.LogInformation("in start SetupSqlServerContainer");
63-
Setup.DatabaseServerContainer = await dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork);
64-
}
65-
finally
66-
{
67-
SetupLock.Release();
68-
}
62+
// dockerHelper.Logger.LogInformation("in start SetupSqlServerContainer");
63+
// Setup.DatabaseServerContainer = await dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork);
64+
//}
65+
//finally
66+
//{
67+
// SetupLock.Release();
68+
//}
6969
}
7070

7171
private static readonly SemaphoreSlim SetupLock = new SemaphoreSlim(1, 1);

Shared.IntegrationTesting/ContainerType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public enum ContainerType
1919
[Flags]
2020
public enum DockerServices
2121
{
22+
None = 0,
2223
SqlServer = 1,
2324
EventStore = 2,
2425
MessagingService = 4,

Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs

Lines changed: 20 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,10 @@ public abstract class BaseDockerHelper{
4444

4545
public ILogger Logger;
4646

47-
public (String usename, String password)? SqlCredentials;
48-
49-
public IContainer SqlServerContainer;
50-
47+
public (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!");
48+
5149
public String SqlServerContainerName;
5250

53-
public INetwork SqlServerNetwork;
54-
5551
public Guid TestId;
5652

5753
public String ScenarioName;
@@ -75,7 +71,7 @@ public abstract class BaseDockerHelper{
7571

7672
protected readonly IHealthCheckClient HealthCheckClient;
7773

78-
protected Dictionary<ContainerType, Int32> HostPorts = new Dictionary<ContainerType, Int32>();
74+
protected Dictionary<ContainerType, Int32> HostPorts = new();
7975

8076
protected String HostTraceFolder;
8177

@@ -167,15 +163,7 @@ protected BaseDockerHelper(Boolean skipHealthChecks=false) {
167163
#endregion
168164

169165
#region Methods
170-
public async Task<Boolean> DoesNetworkExist(string networkName)
171-
{
172-
DockerClient? client = new DockerClientConfiguration().CreateClient();
173166

174-
var networks = await client.Networks.ListNetworksAsync();
175-
176-
return networks.Any(n =>
177-
string.Equals(n.Name, networkName, StringComparison.OrdinalIgnoreCase));
178-
}
179167
public virtual Dictionary<String,String> GetAdditionalVariables(ContainerType containerType){
180168
Dictionary<String, String> result = new();
181169

@@ -300,6 +288,7 @@ public virtual ContainerBuilder SetupCallbackHandlerContainer(){
300288

301289
public virtual void SetupContainerNames(){
302290
// Setup the container names
291+
this.SqlServerContainerName= $"sqlserver{this.TestId:N}";
303292
this.EventStoreContainerName = $"eventstore{this.TestId:N}";
304293
this.SecurityServiceContainerName = $"securityservice{this.TestId:N}";
305294
this.TestHostContainerName = $"testhosts{this.TestId:N}";
@@ -357,9 +346,6 @@ public virtual ContainerBuilder SetupEventStoreContainer(){
357346
eventStoreContainer = eventStoreContainer.WithName(this.EventStoreContainerName) // similar to WithName()
358347
.WithImage(imageDetails.imageName)
359348
.WithEnvironment(environmentVariables)
360-
.WithOutputConsumer(
361-
Consume.RedirectStdoutAndStderrToConsole()
362-
)
363349
.WithPortBinding(DockerPorts.EventStoreHttpDockerPort, true);
364350

365351
return eventStoreContainer;
@@ -515,25 +501,24 @@ public virtual ContainerBuilder ConfigureSqlContainer()
515501
.WithName(this.SqlServerContainerName) // similar to WithName()
516502
.WithImage(this.GetImageDetails(ContainerType.SqlServer).Data.imageName)
517503
.WithEnvironment("ACCEPT_EULA", "Y")
518-
.WithEnvironment("SA_PASSWORD", this.SqlCredentials.Value.password)
519-
.WithPortBinding(1433, true)
520-
.WithReuse(true);
504+
.WithEnvironment("SA_PASSWORD", this.SqlCredentials.password)
505+
.WithPortBinding(1433, true);
521506

522507
return containerService;
523508
}
524509

525-
public virtual async Task<IContainer> SetupSqlServerContainer(INetwork networkService){
526-
if (this.SqlCredentials == default)
527-
throw new ArgumentNullException("Sql Credentials have not been set");
510+
//public virtual async Task<IContainer> SetupSqlServerContainer(INetwork networkService){
511+
// if (this.SqlCredentials == default)
512+
// throw new ArgumentNullException("Sql Credentials have not been set");
528513

529-
IContainer databaseServerContainer = await this.StartContainer2(this.ConfigureSqlContainer,
530-
new List<INetwork>{
531-
networkService
532-
},
533-
DockerServices.SqlServer);
514+
// IContainer databaseServerContainer = await this.StartContainer2(this.ConfigureSqlContainer,
515+
// new List<INetwork>{
516+
// networkService
517+
// },
518+
// DockerServices.SqlServer);
534519

535-
return databaseServerContainer;
536-
}
520+
// return databaseServerContainer;
521+
//}
537522

538523
public virtual ContainerBuilder SetupTestHostContainer(){
539524
this.Trace("About to Start Test Hosts Container");
@@ -648,8 +633,8 @@ protected void CheckSqlConnection(IContainer databaseServerContainer){
648633

649634
String server = "127.0.0.1";
650635
String database = "master";
651-
String user = this.SqlCredentials.Value.usename;
652-
String password = this.SqlCredentials.Value.password;
636+
String user = this.SqlCredentials.usename;
637+
String password = this.SqlCredentials.password;
653638
String port = sqlServerEndpoint.ToString();
654639

655640
this.sqlTestConnString = $"server={server},{port};user id={user}; password={password}; database={database};Encrypt=False";
@@ -897,7 +882,7 @@ protected virtual String SetConnectionString(String databaseName,
897882
}
898883

899884
String connectionString =
900-
$"server={this.SqlServerContainerName},1433;user id={this.SqlCredentials.Value.usename};password={this.SqlCredentials.Value.password};database={databaseName}{encryptValue}";
885+
$"server={this.SqlServerContainerName},1433;user id={this.SqlCredentials.usename};password={this.SqlCredentials.password};database={databaseName}{encryptValue}";
901886

902887
return connectionString;
903888
}
@@ -922,7 +907,6 @@ protected async Task<IContainer> StartContainer2(Func<ContainerBuilder> buildCon
922907
this.Containers.Add((dockerService, builtContainer));
923908

924909
// Do a health check here
925-
//this.MessagingServicePort =
926910
ContainerType type = dockerService switch{
927911
DockerServices.CallbackHandler => ContainerType.CallbackHandler,
928912
DockerServices.MessagingService => ContainerType.MessagingService,
@@ -1011,22 +995,7 @@ UInt16 GetPort(Int32 dockerPort) =>
1011995
break;
1012996
}
1013997
}
1014-
1015-
protected async Task<IContainer> StartContainer(Func<List<INetwork>, Task<IContainer>> startContainerFunc, List<INetwork> networkServices, DockerServices dockerService){
1016-
if ((this.RequiredDockerServices & dockerService) != dockerService){
1017-
return default;
1018-
}
1019-
1020-
try
1021-
{
1022-
return await startContainerFunc(networkServices);
1023-
}
1024-
catch(Exception ex){
1025-
this.Error($"Error starting container [{startContainerFunc.Method.Name}]", ex);
1026-
throw;
1027-
}
1028-
}
1029-
998+
1030999
public void Trace(String traceMessage){
10311000
if (this.Logger.IsInitialised){
10321001
this.Logger.LogInformation($"{this.TestId}|{this.ScenarioName}|{traceMessage}");

Shared.IntegrationTesting/TestContainers/DockerHelper.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,6 @@ public override async Task StartContainersForScenarioRun(String scenarioName, Do
6464
Result<DockerEnginePlatform> result = await BaseDockerHelper.GetDockerEnginePlatform();
6565
this.DockerPlatform =result.Data;
6666

67-
this.DockerCredentials.ShouldNotBeNull();
68-
this.SqlCredentials.ShouldNotBeNull();
69-
this.SqlServerContainer.ShouldNotBeNull();
70-
this.SqlServerNetwork.ShouldNotBeNull();
71-
7267
this.RequiredDockerServices = dockerServices;
7368

7469
this.IsSecureEventStore = Environment.GetEnvironmentVariable("IsSecureEventStore") switch{
@@ -90,11 +85,13 @@ public override async Task StartContainersForScenarioRun(String scenarioName, Do
9085
INetwork testNetwork = await this.SetupTestNetwork();
9186
this.TestNetworks.Add(testNetwork);
9287

88+
//INetwork testNetwork2 = await this.SetupTestNetwork($"testnw{Guid.NewGuid():N}");
9389
List<INetwork> networks = [
94-
this.SqlServerNetwork,
95-
testNetwork
90+
testNetwork,
91+
//testNetwork2
9692
];
9793

94+
await StartContainer2(this.ConfigureSqlContainer, networks, DockerServices.SqlServer);
9895
await StartContainer2(this.SetupEventStoreContainer, networks, DockerServices.EventStore);
9996
// TODO: permenant fix for this hack
10097
await Task.Delay(TimeSpan.FromSeconds(30));

0 commit comments

Comments
 (0)