From 4a7c19bed1c2105546cb3c3bd243040da15b0fc7 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:39:41 +0200 Subject: [PATCH] chore: Add HTTP message handler --- src/DockerEngine/DockerEngine.csproj | 8 +++++++ tests/DockerEngine.Tests/DockerClientTest.cs | 6 ++++- .../HttpMessageHandlerFactory.cs | 22 +++++++++++++++++++ .../NamedPipeMessageHandler.cs | 11 ++++++++++ .../UnixSocketMessageHandler.cs | 11 ++++++++++ tests/DockerEngine.Tests/Usings.cs | 2 ++ 6 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 tests/DockerEngine.Tests/HttpMessageHandlerFactory.cs create mode 100644 tests/DockerEngine.Tests/NamedPipeMessageHandler.cs create mode 100644 tests/DockerEngine.Tests/UnixSocketMessageHandler.cs diff --git a/src/DockerEngine/DockerEngine.csproj b/src/DockerEngine/DockerEngine.csproj index b557c3d24..36ae4611c 100644 --- a/src/DockerEngine/DockerEngine.csproj +++ b/src/DockerEngine/DockerEngine.csproj @@ -2,6 +2,14 @@ net6.0 latest + $(Version)+v1.43 + DockerEngine + + + + + + api;client;docker;dotnet diff --git a/tests/DockerEngine.Tests/DockerClientTest.cs b/tests/DockerEngine.Tests/DockerClientTest.cs index 30ed9b1cb..301a6f46b 100644 --- a/tests/DockerEngine.Tests/DockerClientTest.cs +++ b/tests/DockerEngine.Tests/DockerClientTest.cs @@ -17,11 +17,13 @@ public sealed class DockerClientTest : IAsyncLifetime public System.Threading.Tasks.Task InitializeAsync() { + return System.Threading.Tasks.Task.CompletedTask; return _dockerContainer.StartAsync(); } public System.Threading.Tasks.Task DisposeAsync() { + return System.Threading.Tasks.Task.CompletedTask; return _dockerContainer.DisposeAsync().AsTask(); } @@ -60,7 +62,9 @@ public async System.Threading.Tasks.Task CreatesDockerClient(string endpoint) // TODO: Fix the '$endpoint' scheme is not supported. // Given - var dockerClient = new DockerClient(endpoint, new HttpClient()); + using var httpClient = new HttpClient(HttpMessageHandlerFactory.GetHttpMessageHandler(new Uri(endpoint))); + + var dockerClient = new DockerClient(endpoint, httpClient); // When var systemInfo = await dockerClient.SystemInfoAsync() diff --git a/tests/DockerEngine.Tests/HttpMessageHandlerFactory.cs b/tests/DockerEngine.Tests/HttpMessageHandlerFactory.cs new file mode 100644 index 000000000..0c8cc95fe --- /dev/null +++ b/tests/DockerEngine.Tests/HttpMessageHandlerFactory.cs @@ -0,0 +1,22 @@ +namespace DockerEngine; + +internal static class HttpMessageHandlerFactory +{ + public static HttpMessageHandler GetHttpMessageHandler(Uri dockerEndpoint) + { + switch (dockerEndpoint.Scheme) + { + case "http": + case "https": + return new HttpClientHandler(); + case "tcp": + return new HttpClientHandler(); + case "npipe": + return new NamedPipeMessageHandler(); + case "unix": + return new UnixSocketMessageHandler(); + default: + throw new InvalidOperationException($"The Docker scheme {dockerEndpoint.Scheme} is not supported."); + } + } +} \ No newline at end of file diff --git a/tests/DockerEngine.Tests/NamedPipeMessageHandler.cs b/tests/DockerEngine.Tests/NamedPipeMessageHandler.cs new file mode 100644 index 000000000..694905aa4 --- /dev/null +++ b/tests/DockerEngine.Tests/NamedPipeMessageHandler.cs @@ -0,0 +1,11 @@ +namespace DockerEngine; + +internal sealed class NamedPipeMessageHandler : HttpMessageHandler +{ + private const string NamedPipe = "npipe://./pipe/docker_engine"; + + protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/tests/DockerEngine.Tests/UnixSocketMessageHandler.cs b/tests/DockerEngine.Tests/UnixSocketMessageHandler.cs new file mode 100644 index 000000000..04c91c42d --- /dev/null +++ b/tests/DockerEngine.Tests/UnixSocketMessageHandler.cs @@ -0,0 +1,11 @@ +namespace DockerEngine; + +internal sealed class UnixSocketMessageHandler : HttpMessageHandler +{ + private const string UnixSocket = "unix:///var/run/docker.sock"; + + protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/tests/DockerEngine.Tests/Usings.cs b/tests/DockerEngine.Tests/Usings.cs index 2eb034e3f..cce9a902b 100644 --- a/tests/DockerEngine.Tests/Usings.cs +++ b/tests/DockerEngine.Tests/Usings.cs @@ -1,5 +1,7 @@ global using System; global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; global using DotNet.Testcontainers.Builders; global using DotNet.Testcontainers.Commons; global using DotNet.Testcontainers.Containers;