Skip to content

Commit 79e937a

Browse files
committed
Fix "filesystem operations against a running Hyper-V container are not supported" errors in tests
1 parent e7100d7 commit 79e937a

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

api-client/src/test/java/de/gesellix/docker/remote/api/client/ContainerApiIntegrationTest.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,25 +204,40 @@ public void containerArchiveInfoGetAndPut() throws IOException {
204204
null
205205
);
206206
containerApi.containerCreate(containerCreateRequest, "container-archive-info-test");
207-
containerApi.containerStart("container-archive-info-test", null);
208207

208+
// filesystem operations against a running Hyper-V container are not supported,
209+
// so we prepare the container before starting it
209210
InputStream archive = containerApi.containerArchive("container-archive-info-test", "/gattaca.txt");
210211
File extractedDir = new TarUtil().unTar(archive);
211212
File gattaca = new File(extractedDir, "gattaca.txt");
212213
String fileContent = Okio.buffer(Okio.source(gattaca)).readUtf8();
213214
assertEquals("The wind\ncaught it.\n", fileContent.replaceAll("\r", ""));
214215

216+
String testPath = testImage.isWindowsContainer()
217+
? "tmp\\test"
218+
: "/tmp/test/";
219+
List<String> execCmd = testImage.isWindowsContainer()
220+
? Arrays.asList("cmd", "/C", "mkdir " + testPath)
221+
: Arrays.asList("mkdir", testPath);
222+
223+
containerApi.containerStart("container-archive-info-test", null);
215224
IdResponse containerExec = engineApiClient.getExecApi().containerExec(
216225
"container-archive-info-test",
217226
new ExecConfig(null, null, null, null, null, null,
218-
Arrays.asList("mkdir", "/tmp/test/"), null, null, null));
227+
execCmd,
228+
null, null, null));
219229
engineApiClient.getExecApi().execStart(
220230
containerExec.getId(),
221231
new ExecStartConfig(null, null));
222232

223-
containerApi.putContainerArchive("container-archive-info-test", "/tmp/test/", new TarUtil().tar(gattaca), null, null);
233+
// filesystem operations against a running Hyper-V container are not supported,
234+
// so we stop the container before using the archive container api
235+
containerApi.containerStop("container-archive-info-test", null);
236+
containerApi.containerWait("container-archive-info-test", "not-running");
237+
238+
containerApi.putContainerArchive("container-archive-info-test", testPath, new TarUtil().tar(gattaca), null, null);
224239

225-
Map<String, Object> archiveCopyInfo = (Map<String, Object>) containerApi.containerArchiveInfo("container-archive-info-test", "/tmp/test/gattaca.txt");
240+
Map<String, Object> archiveCopyInfo = (Map<String, Object>) containerApi.containerArchiveInfo("container-archive-info-test", testPath + "/gattaca.txt");
226241
assertEquals("gattaca.txt", archiveCopyInfo == null ? null : archiveCopyInfo.get("name"));
227242

228243
removeContainer(engineApiClient, "container-archive-info-test");

api-client/src/test/java/de/gesellix/docker/remote/api/testutil/TestImage.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ public class TestImage {
99
private final EngineApiClient engineApiClient;
1010
private final String repository;
1111
private final String tag;
12+
private final boolean useWindowsContainer;
1213

1314
public TestImage(EngineApiClient engineApiClient) {
1415
this.engineApiClient = engineApiClient;
1516

16-
boolean isWindows = Objects.requireNonNull(engineApiClient.getSystemApi().systemVersion().getOs()).equalsIgnoreCase("windows");
17+
this.useWindowsContainer = Objects.requireNonNull(engineApiClient.getSystemApi().systemVersion().getOs()).equalsIgnoreCase("windows");
1718
this.repository = "gesellix/echo-server";
18-
this.tag = isWindows ? "os-windows" : "os-linux";
19+
this.tag = useWindowsContainer ? "os-windows" : "os-linux";
1920

2021
// TODO consider NOT calling prepare inside the constructor
2122
prepare();
@@ -36,4 +37,8 @@ public String getImageName() {
3637
public String getImageTag() {
3738
return tag;
3839
}
40+
41+
public boolean isWindowsContainer() {
42+
return useWindowsContainer;
43+
}
3944
}

0 commit comments

Comments
 (0)