X Tutup
Skip to content

Commit 80b88a1

Browse files
committed
list filtered images as described in the remote api docs
1 parent ffbbe3d commit 80b88a1

File tree

6 files changed

+81
-38
lines changed

6 files changed

+81
-38
lines changed

src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88
* List images
99
*
1010
* @param showAll - Show all images (by default filter out the intermediate images used to build)
11-
* @param filter - TODO: undocumented in docker remote api reference
11+
* @param filters - a json encoded value of the filters (a map[string][]string) to process on the images list.
1212
*/
1313
public interface ListImagesCmd extends DockerCmd<List<Image>> {
1414

15-
public String getFilter();
15+
public String getFilters();
1616

1717
public boolean hasShowAllEnabled();
1818

1919
public ListImagesCmd withShowAll(boolean showAll);
2020

21-
public ListImagesCmd withFilter(String filter);
22-
21+
public ListImagesCmd withFilters(String filters);
22+
2323
public static interface Exec extends DockerCmdExec<ListImagesCmd, List<Image>> {
2424
}
2525

src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@
1111
* List images
1212
*
1313
* @param showAll - Show all images (by default filter out the intermediate images used to build)
14-
* @param filter - TODO: undocumented in docker remote api reference
14+
* @param filters - a json encoded value of the filters (a map[string][]string) to process on the images list.
1515
*/
1616
public class ListImagesCmdImpl extends AbstrDockerCmd<ListImagesCmd, List<Image>> implements ListImagesCmd {
1717

18-
private String filter;
19-
18+
private String filters;
19+
2020
private boolean showAll = false;
21-
21+
2222
public ListImagesCmdImpl(ListImagesCmd.Exec exec) {
2323
super(exec);
2424
}
2525

2626
@Override
27-
public String getFilter() {
28-
return filter;
27+
public String getFilters() {
28+
return filters;
2929
}
3030

3131
@Override
@@ -40,17 +40,17 @@ public ListImagesCmd withShowAll(boolean showAll) {
4040
}
4141

4242
@Override
43-
public ListImagesCmd withFilter(String filter) {
44-
Preconditions.checkNotNull(filter, "filter was not specified");
45-
this.filter = filter;
43+
public ListImagesCmd withFilters(String filter) {
44+
Preconditions.checkNotNull(filter, "filters have not been specified");
45+
this.filters = filter;
4646
return this;
4747
}
4848

4949
@Override
5050
public String toString() {
5151
return new StringBuilder("images ")
5252
.append(showAll ? "--all=true" : "")
53-
.append(filter != null ? "--filter " + filter : "")
53+
.append(filters != null ? "--filter " + filters : "")
5454
.toString();
5555
}
5656
}

src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66
import javax.ws.rs.core.GenericType;
77
import javax.ws.rs.core.MediaType;
88

9+
import com.google.common.net.UrlEscapers;
910
import org.slf4j.Logger;
1011
import org.slf4j.LoggerFactory;
1112

1213
import com.github.dockerjava.api.command.ListImagesCmd;
1314
import com.github.dockerjava.api.model.Image;
1415

16+
import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;
17+
1518
public class ListImagesCmdExec extends AbstrDockerCmdExec<ListImagesCmd, List<Image>> implements ListImagesCmd.Exec {
16-
19+
1720
private static final Logger LOGGER = LoggerFactory.getLogger(ListImagesCmdExec.class);
18-
21+
1922
public ListImagesCmdExec(WebTarget baseResource) {
2023
super(baseResource);
2124
}
@@ -24,15 +27,17 @@ public ListImagesCmdExec(WebTarget baseResource) {
2427
protected List<Image> execute(ListImagesCmd command) {
2528
WebTarget webResource = getBaseResource()
2629
.path("/images/json")
27-
.queryParam("filter", command.getFilter())
30+
.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters()))
2831
.queryParam("all", command.hasShowAllEnabled() ? "1" : "0");
2932

3033
LOGGER.trace("GET: {}", webResource);
31-
32-
List<Image> images = webResource.request().accept(MediaType.APPLICATION_JSON).get(new GenericType<List<Image>>() {
33-
});
34+
35+
List<Image> images = webResource.request()
36+
.accept(MediaType.APPLICATION_JSON)
37+
.get(new GenericType<List<Image>>() {
38+
});
3439
LOGGER.trace("Response: {}", images);
35-
40+
3641
return images;
3742
}
3843

src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.net.ServerSocket;
2121

2222
public abstract class AbstractDockerClientTest extends Assert {
23-
23+
2424
public static final Logger LOG = LoggerFactory
2525
.getLogger(AbstractDockerClientTest.class);
2626
public static final String DOCKER_JAVA = "dockerjava";
@@ -39,8 +39,8 @@ public void beforeTest() {
3939
LOG.info("Pulling image 'busybox'");
4040
// need to block until image is pulled completely
4141
asString(dockerClient.pullImageCmd("busybox").withTag("latest").exec());
42-
43-
42+
43+
4444

4545
assertNotNull(dockerClient);
4646
LOG.info("======================= END OF BEFORETEST =======================\n\n");
@@ -75,7 +75,7 @@ public void afterMethod(ITestResult result) {
7575

7676
for (String container : dockerCmdExecFactory.getContainerNames()) {
7777
LOG.info("Cleaning up temporary container {}", container);
78-
78+
7979
try {
8080
dockerClient.removeContainerCmd(container).withForce().exec();
8181
} catch (DockerException ignore) {
@@ -90,17 +90,17 @@ public void afterMethod(ITestResult result) {
9090
} catch (DockerException ignore) {
9191
ignore.printStackTrace();
9292
}
93-
}
94-
93+
}
94+
9595
LOG.info(
9696
"################################## END OF {} ##################################\n",
9797
result.getName());
9898
}
9999

100100
protected String asString(InputStream response) {
101-
101+
102102
StringWriter logwriter = new StringWriter();
103-
103+
104104
try {
105105
LineIterator itr = IOUtils.lineIterator(
106106
response, "UTF-8");
@@ -110,20 +110,20 @@ protected String asString(InputStream response) {
110110
logwriter.write(line + (itr.hasNext() ? "\n" : ""));
111111
//LOG.info("line: "+line);
112112
}
113-
113+
114114
return logwriter.toString();
115115
} catch (IOException e) {
116116
throw new RuntimeException(e);
117117
} finally {
118118
IOUtils.closeQuietly(response);
119119
}
120120
}
121-
121+
122122
// UTIL
123123

124124
/**
125125
* Checks to see if a specific port is available.
126-
*
126+
*
127127
* @param port
128128
* the port to check for availability
129129
*/

src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.lang.reflect.Method;
77
import java.util.List;
88

9+
import com.github.dockerjava.api.command.CreateContainerResponse;
910
import org.testng.ITestResult;
1011
import org.testng.annotations.AfterMethod;
1112
import org.testng.annotations.AfterTest;
@@ -25,7 +26,7 @@ public class ListImagesCmdImplTest extends AbstractDockerClientTest {
2526
public void beforeTest() throws DockerException {
2627
super.beforeTest();
2728
}
28-
29+
2930
@AfterTest
3031
public void afterTest() {
3132
super.afterTest();
@@ -40,7 +41,7 @@ public void beforeMethod(Method method) {
4041
public void afterMethod(ITestResult result) {
4142
super.afterMethod(result);
4243
}
43-
44+
4445
@Test
4546
public void listImages() throws DockerException {
4647
List<Image> images = dockerClient.listImagesCmd().withShowAll(true).exec();
@@ -57,5 +58,42 @@ public void listImages() throws DockerException {
5758
assertThat(img.getRepoTags(), not(emptyArray()));
5859
}
5960

61+
@Test
62+
public void listDanglingImages() throws DockerException {
63+
String imageId = createDanglingImage();
64+
List<Image> images = dockerClient.listImagesCmd()
65+
.withFilters("{\"dangling\":[\"true\"]}")
66+
.withShowAll(true).exec();
67+
assertThat(images, notNullValue());
68+
LOG.info("Images List: {}", images);
69+
assertThat(images.size(), is(greaterThan(0)));
70+
boolean imageInFilteredList = isImageInFilteredList(images, imageId);
71+
assertTrue(imageInFilteredList);
72+
}
6073

74+
private boolean isImageInFilteredList(List<Image> images, String expectedImageId) {
75+
for (Image image : images) {
76+
if (expectedImageId.equals(image.getId())) {
77+
return true;
78+
}
79+
}
80+
return false;
81+
}
82+
83+
private String createDanglingImage() {
84+
CreateContainerResponse container = dockerClient
85+
.createContainerCmd("busybox").withCmd("sleep", "5").exec();
86+
LOG.info("Created container: {}", container.toString());
87+
assertThat(container.getId(), not(isEmptyString()));
88+
dockerClient.startContainerCmd(container.getId()).exec();
89+
90+
LOG.info("Committing container {}", container.toString());
91+
String imageId = dockerClient
92+
.commitCmd(container.getId()).exec();
93+
94+
dockerClient.stopContainerCmd(container.getId()).exec();
95+
dockerClient.killContainerCmd(container.getId()).exec();
96+
dockerClient.removeContainerCmd(container.getId()).exec();
97+
return imageId;
98+
}
6199
}

src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ public void removeImage() throws DockerException, InterruptedException {
5959
LOG.info("Created container: {}", container.toString());
6060
assertThat(container.getId(), not(isEmptyString()));
6161
dockerClient.startContainerCmd(container.getId()).exec();
62-
63-
LOG.info("Commiting container {}", container.toString());
62+
63+
LOG.info("Committing container {}", container.toString());
6464
String imageId = dockerClient
6565
.commitCmd(container.getId()).exec();
66-
66+
6767
dockerClient.stopContainerCmd(container.getId()).exec();
6868
dockerClient.killContainerCmd(container.getId()).exec();
6969
dockerClient.removeContainerCmd(container.getId()).exec();
@@ -72,7 +72,7 @@ public void removeImage() throws DockerException, InterruptedException {
7272
dockerClient.removeImageCmd(imageId).exec();
7373

7474
List<Container> containers = dockerClient.listContainersCmd().withShowAll(true).exec();
75-
75+
7676
Matcher matcher = not(hasItem(hasField("id", startsWith(imageId))));
7777
assertThat(containers, matcher);
7878
}

0 commit comments

Comments
 (0)
X Tutup