ProcessIdFileReader { public static String getProcessId(Path path) throws IOException { if (path == null) { throw new IOException("Trying to access process id from a null path"); } if (LOG.isDebugEnabled()) { LOG.debug("Accessing pid from pid file " + path); } String processId = null; BufferedReader bufReader = null; try { File file = new File(path.toString()); if (file.exists()) { FileInputStream fis = new FileInputStream(file); bufReader = new BufferedReader(new InputStreamReader(fis, "UTF-8")); while (true) { String line = bufReader.readLine(); if (line == null) { break; } String temp = line.trim(); if (!temp.isEmpty()) { if (Shell.WINDOWS) { try { ContainerId.fromString(temp); processId = temp; break; } catch (Exception e) { } } else { try { long pid = Long.parseLong(temp); if (pid > 0) { processId = temp; break; } } catch (Exception e) { } } } } } } finally { if (bufReader != null) { bufReader.close(); } } if (LOG.isDebugEnabled()) { LOG.debug("Got pid " + (processId != null ? processId : "null") + " from path " + path); } return processId; }  static String getProcessId(Path path);  }
@Test (timeout = 30000) public void testNullPath() { String pid = null; try { pid = ProcessIdFileReader.getProcessId(null); fail("Expected an error to be thrown for null path"); } catch (Exception e) { } assert(pid == null); }
@Test (timeout = 30000) public void testSimpleGet() throws IOException { String rootDir = new File(System.getProperty( "test.build.data", "/tmp")).getAbsolutePath(); File testFile = null; String expectedProcessId = Shell.WINDOWS ? "container_1353742680940_0002_01_000001" : "56789"; try { testFile = new File(rootDir, "temp.txt"); PrintWriter fileWriter = new PrintWriter(testFile); fileWriter.println(expectedProcessId); fileWriter.close(); String processId = null; processId = ProcessIdFileReader.getProcessId( new Path(rootDir + Path.SEPARATOR + "temp.txt")); Assert.assertEquals(expectedProcessId, processId); } finally { if (testFile != null && testFile.exists()) { testFile.delete(); } } }
@Test (timeout = 30000) public void testComplexGet() throws IOException { String rootDir = new File(System.getProperty( "test.build.data", "/tmp")).getAbsolutePath(); File testFile = null; String processIdInFile = Shell.WINDOWS ? " container_1353742680940_0002_01_000001 " : " 23 "; String expectedProcessId = processIdInFile.trim(); try { testFile = new File(rootDir, "temp.txt"); PrintWriter fileWriter = new PrintWriter(testFile); fileWriter.println(" "); fileWriter.println(""); fileWriter.println("abc"); fileWriter.println("-123"); fileWriter.println("-123 "); fileWriter.println(processIdInFile); fileWriter.println("6236"); fileWriter.close(); String processId = null; processId = ProcessIdFileReader.getProcessId( new Path(rootDir + Path.SEPARATOR + "temp.txt")); Assert.assertEquals(expectedProcessId, processId); } finally { if (testFile != null && testFile.exists()) { testFile.delete(); } } }