From 8f733169f5113cad1032a204f2b4422b0ba75d8b Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Fri, 11 Apr 2014 14:26:35 -0700 Subject: [PATCH] 432321 - jetty-start / Allow defining extra start directories for common configurations + Final work for unit testing happiness + BaseHome is now configured via ConfigSources (as intended) + StartArgs now parses the ConfigSources list (in reverse) + CommandLineConfigSource now does all of the ${jetty.base} and ${jetty.home} determination (from properties and env, with fallbacks) --- .../org/eclipse/jetty/start/BaseHome.java | 167 ++++++------------ .../main/java/org/eclipse/jetty/start/FS.java | 9 - .../java/org/eclipse/jetty/start/Main.java | 35 +--- .../org/eclipse/jetty/start/PathFinder.java | 3 +- .../org/eclipse/jetty/start/StartArgs.java | 154 ++++++++-------- .../start/config/CommandLineConfigSource.java | 111 ++++++++++-- .../org/eclipse/jetty/start/BaseHomeTest.java | 18 +- .../eclipse/jetty/start/ExtraStartTest.java | 5 +- .../org/eclipse/jetty/start/MainTest.java | 31 ++-- .../jetty/start/ModuleGraphWriterTest.java | 3 +- .../org/eclipse/jetty/start/ModuleTest.java | 53 ++++-- .../org/eclipse/jetty/start/ModulesTest.java | 12 +- .../eclipse/jetty/start/PathFinderTest.java | 7 +- .../test/resources/assert-home-with-jvm.txt | 64 +++---- .../resources/assert-home-with-spaces.txt | 2 +- .../src/test/resources/assert-home.txt | 62 +++---- 16 files changed, 378 insertions(+), 358 deletions(-) diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java index 68c121ed92e..35485ad7c61 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java @@ -20,9 +20,6 @@ package org.eclipse.jetty.start; import java.io.File; import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Path; @@ -33,13 +30,13 @@ import java.util.EnumSet; import java.util.List; import java.util.ListIterator; import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.eclipse.jetty.start.config.CommandLineConfigSource; import org.eclipse.jetty.start.config.ConfigSource; import org.eclipse.jetty.start.config.ConfigSources; import org.eclipse.jetty.start.config.DirConfigSource; +import org.eclipse.jetty.start.config.JettyBaseConfigSource; +import org.eclipse.jetty.start.config.JettyHomeConfigSource; /** * File access for ${jetty.home}, ${jetty.base}, directories. @@ -110,87 +107,71 @@ public class BaseHome return String.format("${%s}%c%s",name,File.separatorChar,relative.toString()); } } - private static final String JETTY_BASE = "jetty.base"; - private static final String JETTY_HOME = "jetty.home";; + public static final String JETTY_BASE = "jetty.base"; + public static final String JETTY_HOME = "jetty.home"; private final static EnumSet SEARCH_VISIT_OPTIONS = EnumSet.of(FileVisitOption.FOLLOW_LINKS); private final static int MAX_SEARCH_DEPTH = Integer.getInteger("org.eclipse.jetty.start.searchDepth",10); - private Path homeDir; - private ConfigSources sources; - private Path baseDir; + private final ConfigSources sources; + private final Path homeDir; + private final Path baseDir; - public BaseHome() + public BaseHome() throws IOException { - try - { - // find ${jetty.base} and ${jetty.home} from environment. - - // overrides from command line (and the like) come later. - // in the .initialize() step - - // default is ${user.dir} - this.baseDir = FS.toPath(System.getProperty("user.dir",".")); - - // if ${jetty.base} declared, use it - String jettyBase = System.getProperty(JETTY_BASE); - if (jettyBase != null) - { - this.baseDir = FS.toPath(jettyBase); - } - - // find ${jetty.home} - - // default location is based on lookup for BaseHome (from jetty's start.jar) - URL jarfile = this.getClass().getClassLoader().getResource("org/eclipse/jetty/start/BaseHome.class"); - if (jarfile != null) - { - Matcher m = Pattern.compile("jar:(file:.*)!/org/eclipse/jetty/start/BaseHome.class").matcher(jarfile.toString()); - if (m.matches()) - { - // ${jetty.home} is relative to found BaseHome class - this.homeDir = new File(new URI(m.group(1))).getParentFile().toPath(); - } - } - - // if we can't locate BaseHome, then assume home == base - if (this.homeDir == null) - { - this.homeDir = baseDir.toAbsolutePath(); - } - - // if ${jetty.home} declared, use it - String jettyHome = System.getProperty(JETTY_HOME); - if (jettyHome != null) - { - this.homeDir = FS.toPath(jettyHome); - } - - // Resolve to absolute paths - this.homeDir = this.homeDir.toAbsolutePath(); - this.baseDir = this.baseDir.toAbsolutePath(); - } - catch (URISyntaxException e) - { - throw new RuntimeException(e); - } + this(new String[0]); } - public BaseHome(File homeDir, File baseDir) + public BaseHome(String cmdLine[]) throws IOException { - Objects.requireNonNull(homeDir,"Home Dir cannot be null"); + this(new CommandLineConfigSource(cmdLine)); + } - this.homeDir = homeDir.toPath(); - this.baseDir = homeDir.toPath(); // default - if (baseDir != null) + public BaseHome(CommandLineConfigSource cmdLineSource) throws IOException + { + StartLog.getInstance().initialize(this,cmdLineSource); + + sources = new ConfigSources(); + sources.add(cmdLineSource); + this.homeDir = cmdLineSource.getHomePath(); + this.baseDir = cmdLineSource.getBasePath(); + sources.add(new JettyBaseConfigSource(cmdLineSource.getBasePath())); + sources.add(new JettyHomeConfigSource(cmdLineSource.getHomePath())); + + System.setProperty(JETTY_HOME,homeDir.toAbsolutePath().toString()); + System.setProperty(JETTY_BASE,baseDir.toAbsolutePath().toString()); + } + + public BaseHome(ConfigSources sources) + { + this.sources = sources; + Path home = null; + Path base = null; + for (ConfigSource source : sources) { - this.baseDir = baseDir.toPath(); + if (source instanceof CommandLineConfigSource) + { + CommandLineConfigSource cmdline = (CommandLineConfigSource)source; + home = cmdline.getHomePath(); + base = cmdline.getBasePath(); + } + else if (source instanceof JettyBaseConfigSource) + { + base = ((JettyBaseConfigSource)source).getDir(); + } + else if (source instanceof JettyHomeConfigSource) + { + home = ((JettyHomeConfigSource)source).getDir(); + } } - // Resolve to absolute paths - this.homeDir = this.homeDir.toAbsolutePath(); - this.baseDir = this.baseDir.toAbsolutePath(); + Objects.requireNonNull(home,"jetty.home cannot be null"); + this.homeDir = home; + this.baseDir = (base != null)?base:home; + + System.setProperty(JETTY_HOME,homeDir.toAbsolutePath().toString()); + System.setProperty(JETTY_BASE,baseDir.toAbsolutePath().toString()); } public String getBase() @@ -468,53 +449,11 @@ public class BaseHome return hits; } - public void initialize(ConfigSources config) - { - CommandLineConfigSource cmdLine = config.getCommandLineSource(); - if (cmdLine != null) - { - this.homeDir = cmdLine.getHomePath(); - this.baseDir = cmdLine.getBasePath(); - } - - this.sources = config; - } - public boolean isBaseDifferent() { return homeDir.compareTo(baseDir) != 0; } - /** - * @deprecated use {@link #setBaseDir(Path)} - */ - @Deprecated - public void setBaseDir(File dir) - { - setBaseDir(dir.toPath()); - } - - public void setBaseDir(Path dir) - { - this.baseDir = dir.toAbsolutePath(); - System.setProperty(JETTY_BASE,dir.toString()); - } - - /** - * @deprecated use {@link #setHomeDir(Path)} - */ - @Deprecated - public void setHomeDir(File dir) - { - setHomeDir(dir.toPath()); - } - - public void setHomeDir(Path dir) - { - this.homeDir = dir.toAbsolutePath(); - System.setProperty(JETTY_HOME,dir.toString()); - } - /** * Convenience method for toShortForm(file.toPath()) */ diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java b/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java index abedea9c2a4..ce5efb88ed4 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java @@ -306,15 +306,6 @@ public class FS return ret.toString(); } - public static Path toOptionalPath(String path) - { - if (path == null) - { - return null; - } - return toPath(path); - } - public static Path toPath(String path) { return FileSystems.getDefault().getPath(FS.separators(path)); diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java index 33f0c23b09b..97734a91ffd 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java @@ -51,9 +51,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.jetty.start.config.CommandLineConfigSource; -import org.eclipse.jetty.start.config.ConfigSources; -import org.eclipse.jetty.start.config.JettyBaseConfigSource; -import org.eclipse.jetty.start.config.JettyHomeConfigSource; /** * Main start class. @@ -138,11 +135,10 @@ public class Main System.exit(exit); } - private final BaseHome baseHome; + private BaseHome baseHome; Main() throws IOException { - baseHome = new BaseHome(); } private void copyInThread(final InputStream in, final OutputStream out) @@ -551,45 +547,32 @@ public class Main public StartArgs processCommandLine(String[] cmdLine) throws Exception { - ConfigSources sources = new ConfigSources(); - // Processing Order is important! // ------------------------------------------------------------ - // 1) Directory Locations - + // 1) Configuration Locations CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine); - sources.add(cmdLineSource); - sources.add(new JettyBaseConfigSource(cmdLineSource.getBasePath())); - sources.add(new JettyHomeConfigSource(cmdLineSource.getHomePath())); - - // Set Home and Base at the start, as many other paths encountered - // will be based off of them. - baseHome.initialize(sources); - - // ------------------------------------------------------------ - // 2) Start Logging - StartLog.getInstance().initialize(baseHome,cmdLineSource); + baseHome = new BaseHome(cmdLineSource); StartLog.debug("jetty.home=%s",baseHome.getHome()); StartLog.debug("jetty.base=%s",baseHome.getBase()); // ------------------------------------------------------------ - // 3) Parse everything provided. + // 2) Parse everything provided. // This would be the directory information + // the various start inis // and then the raw command line arguments StartLog.debug("Parsing collected arguments"); StartArgs args = new StartArgs(); - args.parse(sources); + args.parse(baseHome.getConfigSources()); // ------------------------------------------------------------ - // 4) Module Registration + // 3) Module Registration Modules modules = new Modules(); StartLog.debug("Registering all modules"); modules.registerAll(baseHome, args); // ------------------------------------------------------------ - // 5) Active Module Resolution + // 4) Active Module Resolution for (String enabledModule : args.getEnabledModules()) { List msources = args.getSources(enabledModule); @@ -603,12 +586,12 @@ public class Main List activeModules = modules.resolveEnabled(); // ------------------------------------------------------------ - // 6) Lib & XML Expansion / Resolution + // 5) Lib & XML Expansion / Resolution args.expandLibs(baseHome); args.expandModules(baseHome,activeModules); // ------------------------------------------------------------ - // 7) Resolve Extra XMLs + // 6) Resolve Extra XMLs args.resolveExtraXmls(baseHome); return args; diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/PathFinder.java b/jetty-start/src/main/java/org/eclipse/jetty/start/PathFinder.java index 799ccb193ea..1f06f06bc4c 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/PathFinder.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/PathFinder.java @@ -48,7 +48,7 @@ public class PathFinder extends SimpleFileVisitor private void addHit(Path path) { String relPath = basePath.relativize(path).toString(); - StartLog.debug("addHit(" + path + ") = [" + relPath + "," + path + "]"); + StartLog.debug("Found [" + relPath + "] " + path); hits.put(relPath,path); } @@ -139,7 +139,6 @@ public class PathFinder extends SimpleFileVisitor { if (fileMatcher.matches(file)) { - StartLog.debug("Found file: " + file); addHit(file); } else diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java index 46399e6be0e..34b5aa3458b 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java @@ -29,11 +29,13 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.ListIterator; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; import org.eclipse.jetty.start.Props.Prop; +import org.eclipse.jetty.start.config.ConfigSource; import org.eclipse.jetty.start.config.ConfigSources; /** @@ -66,7 +68,7 @@ public class StartArgs } private static final String SERVER_MAIN = "org.eclipse.jetty.xml.XmlConfiguration"; - + /** List of enabled modules */ private Set modules = new HashSet<>(); /** Map of enabled modules to the source of where that activation occurred */ @@ -84,7 +86,7 @@ public class StartArgs /** List of all xml references found directly on command line or start.ini */ private List xmlRefs = new ArrayList<>(); - + private Props properties = new Props(); private Set systemPropertyKeys = new HashSet<>(); private List rawLibs = new ArrayList<>(); @@ -247,6 +249,30 @@ public class StartArgs } } + private void dumpProperty(String key) + { + Prop prop = properties.getProp(key); + if (prop == null) + { + System.out.printf(" %s (not defined)%n",key); + } + else + { + System.out.printf(" %s = %s%n",key,properties.expand(prop.value)); + if (StartLog.isDebugEnabled()) + { + System.out.printf(" origin: %s%n",prop.origin); + while (prop.overrides != null) + { + prop = prop.overrides; + System.out.printf(" (overrides)%n"); + System.out.printf(" %s = %s%n",key,properties.expand(prop.value)); + System.out.printf(" origin: %s%n",prop.origin); + } + } + } + } + public void dumpSystemProperties() { System.out.println(); @@ -275,30 +301,6 @@ public class StartArgs System.out.printf(" %s = %s%n",key,System.getProperty(key)); } - private void dumpProperty(String key) - { - Prop prop = properties.getProp(key); - if (prop == null) - { - System.out.printf(" %s (not defined)%n",key); - } - else - { - System.out.printf(" %s = %s%n",key,properties.expand(prop.value)); - if (StartLog.isDebugEnabled()) - { - System.out.printf(" origin: %s%n",prop.origin); - while (prop.overrides != null) - { - prop = prop.overrides; - System.out.printf(" (overrides)%n"); - System.out.printf(" %s = %s%n",key,properties.expand(prop.value)); - System.out.printf(" origin: %s%n",prop.origin); - } - } - } - } - /** * Ensure that the System Properties are set (if defined as a System property, or start.config property, or start.ini property) * @@ -393,6 +395,16 @@ public class StartArgs } } + public List getAddToStartdIni() + { + return addToStartdIni; + } + + public List getAddToStartIni() + { + return addToStartIni; + } + public Modules getAllModules() { return allModules; @@ -403,16 +415,16 @@ public class StartArgs return classpath; } - public List getFiles() - { - return files; - } - public Set getEnabledModules() { return this.modules; } + public List getFiles() + { + return files; + } + public List getJvmArgs() { return jvmArgs; @@ -485,16 +497,6 @@ public class StartArgs return moduleGraphFilename; } - public List getAddToStartdIni() - { - return addToStartdIni; - } - - public List getAddToStartIni() - { - return addToStartIni; - } - public Props getProperties() { return properties; @@ -565,31 +567,6 @@ public class StartArgs return listModules; } - private void setProperty(String key, String value, String source) - { - // Special / Prevent override from start.ini's - if (key.equals("jetty.home")) - { - properties.setProperty("jetty.home",System.getProperty("jetty.home"),source); - return; - } - - // Special / Prevent override from start.ini's - if (key.equals("jetty.base")) - { - properties.setProperty("jetty.base",System.getProperty("jetty.base"),source); - return; - } - - // Normal - properties.setProperty(key,value,source); - } - - public void setRun(boolean run) - { - this.run = run; - } - public boolean isRun() { return run; @@ -605,6 +582,19 @@ public class StartArgs return version; } + public void parse(ConfigSources sources) + { + ListIterator iter = sources.reverseListIterator(); + while (iter.hasPrevious()) + { + ConfigSource source = iter.previous(); + for (String arg : source.getArgs()) + { + parse(arg,source.getId()); + } + } + } + public void parse(final String rawarg, String source) { if (rawarg == null) @@ -639,7 +629,7 @@ public class StartArgs if (arg.startsWith("--extra-start-dir=")) { - // valid, but handled in ConfigSources instead + // valid, but handled in ConfigSources instead return; } @@ -855,6 +845,31 @@ public class StartArgs this.allModules = allModules; } + private void setProperty(String key, String value, String source) + { + // Special / Prevent override from start.ini's + if (key.equals("jetty.home")) + { + properties.setProperty("jetty.home",System.getProperty("jetty.home"),source); + return; + } + + // Special / Prevent override from start.ini's + if (key.equals("jetty.base")) + { + properties.setProperty("jetty.base",System.getProperty("jetty.base"),source); + return; + } + + // Normal + properties.setProperty(key,value,source); + } + + public void setRun(boolean run) + { + this.run = run; + } + @Override public String toString() { @@ -870,9 +885,4 @@ public class StartArgs builder.append("]"); return builder.toString(); } - - public void parse(ConfigSources sources) - { - // TODO Auto-generated method stub - } } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java b/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java index 6b9cba7afd0..df6db187c18 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java @@ -18,19 +18,29 @@ package org.eclipse.jetty.start.config; +import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.nio.file.Path; import java.util.Arrays; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.eclipse.jetty.start.BaseHome; import org.eclipse.jetty.start.FS; import org.eclipse.jetty.start.Props; +import org.eclipse.jetty.start.Props.Prop; +import org.eclipse.jetty.start.UsageException; /** * Configuration Source representing the Command Line arguments. */ public class CommandLineConfigSource implements ConfigSource { - public static final String CMD_LINE_SOURCE = ""; + public static final String ORIGIN_INTERNAL_FALLBACK = ""; + public static final String ORIGIN_CMD_LINE = ""; private final List args; private final Props props; @@ -43,28 +53,99 @@ public class CommandLineConfigSource implements ConfigSource this.props = new Props(); for (String arg : args) { - this.props.addPossibleProperty(arg,CMD_LINE_SOURCE); + this.props.addPossibleProperty(arg,ORIGIN_CMD_LINE); } - Path home = FS.toOptionalPath(getProperty("jetty.home")); - Path base = FS.toOptionalPath(getProperty("jetty.base")); + // Setup ${jetty.base} and ${jetty.home} + this.homePath = findJettyHomePath().toAbsolutePath(); + this.basePath = findJettyBasePath().toAbsolutePath(); - if (home != null) + // Update System Properties + setSystemProperty(BaseHome.JETTY_HOME,homePath.toAbsolutePath().toString()); + setSystemProperty(BaseHome.JETTY_BASE,basePath.toAbsolutePath().toString()); + } + + private final Path findJettyBasePath() + { + // If a jetty property is defined, use it + Prop prop = this.props.getProp(BaseHome.JETTY_BASE,false); + if (prop != null && !isEmpty(prop.value)) { - // logic if home is specified - if (base == null) + return FS.toPath(prop.value); + } + + // If a system property is defined, use it + String val = System.getProperty(BaseHome.JETTY_BASE); + if (!isEmpty(val)) + { + return FS.toPath(val); + } + + // Lastly, fall back to base == home + Path base = this.homePath.toAbsolutePath(); + setProperty(BaseHome.JETTY_BASE,base.toString(),ORIGIN_INTERNAL_FALLBACK); + return base; + } + + private final Path findJettyHomePath() + { + // If a jetty property is defined, use it + Prop prop = this.props.getProp(BaseHome.JETTY_HOME,false); + if (prop != null && !isEmpty(prop.value)) + { + return FS.toPath(prop.value); + } + + // If a system property is defined, use it + String val = System.getProperty(BaseHome.JETTY_HOME); + if (!isEmpty(val)) + { + return FS.toPath(val); + } + + // Attempt to find path relative to content in jetty's start.jar + // based on lookup for the Main class (from jetty's start.jar) + String classRef = "org/eclipse/jetty/start/Main.class"; + URL jarfile = this.getClass().getClassLoader().getResource(classRef); + if (jarfile != null) + { + Matcher m = Pattern.compile("jar:(file:.*)!/" + classRef).matcher(jarfile.toString()); + if (m.matches()) { - base = home; - setProperty("jetty.base",base.toString(),""); + // ${jetty.home} is relative to found BaseHome class + try + { + return new File(new URI(m.group(1))).getParentFile().toPath(); + } + catch (URISyntaxException e) + { + throw new UsageException(UsageException.ERR_UNKNOWN,e); + } } } - this.homePath = home; - this.basePath = base; + // Lastly, fall back to ${user.dir} default + Path home = FS.toPath(System.getProperty("user.dir",".")); + setProperty(BaseHome.JETTY_HOME,home.toString(),ORIGIN_INTERNAL_FALLBACK); + return home; + } - // Update System Properties - setSystemProperty("jetty.home",homePath.toAbsolutePath().toString()); - setSystemProperty("jetty.base",basePath.toAbsolutePath().toString()); + private boolean isEmpty(String value) + { + if (value == null) + { + return true; + } + int len = value.length(); + for (int i = 0; i < len; i++) + { + int c = value.codePointAt(i); + if (!Character.isWhitespace(c)) + { + return false; + } + } + return true; } @Override @@ -116,7 +197,7 @@ public class CommandLineConfigSource implements ConfigSource @Override public String getId() { - return CMD_LINE_SOURCE; + return ORIGIN_CMD_LINE; } @Override diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java index 368668bfd9b..861972c78ca 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java @@ -98,13 +98,11 @@ public class BaseHomeTest public void testGetPath_OnlyHome() throws IOException { File homeDir = MavenTestingUtils.getTestResourceDir("hb.1/home"); - File baseDir = null; ConfigSources config = new ConfigSources(); config.add(new JettyHomeConfigSource(homeDir.toPath())); - BaseHome hb = new BaseHome(homeDir,baseDir); - hb.initialize(config); + BaseHome hb = new BaseHome(config); Path startIni = hb.getPath("start.ini"); String ref = hb.toShortForm(startIni); @@ -118,13 +116,11 @@ public class BaseHomeTest public void testGetPaths_OnlyHome() throws IOException { File homeDir = MavenTestingUtils.getTestResourceDir("hb.1/home"); - File baseDir = null; ConfigSources config = new ConfigSources(); config.add(new JettyHomeConfigSource(homeDir.toPath())); - BaseHome hb = new BaseHome(homeDir,baseDir); - hb.initialize(config); + BaseHome hb = new BaseHome(config); List paths = hb.getPaths("start.d/*"); List expected = new ArrayList<>(); @@ -142,13 +138,11 @@ public class BaseHomeTest public void testGetPaths_OnlyHome_InisOnly() throws IOException { File homeDir = MavenTestingUtils.getTestResourceDir("hb.1/home"); - File baseDir = null; ConfigSources config = new ConfigSources(); config.add(new JettyHomeConfigSource(homeDir.toPath())); - BaseHome hb = new BaseHome(homeDir,baseDir); - hb.initialize(config); + BaseHome hb = new BaseHome(config); List paths = hb.getPaths("start.d/*.ini"); List expected = new ArrayList<>(); @@ -172,8 +166,7 @@ public class BaseHomeTest config.add(new JettyBaseConfigSource(baseDir.toPath())); config.add(new JettyHomeConfigSource(homeDir.toPath())); - BaseHome hb = new BaseHome(homeDir,baseDir); - hb.initialize(config); + BaseHome hb = new BaseHome(config); List paths = hb.getPaths("start.d/*.ini"); List expected = new ArrayList<>(); @@ -206,8 +199,7 @@ public class BaseHomeTest config.add(new JettyBaseConfigSource(baseDir.toPath())); config.add(new JettyHomeConfigSource(homeDir.toPath())); - BaseHome hb = new BaseHome(homeDir,baseDir); - hb.initialize(config); + BaseHome hb = new BaseHome(config); Path startIni = hb.getPath("start.ini"); String ref = hb.toShortForm(startIni); diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ExtraStartTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ExtraStartTest.java index f22c37b3fd6..0b41045d493 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/ExtraStartTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ExtraStartTest.java @@ -275,6 +275,7 @@ public class ExtraStartTest // Create common File common = testdir.getFile("common"); FS.ensureEmpty(common); + TestEnv.makeFile(common,"start.ini","jetty.port=8080"); // Create base File base = testdir.getFile("base"); @@ -306,6 +307,7 @@ public class ExtraStartTest // Create common File common = testdir.getFile("common"); FS.ensureEmpty(common); + TestEnv.makeFile(common,"start.ini","jetty.port=8080"); // Create corp File corp = testdir.getFile("corp"); @@ -343,8 +345,7 @@ public class ExtraStartTest // Create corp File corp = testdir.getFile("corp"); FS.ensureEmpty(corp); - TestEnv.makeFile(corp,"start.ini", // - "jetty.port=9090"); + TestEnv.makeFile(corp,"start.ini","jetty.port=9090"); // Create common File common = testdir.getFile("common"); diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java index 5fe9b1a363b..561a013dfa9 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java @@ -18,28 +18,33 @@ package org.eclipse.jetty.start; +import static org.hamcrest.Matchers.*; + import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.junit.Assert; +import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class MainTest { - private void addUseCasesHome(List cmdLineArgs) + @Before + public void clearSystemProperties() { - File testJettyHome = MavenTestingUtils.getTestResourceDir("usecases/home"); - cmdLineArgs.add("jetty.home=" + testJettyHome); + System.setProperty("jetty.home",""); + System.setProperty("jetty.base",""); } - + @Test public void testBasicProcessing() throws Exception { List cmdLineArgs = new ArrayList<>(); - addUseCasesHome(cmdLineArgs); + File testJettyHome = MavenTestingUtils.getTestResourceDir("usecases/home"); + cmdLineArgs.add("jetty.home=" + testJettyHome); cmdLineArgs.add("jetty.port=9090"); Main main = new Main(); @@ -74,7 +79,8 @@ public class MainTest public void testListConfig() throws Exception { List cmdLineArgs = new ArrayList<>(); - addUseCasesHome(cmdLineArgs); + File testJettyHome = MavenTestingUtils.getTestResourceDir("usecases/home"); + cmdLineArgs.add("jetty.home=" + testJettyHome); cmdLineArgs.add("jetty.port=9090"); cmdLineArgs.add("--list-config"); // cmdLineArgs.add("--debug"); @@ -97,7 +103,8 @@ public class MainTest { List cmdLineArgs = new ArrayList<>(); - addUseCasesHome(cmdLineArgs); + File homePath = MavenTestingUtils.getTestResourceDir("usecases/home"); + cmdLineArgs.add("jetty.home=" + homePath); // JVM args cmdLineArgs.add("--exec"); @@ -118,7 +125,9 @@ public class MainTest StartArgs args = main.processCommandLine(cmdLineArgs.toArray(new String[cmdLineArgs.size()])); BaseHome baseHome = main.getBaseHome(); - System.err.println(args); + + Assert.assertThat("jetty.home", baseHome.getHome(), is(homePath.getAbsolutePath())); + Assert.assertThat("jetty.base", baseHome.getBase(), is(homePath.getAbsolutePath())); ConfigurationAssert.assertConfiguration(baseHome,args,"assert-home-with-jvm.txt"); } @@ -134,8 +143,10 @@ public class MainTest Main main = new Main(); StartArgs args = main.processCommandLine(cmdLineArgs.toArray(new String[cmdLineArgs.size()])); BaseHome baseHome = main.getBaseHome(); - System.err.println(args); - + + Assert.assertThat("jetty.home", baseHome.getHome(), is(homePath.getAbsolutePath())); + Assert.assertThat("jetty.base", baseHome.getBase(), is(homePath.getAbsolutePath())); + ConfigurationAssert.assertConfiguration(baseHome,args,"assert-home-with-spaces.txt"); } } diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java index c4aeb53c282..82db04cf9cb 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java @@ -55,8 +55,7 @@ public class ModuleGraphWriterTest config.add(new JettyBaseConfigSource(baseDir.toPath())); // Initialize - BaseHome basehome = new BaseHome(); - basehome.initialize(config); + BaseHome basehome = new BaseHome(config); StartArgs args = new StartArgs(); args.parse(config); diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java index c49ee3a1068..ced2d38632b 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java @@ -18,36 +18,53 @@ package org.eclipse.jetty.start; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; import java.io.File; import java.io.IOException; +import org.eclipse.jetty.start.config.CommandLineConfigSource; +import org.eclipse.jetty.start.config.ConfigSources; +import org.eclipse.jetty.start.config.JettyBaseConfigSource; +import org.eclipse.jetty.start.config.JettyHomeConfigSource; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; +import org.eclipse.jetty.toolchain.test.TestingDir; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; public class ModuleTest { - private Module loadTestHomeModule(String moduleFileName) throws IOException - { - File file = MavenTestingUtils.getTestResourceFile("usecases/home/modules/" + moduleFileName); - return new Module(new BaseHome(),file.toPath()); - } - + @Rule + public TestingDir testdir = new TestingDir(); + @Test public void testLoadWebSocket() throws IOException { - Module Module = loadTestHomeModule("websocket.mod"); - - Assert.assertThat("Module Name",Module.getName(),is("websocket")); - Assert.assertThat("Module Parents Size",Module.getParentNames().size(),is(2)); - Assert.assertThat("Module Parents",Module.getParentNames(),containsInAnyOrder("annotations","server")); - Assert.assertThat("Module Xmls Size",Module.getXmls().size(),is(1)); - Assert.assertThat("Module Xmls",Module.getXmls(),contains("etc/jetty-websockets.xml")); - Assert.assertThat("Module Options Size",Module.getLibs().size(),is(1)); - Assert.assertThat("Module Options",Module.getLibs(),contains("lib/websocket/*.jar")); + // Test Env + File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home"); + File baseDir = testdir.getEmptyDir(); + String cmdLine[] = new String[] {"jetty.version=TEST"}; + + // Configuration + CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine); + ConfigSources config = new ConfigSources(); + config.add(cmdLineSource); + config.add(new JettyHomeConfigSource(homeDir.toPath())); + config.add(new JettyBaseConfigSource(baseDir.toPath())); + + // Initialize + BaseHome basehome = new BaseHome(config); + + File file = MavenTestingUtils.getTestResourceFile("usecases/home/modules/websocket.mod"); + Module module = new Module(basehome,file.toPath()); + + Assert.assertThat("Module Name",module.getName(),is("websocket")); + Assert.assertThat("Module Parents Size",module.getParentNames().size(),is(2)); + Assert.assertThat("Module Parents",module.getParentNames(),containsInAnyOrder("annotations","server")); + Assert.assertThat("Module Xmls Size",module.getXmls().size(),is(1)); + Assert.assertThat("Module Xmls",module.getXmls(),contains("etc/jetty-websockets.xml")); + Assert.assertThat("Module Options Size",module.getLibs().size(),is(1)); + Assert.assertThat("Module Options",module.getLibs(),contains("lib/websocket/*.jar")); } } diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java index 744a3bdc66e..4b2fd2390bf 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java @@ -60,8 +60,7 @@ public class ModulesTest config.add(new JettyBaseConfigSource(baseDir.toPath())); // Initialize - BaseHome basehome = new BaseHome(); - basehome.initialize(config); + BaseHome basehome = new BaseHome(config); StartArgs args = new StartArgs(); args.parse(config); @@ -104,8 +103,7 @@ public class ModulesTest config.add(new JettyBaseConfigSource(baseDir.toPath())); // Initialize - BaseHome basehome = new BaseHome(); - basehome.initialize(config); + BaseHome basehome = new BaseHome(config); StartArgs args = new StartArgs(); args.parse(config); @@ -136,8 +134,7 @@ public class ModulesTest config.add(new JettyBaseConfigSource(baseDir.toPath())); // Initialize - BaseHome basehome = new BaseHome(); - basehome.initialize(config); + BaseHome basehome = new BaseHome(config); StartArgs args = new StartArgs(); args.parse(config); @@ -208,8 +205,7 @@ public class ModulesTest config.add(new JettyBaseConfigSource(baseDir.toPath())); // Initialize - BaseHome basehome = new BaseHome(); - basehome.initialize(config); + BaseHome basehome = new BaseHome(config); StartArgs args = new StartArgs(); args.parse(config); diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java index bc14d322001..18b05cd7bd4 100644 --- a/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java +++ b/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java @@ -36,7 +36,7 @@ public class PathFinderTest public void testFindInis() throws IOException { File homeDir = MavenTestingUtils.getTestResourceDir("hb.1/home"); - Path homePath = homeDir.toPath(); + Path homePath = homeDir.toPath().toAbsolutePath(); PathFinder finder = new PathFinder(); finder.setFileMatcher("glob:**/*.ini"); @@ -53,7 +53,7 @@ public class PathFinderTest expected.add("${jetty.home}/start.ini"); FSTest.toOsSeparators(expected); - BaseHome hb = new BaseHome(homeDir,null); + BaseHome hb = new BaseHome(new String[] { "jetty.home=" + homePath.toString() }); BaseHomeTest.assertPathList(hb,"Files found",expected,finder); } @@ -61,6 +61,7 @@ public class PathFinderTest public void testFindMods() throws IOException { File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home"); + Path homePath = homeDir.toPath().toAbsolutePath(); List expected = new ArrayList<>(); File modulesDir = new File(homeDir,"modules"); @@ -81,7 +82,7 @@ public class PathFinderTest Files.walkFileTree(modulesPath,EnumSet.of(FileVisitOption.FOLLOW_LINKS),1,finder); - BaseHome hb = new BaseHome(homeDir,null); + BaseHome hb = new BaseHome(new String[] { "jetty.home=" + homePath.toString() }); BaseHomeTest.assertPathList(hb,"Files found",expected,finder); } } diff --git a/jetty-start/src/test/resources/assert-home-with-jvm.txt b/jetty-start/src/test/resources/assert-home-with-jvm.txt index b73061bba42..9774d97e425 100644 --- a/jetty-start/src/test/resources/assert-home-with-jvm.txt +++ b/jetty-start/src/test/resources/assert-home-with-jvm.txt @@ -1,38 +1,38 @@ # The XMLs we expect (order is important) -XML|${jetty.home}/etc/jetty-jmx.xml -XML|${jetty.home}/etc/jetty.xml -XML|${jetty.home}/etc/jetty-http.xml -XML|${jetty.home}/etc/jetty-plus.xml -XML|${jetty.home}/etc/jetty-annotations.xml -XML|${jetty.home}/etc/jetty-websockets.xml -XML|${jetty.home}/etc/jetty-logging.xml +XML|${jetty.base}/etc/jetty-jmx.xml +XML|${jetty.base}/etc/jetty.xml +XML|${jetty.base}/etc/jetty-http.xml +XML|${jetty.base}/etc/jetty-plus.xml +XML|${jetty.base}/etc/jetty-annotations.xml +XML|${jetty.base}/etc/jetty-websockets.xml +XML|${jetty.base}/etc/jetty-logging.xml # The LIBs we expect (order is irrelevant) -LIB|${jetty.home}/lib/annotations/javax.annotation-api-1.2.jar -LIB|${jetty.home}/lib/annotations/org.objectweb.asm-TEST.jar -LIB|${jetty.home}/lib/jetty-annotations-TEST.jar -LIB|${jetty.home}/lib/jetty-continuation-TEST.jar -LIB|${jetty.home}/lib/jetty-http-TEST.jar -LIB|${jetty.home}/lib/jetty-io-TEST.jar -LIB|${jetty.home}/lib/jetty-jmx-TEST.jar -LIB|${jetty.home}/lib/jetty-jndi-TEST.jar -LIB|${jetty.home}/lib/jetty-plus-TEST.jar -LIB|${jetty.home}/lib/jetty-schemas-3.1.jar -LIB|${jetty.home}/lib/jetty-security-TEST.jar -LIB|${jetty.home}/lib/jetty-server-TEST.jar -LIB|${jetty.home}/lib/jetty-util-TEST.jar -LIB|${jetty.home}/lib/jetty-xml-TEST.jar -LIB|${jetty.home}/lib/jndi/javax.activation-1.1.jar -LIB|${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar -LIB|${jetty.home}/lib/servlet-api-3.1.jar -LIB|${jetty.home}/lib/websocket/javax.websocket-api-1.0.jar -LIB|${jetty.home}/lib/websocket/javax-websocket-client-impl-TEST.jar -LIB|${jetty.home}/lib/websocket/javax-websocket-server-impl-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-api-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-client-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-common-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-server-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-servlet-TEST.jar +LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar +LIB|${jetty.base}/lib/annotations/org.objectweb.asm-TEST.jar +LIB|${jetty.base}/lib/jetty-annotations-TEST.jar +LIB|${jetty.base}/lib/jetty-continuation-TEST.jar +LIB|${jetty.base}/lib/jetty-http-TEST.jar +LIB|${jetty.base}/lib/jetty-io-TEST.jar +LIB|${jetty.base}/lib/jetty-jmx-TEST.jar +LIB|${jetty.base}/lib/jetty-jndi-TEST.jar +LIB|${jetty.base}/lib/jetty-plus-TEST.jar +LIB|${jetty.base}/lib/jetty-schemas-3.1.jar +LIB|${jetty.base}/lib/jetty-security-TEST.jar +LIB|${jetty.base}/lib/jetty-server-TEST.jar +LIB|${jetty.base}/lib/jetty-util-TEST.jar +LIB|${jetty.base}/lib/jetty-xml-TEST.jar +LIB|${jetty.base}/lib/jndi/javax.activation-1.1.jar +LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar +LIB|${jetty.base}/lib/servlet-api-3.1.jar +LIB|${jetty.base}/lib/websocket/javax.websocket-api-1.0.jar +LIB|${jetty.base}/lib/websocket/javax-websocket-client-impl-TEST.jar +LIB|${jetty.base}/lib/websocket/javax-websocket-server-impl-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-api-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-client-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-common-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-server-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-servlet-TEST.jar LIB|${maven-test-resources}/extra-resources LIB|${maven-test-resources}/extra-libs/example.jar diff --git a/jetty-start/src/test/resources/assert-home-with-spaces.txt b/jetty-start/src/test/resources/assert-home-with-spaces.txt index 01d429aada4..d63fcce9526 100644 --- a/jetty-start/src/test/resources/assert-home-with-spaces.txt +++ b/jetty-start/src/test/resources/assert-home-with-spaces.txt @@ -2,7 +2,7 @@ # No XMLs in this home # The LIBs we expect (order is irrelevant) -LIB|${jetty.home}/lib/example of a library with spaces.jar +LIB|${jetty.base}/lib/example of a library with spaces.jar # The Properties we expect (order is irrelevant) PROP|test.message=Hello diff --git a/jetty-start/src/test/resources/assert-home.txt b/jetty-start/src/test/resources/assert-home.txt index 327b770420a..5be8d46d67a 100644 --- a/jetty-start/src/test/resources/assert-home.txt +++ b/jetty-start/src/test/resources/assert-home.txt @@ -1,37 +1,37 @@ # The XMLs we expect (order is important) -XML|${jetty.home}/etc/jetty-jmx.xml -XML|${jetty.home}/etc/jetty.xml -XML|${jetty.home}/etc/jetty-http.xml -XML|${jetty.home}/etc/jetty-plus.xml -XML|${jetty.home}/etc/jetty-annotations.xml -XML|${jetty.home}/etc/jetty-websockets.xml +XML|${jetty.base}/etc/jetty-jmx.xml +XML|${jetty.base}/etc/jetty.xml +XML|${jetty.base}/etc/jetty-http.xml +XML|${jetty.base}/etc/jetty-plus.xml +XML|${jetty.base}/etc/jetty-annotations.xml +XML|${jetty.base}/etc/jetty-websockets.xml # The LIBs we expect (order is irrelevant) -LIB|${jetty.home}/lib/annotations/javax.annotation-api-1.2.jar -LIB|${jetty.home}/lib/annotations/org.objectweb.asm-TEST.jar -LIB|${jetty.home}/lib/jetty-annotations-TEST.jar -LIB|${jetty.home}/lib/jetty-continuation-TEST.jar -LIB|${jetty.home}/lib/jetty-http-TEST.jar -LIB|${jetty.home}/lib/jetty-io-TEST.jar -LIB|${jetty.home}/lib/jetty-jmx-TEST.jar -LIB|${jetty.home}/lib/jetty-jndi-TEST.jar -LIB|${jetty.home}/lib/jetty-plus-TEST.jar -LIB|${jetty.home}/lib/jetty-schemas-3.1.jar -LIB|${jetty.home}/lib/jetty-security-TEST.jar -LIB|${jetty.home}/lib/jetty-server-TEST.jar -LIB|${jetty.home}/lib/jetty-util-TEST.jar -LIB|${jetty.home}/lib/jetty-xml-TEST.jar -LIB|${jetty.home}/lib/jndi/javax.activation-1.1.jar -LIB|${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar -LIB|${jetty.home}/lib/servlet-api-3.1.jar -LIB|${jetty.home}/lib/websocket/javax.websocket-api-1.0.jar -LIB|${jetty.home}/lib/websocket/javax-websocket-client-impl-TEST.jar -LIB|${jetty.home}/lib/websocket/javax-websocket-server-impl-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-api-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-client-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-common-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-server-TEST.jar -LIB|${jetty.home}/lib/websocket/websocket-servlet-TEST.jar +LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar +LIB|${jetty.base}/lib/annotations/org.objectweb.asm-TEST.jar +LIB|${jetty.base}/lib/jetty-annotations-TEST.jar +LIB|${jetty.base}/lib/jetty-continuation-TEST.jar +LIB|${jetty.base}/lib/jetty-http-TEST.jar +LIB|${jetty.base}/lib/jetty-io-TEST.jar +LIB|${jetty.base}/lib/jetty-jmx-TEST.jar +LIB|${jetty.base}/lib/jetty-jndi-TEST.jar +LIB|${jetty.base}/lib/jetty-plus-TEST.jar +LIB|${jetty.base}/lib/jetty-schemas-3.1.jar +LIB|${jetty.base}/lib/jetty-security-TEST.jar +LIB|${jetty.base}/lib/jetty-server-TEST.jar +LIB|${jetty.base}/lib/jetty-util-TEST.jar +LIB|${jetty.base}/lib/jetty-xml-TEST.jar +LIB|${jetty.base}/lib/jndi/javax.activation-1.1.jar +LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar +LIB|${jetty.base}/lib/servlet-api-3.1.jar +LIB|${jetty.base}/lib/websocket/javax.websocket-api-1.0.jar +LIB|${jetty.base}/lib/websocket/javax-websocket-client-impl-TEST.jar +LIB|${jetty.base}/lib/websocket/javax-websocket-server-impl-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-api-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-client-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-common-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-server-TEST.jar +LIB|${jetty.base}/lib/websocket/websocket-servlet-TEST.jar # The Properties we expect (order is irrelevant) PROP|jetty.port=9090