Skip to content

Commit 356d10d

Browse files
committed
Fix parsing of Links and Link
1 parent b9f2972 commit 356d10d

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

src/main/java/com/github/dockerjava/api/model/Link.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public String getAlias()
5353
/**
5454
* Parses a textual link specification (as used by the Docker CLI) to a {@link Link}.
5555
*
56-
* @param serialized the specification, e.g. <code>name:alias</code>
56+
* @param serialized the specification, e.g. <code>name:alias</code> or <code>/name1:/name2/alias</code>
5757
* @return a {@link Link} matching the specification
5858
* @throws IllegalArgumentException if the specification cannot be parsed
5959
*/
@@ -63,7 +63,9 @@ public static Link parse(final String serialized) throws IllegalArgumentExceptio
6363
final String[] parts = serialized.split(":");
6464
switch (parts.length) {
6565
case 2: {
66-
return new Link(parts[0], parts[1]);
66+
String[] nameSplit = parts[0].split("/");
67+
String[] aliasSplit = parts[1].split("/");
68+
return new Link(nameSplit[nameSplit.length - 1], aliasSplit[aliasSplit.length - 1]);
6769
}
6870
default: {
6971
throw new IllegalArgumentException();

src/main/java/com/github/dockerjava/api/model/Links.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ public Links deserialize(final JsonParser jsonParser, final DeserializationConte
6161
final List<Link> binds = new ArrayList<Link>();
6262
final ObjectCodec oc = jsonParser.getCodec();
6363
final JsonNode node = oc.readTree(jsonParser);
64-
for (final Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext();) {
64+
for (final Iterator<JsonNode> it = node.elements(); it.hasNext();) {
6565

66-
final Map.Entry<String, JsonNode> field = it.next();
67-
if (!field.getValue().equals(NullNode.getInstance())) {
68-
binds.add(Link.parse(field.getKey()));
66+
final JsonNode element = it.next();
67+
if (!element.equals(NullNode.getInstance())) {
68+
binds.add(Link.parse(element.asText()));
6969
}
7070
}
7171
return new Links(binds.toArray(new Link[0]));

src/test/java/com/github/dockerjava/api/model/LinkTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ public void parse() {
1212
assertEquals(link.getName(), "name");
1313
assertEquals(link.getAlias(), "alias");
1414
}
15+
16+
@Test
17+
public void parseWithContainerNames() {
18+
Link link = Link.parse("/name:/conatiner/alias");
19+
assertEquals(link.getName(), "name");
20+
assertEquals(link.getAlias(), "alias");
21+
}
1522

1623
@Test(expectedExceptions = IllegalArgumentException.class,
1724
expectedExceptionsMessageRegExp = "Error parsing Link 'nonsense'")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public void startContainerWithLinking() throws DockerException {
228228
assertThat(inspectContainerResponse2.getId(), not(isEmptyString()));
229229
assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue()));
230230
assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue()));
231-
assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new String[] {"/container1:/container2/container1Link"}));
231+
assertThat(inspectContainerResponse2.getHostConfig().getLinks().getLinks(), equalTo(new Link[] {new Link("container1","container1Link")}));
232232
assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId()));
233233
assertThat(inspectContainerResponse2.getName(), equalTo("/container2"));
234234
assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString()));

0 commit comments

Comments
 (0)