Skip to content

Commit 79b064b

Browse files
authored
Fix CmdModifierTest#testMemoryLimitModified in cgroup2 environment. (#4375)
* Fix `CmdModifierTest#testMemoryLimitModified` in cgroup2 environment. The `testMemoryLimitModified` was failing in cgroup2 environment because of the missing `/sys/fs/cgroup/memory/memory.limit_in_bytes` file. In the cgroup2 environment a new file should be checked instead -- `/sys/fs/cgroup/memory.max`. This commit intrdocues changes to `cat` both files: 1. `/sys/fs/cgroup/memory/memory.limit_in_bytes` from the first version of cgroup 2. `/sys/fs/cgroup/memory.max` from the second Similar issues: 1. oracle/docker-images#1939 2. apify/crawlee#693 * Use `docker info` to distinguish cgroup version * Use `DockerClientFactory.instance().client()` instead of `memoryLimitedRedis.getDockerClient()`
1 parent 8746f20 commit 79b064b

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

docs/examples/junit4/generic/src/test/java/generic/CmdModifierTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package generic;
22

3+
import com.github.dockerjava.api.DockerClient;
4+
import com.github.dockerjava.api.model.Info;
35
import org.junit.Rule;
46
import org.junit.Test;
7+
import org.testcontainers.DockerClientFactory;
58
import org.testcontainers.containers.Container;
69
import org.testcontainers.containers.GenericContainer;
710
import org.testcontainers.utility.DockerImageName;
811

912
import java.io.IOException;
13+
import java.util.Objects;
1014

1115
import static org.junit.Assert.assertEquals;
1216

@@ -39,7 +43,18 @@ public void testHostnameModified() throws IOException, InterruptedException {
3943

4044
@Test
4145
public void testMemoryLimitModified() throws IOException, InterruptedException {
42-
final Container.ExecResult execResult = memoryLimitedRedis.execInContainer("cat", "/sys/fs/cgroup/memory/memory.limit_in_bytes");
46+
final Container.ExecResult execResult = memoryLimitedRedis.execInContainer("cat", getMemoryLimitFilePath());
4347
assertEquals(String.valueOf(memoryInBytes), execResult.getStdout().trim());
4448
}
49+
50+
private String getMemoryLimitFilePath() {
51+
DockerClient dockerClient = DockerClientFactory.instance().client();
52+
Info info = dockerClient.infoCmd().exec();
53+
Object cgroupVersion = info.getRawValues().get("CgroupVersion");
54+
boolean cgroup2 = Objects.equals("2", cgroupVersion);
55+
if (cgroup2) {
56+
return "/sys/fs/cgroup/memory.max";
57+
}
58+
return "/sys/fs/cgroup/memory/memory.limit_in_bytes";
59+
}
4560
}

0 commit comments

Comments
 (0)