Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Shared" Version="0.0.4.1" />
<PackageReference Include="Shared.DomainDrivenDesign" Version="0.0.4.1" />
<PackageReference Include="Shared.EventStore" Version="0.0.4.1" />
<PackageReference Include="Shared" Version="0.0.5.1" />
<PackageReference Include="Shared.DomainDrivenDesign" Version="0.0.5.1" />
<PackageReference Include="Shared.EventStore" Version="0.0.5.1" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 3 additions & 1 deletion TransactionProcessor.Client/ITransactionProcessorClient.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
namespace TransactionProcessor.Client
{
using System;
using System.Threading;
using System.Threading.Tasks;
using DataTransferObjects;
Expand All @@ -14,7 +15,8 @@ public interface ITransactionProcessorClient
/// <param name="transactionRequest">The transaction request.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns></returns>
Task<SerialisedMessage> PerformTransaction(SerialisedMessage transactionRequest,
Task<SerialisedMessage> PerformTransaction(String accessToken,
SerialisedMessage transactionRequest,
CancellationToken cancellationToken);

#endregion
Expand Down
9 changes: 6 additions & 3 deletions TransactionProcessor.Client/TransactionProcessorClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -12,7 +13,7 @@
/// <summary>
///
/// </summary>
/// <seealso cref="ClientProxyBase.ClientProxyBase" />
/// <seealso cref="ClientProxyBase" />
/// <seealso cref="TransactionProcessor.Client.ITransactionProcessorClient" />
public class TransactionProcessorClient : ClientProxyBase, ITransactionProcessorClient
{
Expand Down Expand Up @@ -48,10 +49,12 @@ public TransactionProcessorClient(Func<String, String> baseAddressResolver,
/// <summary>
/// Performs the transaction.
/// </summary>
/// <param name="accessToken">The access token.</param>
/// <param name="transactionRequest">The transaction request.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns></returns>
public async Task<SerialisedMessage> PerformTransaction(SerialisedMessage transactionRequest,
public async Task<SerialisedMessage> PerformTransaction(String accessToken,
SerialisedMessage transactionRequest,
CancellationToken cancellationToken)
{
SerialisedMessage response = null;
Expand All @@ -65,7 +68,7 @@ public async Task<SerialisedMessage> PerformTransaction(SerialisedMessage transa
StringContent httpContent = new StringContent(requestSerialised, Encoding.UTF8, "application/json");

// Add the access token to the client headers
//this.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
this.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

// Make the Http Call here
HttpResponseMessage httpResponse = await this.HttpClient.PostAsync(requestUri, httpContent, cancellationToken);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,6 @@ public class LogonTransactionRequest : DataTransferObject
/// </value>
public String IMEINumber { get; set; }

/// <summary>
/// Gets or sets the merchant identifier.
/// </summary>
/// <value>
/// The merchant identifier.
/// </value>
public Guid MerchantId { get; set; }

/// <summary>
/// Gets or sets the estate identifier.
/// </summary>
/// <value>
/// The estate identifier.
/// </value>
public Guid EstateId { get; set; }

/// <summary>
/// Gets or sets the transaction date time.
/// </summary>
Expand Down
62 changes: 56 additions & 6 deletions TransactionProcessor.IntegrationTests/Common/DockerHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Client;
using Ductus.FluentDocker.Builders;
Expand All @@ -12,29 +13,41 @@
using Ductus.FluentDocker.Services;
using Ductus.FluentDocker.Services.Extensions;
using EstateManagement.Client;
using global::Shared.Logger;
using SecurityService.Client;

public class DockerHelper
{
private readonly NlogLogger Logger;

protected INetworkService TestNetwork;


public Int32 SecurityServicePort;
protected Int32 EstateManagementPort;
protected Int32 TransactionProcessorPort;
protected Int32 EventStorePort;

public IContainerService SecurityServiceContainer;
public IContainerService EstateManagementContainer;
public IContainerService TransactionProcessorContainer;
protected IContainerService EventStoreContainer;

public IEstateClient EstateClient;
public ITransactionProcessorClient TransactionProcessorClient;
//public HttpClient HttpClient;
public ISecurityServiceClient SecurityServiceClient;

protected String EventStoreConnectionString;

public String SecurityServiceContainerName;
protected String EstateManagementContainerName;
protected String TransactionProcessorContainerName;
protected String EventStoreContainerName;

public DockerHelper(NlogLogger logger)
{
this.Logger = logger;
}

private void SetupTestNetwork()
{
// Build a network
Expand Down Expand Up @@ -67,6 +80,7 @@ public async Task StartContainersForScenarioRun(String scenarioName)
this.TestId = testGuid;

// Setup the container names
this.SecurityServiceContainerName = $"securityservice{testGuid:N}";
this.EstateManagementContainerName = $"estate{testGuid:N}";
this.TransactionProcessorContainerName = $"txnprocessor{testGuid:N}";
this.EventStoreContainerName = $"eventstore{testGuid:N}";
Expand All @@ -75,6 +89,7 @@ public async Task StartContainersForScenarioRun(String scenarioName)
$"EventStoreSettings:ConnectionString=ConnectTo=tcp://admin:changeit@{this.EventStoreContainerName}:1113;VerboseLogging=true;";

this.SetupTestNetwork();
this.SetupSecurityServiceContainer(traceFolder);
this.SetupEventStoreContainer(traceFolder);
this.SetupEstateManagementContainer(traceFolder);
this.SetupTransactionProcessorContainer(traceFolder);
Expand All @@ -83,14 +98,17 @@ 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;
this.SecurityServicePort = this.SecurityServiceContainer.ToHostExposedEndpoint("5001/tcp").Port;

// Setup the base address resolver
Func<String, String> estateManagementBaseAddressResolver = api => $"http://127.0.0.1:{this.EstateManagementPort}";
Func<String, String> transactionProcessorBaseAddressResolver = api => $"http://127.0.0.1:{this.TransactionProcessorPort}";
Func<String, String> securityServiceBaseAddressResolver = api => $"http://127.0.0.1:{this.SecurityServicePort}";

this.EstateClient = new EstateClient(estateManagementBaseAddressResolver, new HttpClient());
this.TransactionProcessorClient = new TransactionProcessorClient(transactionProcessorBaseAddressResolver, new HttpClient());

HttpClient httpClient = new HttpClient();
this.EstateClient = new EstateClient(estateManagementBaseAddressResolver, httpClient);
this.TransactionProcessorClient = new TransactionProcessorClient(transactionProcessorBaseAddressResolver, httpClient);
this.SecurityServiceClient = new SecurityServiceClient(securityServiceBaseAddressResolver, httpClient);
// TODO: Use this to talk to txn processor until we have a client
//this.HttpClient = new HttpClient();
//this.HttpClient.BaseAddress = new Uri(transactionProcessorBaseAddressResolver(String.Empty));
Expand All @@ -100,6 +118,13 @@ public async Task StopContainersForScenarioRun()
{
try
{
if (this.SecurityServiceContainer != null)
{
this.SecurityServiceContainer.StopOnDispose = true;
this.SecurityServiceContainer.RemoveOnDispose = true;
this.SecurityServiceContainer.Dispose();
}

if (this.TransactionProcessorContainer != null)
{
this.TransactionProcessorContainer.StopOnDispose = true;
Expand Down Expand Up @@ -133,13 +158,36 @@ public async Task StopContainersForScenarioRun()
}
}

private void SetupSecurityServiceContainer(String traceFolder)
{
this.Logger.LogInformation("About to Start Security Container");

this.SecurityServiceContainer = new Builder().UseContainer().WithName(this.SecurityServiceContainerName)
.WithEnvironment($"ServiceOptions:PublicOrigin=http://{this.SecurityServiceContainerName}:5001",
$"ServiceOptions:IssuerUrl=http://{this.SecurityServiceContainerName}:5001",
"ASPNETCORE_ENVIRONMENT=IntegrationTest",
"urls=http://*:5001")
.WithCredential("https://www.docker.com", "stuartferguson", "Sc0tland")
.UseImage("stuartferguson/securityservice").ExposePort(5001).UseNetwork(new List<INetworkService>
{
this.TestNetwork
}.ToArray())
.Mount(traceFolder, "/home/txnproc/trace", MountType.ReadWrite).Build().Start().WaitForPort("5001/tcp", 30000);
Thread.Sleep(20000);

this.Logger.LogInformation("Security Service Container Started");

}

private void SetupEstateManagementContainer(String traceFolder)
{
// Management API Container
this.EstateManagementContainer = new Builder()
.UseContainer()
.WithName(this.EstateManagementContainerName)
.WithEnvironment(this.EventStoreConnectionString,
$"AppSettings:SecurityService=http://{this.SecurityServiceContainerName}:5001",
$"SecurityConfiguration:Authority=http://{this.SecurityServiceContainerName}:5001",
"urls=http://*:5000") //,
//"AppSettings:MigrateDatabase=true",
//"EventStoreSettings:START_PROJECTIONS=true",
Expand All @@ -159,7 +207,9 @@ private void SetupTransactionProcessorContainer(String traceFolder)
this.TransactionProcessorContainer = new Builder()
.UseContainer()
.WithName(this.TransactionProcessorContainerName)
.WithEnvironment(this.EventStoreConnectionString) //,
.WithEnvironment(this.EventStoreConnectionString,
$"AppSettings:SecurityService=http://{this.SecurityServiceContainerName}:5001",
$"SecurityConfiguration:Authority=http://{this.SecurityServiceContainerName}:5001") //,
//"AppSettings:MigrateDatabase=true",
//"EventStoreSettings:START_PROJECTIONS=true",
//"EventStoreSettings:ContinuousProjectionsFolder=/app/projections/continuous")
Expand Down
13 changes: 12 additions & 1 deletion TransactionProcessor.IntegrationTests/Common/GenericSteps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ namespace TransactionProcessor.IntegrationTests.Common
using Ductus.FluentDocker.Extensions;
using Ductus.FluentDocker.Services;
using Ductus.FluentDocker.Services.Extensions;
using global::Shared.Logger;
using NLog;
using TechTalk.SpecFlow;
using TechTalk.SpecFlow.Plugins;

Expand All @@ -31,9 +33,18 @@ public GenericSteps(ScenarioContext scenarioContext,
[BeforeScenario]
public async Task StartSystem()
{
// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
this.TestingContext.DockerHelper = new DockerHelper();
NlogLogger logger = new NlogLogger();
logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);

this.TestingContext.DockerHelper = new DockerHelper(logger);
this.TestingContext.Logger = logger;
this.TestingContext.Logger.LogInformation("About to Start Containers for Scenario Run");
await this.TestingContext.DockerHelper.StartContainersForScenarioRun(scenarioName).ConfigureAwait(false);
this.TestingContext.Logger.LogInformation("Containers for Scenario Run Started");

Thread.Sleep(20000);
}

Expand Down
Loading