KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tcverify > DSOVerifierTest


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.tcverify;
5
6 import org.apache.commons.lang.ArrayUtils;
7
8 import com.tc.config.schema.builder.InstrumentedClassConfigBuilder;
9 import com.tc.config.schema.builder.LockConfigBuilder;
10 import com.tc.config.schema.builder.RootConfigBuilder;
11 import com.tc.config.schema.setup.FatalIllegalConfigurationChangeHandler;
12 import com.tc.config.schema.setup.StandardTVSConfigurationSetupManagerFactory;
13 import com.tc.config.schema.setup.TVSConfigurationSetupManagerFactory;
14 import com.tc.config.schema.test.InstrumentedClassConfigBuilderImpl;
15 import com.tc.config.schema.test.L2ConfigBuilder;
16 import com.tc.config.schema.test.LockConfigBuilderImpl;
17 import com.tc.config.schema.test.RootConfigBuilderImpl;
18 import com.tc.config.schema.test.TerracottaConfigBuilder;
19 import com.tc.process.LinkedJavaProcess;
20 import com.tc.process.StreamCollector;
21 import com.tc.server.TCServerImpl;
22 import com.tc.test.TCTestCase;
23 import com.tc.test.TestConfigObject;
24 import com.tc.util.PortChooser;
25
26 import java.io.BufferedReader JavaDoc;
27 import java.io.File JavaDoc;
28 import java.io.FileWriter JavaDoc;
29 import java.io.IOException JavaDoc;
30 import java.io.StringReader JavaDoc;
31
32 /**
33  * A quick/shallow test that uses the DSOVerifier client program
34  */

