From 97e9efdbe791cbac4746135dfc29364d2ef74713 Mon Sep 17 00:00:00 2001 From: jarebudev <23311805+jarebudev@users.noreply.github.com> Date: Wed, 26 Feb 2020 22:59:55 +0000 Subject: [PATCH 1/4] added limit to SeachImagesCmd --- .../api/command/SearchImagesCmd.java | 2 + .../core/command/SearchImagesCmdImpl.java | 21 +++++++++++ .../core/exec/SearchImagesCmdExec.java | 16 +++++++- .../dockerjava/cmd/SearchImagesCmdIT.java | 37 +++++++++++++++++-- 4 files changed, 72 insertions(+), 4 deletions(-) diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java index 2bc87cc73..8dc38ee3e 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java @@ -18,8 +18,10 @@ public interface SearchImagesCmd extends SyncDockerCmd> { @CheckForNull String getTerm(); + Integer getLimit(); SearchImagesCmd withTerm(@Nonnull String term); + SearchImagesCmd withLimit(@Nonnull Integer limit); interface Exec extends DockerCmdSyncExec> { } diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java b/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java index 342a7fbd2..ee43800f9 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java @@ -1,5 +1,6 @@ package com.github.dockerjava.core.command; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import java.util.List; @@ -7,6 +8,8 @@ import com.github.dockerjava.api.command.SearchImagesCmd; import com.github.dockerjava.api.model.SearchItem; +import javax.annotation.Nonnull; + /** * Search images * @@ -16,7 +19,11 @@ */ public class SearchImagesCmdImpl extends AbstrDockerCmd> implements SearchImagesCmd { + private static final int MIN_LIMIT = 1; + private static final int MAX_LIMIT = 100; + private String term; + private Integer limit; public SearchImagesCmdImpl(SearchImagesCmd.Exec exec, String term) { super(exec); @@ -35,4 +42,18 @@ public SearchImagesCmd withTerm(String term) { return this; } + @Override + public Integer getLimit() { + return limit; + } + + @Override + public SearchImagesCmd withLimit(@Nonnull Integer limit) { + String errorMessage = String.format("Limit %s is outside the range of [%s, %s]", limit, MIN_LIMIT, MAX_LIMIT); + checkArgument(limit <= MAX_LIMIT, errorMessage); + checkArgument(limit >= MIN_LIMIT, errorMessage); + this.limit = limit; + return this; + } + } diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java index 205128190..96aac1f2c 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java @@ -23,11 +23,25 @@ public SearchImagesCmdExec(WebTarget baseResource, DockerClientConfig dockerClie @Override protected List execute(SearchImagesCmd command) { - WebTarget webResource = getBaseResource().path("/images/search").queryParam("term", command.getTerm()); + WebTarget webResource = null; + + Integer limit = command.getLimit(); + if (limit == null) { + webResource = getBaseResource() + .path("/images/search") + .queryParam("term", command.getTerm()); + } else { + webResource = getBaseResource() + .path("/images/search") + .queryParam("term", command.getTerm()) + .queryParam("limit", command.getLimit()); + } LOGGER.trace("GET: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference>() { }); } + + } diff --git a/docker-java/src/test/java/com/github/dockerjava/cmd/SearchImagesCmdIT.java b/docker-java/src/test/java/com/github/dockerjava/cmd/SearchImagesCmdIT.java index 0dba9aefd..26dcebbeb 100644 --- a/docker-java/src/test/java/com/github/dockerjava/cmd/SearchImagesCmdIT.java +++ b/docker-java/src/test/java/com/github/dockerjava/cmd/SearchImagesCmdIT.java @@ -11,9 +11,7 @@ import static ch.lambdaj.Lambda.filter; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; public class SearchImagesCmdIT extends CmdIT { @@ -30,4 +28,37 @@ public void searchImages() throws DockerException { assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); } + @Test(expected = IllegalArgumentException.class) + public void searchImagesWithInvalidMinimumLimit() throws DockerException { + dockerRule.getClient().searchImagesCmd("busybox").withLimit(0).exec(); + } + + @Test(expected = IllegalArgumentException.class) + public void searchImagesWithInvalidMaximumLimit() throws DockerException { + dockerRule.getClient().searchImagesCmd("busybox").withLimit(101).exec(); + } + + @Test + public void searchImagesWithValidMinimumLimit() throws DockerException { + List dockerSearch = dockerRule.getClient().searchImagesCmd("busybox").withLimit(1).exec(); + LOG.info("Search returned {}", dockerSearch.toString()); + + Matcher matcher = hasItem(hasField("name", equalTo("busybox"))); + assertThat(dockerSearch, matcher); + + assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); + + assertThat(dockerSearch.size(), equalTo(1)); + } + + @Test + public void searchImagesWithValidMaximumLimit() throws DockerException { + List dockerSearch = dockerRule.getClient().searchImagesCmd("busybox").withLimit(1).exec(); + LOG.info("Search returned {}", dockerSearch.toString()); + + Matcher matcher = hasItem(hasField("name", equalTo("busybox"))); + assertThat(dockerSearch, matcher); + + assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); + } } From 1a8f3b03117e08eeb9a0ac740301511060689b61 Mon Sep 17 00:00:00 2001 From: jarebudev <23311805+jarebudev@users.noreply.github.com> Date: Wed, 26 Feb 2020 23:02:51 +0000 Subject: [PATCH 2/4] formatting fixes --- .../github/dockerjava/core/command/SearchImagesCmdImpl.java | 1 - .../com/github/dockerjava/core/exec/SearchImagesCmdExec.java | 3 --- 2 files changed, 4 deletions(-) diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java b/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java index ee43800f9..dab946b1c 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java @@ -55,5 +55,4 @@ public SearchImagesCmd withLimit(@Nonnull Integer limit) { this.limit = limit; return this; } - } diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java index 96aac1f2c..98933ce82 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java @@ -41,7 +41,4 @@ protected List execute(SearchImagesCmd command) { return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference>() { }); } - - - } From 24b8c579a3779af8352bfb831eae340e4753bdc4 Mon Sep 17 00:00:00 2001 From: jarebudev <23311805+jarebudev@users.noreply.github.com> Date: Sun, 8 Mar 2020 22:02:22 +0000 Subject: [PATCH 3/4] add limit only if set as per PR comments --- .../core/exec/SearchImagesCmdExec.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java index 98933ce82..a16375da2 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java @@ -23,18 +23,12 @@ public SearchImagesCmdExec(WebTarget baseResource, DockerClientConfig dockerClie @Override protected List execute(SearchImagesCmd command) { - WebTarget webResource = null; - - Integer limit = command.getLimit(); - if (limit == null) { - webResource = getBaseResource() - .path("/images/search") - .queryParam("term", command.getTerm()); - } else { - webResource = getBaseResource() - .path("/images/search") - .queryParam("term", command.getTerm()) - .queryParam("limit", command.getLimit()); + WebTarget webResource = getBaseResource().path("/images/search") + .queryParam("term", command.getTerm()); + + if (command.getLimit() != null) { + webResource = webResource.queryParam("limit", command.getLimit()); + } LOGGER.trace("GET: {}", webResource); From 3bc91824a8d697115ced507d1900d7709d82ae08 Mon Sep 17 00:00:00 2001 From: jarebudev <23311805+jarebudev@users.noreply.github.com> Date: Mon, 9 Mar 2020 22:10:56 +0000 Subject: [PATCH 4/4] removed empty line as per pr comment --- .../com/github/dockerjava/core/exec/SearchImagesCmdExec.java | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java index a16375da2..0e92c9f97 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java @@ -28,7 +28,6 @@ protected List execute(SearchImagesCmd command) { if (command.getLimit() != null) { webResource = webResource.queryParam("limit", command.getLimit()); - } LOGGER.trace("GET: {}", webResource);