Skip to content

Commit 72597d7

Browse files
author
Marcus Linke
committed
Complement logging tests
1 parent 3a2dcc4 commit 72597d7

File tree

3 files changed

+162
-42
lines changed

3 files changed

+162
-42
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,33 @@ protected String containerLog(String containerId) throws Exception {
225225
public static class LogContainerTestCallback extends LogContainerResultCallback {
226226
protected final StringBuffer log = new StringBuffer();
227227

228+
List<Frame> collectedFrames = new ArrayList<Frame>();
229+
230+
boolean collectFrames = false;
231+
232+
public LogContainerTestCallback() {
233+
this(false);
234+
}
235+
236+
public LogContainerTestCallback(boolean collectFrames) {
237+
this.collectFrames = collectFrames;
238+
}
239+
228240
@Override
229241
public void onNext(Frame frame) {
242+
if(collectFrames) collectedFrames.add(frame);
230243
log.append(new String(frame.getPayload()));
231244
}
232245

233246
@Override
234247
public String toString() {
235248
return log.toString();
236249
}
250+
251+
252+
public List<Frame> getCollectedFrames() {
253+
return collectedFrames;
254+
}
237255
}
238256

239257
protected String buildImage(File baseDir) throws Exception {

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

Lines changed: 72 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.io.IOException;
1010
import java.lang.reflect.Method;
11+
import java.util.concurrent.TimeUnit;
1112

1213
import org.testng.ITestResult;
1314
import org.testng.annotations.AfterMethod;
@@ -17,6 +18,7 @@
1718
import org.testng.annotations.Test;
1819

1920
import com.github.dockerjava.api.exception.NotFoundException;
21+
import com.github.dockerjava.api.model.StreamType;
2022
import com.github.dockerjava.api.command.CreateContainerResponse;
2123
import com.github.dockerjava.client.AbstractDockerClientTest;
2224

@@ -44,31 +46,65 @@ public void afterMethod(ITestResult result) {
4446
}
4547

4648
@Test
47-
public void asyncLogContainer() throws Exception {
49+
public void asyncLogContainerWithTtyEnabled() throws Exception {
4850

49-
String snippet = "hello world";
50-
51-
CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet)
51+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
52+
.withCmd("/bin/sh", "-c", "while true; do echo hello; sleep 1; done")
53+
.withTty(true)
5254
.exec();
5355

5456
LOG.info("Created container: {}", container.toString());
5557
assertThat(container.getId(), not(isEmptyString()));
5658

57-
dockerClient.startContainerCmd(container.getId()).exec();
59+
dockerClient.startContainerCmd(container.getId())
60+
.exec();
5861

59-
int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback())
60-
.awaitStatusCode();
62+
LogContainerTestCallback loggingCallback = new LogContainerTestCallback(true);
6163

62-
assertThat(exitCode, equalTo(0));
64+
// this essentially test the since=0 case
65+
dockerClient.logContainerCmd(container.getId())
66+
.withStdErr(true)
67+
.withStdOut(true)
68+
.withFollowStream(true)
69+
.withTailAll()
70+
.exec(loggingCallback);
6371

64-
LogContainerTestCallback loggingCallback = new LogContainerTestCallback();
72+
loggingCallback.awaitCompletion(3, TimeUnit.SECONDS);
73+
74+
assertTrue(loggingCallback.toString().contains("hello"));
75+
76+
assertEquals(loggingCallback.getCollectedFrames().get(0).getStreamType(), StreamType.RAW);
77+
}
78+
79+
@Test
80+
public void asyncLogContainerWithTtyDisabled() throws Exception {
81+
82+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
83+
.withCmd("/bin/sh", "-c", "while true; do echo hello; sleep 1; done")
84+
.withTty(false)
85+
.exec();
86+
87+
LOG.info("Created container: {}", container.toString());
88+
assertThat(container.getId(), not(isEmptyString()));
89+
90+
dockerClient.startContainerCmd(container.getId())
91+
.exec();
92+
93+
LogContainerTestCallback loggingCallback = new LogContainerTestCallback(true);
6594

6695
// this essentially test the since=0 case
67-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
96+
dockerClient.logContainerCmd(container.getId())
97+
.withStdErr(true)
98+
.withStdOut(true)
99+
.withFollowStream(true)
100+
.withTailAll()
101+
.exec(loggingCallback);
68102

69-
loggingCallback.awaitCompletion();
103+
loggingCallback.awaitCompletion(3, TimeUnit.SECONDS);
70104

71-
assertTrue(loggingCallback.toString().contains(snippet));
105+
assertTrue(loggingCallback.toString().contains("hello"));
106+
107+
assertEquals(loggingCallback.getCollectedFrames().get(0).getStreamType(), StreamType.STDOUT);
72108
}
73109

74110
@Test
@@ -105,34 +141,45 @@ public void asyncMultipleLogContainer() throws Exception {
105141

106142
String snippet = "hello world";
107143

108-
CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet)
144+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
145+
.withCmd("/bin/echo", snippet)
109146
.exec();
110147

111148
LOG.info("Created container: {}", container.toString());
112149
assertThat(container.getId(), not(isEmptyString()));
113150

114151
dockerClient.startContainerCmd(container.getId()).exec();
115152

116-
int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback())
153+
int exitCode = dockerClient.waitContainerCmd(container.getId())
154+
.exec(new WaitContainerResultCallback())
117155
.awaitStatusCode();
118156

