blob: 04939daa53aa117c8514b168dab9ad7741f2a90f [file] [log] [blame]
package brooklyn.cli;
import static org.testng.Assert.assertTrue;
import java.io.InputStream;
import java.util.NoSuchElementException;
import java.util.Scanner;
import org.testng.annotations.Test;
import brooklyn.entity.basic.AbstractApplication;
// TODO finish up the tests and enable them
public class CliIntegrationTest {
// FIXME: this should not be hardcoded
String brooklynBinPath = "../dist/target/brooklyn-0.4.0-SNAPSHOT-dist/brooklyn/bin/";
// Helper function used in testing
private String convertStreamToString(InputStream is) {
try {
return new Scanner(is).useDelimiter("\\A").next();
} catch (NoSuchElementException e) {
return "";
}
}
// An empty app to be used for testing
@SuppressWarnings("serial")
public static class ExampleApp extends AbstractApplication { }
/**
* Checks if running "brooklyn help" produces the expected output.
* @throws Exception
*/
@Test(enabled = true, groups = "Integration")
public void testLaunchCliHelp() throws Exception {
// Invoke the brooklyn script with the "help" argument
ProcessBuilder pb = new ProcessBuilder();
pb.command(brooklynBinPath+"brooklyn", "help");;
Process brooklyn = pb.start();
// Get the console output of running that command
String consoleOutput = convertStreamToString(brooklyn.getInputStream());
// Check if the output looks as expected for the help command
boolean usagePresent = consoleOutput.contains("usage: brooklyn");
assertTrue(usagePresent, "Usage info present");
boolean commonCommands = consoleOutput.contains("The most commonly used brooklyn commands are:");
assertTrue(commonCommands, "List of common commands present");
boolean specificCommandHelp = consoleOutput.contains("See 'brooklyn help <command>' for more information on a specific command.");
assertTrue(specificCommandHelp, "Show how to get help for specific commands");
// Check error code from process is 0
assertTrue(brooklyn.exitValue()==0,"Command terminates succesfully");
}
/**
* TODO: Finish up this test
* Checks if launching a brooklyn app produces the expected output.
* @throws Exception
*/
@Test(enabled = false, groups = "Integration")
public void testLaunchCliApp() throws Exception {
// Invoke the brooklyn script with the launch command
ProcessBuilder pb = new ProcessBuilder();
pb.command(brooklynBinPath+"brooklyn", "--verbose", "launch", "--app", "brooklyn.cli.CliTest.ExampleApp", "--location", "localhost", "--noConsole");
Process brooklyn = pb.start();
// Get the console output of running that command
String consoleOutput = convertStreamToString(brooklyn.getInputStream());
//TODO: need to kill brooklyn after the app gets started, perhaps set a timeout . . .
}
/**
* Checks if a correct error + help message is given if using incorrect params.
* @throws Exception
*/
@Test(enabled = true, groups = "Integration")
public void testLaunchCliAppError() throws Exception {
// Invoke the brooklyn script with incorrect arguments
ProcessBuilder pb = new ProcessBuilder();
pb.command(brooklynBinPath+"brooklyn", "launch", "--doesNotExist", "nothing");
Process brooklyn = pb.start();
// Get the console output of running that command
String consoleOutput = convertStreamToString(brooklyn.getErrorStream());
// Check if the output looks as expected
boolean parseError = consoleOutput.contains("Parse error:");
assertTrue(parseError, "Parse error detected");
boolean showUsage = consoleOutput.contains("NAME")
&& consoleOutput.contains("SYNOPSIS")
&& consoleOutput.contains("OPTIONS")
&& consoleOutput.contains("COMMANDS");
assertTrue(showUsage, "Show usage info");
// Check error code from process is 0
assertTrue(brooklyn.exitValue()!=0,"Command terminates with error");
}
}