From ad161a4ef85e03d4b7be3df2d584356bf4f7cc80 Mon Sep 17 00:00:00 2001 From: Volkan Yazici Date: Tue, 13 May 2025 07:58:36 +0000 Subject: [PATCH] 8355360: -d option of jwebserver command should accept relative paths Reviewed-by: dfuchs, michaelm --- .../simpleserver/SimpleFileServerImpl.java | 24 +++++- .../simpleserver/CommandLineNegativeTest.java | 10 --- .../simpleserver/CommandLinePositiveTest.java | 83 ++++++++++++++----- .../simpleserver/SimpleFileServerTest.java | 10 +-- .../jwebserver/CommandLineNegativeTest.java | 10 --- .../jwebserver/CommandLinePositiveTest.java | 83 ++++++++++++++----- 6 files changed, 144 insertions(+), 76 deletions(-) diff --git a/src/jdk.httpserver/share/classes/sun/net/httpserver/simpleserver/SimpleFileServerImpl.java b/src/jdk.httpserver/share/classes/sun/net/httpserver/simpleserver/SimpleFileServerImpl.java index 88f72c7aeae..e61dc027f90 100644 --- a/src/jdk.httpserver/share/classes/sun/net/httpserver/simpleserver/SimpleFileServerImpl.java +++ b/src/jdk.httpserver/share/classes/sun/net/httpserver/simpleserver/SimpleFileServerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,11 +29,13 @@ import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.SimpleFileServer; import com.sun.net.httpserver.SimpleFileServer.OutputLevel; +import java.io.IOException; import java.io.PrintWriter; import java.net.Inet6Address; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.UnknownHostException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; import java.util.Iterator; @@ -139,6 +141,7 @@ final class SimpleFileServerImpl { // configure and start server try { + root = realPath(root); var socketAddr = new InetSocketAddress(addr, port); var server = SimpleFileServer.createFileServer(socketAddr, root, outputLevel); server.start(); @@ -152,6 +155,25 @@ final class SimpleFileServerImpl { return Startup.OK.statusCode; } + private static Path realPath(Path root) { + + // `toRealPath()` invocation below already checks if file exists, though + // there is no way to figure out if it fails due to a non-existent file. + // Hence, checking the existence here first to deliver the user a more + // descriptive message. + if (!Files.exists(root)) { + throw new IllegalArgumentException("Path does not exist: " + root); + } + + // Obtain the real path + try { + return root.toRealPath(); + } catch (IOException exception) { + throw new IllegalArgumentException("Path is invalid: " + root, exception); + } + + } + private static final class Out { private final PrintWriter writer; private Out() { throw new AssertionError(); } diff --git a/test/jdk/com/sun/net/httpserver/simpleserver/CommandLineNegativeTest.java b/test/jdk/com/sun/net/httpserver/simpleserver/CommandLineNegativeTest.java index 717b92158b8..5a16bedc29d 100644 --- a/test/jdk/com/sun/net/httpserver/simpleserver/CommandLineNegativeTest.java +++ b/test/jdk/com/sun/net/httpserver/simpleserver/CommandLineNegativeTest.java @@ -168,16 +168,6 @@ public class CommandLineNegativeTest { @DataProvider public Object[][] directoryOptions() { return new Object[][] {{"-d"}, {"--directory"}}; } - @Test(dataProvider = "directoryOptions") - public void testRootNotAbsolute(String opt) throws Throwable { - out.println("\n--- testRootNotAbsolute, opt=\"%s\" ".formatted(opt)); - var root = Path.of("."); - assertFalse(root.isAbsolute()); - simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", opt, root.toString()) - .shouldNotHaveExitValue(0) - .shouldContain("Error: server config failed: " + "Path is not absolute:"); - } - @Test(dataProvider = "directoryOptions") public void testRootNotADirectory(String opt) throws Throwable { out.println("\n--- testRootNotADirectory, opt=\"%s\" ".formatted(opt)); diff --git a/test/jdk/com/sun/net/httpserver/simpleserver/CommandLinePositiveTest.java b/test/jdk/com/sun/net/httpserver/simpleserver/CommandLinePositiveTest.java index de5d6b54334..16d0ff67ee9 100644 --- a/test/jdk/com/sun/net/httpserver/simpleserver/CommandLinePositiveTest.java +++ b/test/jdk/com/sun/net/httpserver/simpleserver/CommandLinePositiveTest.java @@ -31,6 +31,7 @@ */ import java.io.IOException; +import java.io.UncheckedIOException; import java.net.InetAddress; import java.nio.file.Files; import java.nio.file.Path; @@ -52,19 +53,44 @@ public class CommandLinePositiveTest { static final Path JAVA_HOME = Path.of(System.getProperty("java.home")); static final String LOCALE_OPT = "-Duser.language=en -Duser.country=US"; static final String JAVA = getJava(JAVA_HOME); - static final Path CWD = Path.of(".").toAbsolutePath().normalize(); - static final Path TEST_DIR = CWD.resolve("CommandLinePositiveTest"); - static final Path TEST_FILE = TEST_DIR.resolve("file.txt"); - static final String TEST_DIR_STR = TEST_DIR.toString(); + + /** + * The real path to the current working directory where + *
    + *
  1. the web server process will be started in,
  2. + *
  3. and hence, unless given an explicit content root directory, the web + * server will be serving from.
  4. + *
+ */ + private static final Path CWD; + + static { + try { + CWD = Path.of(".").toRealPath(); + } catch (IOException exception) { + throw new UncheckedIOException(exception); + } + } + + private static final String CWD_STR = CWD.toString(); + + /** + * The real path to the web server content root directory, if one + * needs to be provided explicitly. + */ + private static final Path ROOT_DIR = CWD.resolve("www"); + + private static final String ROOT_DIR_STR = ROOT_DIR.toString(); + static final String LOOPBACK_ADDR = InetAddress.getLoopbackAddress().getHostAddress(); @BeforeTest public void setup() throws IOException { - if (Files.exists(TEST_DIR)) { - FileUtils.deleteFileTreeWithRetry(TEST_DIR); + if (Files.exists(ROOT_DIR)) { + FileUtils.deleteFileTreeWithRetry(ROOT_DIR); } - Files.createDirectories(TEST_DIR); - Files.createFile(TEST_FILE); + Files.createDirectories(ROOT_DIR); + Files.createFile(ROOT_DIR.resolve("file.txt")); } static final int SIGTERM = 15; @@ -83,12 +109,23 @@ public class CommandLinePositiveTest { public Object[][] directoryOptions() { return new Object[][] {{"-d"}, {"--directory"}}; } @Test(dataProvider = "directoryOptions") - public void testDirectory(String opt) throws Throwable { - out.println("\n--- testDirectory, opt=\"%s\" ".formatted(opt)); - simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, TEST_DIR_STR) + public void testAbsDirectory(String opt) throws Throwable { + out.printf("\n--- testAbsDirectory, opt=\"%s\"%n", opt); + testDirectory(opt, ROOT_DIR_STR); + } + + @Test(dataProvider = "directoryOptions") + public void testRelDirectory(String opt) throws Throwable { + out.printf("\n--- testRelDirectory, opt=\"%s\"%n", opt); + Path rootRelDir = CWD.relativize(ROOT_DIR); + testDirectory(opt, rootRelDir.toString()); + } + + private static void testDirectory(String opt, String rootDir) throws Throwable { + simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, rootDir) .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + ROOT_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -101,7 +138,7 @@ public class CommandLinePositiveTest { simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", opt, "0") .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -155,12 +192,12 @@ public class CommandLinePositiveTest { out.println("\n--- testBindAllInterfaces, opt=\"%s\" ".formatted(opt)); simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, "0.0.0.0") .shouldHaveExitValue(NORMAL_EXIT_CODE) - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") .shouldContain("URL http://" + InetAddress.getLocalHost().getHostAddress()); if (IPSupport.hasIPv6()) { simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", opt, "::0") .shouldHaveExitValue(NORMAL_EXIT_CODE) - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") .shouldContain("URL http://" + InetAddress.getLocalHost().getHostAddress()); } } @@ -170,7 +207,7 @@ public class CommandLinePositiveTest { out.println("\n--- testLastOneWinsBindAddress, opt=\"%s\" ".formatted(opt)); simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, "123.4.5.6", opt, LOOPBACK_ADDR) .shouldHaveExitValue(NORMAL_EXIT_CODE) - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -178,10 +215,10 @@ public class CommandLinePositiveTest { @Test(dataProvider = "directoryOptions") public void testLastOneWinsDirectory(String opt) throws Throwable { out.println("\n--- testLastOneWinsDirectory, opt=\"%s\" ".formatted(opt)); - simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, TEST_DIR_STR, opt, TEST_DIR_STR) + simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, ROOT_DIR_STR, opt, ROOT_DIR_STR) .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + ROOT_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -194,7 +231,7 @@ public class CommandLinePositiveTest { simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", "-p", "0", opt, "none", opt, "verbose") .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -204,14 +241,14 @@ public class CommandLinePositiveTest { simpleserver(JAVA, LOCALE_OPT, "-m", "jdk.httpserver", opt, "-999", opt, "0") .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @AfterTest public void teardown() throws IOException { - if (Files.exists(TEST_DIR)) { - FileUtils.deleteFileTreeWithRetry(TEST_DIR); + if (Files.exists(ROOT_DIR)) { + FileUtils.deleteFileTreeWithRetry(ROOT_DIR); } } @@ -247,7 +284,7 @@ public class CommandLinePositiveTest { StringBuffer sb = new StringBuffer(); // stdout & stderr // start the process and await the waitForLine before returning var p = ProcessTools.startProcess("simpleserver", - new ProcessBuilder(args).directory(TEST_DIR.toFile()), + new ProcessBuilder(args), line -> sb.append(line + "\n"), line -> line.startsWith(waitForLine.value), 30, // suitably high default timeout, not expected to timeout diff --git a/test/jdk/com/sun/net/httpserver/simpleserver/SimpleFileServerTest.java b/test/jdk/com/sun/net/httpserver/simpleserver/SimpleFileServerTest.java index 3206b62188a..ea1c73b361b 100644 --- a/test/jdk/com/sun/net/httpserver/simpleserver/SimpleFileServerTest.java +++ b/test/jdk/com/sun/net/httpserver/simpleserver/SimpleFileServerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -668,14 +668,6 @@ public class SimpleFileServerTest { @Test public void testIllegalPath() throws Exception { var addr = LOOPBACK_ADDR; - { // not absolute - Path p = Path.of("."); - assert Files.isDirectory(p); - assert Files.exists(p); - assert !p.isAbsolute(); - var iae = expectThrows(IAE, () -> SimpleFileServer.createFileServer(addr, p, OutputLevel.INFO)); - assertTrue(iae.getMessage().contains("is not absolute")); - } { // not a directory Path p = Files.createFile(TEST_DIR.resolve("aFile")); assert !Files.isDirectory(p); diff --git a/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLineNegativeTest.java b/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLineNegativeTest.java index 9c7a89696e2..da01b1542d8 100644 --- a/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLineNegativeTest.java +++ b/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLineNegativeTest.java @@ -168,16 +168,6 @@ public class CommandLineNegativeTest { @DataProvider public Object[][] directoryOptions() { return new Object[][] {{"-d"}, {"--directory"}}; } - @Test(dataProvider = "directoryOptions") - public void testRootNotAbsolute(String opt) throws Throwable { - out.println("\n--- testRootNotAbsolute, opt=\"%s\" ".formatted(opt)); - var root = Path.of("."); - assertFalse(root.isAbsolute()); - simpleserver(JWEBSERVER, LOCALE_OPT, opt, root.toString()) - .shouldNotHaveExitValue(0) - .shouldContain("Error: server config failed: " + "Path is not absolute:"); - } - @Test(dataProvider = "directoryOptions") public void testRootNotADirectory(String opt) throws Throwable { out.println("\n--- testRootNotADirectory, opt=\"%s\" ".formatted(opt)); diff --git a/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLinePositiveTest.java b/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLinePositiveTest.java index fc05c44377c..c0b0b4bc768 100644 --- a/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLinePositiveTest.java +++ b/test/jdk/com/sun/net/httpserver/simpleserver/jwebserver/CommandLinePositiveTest.java @@ -31,6 +31,7 @@ */ import java.io.IOException; +import java.io.UncheckedIOException; import java.net.InetAddress; import java.nio.file.Files; import java.nio.file.Path; @@ -52,19 +53,44 @@ public class CommandLinePositiveTest { static final Path JAVA_HOME = Path.of(System.getProperty("java.home")); static final String LOCALE_OPT = "-J-Duser.language=en -J-Duser.country=US"; static final String JWEBSERVER = getJwebserver(JAVA_HOME); - static final Path CWD = Path.of(".").toAbsolutePath().normalize(); - static final Path TEST_DIR = CWD.resolve("CommandLinePositiveTest"); - static final Path TEST_FILE = TEST_DIR.resolve("file.txt"); - static final String TEST_DIR_STR = TEST_DIR.toString(); + + /** + * The real path to the current working directory where + *
    + *
  1. the web server process will be started in,
  2. + *
  3. and hence, unless given an explicit content root directory, the web + * server will be serving from.
  4. + *
+ */ + private static final Path CWD; + + static { + try { + CWD = Path.of(".").toRealPath(); + } catch (IOException exception) { + throw new UncheckedIOException(exception); + } + } + + private static final String CWD_STR = CWD.toString(); + + /** + * The real path to the web server content root directory, if one + * needs to be provided explicitly. + */ + private static final Path ROOT_DIR = CWD.resolve("www"); + + private static final String ROOT_DIR_STR = ROOT_DIR.toString(); + static final String LOOPBACK_ADDR = InetAddress.getLoopbackAddress().getHostAddress(); @BeforeTest public void setup() throws IOException { - if (Files.exists(TEST_DIR)) { - FileUtils.deleteFileTreeWithRetry(TEST_DIR); + if (Files.exists(ROOT_DIR)) { + FileUtils.deleteFileTreeWithRetry(ROOT_DIR); } - Files.createDirectories(TEST_DIR); - Files.createFile(TEST_FILE); + Files.createDirectories(ROOT_DIR); + Files.createFile(ROOT_DIR.resolve("file.txt")); } static final int SIGTERM = 15; @@ -83,12 +109,23 @@ public class CommandLinePositiveTest { public Object[][] directoryOptions() { return new Object[][] {{"-d"}, {"--directory"}}; } @Test(dataProvider = "directoryOptions") - public void testDirectory(String opt) throws Throwable { - out.println("\n--- testDirectory, opt=\"%s\" ".formatted(opt)); - simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, TEST_DIR_STR) + public void testAbsDirectory(String opt) throws Throwable { + out.printf("\n--- testAbsDirectory, opt=\"%s\"%n", opt); + testDirectory(opt, ROOT_DIR_STR); + } + + @Test(dataProvider = "directoryOptions") + public void testRelDirectory(String opt) throws Throwable { + out.printf("\n--- testRelDirectory, opt=\"%s\"%n", opt); + Path rootRelDir = CWD.relativize(ROOT_DIR); + testDirectory(opt, rootRelDir.toString()); + } + + private static void testDirectory(String opt, String rootDir) throws Throwable { + simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, rootDir) .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + ROOT_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -101,7 +138,7 @@ public class CommandLinePositiveTest { simpleserver(JWEBSERVER, LOCALE_OPT, opt, "0") .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -155,12 +192,12 @@ public class CommandLinePositiveTest { out.println("\n--- testBindAllInterfaces, opt=\"%s\" ".formatted(opt)); simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, "0.0.0.0") .shouldHaveExitValue(NORMAL_EXIT_CODE) - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") .shouldContain("URL http://" + InetAddress.getLocalHost().getHostAddress()); if (IPSupport.hasIPv6()) { simpleserver(JWEBSERVER, LOCALE_OPT, opt, "::0") .shouldHaveExitValue(NORMAL_EXIT_CODE) - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on 0.0.0.0 (all interfaces) port") .shouldContain("URL http://" + InetAddress.getLocalHost().getHostAddress()); } } @@ -170,7 +207,7 @@ public class CommandLinePositiveTest { out.println("\n--- testLastOneWinsBindAddress, opt=\"%s\" ".formatted(opt)); simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, "123.4.5.6", opt, LOOPBACK_ADDR) .shouldHaveExitValue(NORMAL_EXIT_CODE) - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -178,10 +215,10 @@ public class CommandLinePositiveTest { @Test(dataProvider = "directoryOptions") public void testLastOneWinsDirectory(String opt) throws Throwable { out.println("\n--- testLastOneWinsDirectory, opt=\"%s\" ".formatted(opt)); - simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, TEST_DIR_STR, opt, TEST_DIR_STR) + simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, CWD_STR, opt, CWD_STR) .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -194,7 +231,7 @@ public class CommandLinePositiveTest { simpleserver(JWEBSERVER, LOCALE_OPT, "-p", "0", opt, "none", opt, "verbose") .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @@ -204,14 +241,14 @@ public class CommandLinePositiveTest { simpleserver(JWEBSERVER, LOCALE_OPT, opt, "-999", opt, "0") .shouldHaveExitValue(NORMAL_EXIT_CODE) .shouldContain("Binding to loopback by default. For all interfaces use \"-b 0.0.0.0\" or \"-b ::\".") - .shouldContain("Serving " + TEST_DIR_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") + .shouldContain("Serving " + CWD_STR + " and subdirectories on " + LOOPBACK_ADDR + " port") .shouldContain("URL http://" + LOOPBACK_ADDR); } @AfterTest public void teardown() throws IOException { - if (Files.exists(TEST_DIR)) { - FileUtils.deleteFileTreeWithRetry(TEST_DIR); + if (Files.exists(ROOT_DIR)) { + FileUtils.deleteFileTreeWithRetry(ROOT_DIR); } } @@ -247,7 +284,7 @@ public class CommandLinePositiveTest { StringBuffer sb = new StringBuffer(); // stdout & stderr // start the process and await the waitForLine before returning var p = ProcessTools.startProcess("simpleserver", - new ProcessBuilder(args).directory(TEST_DIR.toFile()), + new ProcessBuilder(args), line -> sb.append(line + "\n"), line -> line.startsWith(waitForLine.value), 30, // suitably high default timeout, not expected to timeout