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
5 changes: 3 additions & 2 deletions Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ public virtual ContainerBuilder SetupFileProcessorContainer(){

String containerFolder = "/home/txnproc/bulkfiles";
Directory.CreateDirectory(uploadFolder);
fileProcessorContainer.WithBindMount(uploadFolder, containerFolder, AccessMode.ReadWrite);
fileProcessorContainer.MountHostFolder(uploadFolder, containerFolder);
return fileProcessorContainer;
}

Expand Down Expand Up @@ -547,7 +547,8 @@ public virtual ContainerBuilder SetupSecurityServiceContainer()
ContainerBuilder securityServiceContainer = new ContainerBuilder(imageDetailsResult.Data.imageName)
.WithName(this.SecurityServiceContainerName)
.WithEnvironment(environmentVariables)
.WithBindMount(this.IntegrationTestCertificate.CertificateDirectory, this.IntegrationTestCertificate.ContainerCertificateDirectory, AccessMode.ReadOnly);
.MountHostFolder(this.HostTraceFolder)
.MountHostFolder(this.IntegrationTestCertificate.CertificateDirectory, this.IntegrationTestCertificate.ContainerCertificateDirectory);
Comment thread
StuartFerguson marked this conversation as resolved.
Resolved

Int32? hostPort = this.GetHostPort(ContainerType.SecurityService);
if (hostPort is null || hostPort <= 0)
Expand Down
42 changes: 34 additions & 8 deletions Shared.IntegrationTesting/TestContainers/Extensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,49 @@
namespace Shared.IntegrationTesting.TestContainers;

using System;
using System.IO;

public static class Extensions
{
public static ContainerBuilder MountHostFolder(this ContainerBuilder containerBuilder,
String hostTraceFolder,
String containerPath = null)
public static ContainerBuilder MountHostFolder(this ContainerBuilder containerBuilder, string? hostTraceFolder, string? containerPath = null)
{
if (containerPath == null)
containerPath ??= "/home/txnproc/trace";

if (string.IsNullOrWhiteSpace(hostTraceFolder))
{
return containerBuilder;
}

if (!containerPath.StartsWith('/') || containerPath.Contains('\\'))
{
containerPath = "/home/txnproc/trace";
throw new ArgumentException("Container path must be an absolute Linux path.",nameof(containerPath));
}

if (!String.IsNullOrEmpty(hostTraceFolder))
var hostPath = Path.GetFullPath(hostTraceFolder);
Directory.CreateDirectory(hostPath);

var useWslPaths = string.Equals(
Environment.GetEnvironmentVariable("TEST_DOCKER_WSL_PATHS"),
"true",
StringComparison.OrdinalIgnoreCase);

if (OperatingSystem.IsWindows() && useWslPaths)
Comment thread
StuartFerguson marked this conversation as resolved.
Resolved
{
containerBuilder = containerBuilder.WithBindMount(hostTraceFolder, containerPath, AccessMode.ReadWrite);
if (hostPath.Length < 3 ||
!char.IsAsciiLetter(hostPath[0]) ||
hostPath[1] != ':')
{
throw new ArgumentException(
"WSL conversion requires a Windows drive path, e.g. C:\\trace.",
nameof(hostTraceFolder));
}

var drive = char.ToLowerInvariant(hostPath[0]);
var relativePath = hostPath[3..].Replace('\\', '/');

hostPath = $"/mnt/{drive}/{relativePath}";
}

return containerBuilder;
return containerBuilder.WithBindMount(hostPath,containerPath,AccessMode.ReadWrite);
}
}
Loading