--- a/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java Sun Dec 11 12:20:45 2016 +0100
+++ b/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java Sun Dec 11 17:39:27 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -39,10 +39,14 @@
* java.rmi/sun.rmi.server
* java.rmi/sun.rmi.transport
* java.rmi/sun.rmi.transport.tcp
- * @build TestLibrary RMID ActivationLibrary
+ * java.base/sun.nio.ch
+ * @build TestLibrary RMID ActivationLibrary RMIDSelectorProvider
* Eliza Retireable Doctor Doctor_Stub
- * @run main/othervm/timeout=240/policy=security.policy
- * -Djava.compiler=NONE SetChildEnv
+ * @run main/othervm/timeout=240/policy=security.policy SetChildEnv 0 0
+ * @run main/othervm/timeout=240/policy=security.policy SetChildEnv 1 -verbosegc
+ * 2 foo.bar=SetChildEnvTest sun.rmi.server.doSomething=true
+ * @run main/othervm/timeout=240/policy=security.policy SetChildEnv 0 1 parameter.count=zero
+ * @run main/othervm/timeout=240/policy=security.policy SetChildEnv 1 -Xmx32m 0
*/
import java.rmi.*;
import java.util.Properties;
@@ -55,159 +59,136 @@
public class SetChildEnv
{
- public static void main(String argv[])
- throws Exception
- {
- int runningPort = TestLibrary.getUnusedRandomPort();
-
- System.out.println("java.compiler=" + System.getProperty("java.compiler"));
- // don't embed spaces in any of the test args/props, because
- // they won't be parsed properly
- runwith (new String[0], new String[0], runningPort);
+ public static void main(String argv[]) throws Exception {
+ RMID rmid = null;
+ try {
+ System.out.println("java.compiler=" + System.getProperty("java.compiler"));
+ int paramCount = Integer.valueOf(argv[0]);
+ String[] params = paramCount == 0 ?
+ new String[0] : Arrays.copyOfRange(argv, 1, paramCount+1);
+ int propCount = Integer.valueOf(argv[paramCount+1]);
+ String[] props = propCount == 0 ?
+ new String[0] :
+ Arrays.copyOfRange(argv, paramCount+2, paramCount+propCount+2);
- runwith (
- new String[] { "-verbosegc" },
- new String[] { "foo.bar=SetChildEnvTest",
- "sun.rmi.server.doSomething=true" },
- runningPort
- );
+ TestLibrary.suggestSecurityManager(TestParams.defaultSecurityManager);
+
+ // make a "watcher" which listens on a pipe and searches for
+ // the debugExec line while teeing to System.err
+ DebugExecWatcher watcher = DebugExecWatcher.makeWithPipe();
- runwith (
- new String[] { },
- new String[] { "parameter.count=zero" },
- runningPort
- );
+ RMID.removeLog();
+ rmid = RMID.createRMIDOnEphemeralPort(watcher.otherEnd(),
+ watcher.otherEnd(), true);
+
+ rmid.start();
- runwith (
- new String[] { "-Xmx32m" },
- new String[] { },
- runningPort
- );
- }
+ // compile props
+ Properties p = new Properties();
+ p.put("java.security.policy", TestParams.defaultGroupPolicy);
+ p.put("java.security.manager", TestParams.defaultSecurityManager);
+ //p.put("java.rmi.server.logCalls", "true");
+ int i;
+ for (i = 0; i < props.length; i++) {
+ p.put(props[i].substring(0, props[i].indexOf('=')),
+ props[i].substring(props[i].indexOf('=')+1));
+ }
+
+ // create CommandEnvironment and ActivationGroupDesc
+ ActivationGroupDesc.CommandEnvironment cmdenv =
+ new ActivationGroupDesc.CommandEnvironment(
+ null,
+ params);
- private static void runwith(
- String[] params, // extra args
- String[] props, // extra system properties
- int port // port on which to communicate
- )
- throws Exception
- {
- TestLibrary.suggestSecurityManager(TestParams.defaultSecurityManager);
+ ActivationGroupDesc gdesc = new ActivationGroupDesc(
+ p, cmdenv);
+
+ // register group
+ ActivationSystem actsys = ActivationGroup.getSystem();
+ ActivationGroupID gid = actsys.registerGroup(gdesc);
- // make a "watcher" which listens on a pipe and searches for
- // the debugExec line while teeing to System.err
- DebugExecWatcher watcher = DebugExecWatcher.makeWithPipe();
+ // create ActivationDesc
+ ActivationDesc odesc = new ActivationDesc(gid, // group
+ "Doctor", // class
+ null, // codesource
+ null); // closure data
- RMID.removeLog();
- RMID rmid = RMID.createRMID(watcher.otherEnd(), watcher.otherEnd(),
- true, // debugExec turned on
- true, port);
+ // register activatable object
+ Eliza doctor = (Eliza)Activatable.register(odesc);
- rmid.start();
+ // invoke a call with oh-so-humorous sample text
+ System.out.println ("Invoking complain()...");
+ String complaint =
+ "HELP ME, DOCTOR. I FEEL VIOLENT TOWARDS PEOPLE " +
+ "WHO INQUIRE ABOUT MY PARENTS.";
- // compile props
- Properties p = new Properties();
- p.put("java.security.policy", TestParams.defaultGroupPolicy);
- p.put("java.security.manager", TestParams.defaultSecurityManager);
- //p.put("java.rmi.server.logCalls", "true");
- int i;
- for (i = 0; i < props.length; i++) {
- p.put(props[i].substring(0, props[i].indexOf('=')),
- props[i].substring(props[i].indexOf('=')+1));
- }
+ System.out.println(complaint);
+ //Runtime.getRuntime().traceMethodCalls(true);
+ String res = doctor.complain(complaint);
+ //Runtime.getRuntime().traceMethodCalls(false);
+ System.out.println (" => " + res);
- // create CommandEnvironment and ActivationGroupDesc
- ActivationGroupDesc.CommandEnvironment cmdenv =
- new ActivationGroupDesc.CommandEnvironment(
- null,
- params);
+ // Get debugExec line, allowing 15 seconds for it to flush
+ // through the buffers and pipes.
+ String found = watcher.found;
+ if (found == null) {
+ int fudge = 15;
+ while (found == null && --fudge > 0) {
+ Thread.sleep(1000);
+ found = watcher.found;
+ }
+ if (found == null) {
+ TestLibrary.bomb("rmid subprocess produced no " +
+ "recognizable debugExec line");
+ }
+ }
- ActivationGroupDesc gdesc = new ActivationGroupDesc(
- p, cmdenv);
-
- // register group
- ActivationSystem actsys = ActivationGroup.getSystem();
- ActivationGroupID gid = actsys.registerGroup(gdesc);
+ System.err.println("debugExec found: <<" + found + ">>");
+ // q: first double-quote after debugExec
+ int q = found.indexOf('"', found.indexOf("rmid: debugExec"));
+ // qe: last double-quote on debugExec line
+ int qe = found.lastIndexOf('"');
+ if (q <= 1 || qe <= q) {
+ TestLibrary.bomb("rmid subprocess produced " +
+ "mangled debugExec line");
+ }
- // create ActivationDesc
- ActivationDesc odesc = new ActivationDesc(gid, // group
- "Doctor", // class
- null, // codesource
- null); // closure data
+ // split args by whitespace
+ StringTokenizer tk = new StringTokenizer(found.substring(q+1, qe));
+ tk.nextToken(); // skip command path/name
- // register activatable object
- Eliza doctor = (Eliza)Activatable.register(odesc);
+ // Now check off the requested args. Order isn't important, and
+ // any extra args are ignored, even if they're inconsistent or
+ // bargage, or duplicates.
- // invoke a call with oh-so-humorous sample text
- System.out.println ("Invoking complain()...");
- String complaint =
- "HELP ME, DOCTOR. I FEEL VIOLENT TOWARDS PEOPLE " +
- "WHO INQUIRE ABOUT MY PARENTS.";
+ Set argset = new HashSet(tk.countTokens());
+ while (tk.hasMoreTokens()) {
+ argset.add(tk.nextToken());
+ }
- System.out.println(complaint);
- //Runtime.getRuntime().traceMethodCalls(true);
- String res = doctor.complain(complaint);
- //Runtime.getRuntime().traceMethodCalls(false);
- System.out.println (" => " + res);
+ int m;
+ for (m = 0; m < params.length; m++) {
+ if(!argset.contains(params[m]))
+ TestLibrary.bomb("Parameter \"" + params[m] + "\" not set");
+ }
- // Get debugExec line, allowing 15 seconds for it to flush
- // through the buffers and pipes.
- String found = watcher.found;
- if (found == null) {
- int fudge = 15;
- while (found == null && --fudge > 0) {
- Thread.sleep(1000);
- found = watcher.found;
+ for (m = 0; m < props.length; m++) {
+ if (!argset.contains("-D" + props[m])) {
+ TestLibrary.bomb("Property binding \"" + props[m] +
+ "\" not set");
+ }
}
- if (found == null) {
- TestLibrary.bomb("rmid subprocess produced no " +
- "recognizable debugExec line");
+
+ // End doctor
+ if (doctor instanceof Retireable)
+ ((Retireable)doctor).retire();
+ actsys.unregisterGroup(gid);
+ } finally {
+ Thread.sleep(5000);
+ if (rmid != null) {
+ rmid.cleanup();
}
}
-
- System.err.println("debugExec found: <<" + found + ">>");
- // q: first double-quote after debugExec
- int q = found.indexOf('"', found.indexOf("rmid: debugExec"));
- // qe: last double-quote on debugExec line
- int qe = found.lastIndexOf('"');
- if (q <= 1 || qe <= q) {
- TestLibrary.bomb("rmid subprocess produced " +
- "mangled debugExec line");
- }
-
- // split args by whitespace
- StringTokenizer tk = new StringTokenizer(found.substring(q+1, qe));
- tk.nextToken(); // skip command path/name
-
- // Now check off the requested args. Order isn't important, and
- // any extra args are ignored, even if they're inconsistent or
- // bargage, or duplicates.
-
- Set argset = new HashSet(tk.countTokens());
- while (tk.hasMoreTokens()) {
- argset.add(tk.nextToken());
- }
-
- int m;
- for (m = 0; m < params.length; m++) {
- if(!argset.contains(params[m]))
- TestLibrary.bomb("Parameter \"" + params[m] + "\" not set");
- }
-
- for (m = 0; m < props.length; m++) {
- if (!argset.contains("-D" + props[m])) {
- TestLibrary.bomb("Property binding \"" + props[m] +
- "\" not set");
- }
- }
-
- // End doctor
- if (doctor instanceof Retireable)
- ((Retireable)doctor).retire();
- actsys.unregisterGroup(gid);
-
- Thread.sleep(5000);
- rmid.cleanup();
}
public static class DebugExecWatcher
@@ -272,75 +253,3 @@
}
}
}
-
-/*
- code graveyard
-
- // activation should have proceeded by writing a wrapper.out
- // when test.src/actgrpwrapper was run.
-
- // Read and check wrapper.out
- BufferedReader r = new BufferedReader(new FileReader(wrapout));
- String[] realArgs = null;
- String line;
-
- while ( (line = r.readLine()) != null) {
- StringTokenizer tkz = new StringTokenizer(line);
- if (!tkz.nextToken().equals("actgrpwrapper")) {
- // could throw an exception, but let's benignly
- // assume that something unrelated is spewing.
- continue;
- }
- String x; // writer's block
- x = tkz.nextToken();
- if (x.equals("argc")) {
- if (realArgs != null) {
- throw new RuntimeException(
- "SetChildEnv: two argc lines in wrapper.out");
- }
- realArgs = new String[Integer.parseInt(tkz.nextToken())];
- } else if (x.equals("argv")) {
- if (realArgs == null)
- throw new RuntimeException("SetChildEnv: missing argc");
- int n = Integer.parseInt(tkz.nextToken());
- if (n < 1 || n > realArgs.length) {
- throw new RuntimeException("SetChildEnv: argc=" +
- realArgs.length + "; argv[" + n + "]");
- }
- // Hack: manually skip the "actgrpwrapper argv 5 "
- String remainder = line.substring(
- 1 + line.indexOf(' ',
- 1 + line.indexOf(' ',
- 1 + line.indexOf(' '))));
- realArgs[n-1] = remainder;
- } else {
- throw new RuntimeException("SetChildEnv: bad token \"" + x + "\"");
- }
- }
- r.close();
-
- private static void ensureLocalExecutable(String fname)
- throws Exception
- {
- File target = new File(fname);
- File source = new File(Dot, fname);
- if (!target.exists()) {
- // copy from source
- System.err.println("Copying " + source.getPath() +
- " to " + target.getPath());
- java.io.InputStream in = new java.io.FileInputStream(source);
- java.io.OutputStream out = new java.io.FileOutputStream(target);
- byte[] buf = new byte[512];
- int n;
- while ((n = in.read(buf, 0, 512)) > 0) {
- out.write(buf, 0, n);
- }
- out.close();
- in.close();
- }
- // chmod
- System.err.println("Doing: /bin/chmod 755 " + fname);
- Runtime.getRuntime().exec("/bin/chmod 755 " + fname).waitFor();
- }
-
-*/
--- a/jdk/test/java/rmi/activation/CommandEnvironment/rmid.security.policy Sun Dec 11 12:20:45 2016 +0100
+++ b/jdk/test/java/rmi/activation/CommandEnvironment/rmid.security.policy Sun Dec 11 17:39:27 2016 -0800
@@ -6,4 +6,9 @@
permission com.sun.rmi.rmid.ExecOptionPermission "-verbosegc";
permission com.sun.rmi.rmid.ExecOptionPermission "-Dparameter.count=zero";
permission com.sun.rmi.rmid.ExecOptionPermission "-Xmx32m";
+ permission java.lang.RuntimePermission "selectorProvider";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch";
+ permission java.util.PropertyPermission "test.java.rmi.testlibrary.RMIDSelectorProvider.port", "read";
+ permission java.util.PropertyPermission "test.java.rmi.testlibrary.RMIDSelectorProvider.timeout", "read";
+ permission java.net.SocketPermission "*:1024-", "listen,resolve,connect,accept";
};