From 7addde28c19112d9540eac61b48f71dcc90a180c Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Mon, 17 Nov 2025 20:21:16 +0000 Subject: [PATCH 01/23] nuget updates --- .../TransactionProcessor.Aggregates.csproj | 2 +- .../TransactionProcessor.BusinessLogic.csproj | 6 +++--- .../TransactionProcessor.Client.csproj | 4 ++-- .../TransactionProcessor.Database.csproj | 4 ++-- .../TransactionProcessor.DatabaseTests.csproj | 2 +- .../TransactionProcessor.DomainEvents.csproj | 2 +- ...TransactionProcessor.IntegrationTesting.Helpers.csproj | 4 ++-- .../TransactionProcessor.IntegrationTests.csproj | 4 ++-- .../TransactionProcessor.ProjectionEngine.csproj | 4 ++-- .../TransactionProcessor.Repository.csproj | 4 ++-- .../TransactionProcessor.Testing.csproj | 2 +- .../TransactionProcessor.Tests.csproj | 2 +- TransactionProcessor/TransactionProcessor.csproj | 8 ++++---- 13 files changed, 24 insertions(+), 24 deletions(-) diff --git a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj index c0ca0dec..3c8a621f 100644 --- a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj +++ b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj @@ -8,7 +8,7 @@ - + diff --git a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj index 6b95d77c..0a354c6d 100644 --- a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj +++ b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj @@ -6,15 +6,15 @@ - + - - + + diff --git a/TransactionProcessor.Client/TransactionProcessor.Client.csproj b/TransactionProcessor.Client/TransactionProcessor.Client.csproj index c30ae1f4..e2a39716 100644 --- a/TransactionProcessor.Client/TransactionProcessor.Client.csproj +++ b/TransactionProcessor.Client/TransactionProcessor.Client.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/TransactionProcessor.Database/TransactionProcessor.Database.csproj b/TransactionProcessor.Database/TransactionProcessor.Database.csproj index c449268c..7de7d287 100644 --- a/TransactionProcessor.Database/TransactionProcessor.Database.csproj +++ b/TransactionProcessor.Database/TransactionProcessor.Database.csproj @@ -18,9 +18,9 @@ - + - + diff --git a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj index 587cf3aa..61cd5782 100644 --- a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj +++ b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj index e5e75941..8fc0839e 100644 --- a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj +++ b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj @@ -6,6 +6,6 @@ enable - + diff --git a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj index 3686b55c..226b62a6 100644 --- a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj +++ b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj @@ -7,11 +7,11 @@ - + - + diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index 5a2f00ad..dc1d686c 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj index 3e9da336..72e3fed9 100644 --- a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj +++ b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj index bc82c1b1..c95f6df0 100644 --- a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj +++ b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj index 18b802dc..de552b6c 100644 --- a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj +++ b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj @@ -6,7 +6,7 @@ - + diff --git a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj index 87b2d859..c330de98 100644 --- a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj +++ b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj @@ -7,7 +7,7 @@ - + diff --git a/TransactionProcessor/TransactionProcessor.csproj b/TransactionProcessor/TransactionProcessor.csproj index 7815593f..9b554147 100644 --- a/TransactionProcessor/TransactionProcessor.csproj +++ b/TransactionProcessor/TransactionProcessor.csproj @@ -10,7 +10,7 @@ - + @@ -34,10 +34,10 @@ - - + + - + From dea1cc88b80b14259f4fb1cf2572a8b95ef19282 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Mon, 17 Nov 2025 20:44:44 +0000 Subject: [PATCH 02/23] :| --- .../TransactionProcessor.IntegrationTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index dc1d686c..5a2f00ad 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@ - + From becc8e54b6b3aaa01d5eb734300c0c59282bab58 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Mon, 17 Nov 2025 20:58:13 +0000 Subject: [PATCH 03/23] another try --- TransactionProcessor.IntegrationTests/Common/GenericSteps.cs | 3 +++ .../TransactionProcessor.IntegrationTests.csproj | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index b00f94af..2cf6f16f 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -37,12 +37,15 @@ public async Task StartSystem() DockerServices.SqlServer | DockerServices.TestHost | DockerServices.TransactionProcessor | DockerServices.TransactionProcessorAcl; + this.TestingContext.DockerHelper = new DockerHelper(); this.TestingContext.DockerHelper.Logger = logger; this.TestingContext.Logger = logger; this.TestingContext.DockerHelper.RequiredDockerServices = dockerServices; this.TestingContext.Logger.LogInformation("About to Start Global Setup"); + this.TestingContext.DockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2019-latest", true)); + await Setup.GlobalSetup(this.TestingContext.DockerHelper); this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer; diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index 5a2f00ad..dc1d686c 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@ - + From 5cb658b2e9dec0adba3ab69507056808ebb5b7b2 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 10:16:20 +0000 Subject: [PATCH 04/23] :| --- TransactionProcessor.IntegrationTests/Common/Setup.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/Setup.cs b/TransactionProcessor.IntegrationTests/Common/Setup.cs index 42c88b4b..074aeb4f 100644 --- a/TransactionProcessor.IntegrationTests/Common/Setup.cs +++ b/TransactionProcessor.IntegrationTests/Common/Setup.cs @@ -2,11 +2,12 @@ namespace TransactionProcessor.IntegrationTests.Common { - using System.Threading.Tasks; using Ductus.FluentDocker.Services; using Ductus.FluentDocker.Services.Extensions; + using global::Shared.IntegrationTesting; using Reqnroll; using Shouldly; + using System.Threading.Tasks; [Binding] public class Setup @@ -24,7 +25,7 @@ public static async Task GlobalSetup(DockerHelper dockerHelper) dockerHelper.SqlCredentials = Setup.SqlCredentials; dockerHelper.DockerCredentials = Setup.DockerCredentials; dockerHelper.SqlServerContainerName = "sharedsqlserver"; - + dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mssqlserver:2022-ltsc2022", false)); lock (Setup.padLock) { Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork"); From c52f0d3fac6674eff025fc36bcbc4160430f7100 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 10:28:15 +0000 Subject: [PATCH 05/23] :| --- TransactionProcessor.IntegrationTests/Common/Setup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TransactionProcessor.IntegrationTests/Common/Setup.cs b/TransactionProcessor.IntegrationTests/Common/Setup.cs index 074aeb4f..4250c37f 100644 --- a/TransactionProcessor.IntegrationTests/Common/Setup.cs +++ b/TransactionProcessor.IntegrationTests/Common/Setup.cs @@ -25,7 +25,7 @@ public static async Task GlobalSetup(DockerHelper dockerHelper) dockerHelper.SqlCredentials = Setup.SqlCredentials; dockerHelper.DockerCredentials = Setup.DockerCredentials; dockerHelper.SqlServerContainerName = "sharedsqlserver"; - dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mssqlserver:2022-ltsc2022", false)); + dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2022-latest", true)); lock (Setup.padLock) { Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork"); From c940195ff89340369fa24b127e7d450c9f4b9f0e Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 11:09:47 +0000 Subject: [PATCH 06/23] :| --- .../Features/LogonTransaction.feature | 2 +- TransactionProcessor.IntegrationTests/Features/Operator.feature | 2 +- .../Features/ReconciliationFeature.feature | 2 +- .../Features/RedeemVoucher.feature | 2 +- .../Features/SaleTransactionFeature.feature | 2 +- .../Features/Settlement.feature | 2 +- .../Features/SettlementReporting.feature | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature b/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature index aec2c1f7..a72f010c 100644 --- a/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature +++ b/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature @@ -53,7 +53,7 @@ Background: | Test Operator 1 | Test Merchant 6 | 00000001 | 10000001 | Test Estate 1 | | Test Operator 1 | Test Merchant 7 | 00000001 | 10000001 | Test Estate 1 | -@PRTest +#@PRTest Scenario: Logon Transactions When I perform the following transactions diff --git a/TransactionProcessor.IntegrationTests/Features/Operator.feature b/TransactionProcessor.IntegrationTests/Features/Operator.feature index c916a5ec..95b21d01 100644 --- a/TransactionProcessor.IntegrationTests/Features/Operator.feature +++ b/TransactionProcessor.IntegrationTests/Features/Operator.feature @@ -27,7 +27,7 @@ Background: | EstateName | | Test Estate 1 | -@PRTest +#@PRTest Scenario: Update Operator Given I have created the following operators diff --git a/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature b/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature index d3afa433..99128e4e 100644 --- a/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature +++ b/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature @@ -75,7 +75,7 @@ Background: | Deposit1 | 100.00 | Today | Test Merchant 2 | Test Estate 1 | | Deposit1 | 100.00 | Today | Test Merchant 3 | Test Estate 2 | -@PRTest +#@PRTest Scenario: Reconciliation Transactions When I perform the following reconciliations diff --git a/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature b/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature index f8a057c4..3dca1358 100644 --- a/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature +++ b/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature @@ -68,6 +68,6 @@ Background: | Today | 1 | Sale | 1 | Test Merchant 1 | 123456780 | Test Estate 1 | Voucher | 10.00 | | | Hospital 1 Contract | 10 KES | test@recipient.co.uk | | | | | -@PRTest +#@PRTest Scenario: Redeem Vouchers When I redeem the voucher for Estate 'Test Estate 1' and Merchant 'Test Merchant 1' transaction number 1 the voucher balance will be 0 \ No newline at end of file diff --git a/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature b/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature index 534b338a..db5933ae 100644 --- a/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature +++ b/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature @@ -136,7 +136,7 @@ Background: | Test Estate 1 | Test Merchant 4 | PataPawa PostPay Contract | | Test Estate 1 | Test Merchant 4 | PataPawa PrePay Contract | -@PRTest +#@PRTest Scenario: Sale Transactions When I perform the following transactions diff --git a/TransactionProcessor.IntegrationTests/Features/Settlement.feature b/TransactionProcessor.IntegrationTests/Features/Settlement.feature index 4fa24d21..329d02f5 100644 --- a/TransactionProcessor.IntegrationTests/Features/Settlement.feature +++ b/TransactionProcessor.IntegrationTests/Features/Settlement.feature @@ -119,7 +119,7 @@ Scenario: Get Pending Settlement | SettlementDate | EstateName | MerchantName | NumberOfFees | | 2022-01-06 | Test Estate 1 | Test Merchant 1 | 2 | -@PRTest +#@PRTest Scenario: Process Settlement Given I create the following merchants | MerchantName | AddressLine1 | Town | Region | Country | ContactName | EmailAddress | EstateName | SettlementSchedule | diff --git a/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature b/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature index 4ef3906d..5fc48396 100644 --- a/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature +++ b/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature @@ -133,7 +133,7 @@ Background: When I process the settlement for '2022-02-06' on Estate 'Test Estate 2' for Merchant 'Test Merchant 3' then 1 fees are marked as settled and the settlement is completed @settlement -@PRTest +#@PRTest Scenario: Get Settlements - Merchant Filter When I get the Estate Settlement Report for Estate 'Test Estate 1' for Merchant 'Test Merchant 1' with the Start Date '2022-01-13' and the End Date '2022-02-06' the following data is returned | SettlementDate | NumberOfFeesSettled | ValueOfFeesSettled | IsCompleted | From 9ad4b4f087c456b01ce634918d767c4598e1cdda Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 11:58:58 +0000 Subject: [PATCH 07/23] debugging --- .../Common/DockerHelper.cs | 84 +++++++++++++++++-- 1 file changed, 77 insertions(+), 7 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index cc73ccc6..efc028b8 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -1,20 +1,23 @@ -using TransactionProcessor.Database.Contexts; +using Ductus.FluentDocker.Services; +using TransactionProcessor.Database.Contexts; namespace TransactionProcessor.IntegrationTests.Common { - using System; - using System.Collections.Generic; - using System.Net.Http; - using System.Text; - using System.Threading; - using System.Threading.Tasks; using Client; using Ductus.FluentDocker.Builders; + using Ductus.FluentDocker.Executors; + using Ductus.FluentDocker.Services.Extensions; using EventStore.Client; using global::Shared.IntegrationTesting; using Newtonsoft.Json; using SecurityService.Client; using Shouldly; + using System; + using System.Collections.Generic; + using System.Net.Http; + using System.Text; + using System.Threading; + using System.Threading.Tasks; using Retry = IntegrationTests.Retry; /// @@ -23,6 +26,73 @@ namespace TransactionProcessor.IntegrationTests.Common /// public class DockerHelper : global::Shared.IntegrationTesting.DockerHelper { + public override async Task SetupSqlServerContainer(INetworkService networkService) + { + if (this.SqlCredentials == default) + throw new ArgumentNullException("Sql Credentials have not been set"); + + IContainerService databaseServerContainer = await this.StartContainerX(this.ConfigureSqlContainer, + new List{ + networkService + }, + DockerServices.SqlServer); + + return databaseServerContainer; + } + + protected async Task StartContainerX(Func buildContainerFunc, List networkServices, DockerServices dockerService) + { + if ((this.RequiredDockerServices & dockerService) != dockerService) + { + return default; + } + + ConsoleStream consoleLogs = null; + try + { + this.Trace($"{dockerService} about to call builder func"); + ContainerBuilder containerBuilder = buildContainerFunc(); + + this.Trace($"{dockerService} about to call build"); + IContainerService builtContainer = containerBuilder.Build(); + + this.Trace($"{dockerService} about to attach logs"); + consoleLogs = builtContainer.Logs(true); + + this.Trace($"{dockerService} about to call Start"); + IContainerService startedContainer = builtContainer.Start(); + foreach (INetworkService networkService in networkServices) + { + this.Trace($"{dockerService} about to attach network service"); + networkService.Attach(startedContainer, false); + } + + this.Trace($"{dockerService} Container Started"); + this.Containers.Add((dockerService, startedContainer)); + + await DoSqlServerHealthCheck(startedContainer); + + this.Trace($"Container [{buildContainerFunc.Method.Name}] started"); + + return startedContainer; + } + catch (Exception ex) + { + if (consoleLogs != null) + { + while (!consoleLogs.IsFinished) + { + String s = consoleLogs.TryRead(10000); + this.Trace(s); + } + } + + this.Error($"Error starting container [{buildContainerFunc.Method.Name}]", ex); + throw; + } + } + + #region Fields public static String TestBankAccountNumber = "12345678"; From 0e7d6eff8a03a13174a6122107960a5d337a1f46 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 12:10:05 +0000 Subject: [PATCH 08/23] ... --- .../Common/DockerHelper.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index efc028b8..f1941e89 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -47,7 +47,7 @@ protected async Task StartContainerX(Func b return default; } - ConsoleStream consoleLogs = null; + //ConsoleStream consoleLogs = null; try { this.Trace($"{dockerService} about to call builder func"); @@ -57,7 +57,7 @@ protected async Task StartContainerX(Func b IContainerService builtContainer = containerBuilder.Build(); this.Trace($"{dockerService} about to attach logs"); - consoleLogs = builtContainer.Logs(true); + //consoleLogs = builtContainer.Logs(true); this.Trace($"{dockerService} about to call Start"); IContainerService startedContainer = builtContainer.Start(); @@ -78,14 +78,14 @@ protected async Task StartContainerX(Func b } catch (Exception ex) { - if (consoleLogs != null) - { - while (!consoleLogs.IsFinished) - { - String s = consoleLogs.TryRead(10000); - this.Trace(s); - } - } + //if (consoleLogs != null) + //{ + // while (!consoleLogs.IsFinished) + // { + // String s = consoleLogs.TryRead(10000); + // this.Trace(s); + // } + //} this.Error($"Error starting container [{buildContainerFunc.Method.Name}]", ex); throw; From c27e6d05d7a5d94f6ecfda308a05344750c273ec Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 12:23:13 +0000 Subject: [PATCH 09/23] :| --- .../Common/DockerHelper.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index f1941e89..e6fb7b89 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -48,8 +48,7 @@ protected async Task StartContainerX(Func b } //ConsoleStream consoleLogs = null; - try - { + try { this.Trace($"{dockerService} about to call builder func"); ContainerBuilder containerBuilder = buildContainerFunc(); @@ -61,13 +60,18 @@ protected async Task StartContainerX(Func b this.Trace($"{dockerService} about to call Start"); IContainerService startedContainer = builtContainer.Start(); - foreach (INetworkService networkService in networkServices) - { - this.Trace($"{dockerService} about to attach network service"); - networkService.Attach(startedContainer, false); + this.Trace($"{dockerService} after call to Start"); + if (networkServices == null || networkServices.Count == 0) { + this.Trace($"{dockerService} No network services to attach"); } + else{ + foreach (INetworkService networkService in networkServices) { + this.Trace($"{dockerService} about to attach network service"); + networkService.Attach(startedContainer, false); + } + } - this.Trace($"{dockerService} Container Started"); + this.Trace($"{dockerService} Container Started"); this.Containers.Add((dockerService, startedContainer)); await DoSqlServerHealthCheck(startedContainer); From 27507ebb9b4e718d2ceb846ac49d569632460b76 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 13:00:39 +0000 Subject: [PATCH 10/23] :Z\ --- TransactionProcessor.IntegrationTests/Common/DockerHelper.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index e6fb7b89..f6a9aac1 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -67,6 +67,9 @@ protected async Task StartContainerX(Func b else{ foreach (INetworkService networkService in networkServices) { this.Trace($"{dockerService} about to attach network service"); + if (networkService == null) + throw new ArgumentNullException("networkService is null"); + networkService.Attach(startedContainer, false); } } From 1165de39cd911d6e4b6991cd7ed7d5fe018cca10 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 13:14:43 +0000 Subject: [PATCH 11/23] :| --- TransactionProcessor.IntegrationTests/Common/DockerHelper.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index f6a9aac1..fa915db8 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -60,6 +60,8 @@ protected async Task StartContainerX(Func b this.Trace($"{dockerService} about to call Start"); IContainerService startedContainer = builtContainer.Start(); + if (startedContainer == null) + throw new Exception($"{dockerService} startedContainer is null"); this.Trace($"{dockerService} after call to Start"); if (networkServices == null || networkServices.Count == 0) { this.Trace($"{dockerService} No network services to attach"); From 7ccfd17978bb9f75423a82984714f5fa1c50ca28 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 13:53:37 +0000 Subject: [PATCH 12/23] :| --- .../Common/DockerHelper.cs | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index fa915db8..ba4959b8 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -14,6 +14,7 @@ namespace TransactionProcessor.IntegrationTests.Common using Shouldly; using System; using System.Collections.Generic; + using System.Linq; using System.Net.Http; using System.Text; using System.Threading; @@ -281,9 +282,50 @@ public override async Task StopContainersForScenarioRun(DockerServices dockerSer { await this.RemoveEstateReadModel().ConfigureAwait(false); - await base.StopContainersForScenarioRun(dockerServices); + await this.StopContainersForScenarioRunX(dockerServices); } - + + public async Task StopContainersForScenarioRunX(DockerServices sharedDockerServices) + { + if (this.Containers.Any()) + { + this.Containers.Reverse(); + + foreach ((DockerServices, IContainerService) containerService in this.Containers) + { + + if ((sharedDockerServices & containerService.Item1) == containerService.Item1) + { + continue; + } + + this.Trace($"Stopping container [{containerService.Item2.Name}]"); + if (containerService.Item2.Name.Contains("eventstore")) + { + CopyEventStoreLogs(containerService.Item2); + } + + containerService.Item2.Stop(); + containerService.Item2.Remove(true); + this.Trace($"Container [{containerService.Item2.Name}] stopped"); + } + } + + if (this.TestNetworks.Any()) + { + foreach (INetworkService networkService in this.TestNetworks) + { + this.Trace($"Teardown network {networkService.Name}"); + var cfg = networkService.GetConfiguration(true); + if (!cfg.Containers.Any()) + { + networkService.Stop(); + networkService.Remove(true); + } + } + } + } + private async Task RemoveEstateReadModel() { List estateIdList = this.TestingContext.GetAllEstateIds(); From f3e90adb3277f70f8c57f2aee1cbb29fdecdd54e Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 14:36:29 +0000 Subject: [PATCH 13/23] :| --- .../Common/DockerHelper.cs | 3 +++ .../Common/GenericSteps.cs | 24 ++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index ba4959b8..0ef993fe 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -50,6 +50,9 @@ protected async Task StartContainerX(Func b //ConsoleStream consoleLogs = null; try { + SimpleResults.Result dockerEnginePlatform = BaseDockerHelper.GetDockerEnginePlatform(); + Console.WriteLine($"Engine Type is {dockerEnginePlatform.Data}"); + this.Trace($"{dockerService} about to call builder func"); ContainerBuilder containerBuilder = buildContainerFunc(); diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 2cf6f16f..8986b4d9 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -1,12 +1,16 @@ -using System; +using Ductus.FluentDocker.Commands; +using SimpleResults; +using System; namespace TransactionProcessor.IntegrationTests.Common { - using System.Threading.Tasks; + using Ductus.FluentDocker.Services; using global::Shared.IntegrationTesting; using global::Shared.Logger; + using Microsoft.Extensions.Hosting; using NLog; using Reqnroll; + using System.Threading.Tasks; [Binding] [Scope(Tag = "base")] @@ -23,6 +27,20 @@ public GenericSteps(ScenarioContext scenarioContext, this.TestingContext = testingContext; } + public static String GetDockerEnginePlatform() { + try { + + + IHostService docker = BaseDockerHelper.GetDockerHost(); + var version = docker.Host.Version(null); + return version.Data.ServerOs.ToLower(); + } + catch (Exception ex) + { + return $"Unknown"; + } + } + [BeforeScenario] public async Task StartSystem() { @@ -42,7 +60,7 @@ public async Task StartSystem() this.TestingContext.DockerHelper.Logger = logger; this.TestingContext.Logger = logger; this.TestingContext.DockerHelper.RequiredDockerServices = dockerServices; - this.TestingContext.Logger.LogInformation("About to Start Global Setup"); + this.TestingContext.Logger.LogInformation($"About to Start Global Setup [{GetDockerEnginePlatform()}]"); this.TestingContext.DockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2019-latest", true)); From 4b6f89d623b61b397957ecd224ad972c1d2a0ab4 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 14:47:42 +0000 Subject: [PATCH 14/23] :| --- TransactionProcessor.IntegrationTests/Common/GenericSteps.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 8986b4d9..0eec25fd 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -35,8 +35,8 @@ public static String GetDockerEnginePlatform() { var version = docker.Host.Version(null); return version.Data.ServerOs.ToLower(); } - catch (Exception ex) - { + catch (Exception ex) { + this.TestingContext.Logger.LogInformation(ex.Message); return $"Unknown"; } } From 42d3bd478f291fefd3e976321d3f0a2044f5818e Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 14:50:04 +0000 Subject: [PATCH 15/23] :| --- .../Common/GenericSteps.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 0eec25fd..848d998e 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -27,7 +27,7 @@ public GenericSteps(ScenarioContext scenarioContext, this.TestingContext = testingContext; } - public static String GetDockerEnginePlatform() { + public static String GetDockerEnginePlatform(NlogLogger logger) { try { @@ -36,7 +36,7 @@ public static String GetDockerEnginePlatform() { return version.Data.ServerOs.ToLower(); } catch (Exception ex) { - this.TestingContext.Logger.LogInformation(ex.Message); + logger.LogInformation(ex.Message); return $"Unknown"; } } @@ -60,7 +60,7 @@ public async Task StartSystem() this.TestingContext.DockerHelper.Logger = logger; this.TestingContext.Logger = logger; this.TestingContext.DockerHelper.RequiredDockerServices = dockerServices; - this.TestingContext.Logger.LogInformation($"About to Start Global Setup [{GetDockerEnginePlatform()}]"); + this.TestingContext.Logger.LogInformation($"About to Start Global Setup [{GetDockerEnginePlatform(this.TestingContext.Logger)}]"); this.TestingContext.DockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2019-latest", true)); From 8bd9931d2b7be424693c2424ae2e78d2a9c43be7 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 15:04:16 +0000 Subject: [PATCH 16/23] more debug --- .../Common/GenericSteps.cs | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 848d998e..3f9c554e 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -1,6 +1,9 @@ using Ductus.FluentDocker.Commands; using SimpleResults; using System; +using Ductus.FluentDocker.Model; +using Ductus.FluentDocker.Model.Containers; +using Newtonsoft.Json; namespace TransactionProcessor.IntegrationTests.Common { @@ -32,7 +35,26 @@ public static String GetDockerEnginePlatform(NlogLogger logger) { IHostService docker = BaseDockerHelper.GetDockerHost(); - var version = docker.Host.Version(null); + + if (docker == null) { + logger.LogInformation("Docker Host is null"); + return "Unknown"; + } + if (docker.Host == null) { + logger.LogInformation("Docker Host Host is null"); + return "Unknown"; + } + + CommandResponse version = docker.Host.Version(null); + + if (version == null) { + logger.LogInformation("Docker Host Version is null"); + return "Unknown"; + } + + var x = JsonConvert.SerializeObject(version); + logger.LogInformation(x); + return version.Data.ServerOs.ToLower(); } catch (Exception ex) { From 7dd772a83a5c55621f850709fcc696fe237f738c Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 15:19:57 +0000 Subject: [PATCH 17/23] :| --- .../Common/DockerHelper.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index 0ef993fe..d29bc85f 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -1,4 +1,5 @@ -using Ductus.FluentDocker.Services; +using Ductus.FluentDocker.Model.Containers; +using Ductus.FluentDocker.Services; using TransactionProcessor.Database.Contexts; namespace TransactionProcessor.IntegrationTests.Common @@ -27,6 +28,20 @@ namespace TransactionProcessor.IntegrationTests.Common /// public class DockerHelper : global::Shared.IntegrationTesting.DockerHelper { + + public override INetworkService SetupTestNetwork(String networkName = null, + Boolean reuseIfExists = false) + { + networkName = String.IsNullOrEmpty(networkName) ? $"testnw{this.TestId:N}" : networkName; + //SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); + //Console.WriteLine($"Engine Type is {engineType.Data}"); + + // Build a network + NetworkBuilder networkService = new Builder().UseNetwork(networkName).ReuseIfExist(); + + return networkService.Build(); + } + public override async Task SetupSqlServerContainer(INetworkService networkService) { if (this.SqlCredentials == default) From 30009cd64d5c3ab5562ac50ac18200c5ec30b33b Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 18 Nov 2025 16:42:12 +0000 Subject: [PATCH 18/23] another random test --- .../TransactionProcessor.DatabaseTests.csproj | 3 +-- .../TransactionProcessor.IntegrationTesting.Helpers.csproj | 2 +- .../Features/LogonTransaction.feature.cs | 4 +--- .../Features/Operator.feature.cs | 4 +--- .../Features/ReconciliationFeature.feature.cs | 4 +--- .../Features/RedeemVoucher.feature.cs | 4 +--- .../Features/SaleTransactionFeature.feature.cs | 4 +--- .../Features/Settlement.feature.cs | 4 +--- .../Features/SettlementReporting.feature.cs | 4 +--- .../TransactionProcessor.IntegrationTests.csproj | 2 +- 10 files changed, 10 insertions(+), 25 deletions(-) diff --git a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj index 61cd5782..d3161ae9 100644 --- a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj +++ b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj @@ -13,7 +13,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + @@ -21,7 +21,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj index 226b62a6..82862f21 100644 --- a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj +++ b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj @@ -8,7 +8,7 @@ - + diff --git a/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature.cs b/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature.cs index 6f3fb606..480b58e9 100644 --- a/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature.cs @@ -334,11 +334,9 @@ await testRunner.GivenAsync("I have a token to access the estate management and [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Logon Transactions")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task LogonTransactions() { - string[] tagsOfScenario = new string[] { - "PRTest"}; + string[] tagsOfScenario = ((string[])(null)); global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "0"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Logon Transactions", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/Features/Operator.feature.cs b/TransactionProcessor.IntegrationTests/Features/Operator.feature.cs index f9131d7f..6ad1dee7 100644 --- a/TransactionProcessor.IntegrationTests/Features/Operator.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/Operator.feature.cs @@ -188,11 +188,9 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo, globa [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Update Operator")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task UpdateOperator() { - string[] tagsOfScenario = new string[] { - "PRTest"}; + string[] tagsOfScenario = ((string[])(null)); global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "0"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Update Operator", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature.cs b/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature.cs index 4c974ee5..7fd72913 100644 --- a/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature.cs @@ -399,11 +399,9 @@ await testRunner.GivenAsync("I have a token to access the estate management and [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Reconciliation Transactions")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task ReconciliationTransactions() { - string[] tagsOfScenario = new string[] { - "PRTest"}; + string[] tagsOfScenario = ((string[])(null)); global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "0"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Reconciliation Transactions", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature.cs b/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature.cs index cc094c23..c19c99d8 100644 --- a/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature.cs @@ -354,11 +354,9 @@ await testRunner.GivenAsync("I have a token to access the estate management and [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Redeem Vouchers")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task RedeemVouchers() { - string[] tagsOfScenario = new string[] { - "PRTest"}; + string[] tagsOfScenario = ((string[])(null)); global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "0"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Redeem Vouchers", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature.cs b/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature.cs index a1816050..a2312a0b 100644 --- a/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature.cs @@ -670,11 +670,9 @@ await testRunner.GivenAsync("I have a token to access the estate management and [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Sale Transactions")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task SaleTransactions() { - string[] tagsOfScenario = new string[] { - "PRTest"}; + string[] tagsOfScenario = ((string[])(null)); global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "0"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Sale Transactions", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/Features/Settlement.feature.cs b/TransactionProcessor.IntegrationTests/Features/Settlement.feature.cs index 84b36d47..fa63f710 100644 --- a/TransactionProcessor.IntegrationTests/Features/Settlement.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/Settlement.feature.cs @@ -714,11 +714,9 @@ await testRunner.GivenAsync("I have a token to access the estate management and [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Process Settlement")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task ProcessSettlement() { - string[] tagsOfScenario = new string[] { - "PRTest"}; + string[] tagsOfScenario = ((string[])(null)); global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "1"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Settlement", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature.cs b/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature.cs index 6b33ca79..c9d2453e 100644 --- a/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature.cs +++ b/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature.cs @@ -758,12 +758,10 @@ await testRunner.GivenAsync("I have a token to access the estate management and [global::NUnit.Framework.TestAttribute()] [global::NUnit.Framework.DescriptionAttribute("Get Settlements - Merchant Filter")] [global::NUnit.Framework.CategoryAttribute("settlement")] - [global::NUnit.Framework.CategoryAttribute("PRTest")] public async global::System.Threading.Tasks.Task GetSettlements_MerchantFilter() { string[] tagsOfScenario = new string[] { - "settlement", - "PRTest"}; + "settlement"}; global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); string pickleIndex = "0"; global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Get Settlements - Merchant Filter", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex); diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index dc1d686c..0570415d 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -8,7 +8,7 @@ - + From 99b23d7bc2fa7cc1b61ed4d6cf033610d4e937d9 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Fri, 21 Nov 2025 12:43:53 +0000 Subject: [PATCH 19/23] trying out test containers --- .../TransactionProcessor.Aggregates.csproj | 2 +- .../TransactionProcessor.BusinessLogic.csproj | 6 +- .../TransactionProcessor.Client.csproj | 4 +- .../TransactionProcessor.Database.csproj | 4 +- .../BaseTest.cs | 1 + .../TransactionProcessor.DatabaseTests.csproj | 2 +- .../TransactionProcessor.DomainEvents.csproj | 2 +- ...rocessor.IntegrationTesting.Helpers.csproj | 4 +- .../Common/DockerHelper.cs | 28 +- .../Common/GenericSteps.cs | 38 +- .../Common/Setup.cs | 10 +- ...ansactionProcessor.IntegrationTests.csproj | 4 +- ...ansactionProcessor.ProjectionEngine.csproj | 4 +- .../TransactionProcessor.Repository.csproj | 4 +- .../TransactionProcessor.Testing.csproj | 2 +- .../TransactionProcessor.Tests.csproj | 2 +- .../TransactionProcessor.csproj | 8 +- workload-install.ps1 | 332 ++++++++++++++++++ 18 files changed, 381 insertions(+), 76 deletions(-) create mode 100644 workload-install.ps1 diff --git a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj index 3c8a621f..058decc4 100644 --- a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj +++ b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj @@ -8,7 +8,7 @@ - + diff --git a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj index 0a354c6d..60bc17f9 100644 --- a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj +++ b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj @@ -6,15 +6,15 @@ - + - - + + diff --git a/TransactionProcessor.Client/TransactionProcessor.Client.csproj b/TransactionProcessor.Client/TransactionProcessor.Client.csproj index e2a39716..e27e390e 100644 --- a/TransactionProcessor.Client/TransactionProcessor.Client.csproj +++ b/TransactionProcessor.Client/TransactionProcessor.Client.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/TransactionProcessor.Database/TransactionProcessor.Database.csproj b/TransactionProcessor.Database/TransactionProcessor.Database.csproj index 7de7d287..ba4db5e6 100644 --- a/TransactionProcessor.Database/TransactionProcessor.Database.csproj +++ b/TransactionProcessor.Database/TransactionProcessor.Database.csproj @@ -18,9 +18,9 @@ - + - + diff --git a/TransactionProcessor.DatabaseTests/BaseTest.cs b/TransactionProcessor.DatabaseTests/BaseTest.cs index ed6ca128..56b9cb45 100644 --- a/TransactionProcessor.DatabaseTests/BaseTest.cs +++ b/TransactionProcessor.DatabaseTests/BaseTest.cs @@ -17,6 +17,7 @@ using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; +using Shared.IntegrationTesting.Ductus; using TransactionProcessor.Database.Contexts; using TransactionProcessor.Repository; using Xunit.Abstractions; diff --git a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj index d3161ae9..0aab5fc9 100644 --- a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj +++ b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj index 8fc0839e..3e7a2d72 100644 --- a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj +++ b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj @@ -6,6 +6,6 @@ enable - + diff --git a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj index 82862f21..76b93faa 100644 --- a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj +++ b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj @@ -7,11 +7,11 @@ - + - + diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index d29bc85f..f540cb5f 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -1,5 +1,7 @@ using Ductus.FluentDocker.Model.Containers; using Ductus.FluentDocker.Services; +using Shared.IntegrationTesting.TestContainers; +using SimpleResults; using TransactionProcessor.Database.Contexts; namespace TransactionProcessor.IntegrationTests.Common @@ -26,10 +28,10 @@ namespace TransactionProcessor.IntegrationTests.Common /// /// /// - public class DockerHelper : global::Shared.IntegrationTesting.DockerHelper + public class DockerHelper : global::Shared.IntegrationTesting.TestContainers.DockerHelper { - public override INetworkService SetupTestNetwork(String networkName = null, + /*public override INetworkService SetupTestNetwork(String networkName = null, Boolean reuseIfExists = false) { networkName = String.IsNullOrEmpty(networkName) ? $"testnw{this.TestId:N}" : networkName; @@ -54,8 +56,8 @@ public override async Task SetupSqlServerContainer(INetworkSe DockerServices.SqlServer); return databaseServerContainer; - } - + }*/ + /* protected async Task StartContainerX(Func buildContainerFunc, List networkServices, DockerServices dockerService) { if ((this.RequiredDockerServices & dockerService) != dockerService) @@ -65,7 +67,7 @@ protected async Task StartContainerX(Func b //ConsoleStream consoleLogs = null; try { - SimpleResults.Result dockerEnginePlatform = BaseDockerHelper.GetDockerEnginePlatform(); + Result dockerEnginePlatform = await BaseDockerHelper.GetDockerEnginePlatform(); Console.WriteLine($"Engine Type is {dockerEnginePlatform.Data}"); this.Trace($"{dockerService} about to call builder func"); @@ -119,7 +121,7 @@ protected async Task StartContainerX(Func b throw; } } - + */ #region Fields public static String TestBankAccountNumber = "12345678"; @@ -183,7 +185,7 @@ await Retry.For(async () => responseMessage.IsSuccessStatusCode.ShouldBeTrue(); }); } - + /* public override ContainerBuilder SetupTransactionProcessorContainer(){ List variables = new List(); @@ -193,7 +195,7 @@ public override ContainerBuilder SetupTransactionProcessorContainer(){ //this.SetAdditionalVariables(ContainerType.FileProcessor, variables); return base.SetupTransactionProcessorContainer(); - } + }*/ public override async Task CreateSubscriptions(){ List<(String streamName, String groupName, Int32 maxRetries)> subscriptions = new(); @@ -207,7 +209,7 @@ public override async Task CreateSubscriptions(){ } } - public override ContainerBuilder SetupSecurityServiceContainer() + /*public override ContainerBuilder SetupSecurityServiceContainer() { this.Trace("About to Start Security Container"); @@ -255,7 +257,7 @@ public override ContainerBuilder SetupSecurityServiceContainer() // Now build and return the container return securityServiceContainer; - } + }*/ /// /// Starts the containers for scenario run. @@ -300,10 +302,10 @@ public override async Task StopContainersForScenarioRun(DockerServices dockerSer { await this.RemoveEstateReadModel().ConfigureAwait(false); - await this.StopContainersForScenarioRunX(dockerServices); + await this.StopContainersForScenarioRun(dockerServices); } - public async Task StopContainersForScenarioRunX(DockerServices sharedDockerServices) + /*public async Task StopContainersForScenarioRunX(DockerServices sharedDockerServices) { if (this.Containers.Any()) { @@ -342,7 +344,7 @@ public async Task StopContainersForScenarioRunX(DockerServices sharedDockerServi } } } - } + */ private async Task RemoveEstateReadModel() { diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 3f9c554e..8be3086f 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -4,6 +4,7 @@ using Ductus.FluentDocker.Model; using Ductus.FluentDocker.Model.Containers; using Newtonsoft.Json; +using Shared.IntegrationTesting.TestContainers; namespace TransactionProcessor.IntegrationTests.Common { @@ -29,40 +30,7 @@ public GenericSteps(ScenarioContext scenarioContext, this.ScenarioContext = scenarioContext; this.TestingContext = testingContext; } - - public static String GetDockerEnginePlatform(NlogLogger logger) { - try { - - - IHostService docker = BaseDockerHelper.GetDockerHost(); - - if (docker == null) { - logger.LogInformation("Docker Host is null"); - return "Unknown"; - } - if (docker.Host == null) { - logger.LogInformation("Docker Host Host is null"); - return "Unknown"; - } - - CommandResponse version = docker.Host.Version(null); - - if (version == null) { - logger.LogInformation("Docker Host Version is null"); - return "Unknown"; - } - - var x = JsonConvert.SerializeObject(version); - logger.LogInformation(x); - - return version.Data.ServerOs.ToLower(); - } - catch (Exception ex) { - logger.LogInformation(ex.Message); - return $"Unknown"; - } - } - + [BeforeScenario] public async Task StartSystem() { @@ -82,7 +50,7 @@ public async Task StartSystem() this.TestingContext.DockerHelper.Logger = logger; this.TestingContext.Logger = logger; this.TestingContext.DockerHelper.RequiredDockerServices = dockerServices; - this.TestingContext.Logger.LogInformation($"About to Start Global Setup [{GetDockerEnginePlatform(this.TestingContext.Logger)}]"); + this.TestingContext.Logger.LogInformation($"About to Start Global Setup"); this.TestingContext.DockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2019-latest", true)); diff --git a/TransactionProcessor.IntegrationTests/Common/Setup.cs b/TransactionProcessor.IntegrationTests/Common/Setup.cs index 4250c37f..15758350 100644 --- a/TransactionProcessor.IntegrationTests/Common/Setup.cs +++ b/TransactionProcessor.IntegrationTests/Common/Setup.cs @@ -1,4 +1,6 @@ using System; +using DotNet.Testcontainers.Containers; +using DotNet.Testcontainers.Networks; namespace TransactionProcessor.IntegrationTests.Common { @@ -12,8 +14,8 @@ namespace TransactionProcessor.IntegrationTests.Common [Binding] public class Setup { - public static IContainerService DatabaseServerContainer; - public static INetworkService DatabaseServerNetwork; + public static IContainer DatabaseServerContainer; + public static INetwork DatabaseServerNetwork; public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!"); public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland"); @@ -28,7 +30,7 @@ public static async Task GlobalSetup(DockerHelper dockerHelper) dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2022-latest", true)); lock (Setup.padLock) { - Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork"); + Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork").Result; dockerHelper.Logger.LogInformation("in start SetupSqlServerContainer"); Setup.DatabaseServerContainer = dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork).Result; @@ -42,7 +44,7 @@ public static String GetConnectionString(String databaseName) public static String GetLocalConnectionString(String databaseName) { - Int32 databaseHostPort = Setup.DatabaseServerContainer.ToHostExposedEndpoint("1433/tcp").Port; + Int32 databaseHostPort = Setup.DatabaseServerContainer.GetMappedPublicPort(1433); return $"server=localhost,{databaseHostPort};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; } diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index 0570415d..d56cb3d3 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj index 72e3fed9..9f4d154d 100644 --- a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj +++ b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj index c95f6df0..aea22572 100644 --- a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj +++ b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj index de552b6c..ee4bfc6c 100644 --- a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj +++ b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj @@ -6,7 +6,7 @@ - + diff --git a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj index c330de98..0d264ea9 100644 --- a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj +++ b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj @@ -7,7 +7,7 @@ - + diff --git a/TransactionProcessor/TransactionProcessor.csproj b/TransactionProcessor/TransactionProcessor.csproj index 9b554147..fde009cb 100644 --- a/TransactionProcessor/TransactionProcessor.csproj +++ b/TransactionProcessor/TransactionProcessor.csproj @@ -10,7 +10,7 @@ - + @@ -34,10 +34,10 @@ - - + + - + diff --git a/workload-install.ps1 b/workload-install.ps1 new file mode 100644 index 00000000..271841b6 --- /dev/null +++ b/workload-install.ps1 @@ -0,0 +1,332 @@ +# +# Copyright (c) Samsung Electronics. All rights reserved. +# Licensed under the MIT license. See LICENSE file in the project root for full license information. +# + +<# +.SYNOPSIS +Installs Tizen workload manifest. +.DESCRIPTION +Installs the WorkloadManifest.json and WorkloadManifest.targets files for Tizen to the dotnet sdk. +.PARAMETER Version +Use specific VERSION +.PARAMETER DotnetInstallDir +Dotnet SDK Location installed +#> + +[cmdletbinding()] +param( + [Alias('v')][string]$Version="", + [Alias('d')][string]$DotnetInstallDir="", + [Alias('t')][string]$DotnetTargetVersionBand="", + [Alias('u')][switch]$UpdateAllWorkloads +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" +$ProgressPreference = "SilentlyContinue" + +$ManifestBaseName = "Samsung.NET.Sdk.Tizen.Manifest" +$global:FallbackId = "" + +$LatestVersionMap = [ordered]@{ + "$ManifestBaseName-6.0.100" = "7.0.101"; + "$ManifestBaseName-6.0.200" = "7.0.100-preview.13.6"; + "$ManifestBaseName-6.0.300" = "8.0.133"; + "$ManifestBaseName-6.0.400" = "9.0.104"; + "$ManifestBaseName-7.0.100-preview.6" = "7.0.100-preview.6.14"; + "$ManifestBaseName-7.0.100-preview.7" = "7.0.100-preview.7.20"; + "$ManifestBaseName-7.0.100-rc.1" = "7.0.100-rc.1.22"; + "$ManifestBaseName-7.0.100-rc.2" = "7.0.100-rc.2.24"; + "$ManifestBaseName-7.0.100" = "7.0.103"; + "$ManifestBaseName-7.0.200" = "7.0.105"; + "$ManifestBaseName-7.0.300" = "7.0.120"; + "$ManifestBaseName-7.0.400" = "10.0.106"; + "$ManifestBaseName-8.0.100-alpha.1" = "7.0.104"; + "$ManifestBaseName-8.0.100-preview.2" = "7.0.106"; + "$ManifestBaseName-8.0.100-preview.3" = "7.0.107"; + "$ManifestBaseName-8.0.100-preview.4" = "7.0.108"; + "$ManifestBaseName-8.0.100-preview.5" = "7.0.110"; + "$ManifestBaseName-8.0.100-preview.6" = "7.0.121"; + "$ManifestBaseName-8.0.100-preview.7" = "7.0.122"; + "$ManifestBaseName-8.0.100-rc.1" = "7.0.124"; + "$ManifestBaseName-8.0.100-rc.2" = "7.0.125"; + "$ManifestBaseName-8.0.100-rtm" = "7.0.127"; + "$ManifestBaseName-8.0.100" = "8.0.144"; + "$ManifestBaseName-8.0.200" = "8.0.157"; + "$ManifestBaseName-8.0.300" = "8.0.156"; + "$ManifestBaseName-8.0.400" = "10.0.109"; + "$ManifestBaseName-9.0.100-alpha.1" = "8.0.134"; + "$ManifestBaseName-9.0.100-preview.1" = "8.0.135"; + "$ManifestBaseName-9.0.100-preview.2" = "8.0.137"; + "$ManifestBaseName-9.0.100" = "10.0.104"; + "$ManifestBaseName-9.0.200" = "10.0.110"; + "$ManifestBaseName-9.0.300" = "10.0.111"; +} + +function New-TemporaryDirectory { + $parent = [System.IO.Path]::GetTempPath() + $name = [System.IO.Path]::GetRandomFileName() + New-Item -ItemType Directory -Path (Join-Path $parent $name) +} + +function Ensure-Directory([string]$TestDir) { + Try { + New-Item -ItemType Directory -Path $TestDir -Force -ErrorAction stop | Out-Null + [io.file]::OpenWrite($(Join-Path -Path $TestDir -ChildPath ".test-write-access")).Close() + Remove-Item -Path $(Join-Path -Path $TestDir -ChildPath ".test-write-access") -Force + } + Catch [System.UnauthorizedAccessException] { + Write-Error "No permission to install. Try run with administrator mode." + } +} + +function Get-LatestVersion([string]$Id) { + $attempts=3 + $sleepInSeconds=3 + do + { + try + { + $Response = Invoke-WebRequest -Uri https://api.nuget.org/v3-flatcontainer/$($Id.ToLowerInvariant())/index.json -UseBasicParsing | ConvertFrom-Json + return $Response.versions | Select-Object -Last 1 + } + catch { + Write-Host "Id: $Id" + Write-Host "An exception was caught: $($_.Exception.Message)" + } + + $attempts-- + if ($attempts -gt 0) { Start-Sleep $sleepInSeconds } + } while ($attempts -gt 0) + + if ($LatestVersionMap.Contains($Id)) + { + Write-Host "Return cached latest version." + return $LatestVersionMap.$Id + } + else + { + $SubStringId = $Id.Substring(0, $ManifestBaseName.Length + 2); + $MatchingFallbackId = @() + $MatchingFallbackVersion = @() + foreach ($key in $LatestVersionMap.Keys) { + if ($key -like "$SubStringId*") { + $MatchingFallbackId += $key + $MatchingFallbackVersion += $LatestVersionMap[$key] + } + } + if ($MatchingFallbackVersion) + { + $global:FallbackId = $MatchingFallbackId[-1] + $FallbackVersion = $MatchingFallbackVersion[-1] + Write-Host "Return fallback version: $FallbackVersion" + return $FallbackVersion + } + } + + Write-Error "Wrong Id: $Id" +} + +function Get-Package([string]$Id, [string]$Version, [string]$Destination, [string]$FileExt = "nupkg") { + $OutFileName = "$Id.$Version.$FileExt" + $OutFilePath = Join-Path -Path $Destination -ChildPath $OutFileName + + if ($Id -match ".net[0-9]+$") { + $Id = $Id -replace (".net[0-9]+", "") + } + + Invoke-WebRequest -Uri "https://www.nuget.org/api/v2/package/$Id/$Version" -OutFile $OutFilePath + + return $OutFilePath +} + +function Install-Pack([string]$Id, [string]$Version, [string]$Kind) { + $TempZipFile = $(Get-Package -Id $Id -Version $Version -Destination $TempDir -FileExt "zip") + $TempUnzipDir = Join-Path -Path $TempDir -ChildPath "unzipped\$Id" + + switch ($Kind) { + "manifest" { + Expand-Archive -Path $TempZipFile -DestinationPath $TempUnzipDir + New-Item -Path $TizenManifestDir -ItemType "directory" -Force | Out-Null + Copy-Item -Path "$TempUnzipDir\data\*" -Destination $TizenManifestDir -Force + } + {($_ -eq "sdk") -or ($_ -eq "framework")} { + Expand-Archive -Path $TempZipFile -DestinationPath $TempUnzipDir + if ( ($kind -eq "sdk") -and ($Id -match ".net[0-9]+$")) { + $Id = $Id -replace (".net[0-9]+", "") + } + $TargetDirectory = $(Join-Path -Path $DotnetInstallDir -ChildPath "packs\$Id\$Version") + New-Item -Path $TargetDirectory -ItemType "directory" -Force | Out-Null + Copy-Item -Path "$TempUnzipDir/*" -Destination $TargetDirectory -Recurse -Force + } + "template" { + $TargetFileName = "$Id.$Version.nupkg".ToLower() + $TargetDirectory = $(Join-Path -Path $DotnetInstallDir -ChildPath "template-packs") + New-Item -Path $TargetDirectory -ItemType "directory" -Force | Out-Null + Copy-Item $TempZipFile -Destination $(Join-Path -Path $TargetDirectory -ChildPath "$TargetFileName") -Force + } + } +} + +function Remove-Pack([string]$Id, [string]$Version, [string]$Kind) { + switch ($Kind) { + "manifest" { + Remove-Item -Path $TizenManifestDir -Recurse -Force + } + {($_ -eq "sdk") -or ($_ -eq "framework")} { + $TargetDirectory = $(Join-Path -Path $DotnetInstallDir -ChildPath "packs\$Id\$Version") + Remove-Item -Path $TargetDirectory -Recurse -Force + } + "template" { + $TargetFileName = "$Id.$Version.nupkg".ToLower(); + Remove-Item -Path $(Join-Path -Path $DotnetInstallDir -ChildPath "template-packs\$TargetFileName") -Force + } + } +} + +function Install-TizenWorkload([string]$DotnetVersion) +{ + $VersionSplitSymbol = '.' + $SplitVersion = $DotnetVersion.Split($VersionSplitSymbol) + + $CurrentDotnetVersion = [Version]"$($SplitVersion[0]).$($SplitVersion[1])" + $DotnetVersionBand = $SplitVersion[0] + $VersionSplitSymbol + $SplitVersion[1] + $VersionSplitSymbol + $SplitVersion[2][0] + "00" + $ManifestName = "$ManifestBaseName-$DotnetVersionBand" + + if ($DotnetTargetVersionBand -eq "" -or $UpdateAllWorkloads.IsPresent) { + if ($CurrentDotnetVersion -ge "7.0") + { + $IsPreviewVersion = $DotnetVersion.Contains("-preview") -or $DotnetVersion.Contains("-rc") -or $DotnetVersion.Contains("-alpha") + if ($IsPreviewVersion -and ($SplitVersion.Count -ge 4)) { + $DotnetTargetVersionBand = $DotnetVersionBand + $SplitVersion[2].SubString(3) + $VersionSplitSymbol + $($SplitVersion[3]) + $ManifestName = "$ManifestBaseName-$DotnetTargetVersionBand" + } + elseif ($DotnetVersion.Contains("-rtm") -and ($SplitVersion.Count -ge 3)) { + $DotnetTargetVersionBand = $DotnetVersionBand + $SplitVersion[2].SubString(3) + $ManifestName = "$ManifestBaseName-$DotnetTargetVersionBand" + } + else { + $DotnetTargetVersionBand = $DotnetVersionBand + } + } + else { + $DotnetTargetVersionBand = $DotnetVersionBand + } + } + + # Check latest version of manifest. + if ($Version -eq "" -or $UpdateAllWorkloads.IsPresent) { + $Version = Get-LatestVersion -Id $ManifestName + } + + # Check workload manifest directory. + $ManifestDir = Join-Path -Path $DotnetInstallDir -ChildPath "sdk-manifests" | Join-Path -ChildPath $DotnetTargetVersionBand + $TizenManifestDir = Join-Path -Path $ManifestDir -ChildPath "samsung.net.sdk.tizen" + $TizenManifestFile = Join-Path -Path $TizenManifestDir -ChildPath "WorkloadManifest.json" + + # Check and remove already installed old version. + if (Test-Path $TizenManifestFile) { + $ManifestJson = $(Get-Content $TizenManifestFile | ConvertFrom-Json) + $OldVersion = $ManifestJson.version + if ($OldVersion -eq $Version) { + $DotnetWorkloadList = Invoke-Expression "& '$DotnetCommand' workload list | Select-String -Pattern '^tizen'" + if ($DotnetWorkloadList) + { + Write-Host "Tizen Workload $Version version is already installed." + Continue + } + } + + Ensure-Directory $ManifestDir + Write-Host "Removing $ManifestName/$OldVersion from $ManifestDir..." + Remove-Pack -Id $ManifestName -Version $OldVersion -Kind "manifest" + $ManifestJson.packs.PSObject.Properties | ForEach-Object { + Write-Host "Removing $($_.Name)/$($_.Value.version)..." + Remove-Pack -Id $_.Name -Version $_.Value.version -Kind $_.Value.kind + } + } + + Ensure-Directory $ManifestDir + $TempDir = $(New-TemporaryDirectory) + + # Install workload manifest. + Write-Host "Installing $ManifestName/$Version to $ManifestDir..." + if ($global:FallbackId) { + Install-Pack -Id $global:FallbackId -Version $Version -Kind "manifest" + } else { + Install-Pack -Id $ManifestName -Version $Version -Kind "manifest" + } + + # Download and install workload packs. + $NewManifestJson = $(Get-Content $TizenManifestFile | ConvertFrom-Json) + $NewManifestJson.packs.PSObject.Properties | ForEach-Object { + Write-Host "Installing $($_.Name)/$($_.Value.version)..." + Install-Pack -Id $_.Name -Version $_.Value.version -Kind $_.Value.kind + } + + # Add tizen to the installed workload metadata. + # Featured version band for metadata does NOT include any preview specifier. + # https://github.com/dotnet/sdk/blob/main/documentation/general/workloads/user-local-workloads.md + New-Item -Path $(Join-Path -Path $DotnetInstallDir -ChildPath "metadata\workloads\$DotnetVersionBand\InstalledWorkloads\tizen") -Force | Out-Null + if (Test-Path $(Join-Path -Path $DotnetInstallDir -ChildPath "metadata\workloads\$DotnetVersionBand\InstallerType\msi")) { + New-Item -Path "HKLM:\SOFTWARE\Microsoft\dotnet\InstalledWorkloads\Standalone\x64\$DotnetTargetVersionBand\tizen" -Force | Out-Null + } + + # Clean up + Remove-Item -Path $TempDir -Force -Recurse + + Write-Host "Done installing Tizen workload $Version" +} + +# Check dotnet install directory. +if ($DotnetInstallDir -eq "") { + if ($Env:DOTNET_ROOT -And $(Test-Path "$Env:DOTNET_ROOT")) { + $DotnetInstallDir = $Env:DOTNET_ROOT + } else { + $DotnetInstallDir = Join-Path -Path $Env:Programfiles -ChildPath "dotnet" + } +} +if (-Not $(Test-Path "$DotnetInstallDir")) { + Write-Error "No installed dotnet '$DotnetInstallDir'." +} + +# Check installed dotnet version +$DotnetCommand = "$DotnetInstallDir\dotnet" +if (Get-Command $DotnetCommand -ErrorAction SilentlyContinue) +{ + if ($UpdateAllWorkloads.IsPresent) + { + $InstalledDotnetSdks = Invoke-Expression "& '$DotnetCommand' --list-sdks | Select-String -Pattern '^6|^7'" | ForEach-Object {$_ -replace (" \[.*","")} + } + else + { + $InstalledDotnetSdks = Invoke-Expression "& '$DotnetCommand' --version" + } +} +else +{ + Write-Error "'$DotnetCommand' occurs an error." +} + +if (-Not $InstalledDotnetSdks) +{ + Write-Host "`n.NET SDK version 6 or later is required to install Tizen Workload." +} +else +{ + foreach ($DotnetSdk in $InstalledDotnetSdks) + { + try { + Write-Host "`nCheck Tizen Workload for sdk $DotnetSdk" + Install-TizenWorkload -DotnetVersion $DotnetSdk + } + catch { + Write-Host "Failed to install Tizen Workload for sdk $DotnetSdk" + Write-Host "$_" + Continue + } + } +} + +Write-Host "`nDone" From 0cd35a15cbf512219a2cba581236d99bc4b703b0 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Fri, 21 Nov 2025 12:53:57 +0000 Subject: [PATCH 20/23] :| --- TransactionProcessor.IntegrationTests/Common/DockerHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index f540cb5f..75d9030b 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -302,7 +302,7 @@ public override async Task StopContainersForScenarioRun(DockerServices dockerSer { await this.RemoveEstateReadModel().ConfigureAwait(false); - await this.StopContainersForScenarioRun(dockerServices); + await base.StopContainersForScenarioRun(dockerServices); } /*public async Task StopContainersForScenarioRunX(DockerServices sharedDockerServices) From f9836da4e947f535c79f27ccd98361d51dc29f20 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Fri, 21 Nov 2025 17:20:22 +0000 Subject: [PATCH 21/23] :| --- .../TransactionProcessor.Aggregates.csproj | 2 +- .../TransactionProcessor.BusinessLogic.csproj | 6 +++--- .../TransactionProcessor.Client.csproj | 4 ++-- .../TransactionProcessor.Database.csproj | 4 ++-- .../TransactionProcessor.DatabaseTests.csproj | 2 +- .../TransactionProcessor.DomainEvents.csproj | 2 +- ...TransactionProcessor.IntegrationTesting.Helpers.csproj | 4 ++-- .../TransactionProcessor.IntegrationTests.csproj | 4 ++-- .../TransactionProcessor.ProjectionEngine.csproj | 4 ++-- .../TransactionProcessor.Repository.csproj | 4 ++-- .../TransactionProcessor.Testing.csproj | 2 +- .../TransactionProcessor.Tests.csproj | 2 +- TransactionProcessor/TransactionProcessor.csproj | 8 ++++---- 13 files changed, 24 insertions(+), 24 deletions(-) diff --git a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj index 058decc4..de32e4e7 100644 --- a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj +++ b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj @@ -8,7 +8,7 @@ - + diff --git a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj index 60bc17f9..dbd81c81 100644 --- a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj +++ b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj @@ -6,15 +6,15 @@ - + - - + + diff --git a/TransactionProcessor.Client/TransactionProcessor.Client.csproj b/TransactionProcessor.Client/TransactionProcessor.Client.csproj index e27e390e..647e7c44 100644 --- a/TransactionProcessor.Client/TransactionProcessor.Client.csproj +++ b/TransactionProcessor.Client/TransactionProcessor.Client.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/TransactionProcessor.Database/TransactionProcessor.Database.csproj b/TransactionProcessor.Database/TransactionProcessor.Database.csproj index ba4db5e6..1b19b249 100644 --- a/TransactionProcessor.Database/TransactionProcessor.Database.csproj +++ b/TransactionProcessor.Database/TransactionProcessor.Database.csproj @@ -18,9 +18,9 @@ - + - + diff --git a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj index 0aab5fc9..5ca15e18 100644 --- a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj +++ b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj index 3e7a2d72..bd261171 100644 --- a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj +++ b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj @@ -6,6 +6,6 @@ enable - + diff --git a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj index 76b93faa..e18139ac 100644 --- a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj +++ b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj @@ -7,11 +7,11 @@ - + - + diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index d56cb3d3..07af9f2f 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj index 9f4d154d..bf9275af 100644 --- a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj +++ b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj index aea22572..568a18be 100644 --- a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj +++ b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj index ee4bfc6c..deff24f4 100644 --- a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj +++ b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj @@ -6,7 +6,7 @@ - + diff --git a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj index 0d264ea9..a02c3cc1 100644 --- a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj +++ b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj @@ -7,7 +7,7 @@ - + diff --git a/TransactionProcessor/TransactionProcessor.csproj b/TransactionProcessor/TransactionProcessor.csproj index fde009cb..b93a444e 100644 --- a/TransactionProcessor/TransactionProcessor.csproj +++ b/TransactionProcessor/TransactionProcessor.csproj @@ -10,7 +10,7 @@ - + @@ -34,10 +34,10 @@ - - + + - + From 20de2670684a1bbee656fdb998f22c98b5d15c9a Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Fri, 21 Nov 2025 19:25:42 +0000 Subject: [PATCH 22/23] lets see how this goes --- .../TransactionProcessor.Aggregates.csproj | 2 +- .../TransactionProcessor.BusinessLogic.csproj | 6 ++-- .../TransactionProcessor.Client.csproj | 4 +-- .../TransactionProcessor.Database.csproj | 4 +-- .../TransactionProcessor.DatabaseTests.csproj | 2 +- .../TransactionProcessor.DomainEvents.csproj | 2 +- ...rocessor.IntegrationTesting.Helpers.csproj | 4 +-- .../Common/DockerHelper.cs | 28 +++++++-------- .../Common/GenericSteps.cs | 16 +++------ .../Common/Setup.cs | 34 ++++++------------- ...ansactionProcessor.IntegrationTests.csproj | 4 +-- ...ansactionProcessor.ProjectionEngine.csproj | 4 +-- .../TransactionProcessor.Repository.csproj | 4 +-- .../TransactionProcessor.Testing.csproj | 2 +- .../TransactionProcessor.Tests.csproj | 2 +- .../TransactionProcessor.csproj | 8 ++--- 16 files changed, 53 insertions(+), 73 deletions(-) diff --git a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj index de32e4e7..8d10c00c 100644 --- a/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj +++ b/TransactionProcessor.Aggregates/TransactionProcessor.Aggregates.csproj @@ -8,7 +8,7 @@ - + diff --git a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj index dbd81c81..7b6b2d8a 100644 --- a/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj +++ b/TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj @@ -6,15 +6,15 @@ - + - - + + diff --git a/TransactionProcessor.Client/TransactionProcessor.Client.csproj b/TransactionProcessor.Client/TransactionProcessor.Client.csproj index 647e7c44..afb7698a 100644 --- a/TransactionProcessor.Client/TransactionProcessor.Client.csproj +++ b/TransactionProcessor.Client/TransactionProcessor.Client.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/TransactionProcessor.Database/TransactionProcessor.Database.csproj b/TransactionProcessor.Database/TransactionProcessor.Database.csproj index 1b19b249..0fd2cd9b 100644 --- a/TransactionProcessor.Database/TransactionProcessor.Database.csproj +++ b/TransactionProcessor.Database/TransactionProcessor.Database.csproj @@ -18,9 +18,9 @@ - + - + diff --git a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj index 5ca15e18..059a1ece 100644 --- a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj +++ b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj index bd261171..a2ecf987 100644 --- a/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj +++ b/TransactionProcessor.DomainEvents/TransactionProcessor.DomainEvents.csproj @@ -6,6 +6,6 @@ enable - + diff --git a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj index e18139ac..661e3428 100644 --- a/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj +++ b/TransactionProcessor.IntegrationTesting.Helpers/TransactionProcessor.IntegrationTesting.Helpers.csproj @@ -7,11 +7,11 @@ - + - + diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index 75d9030b..14757b56 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -348,20 +348,20 @@ public override async Task StopContainersForScenarioRun(DockerServices dockerSer private async Task RemoveEstateReadModel() { - List estateIdList = this.TestingContext.GetAllEstateIds(); - - foreach (Guid estateId in estateIdList) - { - String databaseName = $"EstateReportingReadModel{estateId}"; - - await Retry.For(async () => - { - // Build the connection string (to master) - String connectionString = Setup.GetLocalConnectionString(databaseName); - EstateManagementContext context = new EstateManagementContext(connectionString); - await context.Database.EnsureDeletedAsync(CancellationToken.None); - }); - } + //List estateIdList = this.TestingContext.GetAllEstateIds(); + + //foreach (Guid estateId in estateIdList) + //{ + // String databaseName = $"EstateReportingReadModel{estateId}"; + + // await Retry.For(async () => + // { + // // Build the connection string (to master) + // String connectionString = Setup.GetLocalConnectionString(databaseName); + // EstateManagementContext context = new EstateManagementContext(connectionString); + // await context.Database.EnsureDeletedAsync(CancellationToken.None); + // }); + //} } protected override List GetRequiredProjections() diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 8be3086f..377ddefc 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -40,12 +40,12 @@ public async Task StartSystem() logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName); LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly); - DockerServices dockerServices = DockerServices.CallbackHandler | DockerServices.EventStore | - DockerServices.FileProcessor | DockerServices.MessagingService | DockerServices.SecurityService | - DockerServices.SqlServer | DockerServices.TestHost | DockerServices.TransactionProcessor | + DockerServices dockerServices = DockerServices.SqlServer | DockerServices.EventStore | DockerServices.MessagingService | DockerServices.SecurityService | + DockerServices.CallbackHandler | DockerServices.FileProcessor | + DockerServices.TestHost | DockerServices.TransactionProcessor | DockerServices.TransactionProcessorAcl; - + this.TestingContext.DockerHelper = new DockerHelper(); this.TestingContext.DockerHelper.Logger = logger; this.TestingContext.Logger = logger; @@ -56,12 +56,6 @@ public async Task StartSystem() await Setup.GlobalSetup(this.TestingContext.DockerHelper); - this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer; - this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork; - this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials; - this.TestingContext.DockerHelper.SqlCredentials = Setup.SqlCredentials; - this.TestingContext.DockerHelper.SqlServerContainerName = "sharedsqlserver"; - this.TestingContext.DockerHelper.SetImageDetails(ContainerType.TransactionProcessor, ("transactionprocessor", false)); this.TestingContext.Logger = logger; @@ -73,7 +67,7 @@ public async Task StartSystem() [AfterScenario] public async Task StopSystem(){ - DockerServices sharedDockerServices = DockerServices.SqlServer; + DockerServices sharedDockerServices = DockerServices.None; this.TestingContext.Logger.LogInformation("About to Stop Containers for Scenario Run"); await this.TestingContext.DockerHelper.StopContainersForScenarioRun(sharedDockerServices).ConfigureAwait(false); diff --git a/TransactionProcessor.IntegrationTests/Common/Setup.cs b/TransactionProcessor.IntegrationTests/Common/Setup.cs index 15758350..d5f87cf9 100644 --- a/TransactionProcessor.IntegrationTests/Common/Setup.cs +++ b/TransactionProcessor.IntegrationTests/Common/Setup.cs @@ -14,40 +14,26 @@ namespace TransactionProcessor.IntegrationTests.Common [Binding] public class Setup { - public static IContainer DatabaseServerContainer; - public static INetwork DatabaseServerNetwork; public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!"); public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland"); - static object padLock = new object(); // Object to lock on - + public static async Task GlobalSetup(DockerHelper dockerHelper) { ShouldlyConfiguration.DefaultTaskTimeout = TimeSpan.FromMinutes(1); - dockerHelper.SqlCredentials = Setup.SqlCredentials; - dockerHelper.DockerCredentials = Setup.DockerCredentials; - dockerHelper.SqlServerContainerName = "sharedsqlserver"; - dockerHelper.SetImageDetails(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2022-latest", true)); - lock (Setup.padLock) - { - Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork").Result; - - dockerHelper.Logger.LogInformation("in start SetupSqlServerContainer"); - Setup.DatabaseServerContainer = dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork).Result; - } } - public static String GetConnectionString(String databaseName) - { - return $"server={Setup.DatabaseServerContainer.Name};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; - } + //public static String GetConnectionString(String databaseName) + //{ + // return $"server={Setup.DatabaseServerContainer.Name};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; + //} - public static String GetLocalConnectionString(String databaseName) - { - Int32 databaseHostPort = Setup.DatabaseServerContainer.GetMappedPublicPort(1433); + //public static String GetLocalConnectionString(String databaseName) + //{ + // Int32 databaseHostPort = Setup.DatabaseServerContainer.GetMappedPublicPort(1433); - return $"server=localhost,{databaseHostPort};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; - } + // return $"server=localhost,{databaseHostPort};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; + //} } } diff --git a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj index 07af9f2f..2f358634 100644 --- a/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj +++ b/TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj index bf9275af..f0f712f8 100644 --- a/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj +++ b/TransactionProcessor.ProjectionEngine/TransactionProcessor.ProjectionEngine.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj index 568a18be..95ee6e97 100644 --- a/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj +++ b/TransactionProcessor.Repository/TransactionProcessor.Repository.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj index deff24f4..a43f6e75 100644 --- a/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj +++ b/TransactionProcessor.Testing/TransactionProcessor.Testing.csproj @@ -6,7 +6,7 @@ - + diff --git a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj index a02c3cc1..6520cd3a 100644 --- a/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj +++ b/TransactionProcessor.Tests/TransactionProcessor.Tests.csproj @@ -7,7 +7,7 @@ - + diff --git a/TransactionProcessor/TransactionProcessor.csproj b/TransactionProcessor/TransactionProcessor.csproj index b93a444e..880fb0a8 100644 --- a/TransactionProcessor/TransactionProcessor.csproj +++ b/TransactionProcessor/TransactionProcessor.csproj @@ -10,7 +10,7 @@ - + @@ -34,10 +34,10 @@ - - + + - + From 48ac5179c01abd225a56e6b445a1b2924f810348 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Fri, 21 Nov 2025 19:42:09 +0000 Subject: [PATCH 23/23] bring the tests back in --- .../Features/LogonTransaction.feature | 2 +- TransactionProcessor.IntegrationTests/Features/Operator.feature | 2 +- .../Features/ReconciliationFeature.feature | 2 +- .../Features/RedeemVoucher.feature | 2 +- .../Features/SaleTransactionFeature.feature | 2 +- .../Features/Settlement.feature | 2 +- .../Features/SettlementReporting.feature | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature b/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature index a72f010c..aec2c1f7 100644 --- a/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature +++ b/TransactionProcessor.IntegrationTests/Features/LogonTransaction.feature @@ -53,7 +53,7 @@ Background: | Test Operator 1 | Test Merchant 6 | 00000001 | 10000001 | Test Estate 1 | | Test Operator 1 | Test Merchant 7 | 00000001 | 10000001 | Test Estate 1 | -#@PRTest +@PRTest Scenario: Logon Transactions When I perform the following transactions diff --git a/TransactionProcessor.IntegrationTests/Features/Operator.feature b/TransactionProcessor.IntegrationTests/Features/Operator.feature index 95b21d01..c916a5ec 100644 --- a/TransactionProcessor.IntegrationTests/Features/Operator.feature +++ b/TransactionProcessor.IntegrationTests/Features/Operator.feature @@ -27,7 +27,7 @@ Background: | EstateName | | Test Estate 1 | -#@PRTest +@PRTest Scenario: Update Operator Given I have created the following operators diff --git a/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature b/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature index 99128e4e..d3afa433 100644 --- a/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature +++ b/TransactionProcessor.IntegrationTests/Features/ReconciliationFeature.feature @@ -75,7 +75,7 @@ Background: | Deposit1 | 100.00 | Today | Test Merchant 2 | Test Estate 1 | | Deposit1 | 100.00 | Today | Test Merchant 3 | Test Estate 2 | -#@PRTest +@PRTest Scenario: Reconciliation Transactions When I perform the following reconciliations diff --git a/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature b/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature index 3dca1358..f8a057c4 100644 --- a/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature +++ b/TransactionProcessor.IntegrationTests/Features/RedeemVoucher.feature @@ -68,6 +68,6 @@ Background: | Today | 1 | Sale | 1 | Test Merchant 1 | 123456780 | Test Estate 1 | Voucher | 10.00 | | | Hospital 1 Contract | 10 KES | test@recipient.co.uk | | | | | -#@PRTest +@PRTest Scenario: Redeem Vouchers When I redeem the voucher for Estate 'Test Estate 1' and Merchant 'Test Merchant 1' transaction number 1 the voucher balance will be 0 \ No newline at end of file diff --git a/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature b/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature index db5933ae..534b338a 100644 --- a/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature +++ b/TransactionProcessor.IntegrationTests/Features/SaleTransactionFeature.feature @@ -136,7 +136,7 @@ Background: | Test Estate 1 | Test Merchant 4 | PataPawa PostPay Contract | | Test Estate 1 | Test Merchant 4 | PataPawa PrePay Contract | -#@PRTest +@PRTest Scenario: Sale Transactions When I perform the following transactions diff --git a/TransactionProcessor.IntegrationTests/Features/Settlement.feature b/TransactionProcessor.IntegrationTests/Features/Settlement.feature index 329d02f5..4fa24d21 100644 --- a/TransactionProcessor.IntegrationTests/Features/Settlement.feature +++ b/TransactionProcessor.IntegrationTests/Features/Settlement.feature @@ -119,7 +119,7 @@ Scenario: Get Pending Settlement | SettlementDate | EstateName | MerchantName | NumberOfFees | | 2022-01-06 | Test Estate 1 | Test Merchant 1 | 2 | -#@PRTest +@PRTest Scenario: Process Settlement Given I create the following merchants | MerchantName | AddressLine1 | Town | Region | Country | ContactName | EmailAddress | EstateName | SettlementSchedule | diff --git a/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature b/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature index 5fc48396..4ef3906d 100644 --- a/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature +++ b/TransactionProcessor.IntegrationTests/Features/SettlementReporting.feature @@ -133,7 +133,7 @@ Background: When I process the settlement for '2022-02-06' on Estate 'Test Estate 2' for Merchant 'Test Merchant 3' then 1 fees are marked as settled and the settlement is completed @settlement -#@PRTest +@PRTest Scenario: Get Settlements - Merchant Filter When I get the Estate Settlement Report for Estate 'Test Estate 1' for Merchant 'Test Merchant 1' with the Start Date '2022-01-13' and the End Date '2022-02-06' the following data is returned | SettlementDate | NumberOfFeesSettled | ValueOfFeesSettled | IsCompleted |