35 public class DSOVerifierTest extends TCTestCase {
36
37   TCServerImpl server;
38
39   public final static void main(String JavaDoc[] args) throws Exception JavaDoc {
40     DSOVerifierTest t = new DSOVerifierTest();
41     t.setUp();
42     t.test();
43     t.tearDown();
44   }
45
46   public DSOVerifierTest() {
47     // disableAllUntil("2005-05-11");
48
}
49
50   protected void setUp() throws Exception JavaDoc {
51     super.setUp();
52
53     File JavaDoc configFile = writeConfigFile();
54
55     StandardTVSConfigurationSetupManagerFactory config;
56     config = new StandardTVSConfigurationSetupManagerFactory(new String JavaDoc[] {
57         StandardTVSConfigurationSetupManagerFactory.CONFIG_SPEC_ARGUMENT_WORD, configFile.getAbsolutePath() }, true,
58                                                              new FatalIllegalConfigurationChangeHandler());
59
60     server = new TCServerImpl(config.createL2TVSConfigurationSetupManager(null));
61     server.start();
62   }
63
64   protected void tearDown() throws Exception JavaDoc {
65     if (server != null) {
66       server.stop();
67     }
68     super.tearDown();
69   }
70
71   private boolean verifyOutput(String JavaDoc output, String JavaDoc desiredPrefix) throws IOException JavaDoc {
72     BufferedReader JavaDoc reader = new BufferedReader JavaDoc(new StringReader JavaDoc(output));
73
74     String JavaDoc line;
75     while ((line = reader.readLine()) != null) {
76       if (line.startsWith(desiredPrefix)) { return true; }
77     }
78
79     return false;
80   }
81
82   public void test() throws Exception JavaDoc {
83     String JavaDoc bootclasspath = "-Xbootclasspath/p:" + TestConfigObject.getInstance().normalBootJar();
84
85     System.out.println("Bootclasspath:" + bootclasspath);
86
87     String JavaDoc[] jvmArgs = new String JavaDoc[] {
88         bootclasspath,
89         "-D" + TVSConfigurationSetupManagerFactory.CONFIG_FILE_PROPERTY_NAME + "=localhost:"
90             + server.getDSOListenPort() };
91     System.out.println("JVM args: " + ArrayUtils.toString(jvmArgs));
92
93     LinkedJavaProcess p1 = new LinkedJavaProcess(DSOVerifier.class.getName(), new String JavaDoc[] { "1", "2" });
94     p1.setJavaArguments(jvmArgs);
95     p1.setDSOTarget(true);
96
97     LinkedJavaProcess p2 = new LinkedJavaProcess(DSOVerifier.class.getName(), new String JavaDoc[] { "2", "1" });
98     p2.setJavaArguments(jvmArgs);
99     p2.setDSOTarget(true);
100
101     p1.start();
102     p2.start();
103
104     p1.getOutputStream().close();
105     p2.getOutputStream().close();
106
107     StreamCollector p1StdOut = new StreamCollector(p1.getInputStream());
108     StreamCollector p2StdOut = new StreamCollector(p2.getInputStream());
109     StreamCollector p1StdErr = new StreamCollector(p1.getErrorStream());
110     StreamCollector p2StdErr = new StreamCollector(p2.getErrorStream());
111     p1StdOut.start();
112     p1StdErr.start();
113     p2StdOut.start();
114     p2StdErr.start();
115
116     p1.waitFor();
117     p2.waitFor();
118
119     p1StdOut.join();
120     p1StdErr.join();
121     p2StdOut.join();
122     p2StdErr.join();
123
124     String JavaDoc p1Out = p1StdOut.toString();
125     String JavaDoc p2Out = p2StdOut.toString();
126     String JavaDoc p1Err = p1StdErr.toString();
127     String JavaDoc p2Err = p2StdErr.toString();
128
129     String JavaDoc compound = "Process 1 output:\n\n" + p1Out + "\n\nProcess 1 error:\n\n" + p1Err
130                       + "\n\nProcess 2 output:\n\n" + p2Out + "\n\nProcess 2 error:\n\n" + p2Err + "\n\n";
131
132     String JavaDoc output = "L2-DSO-OK:";
133     if (!verifyOutput(p1Out, output)) {
134       fail(compound);
135     }
136
137     if (!verifyOutput(p2Out, output)) {
138       fail(compound);
139     }
140   }
141
142   private File JavaDoc writeConfigFile() throws IOException JavaDoc {
143     TerracottaConfigBuilder config = TerracottaConfigBuilder.newMinimalInstance();
144
145     PortChooser portChooser = new PortChooser();
146     L2ConfigBuilder l2Builder = L2ConfigBuilder.newMinimalInstance();
147     l2Builder.setDSOPort(portChooser.chooseRandomPort());
148     l2Builder.setJMXPort(portChooser.chooseRandomPort());
149     l2Builder.setName("localhost");
150
151     config.getServers().setL2s(new L2ConfigBuilder[] { l2Builder });
152
153     InstrumentedClassConfigBuilder instrumentedClass = new InstrumentedClassConfigBuilderImpl();
154     instrumentedClass.setClassExpression("com.tcverify..*");
155     config.getApplication().getDSO().setInstrumentedClasses(new InstrumentedClassConfigBuilder[] { instrumentedClass });
156
157     LockConfigBuilder lock1 = new LockConfigBuilderImpl(LockConfigBuilder.TAG_NAMED_LOCK);
158     lock1.setMethodExpression("java.lang.Object com.tcverify.DSOVerifier.getValue(int)");
159     lock1.setLockName("verifierMap");
160     lock1.setLockLevel(LockConfigBuilder.LEVEL_WRITE);
161
162     LockConfigBuilder lock2 = new LockConfigBuilderImpl(LockConfigBuilder.TAG_NAMED_LOCK);
163     lock2.setMethodExpression("void com.tcverify.DSOVerifier.setValue(int)");
164     lock2.setLockName("verifierMap");
165     lock2.setLockLevel(LockConfigBuilder.LEVEL_WRITE);
166
167     config.getApplication().getDSO().setLocks(new LockConfigBuilder[] { lock1, lock2 });
168
169     RootConfigBuilder root = new RootConfigBuilderImpl();
170     root.setFieldName("com.tcverify.DSOVerifier.verifierMap");
171     root.setRootName("verifierMap");
172
173     config.getApplication().getDSO().setRoots(new RootConfigBuilder[] { root });
174
175     File JavaDoc configDir = this.getTempDirectory();
176     File JavaDoc configFile = new File JavaDoc(configDir, "dso-verifier-config.xml");
177     FileWriter JavaDoc cfgOut = new FileWriter JavaDoc(configFile);
178     cfgOut.write(config.toString());
179     cfgOut.flush();
180     cfgOut.close();
181     return configFile;
182   }
183 }
184
Popular Tags