Skip to content

Commit ebaba35

Browse files
committed
Created integration test for FrameReader.
1 parent 9dc9b3c commit ebaba35

File tree

3 files changed

+131
-0
lines changed

3 files changed

+131
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.github.dockerjava.core.command;
2+
3+
import com.github.dockerjava.api.DockerClient;
4+
5+
import java.io.File;
6+
7+
/**
8+
* Start and stop a single container for testing.
9+
*/
10+
public class DockerfileFixture implements AutoCloseable {
11+
12+
private final DockerClient dockerClient;
13+
private String directory;
14+
private String repository;
15+
private String containerId;
16+
17+
public DockerfileFixture(DockerClient dockerClient, String directory) {
18+
this.dockerClient = dockerClient;
19+
this.directory = directory;
20+
}
21+
22+
public void open() throws Exception {
23+
24+
dockerClient
25+
.buildImageCmd(new File("src/test/resources", directory))
26+
.withNoCache() // remove alternatives, cause problems
27+
.exec()
28+
.close();
29+
30+
repository = dockerClient
31+
.listImagesCmd()
32+
.exec()
33+
.get(0)
34+
.getRepoTags()[0];
35+
36+
containerId = dockerClient
37+
.createContainerCmd(repository)
38+
.exec()
39+
.getId();
40+
41+
dockerClient
42+
.startContainerCmd(containerId)
43+
.exec();
44+
}
45+
46+
@Override
47+
public void close() throws Exception {
48+
49+
dockerClient
50+
.removeContainerCmd(containerId)
51+
.withForce() // stop too
52+
.exec();
53+
54+
dockerClient
55+
.removeImageCmd(repository)
56+
.withForce()
57+
.exec();
58+
}
59+
60+
public String getContainerId() {
61+
return containerId;
62+
}
63+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.github.dockerjava.core.command;
2+
3+
4+
import com.github.dockerjava.api.model.Frame;
5+
import com.github.dockerjava.api.model.StreamType;
6+
import com.github.dockerjava.client.AbstractDockerClientTest;
7+
import org.testng.annotations.AfterMethod;
8+
import org.testng.annotations.BeforeMethod;
9+
import org.testng.annotations.Test;
10+
11+
import java.io.InputStream;
12+
13+
@Test(groups = "integration")
14+
public class FrameReaderITest extends AbstractDockerClientTest {
15+
16+
private DockerfileFixture dockerfileFixture;
17+
18+
@BeforeMethod
19+
@Override
20+
public void beforeTest() {
21+
super.beforeTest();
22+
dockerfileFixture = new DockerfileFixture(dockerClient, "frameReaderDockerfile");
23+
}
24+
25+
@BeforeMethod
26+
public void createAndStartDockerContainer() throws Exception {
27+
dockerfileFixture.open();
28+
}
29+
30+
@AfterMethod
31+
public void deleteDockerContainerImage() throws Exception {
32+
dockerfileFixture.close();
33+
}
34+
35+
@AfterMethod
36+
@Override
37+
public void afterTest() {
38+
super.afterTest();
39+
}
40+
41+
@Test
42+
public void canCloseFrameReaderAndReadExpectedLinens() throws Exception {
43+
44+
InputStream log = dockerClient
45+
.logContainerCmd(dockerfileFixture.getContainerId())
46+
.withStdOut()
47+
.withStdErr()
48+
.withFollowStream()
49+
.withTailAll()
50+
.exec();
51+
52+
try (FrameReader reader = new FrameReader(log)) {
53+
assertEquals(reader.readFrame(), new Frame(StreamType.STDOUT, String.format("to stdout%n").getBytes()));
54+
assertEquals(reader.readFrame(), new Frame(StreamType.STDERR, String.format("to stderr%n").getBytes()));
55+
assertNull(reader.readFrame());
56+
}
57+
}
58+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM busybox:latest
2+
3+
# log to stdout and stderr so we can make sure logging with FrameReader works
4+
5+
RUN echo '#! /bin/sh' > cmd.sh
6+
RUN echo 'echo "to stdout"' >> cmd.sh
7+
RUN echo 'echo "to stderr" > /dev/stderr' >> cmd.sh
8+
RUN chmod +x cmd.sh
9+
10+
CMD ["./cmd.sh"]

0 commit comments

Comments
 (0)