From 88a1d051a1467167d06c9f886e9297bba6f71db0 Mon Sep 17 00:00:00 2001 From: amihaiemil Date: Sat, 3 Nov 2018 12:41:26 +0200 Subject: [PATCH] Docker.httpClient() + unit tests --- .../java/com/amihaiemil/docker/Docker.java | 17 ++++++++++++++++ .../java/com/amihaiemil/docker/RtDocker.java | 5 +++++ .../docker/LocalDockerTestCase.java | 18 +++++++++++++++++ .../docker/RemoteDockerTestCase.java | 20 +++++++++++++++++++ 4 files changed, 60 insertions(+) diff --git a/src/main/java/com/amihaiemil/docker/Docker.java b/src/main/java/com/amihaiemil/docker/Docker.java index 3ee50a9f..0f88a6dc 100644 --- a/src/main/java/com/amihaiemil/docker/Docker.java +++ b/src/main/java/com/amihaiemil/docker/Docker.java @@ -25,6 +25,8 @@ */ package com.amihaiemil.docker; +import org.apache.http.client.HttpClient; + import java.io.IOException; /** @@ -79,4 +81,19 @@ public interface Docker { * @return Swarm. */ Swarm swarm(); + + /** + * The underlying, immutable, Apache HttpClient.

+ * + * Use this method to fetch the underlying HttpClient and perform your own + * HTTP requests, in case the API is missing the desired method.

+ * + * Usage in any other scenario is discouraged. Try to find the desired + * method before using this. Also, if the method is missing, open an + * Issue at https://www.github.com/amihaiemil/docker-java-api, maybe + * it can be implemented and released quickly. + * + * @return The underlying HttpClient. + */ + HttpClient httpClient(); } diff --git a/src/main/java/com/amihaiemil/docker/RtDocker.java b/src/main/java/com/amihaiemil/docker/RtDocker.java index 8c009f1e..2484f3c8 100644 --- a/src/main/java/com/amihaiemil/docker/RtDocker.java +++ b/src/main/java/com/amihaiemil/docker/RtDocker.java @@ -118,4 +118,9 @@ public final Swarm swarm() { this ); } + + @Override + public HttpClient httpClient() { + return this.client; + } } diff --git a/src/test/java/com/amihaiemil/docker/LocalDockerTestCase.java b/src/test/java/com/amihaiemil/docker/LocalDockerTestCase.java index 3d387708..99c64e4a 100644 --- a/src/test/java/com/amihaiemil/docker/LocalDockerTestCase.java +++ b/src/test/java/com/amihaiemil/docker/LocalDockerTestCase.java @@ -27,6 +27,7 @@ import com.amihaiemil.docker.mock.AssertRequest; import com.amihaiemil.docker.mock.Response; +import org.apache.http.client.HttpClient; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.Test; @@ -126,4 +127,21 @@ public void returnsImages() { Matchers.notNullValue() ); } + + /** + * LocalDocker can return its HttpClient. + */ + @Test + public void returnsHttpClient() { + MatcherAssert.assertThat( + new LocalDocker( + new File("/var/run/docker.sock") + ).httpClient(), + Matchers.allOf( + Matchers.notNullValue(), + Matchers.instanceOf(HttpClient.class), + Matchers.instanceOf(UnixHttpClient.class) + ) + ); + } } diff --git a/src/test/java/com/amihaiemil/docker/RemoteDockerTestCase.java b/src/test/java/com/amihaiemil/docker/RemoteDockerTestCase.java index 98bc4e3c..ef65ae24 100644 --- a/src/test/java/com/amihaiemil/docker/RemoteDockerTestCase.java +++ b/src/test/java/com/amihaiemil/docker/RemoteDockerTestCase.java @@ -27,6 +27,7 @@ import com.amihaiemil.docker.mock.AssertRequest; import com.amihaiemil.docker.mock.Response; + import java.net.URI; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; @@ -121,4 +122,23 @@ public void returnsImages() { Matchers.notNullValue() ); } + + /** + * LocalDocker can return its HttpClient. + */ + @Test + public void returnsHttpClient() { + final HttpClient client = Mockito.mock(HttpClient.class); + MatcherAssert.assertThat( + new RemoteDocker( + client, + URI.create("http://localhost") + ).httpClient(), + Matchers.allOf( + Matchers.notNullValue(), + Matchers.instanceOf(HttpClient.class), + Matchers.sameInstance(client) + ) + ); + } }