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;