changeset 1209:d1f55aa2b083

Fix potential NPE in MongoProcessRunner. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-August/007790.html
author Severin Gehwolf <sgehwolf@redhat.com>
date Mon, 05 Aug 2013 15:11:17 +0200
parents 3d2faeefba5f
children cbe65c2680e7
files agent/cli/src/main/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunner.java agent/cli/src/test/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunnerTest.java
diffstat 2 files changed, 23 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/agent/cli/src/main/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunner.java	Mon Aug 05 11:56:20 2013 +0200
+++ b/agent/cli/src/main/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunner.java	Mon Aug 05 15:11:17 2013 +0200
@@ -90,13 +90,7 @@
         Charset charset = Charset.defaultCharset();
         if (pidfile.exists()) {
             try (BufferedReader reader = Files.newBufferedReader(pidfile.toPath(), charset)) {
-                String line = reader.readLine();
-                if (line.isEmpty()) {
-                    pid = null;
-                }
-                else {
-                    pid = Integer.parseInt(line);
-                }
+                pid = doGetPid(reader);
             } catch (IOException ex) {
                 logger.log(Level.WARNING, "Exception while reading pid file", ex);
                 pid = null;
@@ -109,6 +103,18 @@
         }
         return (pid != null);
     }
+    
+    // package private for testing
+    Integer doGetPid(BufferedReader reader) throws IOException {
+        String line = reader.readLine();
+        // readLine() returns null on EOF
+        if (line == null || line.isEmpty()) {
+            return null;
+        }
+        else {
+            return Integer.parseInt(line);
+        }
+    }
 
     private void deleteStalePidFile() {
         pid = null;
--- a/agent/cli/src/test/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunnerTest.java	Mon Aug 05 11:56:20 2013 +0200
+++ b/agent/cli/src/test/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunnerTest.java	Mon Aug 05 15:11:17 2013 +0200
@@ -1,10 +1,12 @@
 package com.redhat.thermostat.agent.cli.impl.db;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
@@ -113,6 +115,14 @@
             assertEquals("No SSL key passphrase set!", e.getMessage());
         }
     }
+    
+    @Test
+    public void testCheckPidNull() throws IOException {
+        BufferedReader reader = mock(BufferedReader.class);
+        when(reader.readLine()).thenReturn(null);
+        Integer pid = runner.doGetPid(reader);
+        assertNull(pid);
+    }
 
     private void verifyEquals(String[] expected, String[] actual) {
         assertEquals(expected.length, actual.length);