From a84cd26198ee178e7ae7fc34d5c41d628498f8b9 Mon Sep 17 00:00:00 2001 From: Dusan Balek Date: Tue, 16 Jun 2026 06:52:52 +0000 Subject: [PATCH] 8386654: Test tools/javac/SystemFilesClosed.java fails on systems without lsof Reviewed-by: jpai, vromero, liach --- .../tools/javac/SystemFilesClosed.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/test/langtools/tools/javac/SystemFilesClosed.java b/test/langtools/tools/javac/SystemFilesClosed.java index e5cd080eaff..a08828c842d 100644 --- a/test/langtools/tools/javac/SystemFilesClosed.java +++ b/test/langtools/tools/javac/SystemFilesClosed.java @@ -31,18 +31,22 @@ */ import java.io.BufferedReader; +import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Arrays; import java.util.List; +import java.util.Optional; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.SimpleJavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @@ -53,6 +57,11 @@ public class SystemFilesClosed { @Test void testSystemFilesClosed() throws Exception { + // Probe lsof availability before doing the jlink/compile work + if (!lsofCommand().isPresent()) { + Assumptions.abort("lsof command is not available on this system"); + } + String targetSystem = base.toString(); int ret = java.util.spi.ToolProvider.findFirst("jlink") .orElseThrow() @@ -83,7 +92,8 @@ public class SystemFilesClosed { } Process process = new ProcessBuilder() - .command("lsof", "-p", String.valueOf(ProcessHandle.current().pid())) + .command(lsofCommand().orElseThrow(() -> new RuntimeException("lsof command is not available on this system")), + "-p", String.valueOf(ProcessHandle.current().pid())) .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.INHERIT) .start(); @@ -103,4 +113,17 @@ public class SystemFilesClosed { .orElseThrow() .getName()); } + + static Optional lsofCommandCache = Arrays.stream(new String[] { + "/usr/bin/lsof", + "/usr/sbin/lsof", + "/bin/lsof", + "/sbin/lsof", + "/usr/local/bin/lsof"}) + .filter(args -> new File(args).exists()) + .findFirst(); + + static Optional lsofCommand() { + return lsofCommandCache; + } }