Issue #5264 - Adding demo.mod support to embedded examples tests
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
parent
1feb60bb2c
commit
bdf30ba437
|
@ -0,0 +1,153 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// Copyright (c) 1995-2020 Mort Bay Consulting Pty Ltd and others.
|
||||||
|
//
|
||||||
|
// This program and the accompanying materials are made available under
|
||||||
|
// the terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
// https://www.eclipse.org/legal/epl-2.0
|
||||||
|
//
|
||||||
|
// This Source Code may also be made available under the following
|
||||||
|
// Secondary Licenses when the conditions for such availability set
|
||||||
|
// forth in the Eclipse Public License, v. 2.0 are satisfied:
|
||||||
|
// the Apache License v2.0 which is available at
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
|
||||||
|
// ========================================================================
|
||||||
|
//
|
||||||
|
|
||||||
|
package org.eclipse.jetty.embedded;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.StringUtil;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A utility test class to locate a Jetty Base for testing purposes by searching:
|
||||||
|
* <ul>
|
||||||
|
* <li>The <code>jetty.base</code> system property</li>
|
||||||
|
* <li>The <code>JETTY_BASE</code> environment variable</li>
|
||||||
|
* <li>Creating a {@code ${java.io.tmpDir}/jetty-demo-base/} to work with</li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
public class JettyDemoBase
|
||||||
|
{
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(JettyDemoBase.class);
|
||||||
|
public static final Path JETTY_BASE;
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
Path jettyBase = asDirectory(System.getProperty("jetty.base"));
|
||||||
|
LOG.debug("JettyDemobase(prop(jetty.home)) = {}", jettyBase);
|
||||||
|
if (jettyBase == null)
|
||||||
|
{
|
||||||
|
jettyBase = asDirectory(System.getenv().get("JETTY_BASE"));
|
||||||
|
LOG.debug("JettyHome(env(JETTY_BASE)) = {}", jettyBase);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jettyBase == null || !Files.exists(jettyBase.resolve("start.d/demo.ini")))
|
||||||
|
{
|
||||||
|
// Create the demo-base in java.io.tmpdir
|
||||||
|
ClassLoader origClassLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Path jettyHome = JettyHome.get();
|
||||||
|
jettyBase = Files.createTempDirectory("jetty-base");
|
||||||
|
|
||||||
|
Path startJar = jettyHome.resolve("start.jar");
|
||||||
|
URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{
|
||||||
|
startJar.toUri().toURL()
|
||||||
|
});
|
||||||
|
|
||||||
|
Thread.currentThread().setContextClassLoader(urlClassLoader);
|
||||||
|
|
||||||
|
Class<?> mainClass = urlClassLoader.loadClass("org.eclipse.jetty.start.Main");
|
||||||
|
Method mainMethod = mainClass.getMethod("main", String[].class);
|
||||||
|
|
||||||
|
String[] args = new String[]{
|
||||||
|
"jetty.home=" + jettyHome.toString(),
|
||||||
|
"jetty.base=" + jettyBase.toString(),
|
||||||
|
"--add-modules=demo"
|
||||||
|
};
|
||||||
|
|
||||||
|
LOG.info("Creating DemoBase in {}", jettyBase);
|
||||||
|
mainMethod.invoke(mainClass, new Object[]{args});
|
||||||
|
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("JettyHome(working.resolve(...)) = {}", jettyBase);
|
||||||
|
}
|
||||||
|
catch (Throwable th)
|
||||||
|
{
|
||||||
|
LOG.warn("Unable to resolve Jetty Distribution location", th);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Thread.currentThread().setContextClassLoader(origClassLoader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JETTY_BASE = jettyBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Path asDirectory(String path)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (path == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtil.isBlank(path))
|
||||||
|
{
|
||||||
|
LOG.debug("asDirectory {} is blank", path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Path dir = Paths.get(path);
|
||||||
|
if (!Files.exists(dir))
|
||||||
|
{
|
||||||
|
LOG.debug("asDirectory {} does not exist", path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Files.isDirectory(dir))
|
||||||
|
{
|
||||||
|
LOG.debug("asDirectory {} is not a directory", path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("asDirectory {}", dir);
|
||||||
|
return dir.toAbsolutePath();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
LOG.trace("IGNORED", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Path get()
|
||||||
|
{
|
||||||
|
if (JETTY_BASE == null)
|
||||||
|
throw new RuntimeException("jetty-base not found");
|
||||||
|
return JETTY_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Path resolve(String path)
|
||||||
|
{
|
||||||
|
return get().resolve(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String... arg)
|
||||||
|
{
|
||||||
|
System.err.println("Jetty Base is " + JETTY_BASE);
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A utility test class to locate a Jetty Distribution for testing purposes by searching:
|
* A utility test class to locate a Jetty Home for testing purposes by searching:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>The <code>jetty.home</code> system property</li>
|
* <li>The <code>jetty.home</code> system property</li>
|
||||||
* <li>The <code>JETTY_HOME</code> environment variable</li>
|
* <li>The <code>JETTY_HOME</code> environment variable</li>
|
||||||
|
@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
|
||||||
public class JettyHome
|
public class JettyHome
|
||||||
{
|
{
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(JettyHome.class);
|
private static final Logger LOG = LoggerFactory.getLogger(JettyHome.class);
|
||||||
public static final Path DISTRIBUTION;
|
public static final Path JETTY_HOME;
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
|
@ -51,13 +51,9 @@ public class JettyHome
|
||||||
|
|
||||||
Path distro = null;
|
Path distro = null;
|
||||||
|
|
||||||
if (jettyHome != null)
|
if (jettyHome != null && Files.exists(jettyHome.resolve("start.jar")))
|
||||||
{
|
{
|
||||||
Path parent = jettyHome.getParent();
|
distro = jettyHome;
|
||||||
if (hasDemoBase(parent))
|
|
||||||
{
|
|
||||||
distro = parent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (distro == null)
|
if (distro == null)
|
||||||
|
@ -70,7 +66,7 @@ public class JettyHome
|
||||||
while (dir == null && working != null)
|
while (dir == null && working != null)
|
||||||
{
|
{
|
||||||
dir = asDirectory(working.resolve("jetty-home/target/jetty-home").toString());
|
dir = asDirectory(working.resolve("jetty-home/target/jetty-home").toString());
|
||||||
if (dir != null && hasDemoBase(dir))
|
if (dir != null && Files.exists(dir.resolve("start.jar")))
|
||||||
{
|
{
|
||||||
distro = dir;
|
distro = dir;
|
||||||
}
|
}
|
||||||
|
@ -95,13 +91,7 @@ public class JettyHome
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("JettyHome() FOUND = {}", distro);
|
LOG.debug("JettyHome() FOUND = {}", distro);
|
||||||
}
|
}
|
||||||
DISTRIBUTION = distro;
|
JETTY_HOME = distro;
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean hasDemoBase(Path path)
|
|
||||||
{
|
|
||||||
Path demoBase = path.resolve("demo-base");
|
|
||||||
return Files.exists(demoBase) && Files.isDirectory(demoBase);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Path asDirectory(String path)
|
private static Path asDirectory(String path)
|
||||||
|
@ -144,9 +134,9 @@ public class JettyHome
|
||||||
|
|
||||||
public static Path get()
|
public static Path get()
|
||||||
{
|
{
|
||||||
if (DISTRIBUTION == null)
|
if (JETTY_HOME == null)
|
||||||
throw new RuntimeException("jetty-distribution not found");
|
throw new RuntimeException("jetty-home not found");
|
||||||
return DISTRIBUTION;
|
return JETTY_HOME;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Path resolve(String path)
|
public static Path resolve(String path)
|
||||||
|
@ -156,6 +146,6 @@ public class JettyHome
|
||||||
|
|
||||||
public static void main(String... arg)
|
public static void main(String... arg)
|
||||||
{
|
{
|
||||||
System.err.println("Jetty Distribution is " + DISTRIBUTION);
|
System.err.println("Jetty Home is " + JETTY_HOME);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,21 +65,13 @@ public class LikeJettyXml
|
||||||
{
|
{
|
||||||
public static Server createServer(int port, int securePort, boolean addDebugListener) throws Exception
|
public static Server createServer(int port, int securePort, boolean addDebugListener) throws Exception
|
||||||
{
|
{
|
||||||
// Path to as-built jetty-distribution directory
|
|
||||||
Path jettyDistro = JettyHome.get();
|
|
||||||
|
|
||||||
// Find jetty home and base directories
|
// Find jetty home and base directories
|
||||||
String homePath = System.getProperty("jetty.home", jettyDistro.resolve("jetty-home").toString());
|
Path jettyHome = JettyHome.get();
|
||||||
Path homeDir = Paths.get(homePath);
|
Path jettyBase = JettyDemoBase.get();
|
||||||
|
|
||||||
String basePath = System.getProperty("jetty.base", jettyDistro.resolve("demo-base").toString());
|
|
||||||
Path baseDir = Paths.get(basePath);
|
|
||||||
|
|
||||||
// Configure jetty.home and jetty.base system properties
|
// Configure jetty.home and jetty.base system properties
|
||||||
String jettyHome = homeDir.toAbsolutePath().toString();
|
System.setProperty("jetty.home", jettyHome.toString());
|
||||||
String jettyBase = baseDir.toAbsolutePath().toString();
|
System.setProperty("jetty.base", jettyBase.toString());
|
||||||
System.setProperty("jetty.home", jettyHome);
|
|
||||||
System.setProperty("jetty.base", jettyBase);
|
|
||||||
|
|
||||||
// === jetty.xml ===
|
// === jetty.xml ===
|
||||||
// Setup Threadpool
|
// Setup Threadpool
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class OneWebApp
|
||||||
// PlusConfiguration) to choosing where the webapp will unpack itself.
|
// PlusConfiguration) to choosing where the webapp will unpack itself.
|
||||||
WebAppContext webapp = new WebAppContext();
|
WebAppContext webapp = new WebAppContext();
|
||||||
webapp.setContextPath("/");
|
webapp.setContextPath("/");
|
||||||
File warFile = JettyHome.resolve("demo-base/webapps/async-rest.war").toFile();
|
File warFile = JettyDemoBase.resolve("webapps/demo-async-rest.war").toFile();
|
||||||
webapp.setWar(warFile.getAbsolutePath());
|
webapp.setWar(warFile.getAbsolutePath());
|
||||||
|
|
||||||
// A WebAppContext is a ContextHandler as well so it needs to be set to
|
// A WebAppContext is a ContextHandler as well so it needs to be set to
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class OneWebAppWithJsp
|
||||||
// the webapp will unpack itself.
|
// the webapp will unpack itself.
|
||||||
WebAppContext webapp = new WebAppContext();
|
WebAppContext webapp = new WebAppContext();
|
||||||
webapp.setContextPath("/");
|
webapp.setContextPath("/");
|
||||||
Path warFile = JettyHome.resolve("demo-base/webapps/test.war");
|
Path warFile = JettyDemoBase.resolve("webapps/demo-jetty.war");
|
||||||
if (!Files.exists(warFile))
|
if (!Files.exists(warFile))
|
||||||
{
|
{
|
||||||
throw new FileNotFoundException(warFile.toString());
|
throw new FileNotFoundException(warFile.toString());
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class ServerWithAnnotations
|
||||||
webapp.addConfiguration(new EnvConfiguration(), new PlusConfiguration(), new AnnotationConfiguration());
|
webapp.addConfiguration(new EnvConfiguration(), new PlusConfiguration(), new AnnotationConfiguration());
|
||||||
|
|
||||||
webapp.setContextPath("/");
|
webapp.setContextPath("/");
|
||||||
File warFile = JettyHome.resolve("demo-base/webapps/test-spec.war").toFile();
|
File warFile = JettyDemoBase.resolve("webapps/demo-spec.war").toFile();
|
||||||
webapp.setWar(warFile.getAbsolutePath());
|
webapp.setWar(warFile.getAbsolutePath());
|
||||||
webapp.setAttribute(
|
webapp.setAttribute(
|
||||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||||
|
|
|
@ -41,7 +41,7 @@ public class ServerWithJNDI
|
||||||
// Create a WebApp
|
// Create a WebApp
|
||||||
WebAppContext webapp = new WebAppContext();
|
WebAppContext webapp = new WebAppContext();
|
||||||
webapp.setContextPath("/");
|
webapp.setContextPath("/");
|
||||||
Path testJndiWar = JettyHome.resolve("demo-base/webapps/test-jndi.war");
|
Path testJndiWar = JettyDemoBase.resolve("webapps/demo-jndi.war");
|
||||||
webapp.setWarResource(new PathResource(testJndiWar));
|
webapp.setWarResource(new PathResource(testJndiWar));
|
||||||
server.setHandler(webapp);
|
server.setHandler(webapp);
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class LikeJettyXmlTest extends AbstractEmbeddedTest
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void startServer() throws Exception
|
public void startServer() throws Exception
|
||||||
{
|
{
|
||||||
assumeTrue(JettyHome.DISTRIBUTION != null, "jetty-distribution not found");
|
assumeTrue(JettyHome.JETTY_HOME != null, "jetty-distribution not found");
|
||||||
|
|
||||||
server = LikeJettyXml.createServer(0, 0, false);
|
server = LikeJettyXml.createServer(0, 0, false);
|
||||||
server.start();
|
server.start();
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class OneWebAppTest extends AbstractEmbeddedTest
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void startServer() throws Exception
|
public void startServer() throws Exception
|
||||||
{
|
{
|
||||||
assumeTrue(JettyHome.DISTRIBUTION != null, "jetty-distribution not found");
|
assumeTrue(JettyHome.JETTY_HOME != null, "jetty-distribution not found");
|
||||||
|
|
||||||
server = OneWebApp.createServer(0);
|
server = OneWebApp.createServer(0);
|
||||||
server.start();
|
server.start();
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class OneWebAppWithJspTest extends AbstractEmbeddedTest
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void startServer() throws Exception
|
public void startServer() throws Exception
|
||||||
{
|
{
|
||||||
assumeTrue(JettyHome.DISTRIBUTION != null, "jetty-distribution not found");
|
assumeTrue(JettyHome.JETTY_HOME != null, "jetty-distribution not found");
|
||||||
|
|
||||||
server = OneWebAppWithJsp.createServer(0);
|
server = OneWebAppWithJsp.createServer(0);
|
||||||
server.start();
|
server.start();
|
||||||
|
|
|
@ -41,7 +41,7 @@ public class ServerWithAnnotationsTest extends AbstractEmbeddedTest
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void startServer() throws Exception
|
public void startServer() throws Exception
|
||||||
{
|
{
|
||||||
assumeTrue(JettyHome.DISTRIBUTION != null, "jetty-distribution not found");
|
assumeTrue(JettyHome.JETTY_HOME != null, "jetty-distribution not found");
|
||||||
|
|
||||||
server = ServerWithAnnotations.createServer(0);
|
server = ServerWithAnnotations.createServer(0);
|
||||||
server.start();
|
server.start();
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class ServerWithJNDITest extends AbstractEmbeddedTest
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void startServer() throws Exception
|
public void startServer() throws Exception
|
||||||
{
|
{
|
||||||
assumeTrue(JettyHome.DISTRIBUTION != null, "jetty-distribution not found");
|
assumeTrue(JettyHome.JETTY_HOME != null, "jetty-distribution not found");
|
||||||
|
|
||||||
server = ServerWithJNDI.createServer(0);
|
server = ServerWithJNDI.createServer(0);
|
||||||
server.start();
|
server.start();
|
||||||
|
|
Loading…
Reference in New Issue