# HG changeset patch # User Severin Gehwolf # Date 1375708277 -7200 # Node ID d1f55aa2b08383c489e9d9c865c4d58d094b04e3 # Parent 3d2faeefba5f21e4cf461600989be9a1b8be35a8 Fix potential NPE in MongoProcessRunner. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-August/007790.html diff -r 3d2faeefba5f -r d1f55aa2b083 agent/cli/src/main/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunner.java --- 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; diff -r 3d2faeefba5f -r d1f55aa2b083 agent/cli/src/test/java/com/redhat/thermostat/agent/cli/impl/db/MongoProcessRunnerTest.java --- 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);