1 4 package com.tc.process; 5 6 import com.tc.test.TCTestCase; 7 8 import java.io.File ; 9 10 13 public class LinkedJavaProcessTest extends TCTestCase { 14 15 public void testRunsRightCommand() throws Exception { 16 LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain1.class.getName()); 17 process.start(); 18 19 StreamCollector outCollector = new StreamCollector(process.getInputStream()); 21 StreamCollector errCollector = new StreamCollector(process.getErrorStream()); 23 24 outCollector.start(); 25 errCollector.start(); 26 27 process.waitFor(); 28 29 outCollector.join(30000); 30 errCollector.join(30000); 31 32 assertEquals("Ho there!", ignoreStandardWarnings(errCollector.toString()).trim()); 33 assertEquals("Hi there!", ignoreStandardWarnings(outCollector.toString()).trim()); 34 } 35 36 public static String ignoreStandardWarnings(String input) { 37 String delimiter = System.getProperty("line.separator", "\n"); 38 39 String [] output = input.split(delimiter); 40 StringBuffer out = new StringBuffer (); 41 for (int i = 0; i < output.length; ++i) { 42 if (output[i].startsWith("DATA: ")) { 43 out.append(output[i].substring("DATA: ".length()) + delimiter); 44 } 45 } 46 47 return out.toString(); 48 } 49 50 public void testIO() throws Exception { 51 LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain2.class.getName()); 52 process.start(); 53 54 StreamCollector outCollector = new StreamCollector(process.getInputStream()); StreamCollector errCollector = new StreamCollector(process.getErrorStream()); 57 outCollector.start(); 58 errCollector.start(); 59 60 process.getOutputStream().write("Test Input!\n".getBytes()); 61 process.getOutputStream().flush(); 62 63 process.waitFor(); 64 65 outCollector.join(30000); 66 errCollector.join(30000); 67 68 assertEquals("out: <Test Input!>", ignoreStandardWarnings(outCollector.toString()).trim()); 69 assertEquals("err: <Test Input!>", ignoreStandardWarnings(errCollector.toString()).trim()); 70 } 71 72 public void testExitCode() throws Exception { 73 LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain3.class.getName()); 74 process.start(); 75 76 process.waitFor(); 77 assertEquals(57, process.exitValue()); 78 } 79 80 public void testSetup() throws Exception { 81 LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain4.class.getName()); 82 83 File dir = getTempFile("mydir"); 84 assertTrue(dir.mkdirs()); 85 String pwd = dir.getCanonicalPath(); 86 process.setDirectory(dir); 87 process.setEnvironment(new String [] { "LD_LIBRARY_PATH=myenv" }); 88 process.setJavaArguments(new String [] { "-Dljpt.foo=myprop" }); 89 90 process.start(); 91 92 StreamCollector outCollector = new StreamCollector(process.getInputStream()); StreamCollector errCollector = new StreamCollector(process.getErrorStream()); 95 outCollector.start(); 96 errCollector.start(); 97 98 process.waitFor(); 99 100 outCollector.join(30000); 101 errCollector.join(30000); 102 103 String output = outCollector.toString(); 104 String err = errCollector.toString(); 105 106 assertEquals("", ignoreStandardWarnings(err).trim()); 107 108 assertContains("ljpt.foo=myprop", output); 109 assertContains(pwd.toLowerCase(), output.toLowerCase()); 110 } 111 112 private String strip(String s) { 113 if (s != null && s.startsWith("DATA: ")) return s.substring("DATA: ".length()); 114 else return s; 115 } 116 117 public void testKillingParentKillsChildren() throws Exception { 118 File destFile = getTempFile("tkpkc-file"); 119 File child1File = new File (destFile.getAbsolutePath() + "-child-1"); 120 File child2File = new File (destFile.getAbsolutePath() + "-child-2"); 121 LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain5.class.getName(), new String [] { 122 destFile.getAbsolutePath(), "true" }); 123 124 process.start(); 125 126 StreamCollector collect = new StreamCollector(process.STDOUT()); 127 collect.start(); 128 StreamCollector collect2 = new StreamCollector(process.STDERR()); 129 collect2.start(); 130 131 long origSize = destFile.length(); 132 Thread.sleep(30000); 133 long newSize = destFile.length(); 134 135 System.err.println("Parent first: " + newSize + " vs. " + origSize); 136 assertTrue(newSize > origSize); 138 long child1OrigSize = child1File.length(); 139 long child2OrigSize = child2File.length(); 140 Thread.sleep(30000); 141 long child1NewSize = child1File.length(); 142 long child2NewSize = child2File.length(); 143 144 System.err.println("Child 1 first: " + child1NewSize + " vs. " + child1OrigSize); 145 System.err.println("Child 2 first: " + child2NewSize + " vs. " + child2OrigSize); 146 assertTrue(child1NewSize > child1OrigSize); 148 assertTrue(child2NewSize > child2OrigSize); 149 150 process.destroy(); 151 Thread.sleep(25000); 152 153 origSize = destFile.length(); 154 Thread.sleep(5000); 155 newSize = destFile.length(); 156 157 System.err.println("Parent after kill: " + newSize + " vs. " + origSize); 158 assertEquals(origSize, newSize); 160 child1OrigSize = child1File.length(); 161 child2OrigSize = child2File.length(); 162 Thread.sleep(5000); 163 child1NewSize = child1File.length(); 164 child2NewSize = child2File.length(); 165 System.err.println("Child 1 after kill: " + child1NewSize + " vs. " + child1OrigSize); 166 System.err.println("Child 2 after kill: " + child2NewSize + " vs. " + child2OrigSize); 167 168 assertEquals(child1OrigSize, child1NewSize); assertEquals(child2OrigSize, child2NewSize); } 171 172 } 173 | Popular Tags |