ARTEMIS-140 In testing ARTEMIS-116 Found some more holes in the cli.

This commit is contained in:
John D. Ament 2015-06-16 20:58:14 -04:00
parent 56ec4cabab
commit 5b2d2a49c4
3 changed files with 38 additions and 9 deletions

View File

@ -20,7 +20,6 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import io.airlift.airline.Cli; import io.airlift.airline.Cli;
import io.airlift.airline.ParseException;
import org.apache.activemq.artemis.cli.commands.Action; import org.apache.activemq.artemis.cli.commands.Action;
import org.apache.activemq.artemis.cli.commands.ActionContext; import org.apache.activemq.artemis.cli.commands.ActionContext;
import org.apache.activemq.artemis.cli.commands.Create; import org.apache.activemq.artemis.cli.commands.Create;
@ -66,18 +65,18 @@ public class Artemis
{ {
parser.parse(args).execute(ActionContext.system()); parser.parse(args).execute(ActionContext.system());
} }
catch (ParseException e)
{
System.err.println(e.getMessage());
System.out.println();
parser.parse("help").execute(ActionContext.system());
}
catch (ConfigurationException configException) catch (ConfigurationException configException)
{ {
System.err.println(configException.getMessage()); System.err.println(configException.getMessage());
System.out.println(); System.out.println();
System.out.println("Configuration should be specified as 'scheme:location'. Default configuration is 'xml:${ARTEMIS_INSTANCE}/etc/bootstrap.xml'"); System.out.println("Configuration should be specified as 'scheme:location'. Default configuration is 'xml:${ARTEMIS_INSTANCE}/etc/bootstrap.xml'");
} }
catch (RuntimeException re)
{
System.err.println(re.getMessage());
System.out.println();
parser.parse("help").execute(ActionContext.system());
}
} }

View File

@ -83,7 +83,7 @@ public class Create extends InputAbstract
public static final String ETC_CONNECTOR_SETTINGS_TXT = "etc/connector-settings.txt"; public static final String ETC_CONNECTOR_SETTINGS_TXT = "etc/connector-settings.txt";
public static final String ETC_BOOTSTRAP_WEB_SETTINGS_TXT = "etc/bootstrap-web-settings.txt"; public static final String ETC_BOOTSTRAP_WEB_SETTINGS_TXT = "etc/bootstrap-web-settings.txt";
@Arguments(description = "The instance directory to hold the broker's configuration and data", required = true) @Arguments(description = "The instance directory to hold the broker's configuration and data. Path must be writable.", required = true)
File directory; File directory;
@Option(name = "--host", description = "The host name of the broker (Default: 0.0.0.0 or input if clustered)") @Option(name = "--host", description = "The host name of the broker (Default: 0.0.0.0 or input if clustered)")
@ -412,6 +412,7 @@ public class Create extends InputAbstract
@Override @Override
public Object execute(ActionContext context) throws Exception public Object execute(ActionContext context) throws Exception
{ {
this.checkDirectory();
super.execute(context); super.execute(context);
try try
@ -432,6 +433,24 @@ public class Create extends InputAbstract
return this.getClass().getResourceAsStream(source); return this.getClass().getResourceAsStream(source);
} }
/**
* Checks that the directory provided either exists and is writable or doesn't exist but can be created.
*/
private void checkDirectory()
{
if (!directory.exists())
{
boolean created = directory.mkdirs();
if (!created)
{
throw new RuntimeException(String.format("Unable to create the path '%s'.", directory));
}
}
else if (!directory.canWrite())
{
throw new RuntimeException(String.format("The path '%s' is not writable.", directory));
}
}
public Object run(ActionContext context) throws Exception public Object run(ActionContext context) throws Exception
{ {

View File

@ -27,10 +27,21 @@ public class ArtemisTest
{ {
@Test @Test
public void invalidCliDoesntThrowException() public void invalidCliDoesntThrowException()
{
testCli("create");
}
@Test
public void invalidPathDoesntThrowException()
{
testCli("create","/rawr");
}
private void testCli(String... args)
{ {
try try
{ {
Artemis.main(new String[]{"create"}); Artemis.main(args);
} }
catch (Exception e) catch (Exception e)
{ {