KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > process > LinkedJavaProcessTest


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tc.process;
5
6 import com.tc.test.TCTestCase;
7
8 import java.io.File JavaDoc;
9
10 /**
11  * Unit test for {@link LinkedJavaProcess}.
12  */

13 public class LinkedJavaProcessTest extends TCTestCase {
14
15   public void testRunsRightCommand() throws Exception JavaDoc {
16     LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain1.class.getName());
17     process.start();
18
19     // This is actually stdout...weird Java
20
StreamCollector outCollector = new StreamCollector(process.getInputStream());
21     // This is stderr
22
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 JavaDoc ignoreStandardWarnings(String JavaDoc input) {
37     String JavaDoc delimiter = System.getProperty("line.separator", "\n");
38
39     String JavaDoc[] output = input.split(delimiter);
40     StringBuffer JavaDoc out = new StringBuffer JavaDoc();
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 JavaDoc {
51     LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain2.class.getName());
52     process.start();
53
54     StreamCollector outCollector = new StreamCollector(process.getInputStream()); // stdout
55
StreamCollector errCollector = new StreamCollector(process.getErrorStream()); // stderr
56

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 JavaDoc {
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 JavaDoc {
81     LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain4.class.getName());
82
83     File JavaDoc dir = getTempFile("mydir");
84     assertTrue(dir.mkdirs());
85     String JavaDoc pwd = dir.getCanonicalPath();
86     process.setDirectory(dir);
87     process.setEnvironment(new String JavaDoc[] { "LD_LIBRARY_PATH=myenv" });
88     process.setJavaArguments(new String JavaDoc[] { "-Dljpt.foo=myprop" });
89
90     process.start();
91
92     StreamCollector outCollector = new StreamCollector(process.getInputStream()); // stdout
93
StreamCollector errCollector = new StreamCollector(process.getErrorStream()); // stderr
94

95     outCollector.start();
96     errCollector.start();
97
98     process.waitFor();
99
100     outCollector.join(30000);
101     errCollector.join(30000);
102
103     String JavaDoc output = outCollector.toString();
104     String JavaDoc 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 JavaDoc strip(String JavaDoc 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 JavaDoc {
118     File JavaDoc destFile = getTempFile("tkpkc-file");
119     File JavaDoc child1File = new File JavaDoc(destFile.getAbsolutePath() + "-child-1");
120     File JavaDoc child2File = new File JavaDoc(destFile.getAbsolutePath() + "-child-2");
121     LinkedJavaProcess process = new LinkedJavaProcess(LinkedJavaProcessTestMain5.class.getName(), new String JavaDoc[] {
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); // Make sure it's all started + working
137

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     // Make sure the children are all started + working
147
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); // Make sure the parent is dead
159

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); // Make sure child 1 is dead
169
assertEquals(child2OrigSize, child2NewSize); // Make sure child 1 is dead
170
}
171
172 }
173
Popular Tags