119157
assertThat(exitCode, equalTo(0));
120158

121159
LogContainerTestCallback loggingCallback = new LogContainerTestCallback();
122160

123-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
161+
dockerClient.logContainerCmd(container.getId())
162+
.withStdErr(true)
163+
.withStdOut(true)
164+
.exec(loggingCallback);
124165

125166
loggingCallback.close();
126167

127168
loggingCallback = new LogContainerTestCallback();
128169

129-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
170+
dockerClient.logContainerCmd(container.getId())
171+
.withStdErr(true)
172+
.withStdOut(true)
173+
.exec(loggingCallback);
130174

131175
loggingCallback.close();
132176

133177
loggingCallback = new LogContainerTestCallback();
134178

135-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
179+
dockerClient.logContainerCmd(container.getId())
180+
.withStdErr(true)
181+
.withStdOut(true)
182+
.exec(loggingCallback);
136183

137184
loggingCallback.awaitCompletion();
138185

@@ -143,7 +190,8 @@ public void asyncMultipleLogContainer() throws Exception {
143190
public void asyncLogContainerWithSince() throws Exception {
144191
String snippet = "hello world";
145192

146-
CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet)
193+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
194+
.withCmd("/bin/echo", snippet)
147195
.exec();
148196

149197
LOG.info("Created container: {}", container.toString());
@@ -153,19 +201,22 @@ public void asyncLogContainerWithSince() throws Exception {
153201

154202
dockerClient.startContainerCmd(container.getId()).exec();
155203

156-
int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback())
204+
int exitCode = dockerClient.waitContainerCmd(container.getId())
205+
.exec(new WaitContainerResultCallback())
157206
.awaitStatusCode();
158207

159208
assertThat(exitCode, equalTo(0));
160209

161210
LogContainerTestCallback loggingCallback = new LogContainerTestCallback();
162211

163-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withSince(timestamp)
212+
dockerClient.logContainerCmd(container.getId())
213+
.withStdErr(true)
214+
.withStdOut(true)
215+
.withSince(timestamp)
164216
.exec(loggingCallback);
165217

166218
loggingCallback.awaitCompletion();
167219

168220
assertThat(loggingCallback.toString(), containsString(snippet));
169221
}
170-
171222
}

src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java

Lines changed: 72 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.io.IOException;
1010
import java.lang.reflect.Method;
11+
import java.util.concurrent.TimeUnit;
1112

1213
import org.testng.ITestResult;
1314
import org.testng.annotations.AfterMethod;
@@ -18,6 +19,7 @@
1819

1920
import com.github.dockerjava.api.command.CreateContainerResponse;
2021
import com.github.dockerjava.api.exception.NotFoundException;
22+
import com.github.dockerjava.api.model.StreamType;
2123
import com.github.dockerjava.core.command.WaitContainerResultCallback;
2224
import com.github.dockerjava.netty.AbstractNettyDockerClientTest;
2325

@@ -45,31 +47,65 @@ public void afterMethod(ITestResult result) {
4547
}
4648

4749
@Test
48-
public void asyncLogContainer() throws Exception {
50+
public void asyncLogContainerWithTtyEnabled() throws Exception {
4951

50-
String snippet = "hello world";
51-
52-
CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet)
52+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
53+
.withCmd("/bin/sh", "-c", "while true; do echo hello; sleep 1; done")
54+
.withTty(true)
5355
.exec();
5456

5557
LOG.info("Created container: {}", container.toString());
5658
assertThat(container.getId(), not(isEmptyString()));
5759

58-
dockerClient.startContainerCmd(container.getId()).exec();
60+
dockerClient.startContainerCmd(container.getId())
61+
.exec();
5962

60-
int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback())
61-
.awaitStatusCode();
63+
LogContainerTestCallback loggingCallback = new LogContainerTestCallback(true);
6264

63-
assertThat(exitCode, equalTo(0));
65+
// this essentially test the since=0 case
66+
dockerClient.logContainerCmd(container.getId())
67+
.withStdErr(true)
68+
.withStdOut(true)
69+
.withFollowStream(true)
70+
.withTailAll()
71+
.exec(loggingCallback);
6472

