jetty-start / Making sure that download works

This commit is contained in:
Joakim Erdfelt 2013-08-26 17:11:00 -07:00
parent 866a9c96d2
commit c1517fe866
3 changed files with 150 additions and 57 deletions

View File

@ -41,6 +41,8 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import org.eclipse.jetty.start.StartArgs.DownloadArg;
/** /**
* Main start class. * Main start class.
* <p> * <p>
@ -167,18 +169,11 @@ public class Main
}).start(); }).start();
} }
private void download(String arg) private void download(DownloadArg arg)
{ {
try try
{ {
String[] split = arg.split("|",3); File file = baseHome.getBaseFile(arg.location);
if ((split.length != 3) || "http".equalsIgnoreCase(split[0]) || !split[1].startsWith("//"))
{
throw new IllegalArgumentException("Not --download=<http uri>:<location>");
}
String location = split[2];
File file = baseHome.getBaseFile(location);
StartLog.debug("Download to %s %s",file.getAbsolutePath(),(file.exists()?"[Exists!]":"")); StartLog.debug("Download to %s %s",file.getAbsolutePath(),(file.exists()?"[Exists!]":""));
if (file.exists()) if (file.exists())
@ -186,9 +181,9 @@ public class Main
return; return;
} }
URL url = new URL(split[0].substring(11) + ":" + split[1]); URL url = new URL(arg.uri);
System.err.println("DOWNLOAD: " + url + " to " + location); System.err.println("DOWNLOAD: " + url + " to " + arg.location);
FS.ensureDirectoryExists(file.getParentFile()); FS.ensureDirectoryExists(file.getParentFile());
@ -444,6 +439,12 @@ public class Main
usage(true); usage(true);
} }
// Various Downloads
for (DownloadArg url : args.getDownloads())
{
download(url);
}
// Show the version information and return // Show the version information and return
if (args.isListClasspath()) if (args.isListClasspath())
{ {
@ -469,12 +470,6 @@ public class Main
System.out.println(cmd.toString()); System.out.println(cmd.toString());
} }
// Various Downloads
for (String url : args.getDownloads())
{
download(url);
}
// Enables/Disable // Enables/Disable
ModulePersistence persistence = loadModulePersistence(); ModulePersistence persistence = loadModulePersistence();
if (args.isModulePersistenceChanging()) if (args.isModulePersistenceChanging())
@ -508,6 +503,7 @@ public class Main
stop(stopPort,stopKey); stop(stopPort,stopKey);
} }
} }
// Informational command line, don't run jetty // Informational command line, don't run jetty
if (!args.isRun()) if (!args.isRun())
{ {

View File

@ -39,7 +39,76 @@ import java.util.Set;
*/ */
public class StartArgs public class StartArgs
{ {
public static class DownloadArg
{
public String uri;
public String location;
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
DownloadArg other = (DownloadArg)obj;
if (uri == null)
{
if (other.uri != null)
{
return false;
}
}
else if (!uri.equals(other.uri))
{
return false;
}
if (location == null)
{
if (other.location != null)
{
return false;
}
}
else if (!location.equals(other.location))
{
return false;
}
return true;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = (prime * result) + ((uri == null)?0:uri.hashCode());
result = (prime * result) + ((location == null)?0:location.hashCode());
return result;
}
@Override
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append("DownloadArg [uri=");
builder.append(uri);
builder.append(", location=");
builder.append(location);
builder.append("]");
return builder.toString();
}
}
public static final String CMD_LINE_SOURCE = "<cmd-line>"; public static final String CMD_LINE_SOURCE = "<cmd-line>";
public static final String VERSION; public static final String VERSION;
static static
@ -70,7 +139,7 @@ public class StartArgs
private List<String> commandLine = new ArrayList<>(); private List<String> commandLine = new ArrayList<>();
private Set<String> modules = new HashSet<>(); private Set<String> modules = new HashSet<>();
private Map<String, List<String>> sources = new HashMap<>(); private Map<String, List<String>> sources = new HashMap<>();
private List<String> downloads = new ArrayList<>(); private List<DownloadArg> downloads = new ArrayList<>();
private Classpath classpath; private Classpath classpath;
private List<String> xmlRefs = new ArrayList<>(); private List<String> xmlRefs = new ArrayList<>();
private List<File> xmls = new ArrayList<>(); private List<File> xmls = new ArrayList<>();
@ -98,6 +167,31 @@ public class StartArgs
classpath = new Classpath(); classpath = new Classpath();
} }
private void addDownload(String uriLocation)
{
String parts[] = uriLocation.split(":",3);
if (parts.length != 3)
{
throw new IllegalArgumentException("Not <http uri>:<location>");
}
if (!"http".equalsIgnoreCase(parts[0]))
{
throw new IllegalArgumentException("Download only supports http protocol");
}
if (!parts[1].startsWith("//"))
{
throw new IllegalArgumentException("Download URI invalid: " + uriLocation);
}
DownloadArg arg = new DownloadArg();
arg.uri = String.format("%s:%s",parts[0],parts[1]);
arg.location = parts[2];
if (!downloads.contains(arg))
{
downloads.add(arg);
}
}
public void addSystemProperty(String key, String value) public void addSystemProperty(String key, String value)
{ {
this.systemPropertyKeys.add(key); this.systemPropertyKeys.add(key);
@ -185,25 +279,6 @@ public class StartArgs
} }
} }
public void dumpSystemProperties()
{
System.out.println();
System.out.println("System Properties:");
System.out.println("------------------");
if (systemPropertyKeys.isEmpty())
{
System.out.println(" (no system properties specified)");
return;
}
for (String key : systemPropertyKeys)
{
String value = System.getProperty(key);
System.out.printf(" %s = %s%n",key,value);
}
}
public void dumpProperties() public void dumpProperties()
{ {
System.out.println(); System.out.println();
@ -226,6 +301,25 @@ public class StartArgs
} }
} }
public void dumpSystemProperties()
{
System.out.println();
System.out.println("System Properties:");
System.out.println("------------------");
if (systemPropertyKeys.isEmpty())
{
System.out.println(" (no system properties specified)");
return;
}
for (String key : systemPropertyKeys)
{
String value = System.getProperty(key);
System.out.printf(" %s = %s%n",key,value);
}
}
private void dumpSystemProperty(String key) private void dumpSystemProperty(String key)
{ {
System.out.printf(" %s=%s%n",key,System.getProperty(key)); System.out.printf(" %s=%s%n",key,System.getProperty(key));
@ -327,16 +421,18 @@ public class StartArgs
File xmlfile = baseHome.getFile(xmlRef); File xmlfile = baseHome.getFile(xmlRef);
addUniqueXmlFile(xmlRef,xmlfile); addUniqueXmlFile(xmlRef,xmlfile);
} }
// Register Download operations // Register Download operations
for ( String download : module.getDownloads() ) for (String download : module.getDownloads())
{ {
downloads.add(download); StartLog.debug("Adding module specified download: %s",download);
addDownload(download);
} }
// Register BootLib references // Register BootLib references
for ( String bootlib : module.getBootLibs() ) for (String bootlib : module.getBootLibs())
{ {
StartLog.debug("Adding module specified bootlib: %s",bootlib);
exec = true; exec = true;
jvmArgs.add(bootlib); jvmArgs.add(bootlib);
} }
@ -358,8 +454,8 @@ public class StartArgs
return this.commandLine; return this.commandLine;
} }
public List<String> getDownloads() public List<DownloadArg> getDownloads()
{ {
return downloads; return downloads;
} }
@ -385,7 +481,7 @@ public class StartArgs
{ {
cmd.addArg(x); cmd.addArg(x);
} }
cmd.addRawArg("-Djetty.home=" + baseHome.getHome()); cmd.addRawArg("-Djetty.home=" + baseHome.getHome());
cmd.addRawArg("-Djetty.base=" + baseHome.getBase()); cmd.addRawArg("-Djetty.base=" + baseHome.getBase());
@ -445,11 +541,6 @@ public class StartArgs
return modulePersistEnable; return modulePersistEnable;
} }
public boolean isModulePersistenceChanging()
{
return (modulePersistDisable.size() > 0) || (modulePersistEnable.size() > 0);
}
public Properties getProperties() public Properties getProperties()
{ {
return properties; return properties;
@ -548,6 +639,11 @@ public class StartArgs
return listModules; return listModules;
} }
public boolean isModulePersistenceChanging()
{
return (modulePersistDisable.size() > 0) || (modulePersistEnable.size() > 0);
}
public boolean isRun() public boolean isRun()
{ {
return run; return run;
@ -613,7 +709,7 @@ public class StartArgs
if (arg.startsWith("--download=")) if (arg.startsWith("--download="))
{ {
downloads.add(getValue(arg)); addDownload(getValue(arg));
return; return;
} }

View File

@ -31,6 +31,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.eclipse.jetty.start.StartArgs.DownloadArg;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.junit.Assert; import org.junit.Assert;
@ -108,7 +109,7 @@ public class ConfigurationAssert
actualProperties.add(name + "=" + value); actualProperties.add(name + "=" + value);
} }
assertContainsUnordered("Properties",expectedProperties,actualProperties); assertContainsUnordered("Properties",expectedProperties,actualProperties);
// Validate Downloads // Validate Downloads
Set<String> expectedDownloads = new HashSet<>(); Set<String> expectedDownloads = new HashSet<>();
for (String line : textFile) for (String line : textFile)
@ -119,12 +120,12 @@ public class ConfigurationAssert
} }
} }
Set<String> actualDownloads = new HashSet<>(); Set<String> actualDownloads = new HashSet<>();
for (String line : args.getDownloads()) for (DownloadArg darg : args.getDownloads())
{ {
actualDownloads.add(line); actualDownloads.add(String.format("%s:%s",darg.uri,darg.location));
} }
assertContainsUnordered("Downloads",expectedDownloads,actualDownloads); assertContainsUnordered("Downloads",expectedDownloads,actualDownloads);
// Validate Jvm Args / BootLib Entries // Validate Jvm Args / BootLib Entries
Set<String> expectedJvmArgs = new HashSet<>(); Set<String> expectedJvmArgs = new HashSet<>();
for (String line : textFile) for (String line : textFile)
@ -140,9 +141,9 @@ public class ConfigurationAssert
actualJvmArgs.add(line); actualJvmArgs.add(line);
} }
assertContainsUnordered("JvmArgs",expectedJvmArgs,actualJvmArgs); assertContainsUnordered("JvmArgs",expectedJvmArgs,actualJvmArgs);
if ( expectedJvmArgs.size() > 0 ) if (expectedJvmArgs.size() > 0)
{ {
Assert.assertTrue("exec has been turned on", args.isExec()); Assert.assertTrue("exec has been turned on",args.isExec());
} }
} }