From d216ea50723a4aaa00db7b76ac9f62ec5770c5ba Mon Sep 17 00:00:00 2001 From: amihaiemil Date: Tue, 23 Oct 2018 14:42:13 +0300 Subject: [PATCH] Containers.all() + unit test --- .../com/amihaiemil/docker/Containers.java | 8 ++++ .../com/amihaiemil/docker/RtContainers.java | 18 ++++++- .../docker/RtContainersTestCase.java | 47 ++++++++++++++++++- 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/amihaiemil/docker/Containers.java b/src/main/java/com/amihaiemil/docker/Containers.java index 03696875..dbb26a08 100644 --- a/src/main/java/com/amihaiemil/docker/Containers.java +++ b/src/main/java/com/amihaiemil/docker/Containers.java @@ -27,6 +27,7 @@ import javax.json.JsonObject; import java.io.IOException; +import java.util.Iterator; /** * Containers API. @@ -72,6 +73,13 @@ Container create( */ Container create(final JsonObject container) throws IOException; + /** + * Return all the Containers, not only the running ones (simply iterating + * over this Containers instance will fetch only the running ones). + * @return Iterator over all the containers. + */ + Iterator all(); + /** * Return the Docker engine where these Containers came from. * @return Docker. diff --git a/src/main/java/com/amihaiemil/docker/RtContainers.java b/src/main/java/com/amihaiemil/docker/RtContainers.java index 43d14630..f3b2fb1c 100644 --- a/src/main/java/com/amihaiemil/docker/RtContainers.java +++ b/src/main/java/com/amihaiemil/docker/RtContainers.java @@ -139,12 +139,28 @@ public Container create( } } + @Override + public Iterator all() { + return new ResourcesIterator<>( + this.client, + new HttpGet(this.baseUri.toString().concat("/json?all=true")), + json -> new RtContainer( + json, + this.client, + URI.create( + this.baseUri.toString() + "/" + json.getString("Id") + ), + this.docker + ) + ); + } + @Override public Iterator iterator() { return new ResourcesIterator<>( this.client, new HttpGet(this.baseUri.toString().concat("/json")), - json-> new RtContainer( + json -> new RtContainer( json, this.client, URI.create( diff --git a/src/test/java/com/amihaiemil/docker/RtContainersTestCase.java b/src/test/java/com/amihaiemil/docker/RtContainersTestCase.java index 39703f8f..90596199 100644 --- a/src/test/java/com/amihaiemil/docker/RtContainersTestCase.java +++ b/src/test/java/com/amihaiemil/docker/RtContainersTestCase.java @@ -76,7 +76,7 @@ public void returnsDocker() { * @throws Exception If an error occurs. */ @Test - public void iteratesContainers() throws Exception { + public void returnsAllContainers() throws Exception { final AtomicInteger count = new AtomicInteger(); new RtContainers( new AssertRequest( @@ -90,8 +90,51 @@ public void iteratesContainers() throws Exception { Json.createObjectBuilder() .add("Id", "sha256:3e314f95dcace0f5e") ).build().toString() + ), + new Condition( + "Resource path must be /json", + req -> req.getRequestLine().getUri().endsWith( + "/json?all=true" + ) ) - ), URI.create("http://localhost"), Mockito.mock(Docker.class) + ), + URI.create("http://localhost/containers/"), + Mockito.mock(Docker.class) + ).all().forEachRemaining(container -> count.incrementAndGet()); + MatcherAssert.assertThat( + count.get(), + Matchers.is(2) + ); + } + + /** + * Must return the same number of containers as there are elements in the + * json array returned by the service. + * @throws Exception If an error occurs. + */ + @Test + public void iteratesRunningContainers() throws Exception { + final AtomicInteger count = new AtomicInteger(); + new RtContainers( + new AssertRequest( + new Response( + HttpStatus.SC_OK, + Json.createArrayBuilder() + .add( + Json.createObjectBuilder() + .add("Id", "sha256:e216a057b1cb1efc1") + ).add( + Json.createObjectBuilder() + .add("Id", "sha256:3e314f95dcace0f5e") + ).build().toString() + ), + new Condition( + "Resource path must be /json", + req -> req.getRequestLine().getUri().endsWith("/json") + ) + ), + URI.create("http://localhost/containers/json"), + Mockito.mock(Docker.class) ).forEach(container -> count.incrementAndGet()); MatcherAssert.assertThat( count.get(),