Skip to content

Commit a180a01

Browse files
authored
Add optional limit to searchimagescmd (#1332)
* added limit to SeachImagesCmd * formatting fixes * add limit only if set as per PR comments * removed empty line as per pr comment
1 parent c3d03d6 commit a180a01

File tree

4 files changed

+62
-5
lines changed

4 files changed

+62
-5
lines changed

docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ public interface SearchImagesCmd extends SyncDockerCmd<List<SearchItem>> {
1818

1919
@CheckForNull
2020
String getTerm();
21+
Integer getLimit();
2122

2223
SearchImagesCmd withTerm(@Nonnull String term);
24+
SearchImagesCmd withLimit(@Nonnull Integer limit);
2325

2426
interface Exec extends DockerCmdSyncExec<SearchImagesCmd, List<SearchItem>> {
2527
}

docker-java-core/src/main/java/com/github/dockerjava/core/command/SearchImagesCmdImpl.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.github.dockerjava.core.command;
22

3+
import static com.google.common.base.Preconditions.checkArgument;
34
import static com.google.common.base.Preconditions.checkNotNull;
45

56
import java.util.List;
67

78
import com.github.dockerjava.api.command.SearchImagesCmd;
89
import com.github.dockerjava.api.model.SearchItem;
910

11+
import javax.annotation.Nonnull;
12+
1013
/**
1114
* Search images
1215
*
@@ -16,7 +19,11 @@
1619
*/
1720
public class SearchImagesCmdImpl extends AbstrDockerCmd<SearchImagesCmd, List<SearchItem>> implements SearchImagesCmd {
1821

22+
private static final int MIN_LIMIT = 1;
23+
private static final int MAX_LIMIT = 100;
24+
1925
private String term;
26+
private Integer limit;
2027

2128
public SearchImagesCmdImpl(SearchImagesCmd.Exec exec, String term) {
2229
super(exec);
@@ -35,4 +42,17 @@ public SearchImagesCmd withTerm(String term) {
3542
return this;
3643
}
3744

45+
@Override
46+
public Integer getLimit() {
47+
return limit;
48+
}
49+
50+
@Override
51+
public SearchImagesCmd withLimit(@Nonnull Integer limit) {
52+
String errorMessage = String.format("Limit %s is outside the range of [%s, %s]", limit, MIN_LIMIT, MAX_LIMIT);
53+
checkArgument(limit <= MAX_LIMIT, errorMessage);
54+
checkArgument(limit >= MIN_LIMIT, errorMessage);
55+
this.limit = limit;
56+
return this;
57+
}
3858
}

docker-java-core/src/main/java/com/github/dockerjava/core/exec/SearchImagesCmdExec.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ public SearchImagesCmdExec(WebTarget baseResource, DockerClientConfig dockerClie
2323

2424
@Override
2525
protected List<SearchItem> execute(SearchImagesCmd command) {
26-
WebTarget webResource = getBaseResource().path("/images/search").queryParam("term", command.getTerm());
26+
WebTarget webResource = getBaseResource().path("/images/search")
27+
.queryParam("term", command.getTerm());
28+
29+
if (command.getLimit() != null) {
30+
webResource = webResource.queryParam("limit", command.getLimit());
31+
}
2732

2833
LOGGER.trace("GET: {}", webResource);
2934
return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference<List<SearchItem>>() {
3035
});
3136
}
32-
3337
}

docker-java/src/test/java/com/github/dockerjava/cmd/SearchImagesCmdIT.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111

1212
import static ch.lambdaj.Lambda.filter;
1313
import static org.hamcrest.MatcherAssert.assertThat;
14-
import static org.hamcrest.Matchers.equalTo;
15-
import static org.hamcrest.Matchers.hasItem;
16-
import static org.hamcrest.Matchers.is;
14+
import static org.hamcrest.Matchers.*;
1715
import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField;
1816

1917
public class SearchImagesCmdIT extends CmdIT {
@@ -30,4 +28,37 @@ public void searchImages() throws DockerException {
3028
assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1));
3129
}
3230

31+
@Test(expected = IllegalArgumentException.class)
32+
public void searchImagesWithInvalidMinimumLimit() throws DockerException {
33+
dockerRule.getClient().searchImagesCmd("busybox").withLimit(0).exec();
34+
}
35+
36+
@Test(expected = IllegalArgumentException.class)
37+
public void searchImagesWithInvalidMaximumLimit() throws DockerException {
38+
dockerRule.getClient().searchImagesCmd("busybox").withLimit(101).exec();
39+
}
40+
41+
@Test
42+
public void searchImagesWithValidMinimumLimit() throws DockerException {
43+
List<SearchItem> dockerSearch = dockerRule.getClient().searchImagesCmd("busybox").withLimit(1).exec();
44+
LOG.info("Search returned {}", dockerSearch.toString());
45+
46+
Matcher matcher = hasItem(hasField("name", equalTo("busybox")));
47+
assertThat(dockerSearch, matcher);
48+
49+
assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1));
50+
51+
assertThat(dockerSearch.size(), equalTo(1));
52+
}
53+
54+
@Test
55+
public void searchImagesWithValidMaximumLimit() throws DockerException {
56+
List<SearchItem> dockerSearch = dockerRule.getClient().searchImagesCmd("busybox").withLimit(1).exec();
57+
LOG.info("Search returned {}", dockerSearch.toString());
58+
59+
Matcher matcher = hasItem(hasField("name", equalTo("busybox")));
60+
assertThat(dockerSearch, matcher);
61+
62+
assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1));
63+
}
3364
}

0 commit comments

Comments
 (0)