65-
LogContainerTestCallback loggingCallback = new LogContainerTestCallback();
73+
loggingCallback.awaitCompletion(3, TimeUnit.SECONDS);
74+
75+
assertTrue(loggingCallback.toString().contains("hello"));
76+
77+
assertEquals(loggingCallback.getCollectedFrames().get(0).getStreamType(), StreamType.RAW);
78+
}
79+
80+
@Test
81+
public void asyncLogContainerWithTtyDisabled() throws Exception {
82+
83+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
84+
.withCmd("/bin/sh", "-c", "while true; do echo hello; sleep 1; done")
85+
.withTty(false)
86+
.exec();
87+
88+
LOG.info("Created container: {}", container.toString());
89+
assertThat(container.getId(), not(isEmptyString()));
90+
91+
dockerClient.startContainerCmd(container.getId())
92+
.exec();
93+
94+
LogContainerTestCallback loggingCallback = new LogContainerTestCallback(true);
6695

6796
// this essentially test the since=0 case
68-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
97+
dockerClient.logContainerCmd(container.getId())
98+
.withStdErr(true)
99+
.withStdOut(true)
100+
.withFollowStream(true)
101+
.withTailAll()
102+
.exec(loggingCallback);
69103

70-
loggingCallback.awaitCompletion();
104+
loggingCallback.awaitCompletion(3, TimeUnit.SECONDS);
71105

72-
assertTrue(loggingCallback.toString().contains(snippet));
106+
assertTrue(loggingCallback.toString().contains("hello"));
107+
108+
assertEquals(loggingCallback.getCollectedFrames().get(0).getStreamType(), StreamType.STDOUT);
73109
}
74110

75111
@Test
@@ -106,34 +142,45 @@ public void asyncMultipleLogContainer() throws Exception {
106142

107143
String snippet = "hello world";
108144

109-
CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet)
145+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
146+
.withCmd("/bin/echo", snippet)
110147
.exec();
111148

112149
LOG.info("Created container: {}", container.toString());
113150
assertThat(container.getId(), not(isEmptyString()));
114151

115152
dockerClient.startContainerCmd(container.getId()).exec();
116153

117-
int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback())
154+
int exitCode = dockerClient.waitContainerCmd(container.getId())
155+
.exec(new WaitContainerResultCallback())
118156
.awaitStatusCode();
119157

120158
assertThat(exitCode, equalTo(0));
121159

122160
LogContainerTestCallback loggingCallback = new LogContainerTestCallback();
123161

124-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
162+
dockerClient.logContainerCmd(container.getId())
163+
.withStdErr(true)
164+
.withStdOut(true)
165+
.exec(loggingCallback);
125166

126167
loggingCallback.close();
127168

128169
loggingCallback = new LogContainerTestCallback();
129170

130-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
171+
dockerClient.logContainerCmd(container.getId())
172+
.withStdErr(true)
173+
.withStdOut(true)
174+
.exec(loggingCallback);
131175

132176
loggingCallback.close();
133177

134178
loggingCallback = new LogContainerTestCallback();
135179

136-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback);
180+
dockerClient.logContainerCmd(container.getId())
181+
.withStdErr(true)
182+
.withStdOut(true)
183+
.exec(loggingCallback);
137184

138185
loggingCallback.awaitCompletion();
139186

@@ -144,7 +191,8 @@ public void asyncMultipleLogContainer() throws Exception {
144191
public void asyncLogContainerWithSince() throws Exception {
145192
String snippet = "hello world";
146193

147-
CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet)
194+
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
195+
.withCmd("/bin/echo", snippet)
148196
.exec();
149197

150198
LOG.info("Created container: {}", container.toString());
@@ -154,19 +202,22 @@ public void asyncLogContainerWithSince() throws Exception {
154202

155203
dockerClient.startContainerCmd(container.getId()).exec();
156204

157-
int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback())
205+
int exitCode = dockerClient.waitContainerCmd(container.getId())
206+
.exec(new WaitContainerResultCallback())
158207
.awaitStatusCode();
159208

160209
assertThat(exitCode, equalTo(0));
161210

162211
LogContainerTestCallback loggingCallback = new LogContainerTestCallback();
163212

164-
dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withSince(timestamp)
213+
dockerClient.logContainerCmd(container.getId())
214+
.withStdErr(true)
215+
.withStdOut(true)
216+
.withSince(timestamp)
165217
.exec(loggingCallback);
166218

167219
loggingCallback.awaitCompletion();
168220

169221
assertThat(loggingCallback.toString(), containsString(snippet));
170222
}
171-
172223
}

0 commit comments

Comments
 (0)