Skip to content

Commit b84e557

Browse files
author
Marcus Linke
committed
make TestDockerCmdExecFactory a wrapper
1 parent 50577d2 commit b84e557

File tree

3 files changed

+285
-108
lines changed

3 files changed

+285
-108
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616

1717
import com.github.dockerjava.api.DockerClient;
1818
import com.github.dockerjava.api.DockerException;
19+
import com.github.dockerjava.core.TestDockerCmdExecFactory;
1920
import com.github.dockerjava.jaxrs.DockerClientBuilder;
20-
import com.github.dockerjava.jaxrs.TestDockerCmdExecFactory;
21+
import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl;
2122

2223
public abstract class AbstractDockerClientTest extends Assert {
2324

@@ -26,7 +27,7 @@ public abstract class AbstractDockerClientTest extends Assert {
2627

2728
protected DockerClient dockerClient;
2829

29-
protected TestDockerCmdExecFactory dockerCmdExecFactory = new TestDockerCmdExecFactory();
30+
protected TestDockerCmdExecFactory dockerCmdExecFactory = new TestDockerCmdExecFactory(new DockerCmdExecFactoryImpl());
3031

3132
public void beforeTest() {
3233
LOG.info("======================= BEFORETEST =======================");
Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,282 @@
1+
package com.github.dockerjava.core;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.security.SecureRandom;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import com.github.dockerjava.api.command.AttachContainerCmd;
10+
import com.github.dockerjava.api.command.AuthCmd.Exec;
11+
import com.github.dockerjava.api.command.BuildImageCmd;
12+
import com.github.dockerjava.api.command.CommitCmd;
13+
import com.github.dockerjava.api.command.ContainerDiffCmd;
14+
import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
15+
import com.github.dockerjava.api.command.CreateContainerCmd;
16+
import com.github.dockerjava.api.command.CreateContainerResponse;
17+
import com.github.dockerjava.api.command.CreateImageCmd;
18+
import com.github.dockerjava.api.command.CreateImageResponse;
19+
import com.github.dockerjava.api.command.DockerCmdExecFactory;
20+
import com.github.dockerjava.api.command.EventsCmd;
21+
import com.github.dockerjava.api.command.InfoCmd;
22+
import com.github.dockerjava.api.command.InspectContainerCmd;
23+
import com.github.dockerjava.api.command.InspectImageCmd;
24+
import com.github.dockerjava.api.command.KillContainerCmd;
25+
import com.github.dockerjava.api.command.ListContainersCmd;
26+
import com.github.dockerjava.api.command.ListImagesCmd;
27+
import com.github.dockerjava.api.command.LogContainerCmd;
28+
import com.github.dockerjava.api.command.PauseContainerCmd;
29+
import com.github.dockerjava.api.command.PingCmd;
30+
import com.github.dockerjava.api.command.PullImageCmd;
31+
import com.github.dockerjava.api.command.PushImageCmd;
32+
import com.github.dockerjava.api.command.RemoveContainerCmd;
33+
import com.github.dockerjava.api.command.RemoveImageCmd;
34+
import com.github.dockerjava.api.command.RestartContainerCmd;
35+
import com.github.dockerjava.api.command.SearchImagesCmd;
36+
import com.github.dockerjava.api.command.StartContainerCmd;
37+
import com.github.dockerjava.api.command.StopContainerCmd;
38+
import com.github.dockerjava.api.command.TagImageCmd;
39+
import com.github.dockerjava.api.command.TopContainerCmd;
40+
import com.github.dockerjava.api.command.UnpauseContainerCmd;
41+
import com.github.dockerjava.api.command.VersionCmd;
42+
import com.github.dockerjava.api.command.WaitContainerCmd;
43+
import com.github.dockerjava.core.DockerClientConfig;
44+
45+
/**
46+
* Special {@link DockerCmdExecFactory} implementation that collects container and image creations
47+
* while test execution for the purpose of automatically cleanup.
48+
*
49+
* @author marcus
50+
*
51+
*/
52+
public class TestDockerCmdExecFactory implements DockerCmdExecFactory {
53+
54+
private List<String> containerNames = new ArrayList<String>();
55+
56+
private List<String> imageNames = new ArrayList<String>();
57+
58+
private DockerCmdExecFactory delegate;
59+
60+
public TestDockerCmdExecFactory(DockerCmdExecFactory delegate) {
61+
this.delegate = delegate;
62+
}
63+
64+
@Override
65+
public void init(DockerClientConfig dockerClientConfig) {
66+
delegate.init(dockerClientConfig);
67+
}
68+
69+
@Override
70+
public void close() throws IOException {
71+
delegate.close();
72+
}
73+
74+
@Override
75+
public CreateContainerCmd.Exec createCreateContainerCmdExec() {
76+
return new CreateContainerCmd.Exec() {
77+
@Override
78+
public CreateContainerResponse exec(CreateContainerCmd command) {
79+
CreateContainerResponse createContainerResponse = delegate.createCreateContainerCmdExec().exec(command);
80+
containerNames.add(createContainerResponse.getId());
81+
return createContainerResponse;
82+
}
83+
};
84+
}
85+
86+
@Override
87+
public RemoveContainerCmd.Exec createRemoveContainerCmdExec() {
88+
return new RemoveContainerCmd.Exec() {
89+
@Override
90+
public Void exec(RemoveContainerCmd command) {
91+
delegate.createRemoveContainerCmdExec().exec(command);
92+
containerNames.remove(command.getContainerId());
93+
return null;
94+
}
95+
};
96+
}
97+
98+
@Override
99+
public CreateImageCmd.Exec createCreateImageCmdExec() {
100+
return new CreateImageCmd.Exec() {
101+
@Override
102+
public CreateImageResponse exec(CreateImageCmd command) {
103+
CreateImageResponse createImageResponse = delegate.createCreateImageCmdExec().exec(command);
104+
imageNames.add(createImageResponse.getId());
105+
return createImageResponse;
106+
}
107+
};
108+
}
109+
110+
111+
112+
@Override
113+
public RemoveImageCmd.Exec createRemoveImageCmdExec() {
114+
return new RemoveImageCmd.Exec() {
115+
@Override
116+
public Void exec(RemoveImageCmd command) {
117+
delegate.createRemoveImageCmdExec().exec(command);
118+
imageNames.remove(command.getImageId());
119+
return null;
120+
}
121+
};
122+
}
123+
124+
@Override
125+
public BuildImageCmd.Exec createBuildImageCmdExec() {
126+
return new BuildImageCmd.Exec() {
127+
@Override
128+
public InputStream exec(BuildImageCmd command) {
129+
// can't detect image id here so tagging it
130+
String tag = command.getTag();
131+
if(tag == null || "".equals(tag.trim())) {
132+
tag = "" + new SecureRandom().nextInt(Integer.MAX_VALUE);
133+
command.withTag(tag);
134+
}
135+
InputStream inputStream = delegate.createBuildImageCmdExec().exec(command);
136+
imageNames.add(tag);
137+
return inputStream;
138+
}
139+
};
140+
}
141+
142+
@Override
143+
public Exec createAuthCmdExec() {
144+
return delegate.createAuthCmdExec();
145+
}
146+
147+
@Override
148+
public InfoCmd.Exec createInfoCmdExec() {
149+
return delegate.createInfoCmdExec();
150+
}
151+
152+
@Override
153+
public PingCmd.Exec createPingCmdExec() {
154+
return delegate.createPingCmdExec();
155+
}
156+
157+
@Override
158+
public VersionCmd.Exec createVersionCmdExec() {
159+
return delegate.createVersionCmdExec();
160+
}
161+
162+
@Override
163+
public PullImageCmd.Exec createPullImageCmdExec() {
164+
return delegate.createPullImageCmdExec();
165+
}
166+
167+
@Override
168+
public PushImageCmd.Exec createPushImageCmdExec() {
169+
return delegate.createPushImageCmdExec();
170+
}
171+
172+
@Override
173+
public SearchImagesCmd.Exec createSearchImagesCmdExec() {
174+
return delegate.createSearchImagesCmdExec();
175+
}
176+
177+
@Override
178+
public ListImagesCmd.Exec createListImagesCmdExec() {
179+
return delegate.createListImagesCmdExec();
180+
}
181+
182+
@Override
183+
public InspectImageCmd.Exec createInspectImageCmdExec() {
184+
return delegate.createInspectImageCmdExec();
185+
}
186+
187+
@Override
188+
public ListContainersCmd.Exec createListContainersCmdExec() {
189+
return delegate.createListContainersCmdExec();
190+
}
191+
192+
@Override
193+
public StartContainerCmd.Exec createStartContainerCmdExec() {
194+
return delegate.createStartContainerCmdExec();
195+
}
196+
197+
@Override
198+
public InspectContainerCmd.Exec createInspectContainerCmdExec() {
199+
return delegate.createInspectContainerCmdExec();
200+
}
201+
202+
@Override
203+
public WaitContainerCmd.Exec createWaitContainerCmdExec() {
204+
return delegate.createWaitContainerCmdExec();
205+
}
206+
207+
@Override
208+
public AttachContainerCmd.Exec createAttachContainerCmdExec() {
209+
return delegate.createAttachContainerCmdExec();
210+
}
211+
212+
@Override
213+
public LogContainerCmd.Exec createLogContainerCmdExec() {
214+
return delegate.createLogContainerCmdExec();
215+
}
216+
217+
@Override
218+
public CopyFileFromContainerCmd.Exec createCopyFileFromContainerCmdExec() {
219+
return delegate.createCopyFileFromContainerCmdExec();
220+
}
221+
222+
@Override
223+
public StopContainerCmd.Exec createStopContainerCmdExec() {
224+
return delegate.createStopContainerCmdExec();
225+
}
226+
227+
@Override
228+
public ContainerDiffCmd.Exec createContainerDiffCmdExec() {
229+
return delegate.createContainerDiffCmdExec();
230+
}
231+
232+
@Override
233+
public KillContainerCmd.Exec createKillContainerCmdExec() {
234+
return delegate.createKillContainerCmdExec();
235+
}
236+
237+
@Override
238+
public RestartContainerCmd.Exec createRestartContainerCmdExec() {
239+
return delegate.createRestartContainerCmdExec();
240+
}
241+
242+
@Override
243+
public CommitCmd.Exec createCommitCmdExec() {
244+
return delegate.createCommitCmdExec();
245+
}
246+
247+
@Override
248+
public TopContainerCmd.Exec createTopContainerCmdExec() {
249+
return delegate.createTopContainerCmdExec();
250+
}
251+
252+
@Override
253+
public TagImageCmd.Exec createTagImageCmdExec() {
254+
return delegate.createTagImageCmdExec();
255+
}
256+
257+
@Override
258+
public PauseContainerCmd.Exec createPauseContainerCmdExec() {
259+
return delegate.createPauseContainerCmdExec();
260+
}
261+
262+
@Override
263+
public UnpauseContainerCmd.Exec createUnpauseContainerCmdExec() {
264+
return delegate.createUnpauseContainerCmdExec();
265+
}
266+
267+
@Override
268+
public EventsCmd.Exec createEventsCmdExec() {
269+
return delegate.createEventsCmdExec();
270+
}
271+
272+
public List<String> getContainerNames() {
273+
return new ArrayList<String>(containerNames);
274+
}
275+
276+
public List<String> getImageNames() {
277+
return new ArrayList<String>(imageNames);
278+
}
279+
280+
281+
282+
}

0 commit comments

Comments
 (0)