Skip to content

Commit eb6a2e2

Browse files
committed
Merge branch '__rultor'
2 parents 5b175e7 + 386096f commit eb6a2e2

File tree

2 files changed

+74
-12
lines changed

2 files changed

+74
-12
lines changed

src/main/java/com/amihaiemil/docker/ListedNetworks.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,20 @@
3131
import java.util.Map;
3232

3333
import org.apache.http.client.HttpClient;
34+
import org.apache.http.client.methods.HttpGet;
3435

3536
/**
3637
* Listed networks.
3738
* @author Boris Kuzmic ([email protected])
3839
* @since 0.0.7
39-
* @todo #226:30min Implement ListedNetworks iterator with filtering using Map.
40-
* Then remove Ignore annotations from ListedNetworkTestCase methods.
41-
* See ListedImages or ListedVolumes as examples.
4240
*/
4341
final class ListedNetworks extends RtNetworks {
4442

43+
/**
44+
* Network filters.
45+
*/
46+
private final Map<String, Iterable<String>> filters;
47+
4548
/**
4649
* Ctor.
4750
*
@@ -65,15 +68,30 @@ final class ListedNetworks extends RtNetworks {
6568
ListedNetworks(final HttpClient client, final URI uri, final Docker dkr,
6669
final Map<String, Iterable<String>> filters) {
6770
super(client, uri, dkr);
71+
this.filters = filters;
6872
}
6973

7074
@Override
7175
public Iterator<Network> iterator() {
72-
throw new UnsupportedOperationException(
73-
String.join(" ",
74-
"ListedNetworks.iterator() is not yet implemented.",
75-
"If you can contribute please",
76-
"do it here: https://www.github.com/amihaiemil/docker-java-api"
76+
final UncheckedUriBuilder uri = new UncheckedUriBuilder(
77+
super.baseUri().toString()
78+
).addFilters(this.filters);
79+
80+
return new ResourcesIterator<>(
81+
super.client(),
82+
new HttpGet(
83+
uri.build()
84+
),
85+
network -> new RtNetwork(
86+
network,
87+
super.client(),
88+
URI.create(
89+
String.format("%s/%s",
90+
super.baseUri().toString(),
91+
network.getString("Id")
92+
)
93+
),
94+
super.docker()
7795
)
7896
);
7997
}

src/test/java/com/amihaiemil/docker/ListedNetworksTestCase.java

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@
2828
import com.amihaiemil.docker.mock.AssertRequest;
2929
import com.amihaiemil.docker.mock.Condition;
3030
import com.amihaiemil.docker.mock.Response;
31-
3231
import java.io.IOException;
3332
import java.net.URI;
3433
import java.util.Arrays;
3534
import java.util.HashMap;
3635
import java.util.List;
36+
import java.util.Iterator;
3737
import java.util.Map;
3838
import org.apache.http.HttpStatus;
3939
import org.apache.http.NameValuePair;
4040
import org.hamcrest.MatcherAssert;
41+
import org.hamcrest.collection.IsIterableWithSize;
4142
import org.hamcrest.core.IsEqual;
42-
import org.junit.Ignore;
4343
import org.junit.Test;
4444
import org.mockito.Mockito;
4545

@@ -60,7 +60,6 @@ public final class ListedNetworksTestCase {
6060
* @throws IOException if something goes wrong
6161
*/
6262
@Test
63-
@Ignore
6463
public void filterResults() throws IOException {
6564
final Map<String, Iterable<String>> filters = new HashMap<>();
6665
filters.put(
@@ -96,8 +95,53 @@ public void filterResults() throws IOException {
9695
URI.create("http://localhost/networks/id1"),
9796
DOCKER,
9897
filters
99-
).iterator().next().inspect().getString("id"),
98+
).iterator().next().getString("Id"),
10099
new IsEqual<>("id1")
101100
);
102101
}
102+
103+
/**
104+
* {@link ListedNetworks} can iterate over them without
105+
* filters.
106+
*/
107+
@Test
108+
public void iterateAll() {
109+
final Networks all = new ListedNetworks(
110+
new AssertRequest(
111+
new Response(
112+
HttpStatus.SC_OK,
113+
"[{\"Id\": \"abc1\"}, {\"Id\":\"def2\"}]"
114+
),
115+
new Condition(
116+
"iterate() must send a GET request",
117+
req -> "GET".equals(req.getRequestLine().getMethod())
118+
),
119+
new Condition(
120+
"iterate() resource URL must be '/networks'",
121+
req -> req.getRequestLine()
122+
.getUri().endsWith("/networks")
123+
)
124+
),
125+
URI.create("http://localhost/networks"),
126+
Mockito.mock(Docker.class)
127+
);
128+
MatcherAssert.assertThat(
129+
"There should be 2 networks in the list",
130+
all,
131+
new IsIterableWithSize<>(
132+
new IsEqual<>(2)
133+
)
134+
);
135+
final Iterator<Network> itr = all.iterator();
136+
MatcherAssert.assertThat(
137+
"Id should match abc1",
138+
itr.next().getString("Id"),
139+
new IsEqual<>("abc1")
140+
);
141+
MatcherAssert.assertThat(
142+
"Name should match def2",
143+
itr.next().getString("Id"),
144+
new IsEqual<>("def2")
145+
);
146+
}
103147
}

0 commit comments

Comments
 (0)