changeset 1701:5971a3ba1ca8

Show THERMOSTAT_HOME/USER_THERMOSTAT_HOME in launcher logs. Reviewed-by: omajid Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2015-March/013323.html PR2423
author Severin Gehwolf <sgehwolf@redhat.com>
date Tue, 24 Mar 2015 13:25:59 +0100
parents c4c7131a6285
children ea755f774135
files launcher/src/main/java/com/redhat/thermostat/launcher/internal/LauncherImpl.java launcher/src/test/java/com/redhat/thermostat/launcher/internal/ActivatorTest.java launcher/src/test/java/com/redhat/thermostat/launcher/internal/LauncherImplTest.java
diffstat 3 files changed, 81 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/launcher/src/main/java/com/redhat/thermostat/launcher/internal/LauncherImpl.java	Fri May 29 16:32:41 2015 +0200
+++ b/launcher/src/main/java/com/redhat/thermostat/launcher/internal/LauncherImpl.java	Tue Mar 24 13:25:59 2015 +0100
@@ -91,7 +91,7 @@
     private static final String SETUP_SCRIPT_NAME = "thermostat-setup";
 
     private static final Translate<LocaleResources> t = LocaleResources.createLocalizer();
-    private Logger logger;
+    private static final Logger logger = LoggingUtils.getLogger(LauncherImpl.class);
 
     private final AtomicInteger usageCount = new AtomicInteger(0);
     private final BundleContext context;
@@ -130,7 +130,10 @@
         this.paths = Objects.requireNonNull(paths);
 
         loggingInitializer.initialize();
-        logger = LoggingUtils.getLogger(LauncherImpl.class);
+        // We log this in the constructor so as to not log it multiple times when a command invokes
+        // run() multiple times. This works since it is a singleton service.
+        logger.log(Level.CONFIG, "THERMOSTAT_HOME=" + paths.getSystemThermostatHome().getAbsolutePath());
+        logger.log(Level.CONFIG, "USER_THERMOSTAT_HOME=" + paths.getUserThermostatHome().getAbsolutePath());
     }
 
     @Override
--- a/launcher/src/test/java/com/redhat/thermostat/launcher/internal/ActivatorTest.java	Fri May 29 16:32:41 2015 +0200
+++ b/launcher/src/test/java/com/redhat/thermostat/launcher/internal/ActivatorTest.java	Tue Mar 24 13:25:59 2015 +0100
@@ -197,6 +197,8 @@
         assertNotNull(action);
         Keyring keyringService = mock(Keyring.class);
         CommonPaths paths = mock(CommonPaths.class);
+        when(paths.getSystemThermostatHome()).thenReturn(mock(File.class));
+        when(paths.getUserThermostatHome()).thenReturn(mock(File.class));
         when(paths.getSystemLibRoot()).thenReturn(new File(""));
         when(paths.getSystemPluginRoot()).thenReturn(new File(""));
         when(paths.getUserPluginRoot()).thenReturn(new File(""));
--- a/launcher/src/test/java/com/redhat/thermostat/launcher/internal/LauncherImplTest.java	Fri May 29 16:32:41 2015 +0200
+++ b/launcher/src/test/java/com/redhat/thermostat/launcher/internal/LauncherImplTest.java	Tue Mar 24 13:25:59 2015 +0100
@@ -37,6 +37,7 @@
 package com.redhat.thermostat.launcher.internal;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.anyString;
@@ -50,7 +51,9 @@
 import java.util.Collection;
 import java.util.EnumSet;
 import java.util.concurrent.ExecutorService;
+import java.util.logging.Handler;
 import java.util.logging.Level;
+import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
 import org.apache.commons.cli.Option;
@@ -96,7 +99,7 @@
     private static final String name3 = "test3";
     private static final String name4 = "test4";
     private static SecurityManager secMan;
-      
+    
     @BeforeClass
     public static void beforeClassSetUp() {
         // Launcher calls System.exit(). This causes issues for unit testing.
@@ -273,6 +276,8 @@
         when(paths.getUserSetupCompleteStampFile()).thenReturn(setupFile);
         ClientPreferences prefs = new ClientPreferences(paths);
 
+        when(paths.getSystemThermostatHome()).thenReturn(mock(File.class));
+        when(paths.getUserThermostatHome()).thenReturn(mock(File.class));
         launcher = new LauncherImpl(bundleContext, ctxFactory, registry, infos, new CommandSource(bundleContext),
                 environment, dbServiceFactory, version, prefs, keyring, paths, loggingInitializer);
     }
@@ -558,6 +563,44 @@
         assertEquals(expectedVersionInfo, ctxFactory.getOutput());
         assertTrue(timerFactory.isShutdown());
     }
+    
+    /**
+     * Tests if USER_THERMOSTAT_HOME and THERMOSTAT_HOME gets logged correctly
+     * on instantiation.
+     */
+    @Test
+    public void verifyLogsUserHomeThermostatHomeOnInstantiation() {
+        Logger logger = Logger.getLogger("com.redhat.thermostat");
+        logger.setLevel(Level.ALL);
+        assertTrue(logger.getLevel() == Level.ALL);
+        TestLogHandler handler = new TestLogHandler();
+        logger.addHandler(handler);
+        ClientPreferences prefs = mock(ClientPreferences.class);
+        Keyring keyring = mock(Keyring.class);
+        CommonPaths logPaths = mock(CommonPaths.class);
+        when(logPaths.getUserThermostatHome()).thenReturn(mock(File.class));
+        when(logPaths.getSystemThermostatHome()).thenReturn(mock(File.class));
+        
+        try {
+            assertFalse(handler.loggedThermostatHome);
+            assertFalse(handler.loggedUserHome);
+            // this should trigger logging
+            new LauncherImpl(bundleContext, ctxFactory, registry,
+                    infos, new CommandSource(bundleContext),
+                    environment, dbServiceFactory,
+                    version, prefs, keyring, logPaths,
+                    loggingInitializer);
+            assertTrue(handler.loggedThermostatHome);
+            assertTrue(handler.loggedUserHome);
+            verify(logPaths).getUserThermostatHome();
+            verify(logPaths).getSystemThermostatHome();
+        } finally {
+            // clean-up in order to avoid logs for other tests.
+            logger.removeHandler(handler);
+            handler = null;
+            logger.setLevel(Level.INFO);
+        }
+    }
 
     @Test
     public void verifyListenersAdded() {
@@ -637,6 +680,35 @@
 
         ctxFactory.getCommandRegistry().registerCommand(cmdName, mockCmd);
         runAndVerifyCommand(new String[] { cmdName }, expected, isInShell);
-    }   
+    }
+    
+    private static class TestLogHandler extends Handler {
+        
+        private boolean loggedThermostatHome;
+        private boolean loggedUserHome;
+        
+        @Override
+        public void close() throws SecurityException {
+            // nothing
+        }
+
+        @Override
+        public void flush() {
+            // nothing
+        }
+
+        @Override
+        public void publish(LogRecord record) {
+            String logMessage = record.getMessage();
+            System.out.println(logMessage);
+            if (record.getLevel() == Level.CONFIG && logMessage.startsWith("THERMOSTAT_HOME")) {
+                loggedThermostatHome = true;
+            }
+            if (record.getLevel() == Level.CONFIG && logMessage.startsWith("USER_THERMOSTAT_HOME")) {
+                loggedUserHome = true;
+            }
+        }
+        
+    }
 }