Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Backport 2.x] Don't run EmptyDirTaskTests in a Docker container #3912

Merged
merged 1 commit into from
Jul 15, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;

import com.carrotsearch.randomizedtesting.RandomizedTest;
import org.apache.tools.ant.taskdefs.condition.Os;
Expand Down Expand Up @@ -64,7 +67,11 @@ public void testCreateEmptyDir() throws Exception {
}

public void testCreateEmptyDirNoPermissions() throws Exception {
RandomizedTest.assumeFalse("Functionality is Unix specific", Os.isFamily(Os.FAMILY_WINDOWS));
// Test depends on Posix file permissions
RandomizedTest.assumeFalse("Functionality is Unix-like OS specific", Os.isFamily(Os.FAMILY_WINDOWS));
// Java's Files.setPosixFilePermissions is a NOOP inside a Docker container as
// files are created by default with UID and GID = 0 (root).
RandomizedTest.assumeFalse("Functionality doesn't work in Docker", isRunningInDocker());

Project project = ProjectBuilder.builder().build();
EmptyDirTask emptyDirTask = project.getTasks().create("emptyDirTask", EmptyDirTask.class);
Expand Down Expand Up @@ -92,4 +99,20 @@ private File getNewNonExistingTempFolderFile(Project project) throws IOException
return newEmptyFolder;
}

private static boolean isRunningInDocker() {
// Only reliable existing method but may be removed in future
if (new File("/.dockerenv").exists()) {
return true;
}
try {
// Backup 1: look for 'docker' in one of the paths in /proc/1/cgroup
if (Files.lines(Path.of("/proc/1/cgroup")).anyMatch(line -> line.contains("docker"))) {
return true;
}
// Backup 2: look for 'docker' in overlay fs
return Files.lines(Path.of("/proc/1/mounts")).anyMatch(line -> line.startsWith("overlay") && line.contains("docker"));
} catch (InvalidPathException | IOException e) {
return false;
}
}
}