Mercurial > hg > release > thermostat-0.13
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);