changeset 1852:6a68586b8b95

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
author Anirudhan Mukundan <amukunda@redhat.com>
date Tue, 05 Apr 2016 14:56:48 -0400
parents 13dbc94ebe91
children d2cc25649e4f
files setup/command/src/main/java/com/redhat/thermostat/setup/command/internal/SetupCommand.java setup/command/src/test/java/com/redhat/thermostat/setup/command/internal/SetupCommandTest.java
diffstat 2 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);