72 public class ExecutionEnvironment extends TestHelper {
73 static final String LD_LIBRARY_PATH = TestHelper.isMacOSX
74 ? "DYLD_LIBRARY_PATH"
75 : "LD_LIBRARY_PATH";
76 static final String LD_LIBRARY_PATH_32 = LD_LIBRARY_PATH + "_32";
77 static final String LD_LIBRARY_PATH_64 = LD_LIBRARY_PATH + "_64";
78
79 // Note: these paths need not exist on the filesytem
80 static final String LD_LIBRARY_PATH_VALUE = "/Bridge/On/The/River/Kwai";
81 static final String LD_LIBRARY_PATH_32_VALUE = "/Lawrence/Of/Arabia";
82 static final String LD_LIBRARY_PATH_64_VALUE = "/A/Passage/To/India";
83
84 static final String[] LD_PATH_STRINGS = {
85 LD_LIBRARY_PATH + "=" + LD_LIBRARY_PATH_VALUE,
86 LD_LIBRARY_PATH_32 + "=" + LD_LIBRARY_PATH_32_VALUE,
87 LD_LIBRARY_PATH_64 + "=" + LD_LIBRARY_PATH_64_VALUE
88 };
89
90 static final File testJarFile = new File("EcoFriendly.jar");
91
92 static final String LIBJVM = TestHelper.isWindows
93 ? "jvm.dll"
94 : "libjvm" + (TestHelper.isMacOSX ? ".dylib" : ".so");
95
96 public ExecutionEnvironment() {
97 createTestJar();
98 }
99
100 static void createTestJar() {
101 try {
102 List<String> codeList = new ArrayList<>();
103 codeList.add("static void printValue(String name, boolean property) {\n");
104 codeList.add(" String value = (property) ? System.getProperty(name) : System.getenv(name);\n");
105 codeList.add(" System.out.println(name + \"=\" + value);\n");
106 codeList.add("}\n");
107 codeList.add("public static void main(String... args) {\n");
108 codeList.add(" System.out.println(\"Execute test:\");\n");
109 codeList.add(" printValue(\"os.name\", true);\n");
110 codeList.add(" printValue(\"os.arch\", true);\n");
111 codeList.add(" printValue(\"os.version\", true);\n");
112 codeList.add(" printValue(\"sun.arch.data.model\", true);\n");
113 codeList.add(" printValue(\"java.library.path\", true);\n");
114 codeList.add(" printValue(\"" + LD_LIBRARY_PATH + "\", false);\n");
115 codeList.add(" printValue(\"" + LD_LIBRARY_PATH_32 + "\", false);\n");
123 }
124 private void flagError(TestResult tr, String message) {
125 System.err.println(tr);
126 throw new RuntimeException(message);
127 }
128 /*
129 * tests if the launcher pollutes the LD_LIBRARY_PATH variables ie. there
130 * should not be any new variables or pollution/mutations of any kind, the
131 * environment should be pristine.
132 */
133 @Test
134 void testEcoFriendly() {
135 TestResult tr = null;
136
137 Map<String, String> env = new HashMap<>();
138 for (String x : LD_PATH_STRINGS) {
139 String pairs[] = x.split("=");
140 env.put(pairs[0], pairs[1]);
141 }
142
143 tr = doExec(env, javaCmd, haveServerVM ? "-server" : "-client",
144 "-jar", testJarFile.getAbsolutePath());
145
146 if (!tr.isNotZeroOutput()) {
147 flagError(tr, "Error: No output at all. Did the test execute ?");
148 }
149
150 for (String x : LD_PATH_STRINGS) {
151 if (!tr.contains(x)) {
152 flagError(tr, "FAIL: did not get <" + x + ">");
153 }
154 }
155 }
156
157 /*
158 * ensures that there are no execs as long as we are in the same
159 * data model
160 */
161 @Test
162 void testNoExec() {
163 Map<String, String> env = new HashMap<>();
164 env.put(JLDEBUG_KEY, "true");
165 TestResult tr = doExec(env, javaCmd,
166 haveServerVM ? "-server" : "-client",
167 "-version");
168 if (tr.testOutput.contains(EXPECTED_MARKER)) {
169 flagError(tr, "testNoExec: found warning <" + EXPECTED_MARKER +
170 "> the process execing ?");
171 }
172 }
173
174 /*
175 * This test ensures that LD_LIBRARY_PATH* values are interpreted by the VM
176 * and the expected java.library.path behaviour.
177 * For Generic platforms (All *nixes):
178 * * All LD_LIBRARY_PATH variable should be on java.library.path
179 * For Solaris 32-bit
180 * * The LD_LIBRARY_PATH_32 should override LD_LIBRARY_PATH if specified
181 * For Solaris 64-bit
182 * * The LD_LIBRARY_PATH_64 should override LD_LIBRARY_PATH if specified
183 */
184 @Test
185 void testJavaLibraryPath() {
186 TestResult tr = null;
187
188 Map<String, String> env = new HashMap<>();
189
190 if (TestHelper.isLinux || TestHelper.isMacOSX) {
191 for (String x : LD_PATH_STRINGS) {
192 String pairs[] = x.split("=");
193 env.put(pairs[0], pairs[1]);
194 }
195
196 tr = doExec(env, javaCmd, haveServerVM ? "-server" : "-client",
197 "-jar", testJarFile.getAbsolutePath());
198 verifyJavaLibraryPathGeneric(tr);
199 } else { // Solaris
200 // no override
201 env.clear();
202 env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
203 tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
204 verifyJavaLibraryPathGeneric(tr);
205
206 env.clear();
207 for (String x : LD_PATH_STRINGS) {
208 String pairs[] = x.split("=");
209 env.put(pairs[0], pairs[1]);
210 }
211
212 // verify the override occurs for 64-bit system
213 tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
214 verifyJavaLibraryPathOverride(tr, false);
215 }
216 }
217
223 }
224
225 private void verifyJavaLibraryPathOverride(TestResult tr,
226 boolean is32Bit) {
227 // make sure the 32/64 bit value exists
228 if (!tr.matches("java.library.path=.*" +
229 (is32Bit ? LD_LIBRARY_PATH_32_VALUE : LD_LIBRARY_PATH_64_VALUE) + ".*")) {
230 flagError(tr, "verifyJavaLibraryPathOverride: " +
231 " java.library.path does not contain " +
232 (is32Bit ? LD_LIBRARY_PATH_32_VALUE : LD_LIBRARY_PATH_64_VALUE));
233
234 }
235 // make sure the generic value is absent
236 if (!tr.notMatches("java.library.path=.*" + LD_LIBRARY_PATH_VALUE + ".*")) {
237 flagError(tr, "verifyJavaLibraryPathOverride: " +
238 " java.library.path contains " + LD_LIBRARY_PATH_VALUE);
239 }
240 }
241
242 /*
243 * ensures we have indeed exec'ed the correct vm of choice, all VMs support
244 * -server, however 32-bit VMs support -client and -server.
245 */
246 @Test
247 void testVmSelection() {
248
249 TestResult tr = null;
250
251 if (haveClientVM) {
252 tr = doExec(javaCmd, "-client", "-version");
253 if (!tr.matches(".*Client VM.*")) {
254 flagError(tr, "the expected vm -client did not launch");
255 }
256 }
257 if (haveServerVM) {
258 tr = doExec(javaCmd, "-server", "-version");
259 if (!tr.matches(".*Server VM.*")) {
260 flagError(tr, "the expected vm -server did not launch");
261 }
262 }
263 }
264
|
72 public class ExecutionEnvironment extends TestHelper {
73 static final String LD_LIBRARY_PATH = TestHelper.isMacOSX
74 ? "DYLD_LIBRARY_PATH"
75 : "LD_LIBRARY_PATH";
76 static final String LD_LIBRARY_PATH_32 = LD_LIBRARY_PATH + "_32";
77 static final String LD_LIBRARY_PATH_64 = LD_LIBRARY_PATH + "_64";
78
79 // Note: these paths need not exist on the filesytem
80 static final String LD_LIBRARY_PATH_VALUE = "/Bridge/On/The/River/Kwai";
81 static final String LD_LIBRARY_PATH_32_VALUE = "/Lawrence/Of/Arabia";
82 static final String LD_LIBRARY_PATH_64_VALUE = "/A/Passage/To/India";
83
84 static final String[] LD_PATH_STRINGS = {
85 LD_LIBRARY_PATH + "=" + LD_LIBRARY_PATH_VALUE,
86 LD_LIBRARY_PATH_32 + "=" + LD_LIBRARY_PATH_32_VALUE,
87 LD_LIBRARY_PATH_64 + "=" + LD_LIBRARY_PATH_64_VALUE
88 };
89
90 static final File testJarFile = new File("EcoFriendly.jar");
91
92 public ExecutionEnvironment() {
93 createTestJar();
94 }
95
96 static void createTestJar() {
97 try {
98 List<String> codeList = new ArrayList<>();
99 codeList.add("static void printValue(String name, boolean property) {\n");
100 codeList.add(" String value = (property) ? System.getProperty(name) : System.getenv(name);\n");
101 codeList.add(" System.out.println(name + \"=\" + value);\n");
102 codeList.add("}\n");
103 codeList.add("public static void main(String... args) {\n");
104 codeList.add(" System.out.println(\"Execute test:\");\n");
105 codeList.add(" printValue(\"os.name\", true);\n");
106 codeList.add(" printValue(\"os.arch\", true);\n");
107 codeList.add(" printValue(\"os.version\", true);\n");
108 codeList.add(" printValue(\"sun.arch.data.model\", true);\n");
109 codeList.add(" printValue(\"java.library.path\", true);\n");
110 codeList.add(" printValue(\"" + LD_LIBRARY_PATH + "\", false);\n");
111 codeList.add(" printValue(\"" + LD_LIBRARY_PATH_32 + "\", false);\n");
119 }
120 private void flagError(TestResult tr, String message) {
121 System.err.println(tr);
122 throw new RuntimeException(message);
123 }
124 /*
125 * tests if the launcher pollutes the LD_LIBRARY_PATH variables ie. there
126 * should not be any new variables or pollution/mutations of any kind, the
127 * environment should be pristine.
128 */
129 @Test
130 void testEcoFriendly() {
131 TestResult tr = null;
132
133 Map<String, String> env = new HashMap<>();
134 for (String x : LD_PATH_STRINGS) {
135 String pairs[] = x.split("=");
136 env.put(pairs[0], pairs[1]);
137 }
138
139 tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
140
141 if (!tr.isNotZeroOutput()) {
142 flagError(tr, "Error: No output at all. Did the test execute ?");
143 }
144
145 for (String x : LD_PATH_STRINGS) {
146 if (!tr.contains(x)) {
147 flagError(tr, "FAIL: did not get <" + x + ">");
148 }
149 }
150 }
151
152 /*
153 * ensures that there are no execs as long as we are in the same
154 * data model
155 */
156 @Test
157 void testNoExec() {
158 Map<String, String> env = new HashMap<>();
159 env.put(JLDEBUG_KEY, "true");
160 TestResult tr = doExec(env, javaCmd, "-version");
161 if (tr.testOutput.contains(EXPECTED_MARKER)) {
162 flagError(tr, "testNoExec: found warning <" + EXPECTED_MARKER +
163 "> the process execing ?");
164 }
165 }
166
167 /*
168 * This test ensures that LD_LIBRARY_PATH* values are interpreted by the VM
169 * and the expected java.library.path behaviour.
170 * For Generic platforms (All *nixes):
171 * * All LD_LIBRARY_PATH variable should be on java.library.path
172 * For Solaris 32-bit
173 * * The LD_LIBRARY_PATH_32 should override LD_LIBRARY_PATH if specified
174 * For Solaris 64-bit
175 * * The LD_LIBRARY_PATH_64 should override LD_LIBRARY_PATH if specified
176 */
177 @Test
178 void testJavaLibraryPath() {
179 TestResult tr = null;
180
181 Map<String, String> env = new HashMap<>();
182
183 if (TestHelper.isLinux || TestHelper.isMacOSX) {
184 for (String x : LD_PATH_STRINGS) {
185 String pairs[] = x.split("=");
186 env.put(pairs[0], pairs[1]);
187 }
188
189 tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
190 verifyJavaLibraryPathGeneric(tr);
191 } else { // Solaris
192 // no override
193 env.clear();
194 env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
195 tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
196 verifyJavaLibraryPathGeneric(tr);
197
198 env.clear();
199 for (String x : LD_PATH_STRINGS) {
200 String pairs[] = x.split("=");
201 env.put(pairs[0], pairs[1]);
202 }
203
204 // verify the override occurs for 64-bit system
205 tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
206 verifyJavaLibraryPathOverride(tr, false);
207 }
208 }
209
215 }
216
217 private void verifyJavaLibraryPathOverride(TestResult tr,
218 boolean is32Bit) {
219 // make sure the 32/64 bit value exists
220 if (!tr.matches("java.library.path=.*" +
221 (is32Bit ? LD_LIBRARY_PATH_32_VALUE : LD_LIBRARY_PATH_64_VALUE) + ".*")) {
222 flagError(tr, "verifyJavaLibraryPathOverride: " +
223 " java.library.path does not contain " +
224 (is32Bit ? LD_LIBRARY_PATH_32_VALUE : LD_LIBRARY_PATH_64_VALUE));
225
226 }
227 // make sure the generic value is absent
228 if (!tr.notMatches("java.library.path=.*" + LD_LIBRARY_PATH_VALUE + ".*")) {
229 flagError(tr, "verifyJavaLibraryPathOverride: " +
230 " java.library.path contains " + LD_LIBRARY_PATH_VALUE);
231 }
232 }
233
234 /*
235 * ensures we have indeed exec'ed the correct vm of choice if it exists
236 */
237 @Test
238 void testVmSelection() {
239
240 TestResult tr = null;
241
242 if (haveClientVM) {
243 tr = doExec(javaCmd, "-client", "-version");
244 if (!tr.matches(".*Client VM.*")) {
245 flagError(tr, "the expected vm -client did not launch");
246 }
247 }
248 if (haveServerVM) {
249 tr = doExec(javaCmd, "-server", "-version");
250 if (!tr.matches(".*Server VM.*")) {
251 flagError(tr, "the expected vm -server did not launch");
252 }
253 }
254 }
255
|