From 23600a67a2d1700050353592be9d1e591e55d272 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Thu, 15 Oct 2026 18:41:16 +0100 Subject: [PATCH 1/2] allow using wsl for integration tests --- .../TestContainers/BaseDockerHelper.cs | 3 +- .../TestContainers/Extensions.cs | 42 +++++++++++++++---- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs b/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs index c230bb4..a1dc839 100644 --- a/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs +++ b/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs @@ -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); Int32? hostPort = this.GetHostPort(ContainerType.SecurityService); if (hostPort is null || hostPort <= 0) diff --git a/Shared.IntegrationTesting/TestContainers/Extensions.cs b/Shared.IntegrationTesting/TestContainers/Extensions.cs index 6b4eaf0..dd490fa 100644 --- a/Shared.IntegrationTesting/TestContainers/Extensions.cs +++ b/Shared.IntegrationTesting/TestContainers/Extensions.cs @@ -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) { - 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); } } From e584f9fadc5ceac7dd0d23e937b6c1a64f7bf960 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Thu, 15 Oct 2026 18:48:12 +0100 Subject: [PATCH 2/2] fix pr comment --- Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs b/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs index a1dc839..8a900d2 100644 --- a/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs +++ b/Shared.IntegrationTesting/TestContainers/BaseDockerHelper.cs @@ -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; }