# HG changeset patch # User Anirudhan Mukundan # Date 1459882608 14400 # Node ID 6a68586b8b950a53392acb3db48ffae49fbdc8f0 # Parent 13dbc94ebe91bbd7b455a8f6cd6cdc66ab9bcea1 Run CLI setup by default if thermostat is run on a headless system PR 2901 Reviewed-by: omajid, jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-March/018276.html Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-April/018410.html diff -r 13dbc94ebe91 -r 6a68586b8b95 setup/command/src/main/java/com/redhat/thermostat/setup/command/internal/SetupCommand.java --- a/setup/command/src/main/java/com/redhat/thermostat/setup/command/internal/SetupCommand.java Wed Mar 02 16:00:44 2016 -0500 +++ b/setup/command/src/main/java/com/redhat/thermostat/setup/command/internal/SetupCommand.java Tue Apr 05 14:56:48 2016 -0400 @@ -37,6 +37,7 @@ package com.redhat.thermostat.setup.command.internal; import java.awt.EventQueue; +import java.awt.GraphicsEnvironment; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.HashMap; @@ -95,7 +96,8 @@ this.keyring = dependentServices.getService(Keyring.class); requireNonNull(keyring, t.localize(LocaleResources.SERVICE_UNAVAILABLE_MESSAGE, "Keyring")); ThermostatSetup setup = createSetup(); - if (args.hasArgument(NON_GUI_OPTION_NAME)) { + + if (args.hasArgument(NON_GUI_OPTION_NAME) || isHeadless()) { runCLISetup(setup, ctx.getConsole()); } else { runGUISetup(setup); @@ -104,6 +106,11 @@ runOriginalCommand(origArgsList); } + // package-private for testing + boolean isHeadless() { + return GraphicsEnvironment.isHeadless(); + } + private Arguments mergeOriginalArgs(String[] origArgsList, Arguments args) { logger.fine("Intercepted setup invocation 'setup' " + Arrays.asList(origArgsList).toString()); return new MergedSetupArguments(args, origArgsList); diff -r 13dbc94ebe91 -r 6a68586b8b95 setup/command/src/test/java/com/redhat/thermostat/setup/command/internal/SetupCommandTest.java --- a/setup/command/src/test/java/com/redhat/thermostat/setup/command/internal/SetupCommandTest.java Wed Mar 02 16:00:44 2016 -0500 +++ b/setup/command/src/test/java/com/redhat/thermostat/setup/command/internal/SetupCommandTest.java Tue Apr 05 14:56:48 2016 -0400 @@ -228,6 +228,37 @@ verify(thermostatSetup).createMongodbUser(eq("mongo"), argThat(matchesPassword(new char[] { 'm' }))); verify(launcher, times(0)).run(argThat(new ArgsMatcher(new String[] { "setup", "-c" })), eq(false)); } + + @Test + public void verifyCLISetupRunsWhenHeadless() throws CommandException { + cmd = new SetupCommand() { + @Override + ThermostatSetup createSetup() { + return thermostatSetup; + } + + @Override + boolean isHeadless() { + return true; + } + }; + + setServices(); + + Arguments args = mock(Arguments.class); + CommandContext ctxt = mock(CommandContext.class); + when(ctxt.getArguments()).thenReturn(args); + when(args.hasArgument("origArgs")).thenReturn(false); + when(ctxt.getConsole()).thenReturn(console); + when(thermostatSetup.isWebAppInstalled()).thenReturn(true); + when(console.getInput()) + .thenReturn(new ByteArrayInputStream("yes\nmongo\nm\nm\nclient\nc\nc\nagent\na\na\n".getBytes())); + + cmd.run(ctxt); + verify(thermostatSetup).createAgentUser(eq("agent"), argThat(matchesPassword(new char[] { 'a' }))); + verify(thermostatSetup).createClientAdminUser(eq("client"), argThat(matchesPassword(new char[] { 'c' }))); + verify(thermostatSetup).createMongodbUser(eq("mongo"), argThat(matchesPassword(new char[] { 'm' }))); + } private CharArrayMatcher matchesPassword(char[] expected) { return new CharArrayMatcher(expected);