diff --git a/.github/workflows/nightlybuild.yml b/.github/workflows/nightlybuild.yml index 24b2193d..125f1da2 100644 --- a/.github/workflows/nightlybuild.yml +++ b/.github/workflows/nightlybuild.yml @@ -2,7 +2,7 @@ name: Nightly Build on: schedule: - - cron: "* 23 * * *" + - cron: "10 23 * * *" jobs: build: @@ -51,4 +51,4 @@ jobs: run: docker build . --file TransactionProcessor/Dockerfile --tag transactionprocessor:latest - name: Run Integration Tests - run: dotnet test "TransactionProcessor.IntegrationTests\TransactionProcessor.IntegrationTests.csproj" \ No newline at end of file + run: dotnet test "TransactionProcessor.IntegrationTests\TransactionProcessor.IntegrationTests.csproj" diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index ef09e2e9..667c7626 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -39,3 +39,7 @@ jobs: - name: Run Integration Tests run: dotnet test "TransactionProcessor.IntegrationTests\TransactionProcessor.IntegrationTests.csproj" --filter Category=PRTest + + - name: Setup tmate session + if: failure() + uses: mxschmitt/action-tmate@v1 diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs index 8f33df55..38eb014f 100644 --- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs +++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs @@ -6,6 +6,8 @@ using System.Threading.Tasks; using Client; using Ductus.FluentDocker.Builders; + using Ductus.FluentDocker.Executors; + using Ductus.FluentDocker.Extensions; using Ductus.FluentDocker.Model.Builders; using Ductus.FluentDocker.Services; using Ductus.FluentDocker.Services.Extensions; @@ -19,8 +21,8 @@ public class DockerHelper protected Int32 TransactionProcessorPort; protected Int32 EventStorePort; - protected IContainerService EstateManagementContainer; - protected IContainerService TransactionProcessorContainer; + public IContainerService EstateManagementContainer; + public IContainerService TransactionProcessorContainer; protected IContainerService EventStoreContainer; public IEstateClient EstateClient; @@ -81,14 +83,13 @@ public async Task StartContainersForScenarioRun(String scenarioName) this.EstateManagementPort = this.EstateManagementContainer.ToHostExposedEndpoint("5000/tcp").Port; this.TransactionProcessorPort = this.TransactionProcessorContainer.ToHostExposedEndpoint("5002/tcp").Port; this.EventStorePort = this.EventStoreContainer.ToHostExposedEndpoint("2113/tcp").Port; - + // Setup the base address resolver Func estateManagementBaseAddressResolver = api => $"http://127.0.0.1:{this.EstateManagementPort}"; Func transactionProcessorBaseAddressResolver = api => $"http://127.0.0.1:{this.TransactionProcessorPort}"; - HttpClient httpClient = new HttpClient(); - this.EstateClient = new EstateClient(estateManagementBaseAddressResolver, httpClient); - this.TransactionProcessorClient = new TransactionProcessorClient(transactionProcessorBaseAddressResolver, httpClient); + this.EstateClient = new EstateClient(estateManagementBaseAddressResolver, new HttpClient()); + this.TransactionProcessorClient = new TransactionProcessorClient(transactionProcessorBaseAddressResolver, new HttpClient()); // TODO: Use this to talk to txn processor until we have a client //this.HttpClient = new HttpClient(); @@ -138,7 +139,8 @@ private void SetupEstateManagementContainer(String traceFolder) this.EstateManagementContainer = new Builder() .UseContainer() .WithName(this.EstateManagementContainerName) - .WithEnvironment(this.EventStoreConnectionString) //, + .WithEnvironment(this.EventStoreConnectionString, + "urls=http://*:5000") //, //"AppSettings:MigrateDatabase=true", //"EventStoreSettings:START_PROJECTIONS=true", //"EventStoreSettings:ContinuousProjectionsFolder=/app/projections/continuous") diff --git a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs index 93322f03..ff208e86 100644 --- a/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs +++ b/TransactionProcessor.IntegrationTests/Common/GenericSteps.cs @@ -4,8 +4,14 @@ namespace TransactionProcessor.IntegrationTests.Common { + using System.Threading; using System.Threading.Tasks; + using Ductus.FluentDocker.Executors; + using Ductus.FluentDocker.Extensions; + using Ductus.FluentDocker.Services; + using Ductus.FluentDocker.Services.Extensions; using TechTalk.SpecFlow; + using TechTalk.SpecFlow.Plugins; [Binding] [Scope(Tag = "base")] @@ -21,18 +27,46 @@ public GenericSteps(ScenarioContext scenarioContext, this.ScenarioContext = scenarioContext; this.TestingContext = testingContext; } - - [BeforeScenario()] + + [BeforeScenario] public async Task StartSystem() { String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", ""); this.TestingContext.DockerHelper = new DockerHelper(); await this.TestingContext.DockerHelper.StartContainersForScenarioRun(scenarioName).ConfigureAwait(false); + Thread.Sleep(20000); } - [AfterScenario()] + [AfterScenario] public async Task StopSystem() { + if (this.ScenarioContext.TestError != null) + { + Exception currentEx = this.ScenarioContext.TestError; + Console.Out.WriteLine(currentEx.Message); + while (currentEx.InnerException != null) + { + currentEx = currentEx.InnerException; + Console.Out.WriteLine(currentEx.Message); + } + + // The test has failed, grab the logs from all the containers + List containers = new List(); + containers.Add(this.TestingContext.DockerHelper.EstateManagementContainer); + containers.Add(this.TestingContext.DockerHelper.TransactionProcessorContainer); + + foreach (IContainerService containerService in containers) + { + ConsoleStream logStream = containerService.Logs(); + IList logData = logStream.ReadToEnd(); + + foreach (String s in logData) + { + Console.Out.WriteLine(s); + } + } + } + await this.TestingContext.DockerHelper.StopContainersForScenarioRun().ConfigureAwait(false); } }