Skip to content

Commit 2df09cd

Browse files
author
Marcus Linke
committed
Make FrameReaderITest work again
1 parent 1ed6fbf commit 2df09cd

File tree

4 files changed

+106
-84
lines changed

4 files changed

+106
-84
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,12 @@ public void afterMethod(ITestResult result) {
104104
"################################## END OF {} ##################################\n",
105105
result.getName());
106106
}
107+
108+
protected String asString(InputStream response) {
109+
return consumeAsString(response);
110+
}
107111

108-
protected String asString(InputStream response) {
112+
public static String consumeAsString(InputStream response) {
109113

110114
StringWriter logwriter = new StringWriter();
111115

@@ -116,7 +120,7 @@ protected String asString(InputStream response) {
116120
while (itr.hasNext()) {
117121
String line = itr.next();
118122
logwriter.write(line + (itr.hasNext() ? "\n" : ""));
119-
//LOG.info("line: "+line);
123+
LOG.info("line: "+line);
120124
}
121125
response.close();
122126

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

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

3+
import static org.hamcrest.MatcherAssert.assertThat;
4+
import static org.hamcrest.Matchers.containsString;
5+
36
import com.github.dockerjava.api.DockerClient;
47
import com.github.dockerjava.api.InternalServerErrorException;
58
import com.github.dockerjava.api.NotFoundException;
69
import com.github.dockerjava.api.model.Image;
10+
import com.github.dockerjava.client.AbstractDockerClientTest;
11+
712
import org.slf4j.Logger;
813
import org.slf4j.LoggerFactory;
914

1015
import java.io.File;
1116
import java.io.IOException;
17+
import java.io.InputStream;
1218

1319
/**
1420
* Start and stop a single container for testing.
@@ -29,11 +35,14 @@ public DockerfileFixture(DockerClient dockerClient, String directory) {
2935
public void open() throws IOException {
3036

3137
LOGGER.info("building {}", directory);
32-
dockerClient
38+
InputStream response = dockerClient
3339
.buildImageCmd(new File("src/test/resources", directory))
3440
.withNoCache() // remove alternatives, cause problems
35-
.exec()
36-
.close();
41+
.exec();
42+
43+
String log = AbstractDockerClientTest.consumeAsString(response);
44+
45+
assertThat(log, containsString("Successfully built"));
3746

3847
Image lastCreatedImage = dockerClient
3948
.listImagesCmd()
Lines changed: 87 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,97 @@
11
package com.github.dockerjava.core.command;
22

3+
import static org.testng.Assert.assertEquals;
4+
import static org.testng.AssertJUnit.assertNull;
5+
6+
import java.io.IOException;
7+
import java.io.InputStream;
38

4-
import com.github.dockerjava.api.DockerClient;
5-
import com.github.dockerjava.api.model.Frame;
6-
import com.github.dockerjava.api.model.StreamType;
7-
import com.github.dockerjava.core.DockerClientBuilder;
89
import org.testng.annotations.AfterTest;
910
import org.testng.annotations.BeforeTest;
1011
import org.testng.annotations.Test;
1112

12-
import java.io.IOException;
13-
import java.io.InputStream;
14-
15-
import static org.testng.Assert.assertEquals;
16-
import static org.testng.AssertJUnit.assertNull;
13+
import com.github.dockerjava.api.DockerClient;
14+
import com.github.dockerjava.api.model.Frame;
15+
import com.github.dockerjava.api.model.StreamType;
16+
import com.github.dockerjava.core.DockerClientBuilder;
1717

1818
@Test(groups = "integration")
19-
public class FrameReaderITest {
20-
21-
private DockerClient dockerClient;
22-
private DockerfileFixture dockerfileFixture;
23-
24-
@BeforeTest
25-
public void beforeTest() throws Exception {
26-
dockerClient = DockerClientBuilder.getInstance().build();
27-
dockerfileFixture = new DockerfileFixture(dockerClient, "frameReaderDockerfile");
28-
dockerfileFixture.open();
29-
}
30-
31-
@AfterTest
32-
public void deleteDockerContainerImage() throws Exception {
33-
dockerfileFixture.close();
34-
dockerClient.close();
35-
}
36-
37-
@Test
38-
public void canCloseFrameReaderAndReadExpectedLines() throws Exception {
39-
40-
try (FrameReader reader = new FrameReader(getLoggerStream())) {
41-
assertEquals(reader.readFrame(), new Frame(StreamType.STDOUT, "to stdout\n".getBytes()));
42-
assertEquals(reader.readFrame(), new Frame(StreamType.STDERR, "to stderr\n".getBytes()));
43-
assertNull(reader.readFrame());
44-
}
45-
}
46-
47-
private InputStream getLoggerStream() {
48-
return dockerClient
49-
.logContainerCmd(dockerfileFixture.getContainerId())
50-
.withStdOut()
51-
.withStdErr()
52-
.withTailAll()
53-
.withTail(10)
54-
.withFollowStream()
55-
.exec();
56-
}
57-
58-
@Test
59-
public void canLogInOneThreadAndExecuteCommandsInAnother() throws Exception {
60-
61-
Thread thread = new Thread(new Runnable() {
62-
@Override
63-
public void run() {
64-
try {
65-
try (FrameReader reader = new FrameReader(getLoggerStream())) {
66-
//noinspection StatementWithEmptyBody
67-
while (reader.readFrame() != null) {
68-
// nop
69-
}
70-
}
71-
} catch (IOException e) {
72-
throw new RuntimeException(e);
73-
}
74-
}
75-
});
76-
77-
thread.start();
78-
79-
try (DockerfileFixture busyboxDockerfile = new DockerfileFixture(dockerClient, "busyboxDockerfile")) {
80-
busyboxDockerfile.open();
81-
}
82-
83-
thread.join();
84-
85-
}
19+
public class FrameReaderITest {
20+
21+
private DockerClient dockerClient;
22+
private DockerfileFixture dockerfileFixture;
23+
24+
@BeforeTest
25+
public void beforeTest() throws Exception {
26+
dockerClient = DockerClientBuilder.getInstance().build();
27+
dockerfileFixture = new DockerfileFixture(dockerClient,
28+
"frameReaderDockerfile");
29+
dockerfileFixture.open();
30+
}
31+
32+
@AfterTest
33+
public void deleteDockerContainerImage() throws Exception {
34+
dockerfileFixture.close();
35+
dockerClient.close();
36+
}
37+
38+
@Test
39+
public void canCloseFrameReaderAndReadExpectedLines() throws Exception {
40+
41+
// wait for the container to be successfully executed
42+
int exitCode = dockerClient.waitContainerCmd(
43+
dockerfileFixture.getContainerId()).exec();
44+
assertEquals(0, exitCode);
45+
46+
InputStream response = getLoggerStream();
47+
48+
try (FrameReader reader = new FrameReader(response)) {
49+
assertEquals(reader.readFrame(), new Frame(StreamType.STDOUT,
50+
"to stdout\n".getBytes()));
51+
assertEquals(reader.readFrame(), new Frame(StreamType.STDERR,
52+
"to stderr\n".getBytes()));
53+
assertNull(reader.readFrame());
54+
}
55+
}
56+
57+
private InputStream getLoggerStream() {
58+
59+
return dockerClient.logContainerCmd(dockerfileFixture.getContainerId())
60+
.withStdOut()
61+
.withStdErr()
62+
.withTailAll()
63+
// we can't follow stream here as it blocks reading from resulting InputStream infinitely
64+
//.withFollowStream()
65+
.exec();
66+
}
67+
68+
@Test
69+
public void canLogInOneThreadAndExecuteCommandsInAnother() throws Exception {
70+
71+
Thread thread = new Thread(new Runnable() {
72+
@Override
73+
public void run() {
74+
try {
75+
try (FrameReader reader = new FrameReader(getLoggerStream())) {
76+
// noinspection StatementWithEmptyBody
77+
while (reader.readFrame() != null) {
78+
// nop
79+
}
80+
}
81+
} catch (IOException e) {
82+
throw new RuntimeException(e);
83+
}
84+
}
85+
});
86+
87+
thread.start();
88+
89+
try (DockerfileFixture busyboxDockerfile = new DockerfileFixture(
90+
dockerClient, "busyboxDockerfile")) {
91+
busyboxDockerfile.open();
92+
}
93+
94+
thread.join();
95+
96+
}
8697
}

src/test/resources/frameReaderDockerfile/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ FROM busybox:latest
33
# log to stdout and stderr so we can make sure logging with FrameReader works
44

55
RUN echo '#! /bin/sh' > cmd.sh
6-
RUN echo 'sleep 1' >> cmd.sh
76
RUN echo 'echo "to stdout"' >> cmd.sh
87
RUN echo 'echo "to stderr" > /dev/stderr' >> cmd.sh
9-
# block for ever
10-
RUN echo 'cat' >> cmd.sh
8+
RUN echo 'sleep 1' >> cmd.sh
119
RUN chmod +x cmd.sh
1210

1311
CMD ["./cmd.sh"]

0 commit comments

Comments
 (0)