Skip to content

Commit bedfd24

Browse files
committed
Cannot pause Windows Server Containers
1 parent 578f667 commit bedfd24

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import de.gesellix.docker.remote.api.core.LoggingExtensionsKt;
1717
import de.gesellix.docker.remote.api.core.StreamCallback;
1818
import de.gesellix.docker.remote.api.testutil.DisabledIfDaemonOnWindowsOs;
19+
import de.gesellix.docker.remote.api.testutil.DisabledIfNotPausable;
1920
import de.gesellix.docker.remote.api.testutil.DockerEngineAvailable;
2021
import de.gesellix.docker.remote.api.testutil.Failsafe;
2122
import de.gesellix.docker.remote.api.testutil.InjectDockerClient;
@@ -470,6 +471,7 @@ public void containerKill() {
470471
removeContainer(engineApiClient, "container-kill-test");
471472
}
472473

474+
@DisabledIfNotPausable
473475
@Test
474476
public void containerPauseUnpause() {
475477
imageApi.imageCreate(testImage.getImageName(), null, null, testImage.getImageTag(), null, null, null, null, null);
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package de.gesellix.docker.remote.api.testutil;
2+
3+
import de.gesellix.docker.remote.api.EngineApiClient;
4+
import de.gesellix.docker.remote.api.EngineApiClientImpl;
5+
import de.gesellix.docker.remote.api.SystemInfo;
6+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
7+
import org.junit.jupiter.api.extension.ExecutionCondition;
8+
import org.junit.jupiter.api.extension.ExtendWith;
9+
import org.junit.jupiter.api.extension.ExtensionContext;
10+
11+
import java.lang.annotation.ElementType;
12+
import java.lang.annotation.Retention;
13+
import java.lang.annotation.RetentionPolicy;
14+
import java.lang.annotation.Target;
15+
import java.util.Objects;
16+
17+
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.disabled;
18+
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.enabled;
19+
20+
@Target(ElementType.METHOD)
21+
@Retention(RetentionPolicy.RUNTIME)
22+
@ExtendWith(DisabledIfNotPausable.WindowsContainerPausableCondition.class)
23+
public @interface DisabledIfNotPausable {
24+
25+
class WindowsContainerPausableCondition implements ExecutionCondition {
26+
27+
private final EngineApiClient engineApiClient;
28+
29+
public WindowsContainerPausableCondition() {
30+
engineApiClient = new EngineApiClientImpl();
31+
}
32+
33+
@Override
34+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
35+
return isPausable()
36+
? enabled("Enabled: Non-Windows Server daemon detected")
37+
: disabled("Disabled: cannot pause Windows Server Containers");
38+
}
39+
40+
public boolean isPausable() {
41+
SystemInfo systemInfo = engineApiClient.getSystemApi().systemInfo();
42+
return !isWindowsDaemon(systemInfo) || !isDaemonIsolationByProcess(systemInfo);
43+
}
44+
45+
public boolean isDaemonIsolationByProcess(SystemInfo systemInfo) {
46+
return systemInfo.getIsolation() == SystemInfo.Isolation.Process;
47+
}
48+
49+
public boolean isWindowsDaemon(SystemInfo systemInfo) {
50+
return Objects.requireNonNull(systemInfo.getOsType())
51+
.equalsIgnoreCase("windows");
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)