RFR: 8244078: ProcessTools executeTestJvm and createJavaProcessBuilder have inconsistent handling of test.*.opts
Chris Plummer
chris.plummer at oracle.com
Fri May 1 19:34:25 UTC 2020
On 4/30/20 2:07 AM, Stefan Karlsson wrote:
> Hi all,
>
> Please review this patch to make it less likely that we accidentally
> add or fail to add test.java.opts and test.vm.opts to our spawned test
> JVMs.
>
> https://cr.openjdk.java.net/~stefank/8244078/webrev.01/
> https://bugs.openjdk.java.net/browse/JDK-8244078
>
> ProcessTools.createJavaProcessBuilder(cmd) creates a ProcessBuilder
> *without* test.java.opts and test.vm.opts. There is a
> (addTestVmAndJavaOptions, cmd) overload that allows the caller to
> opt-in to the addition of these flags. The created ProcessBuilder is
> then used to start the JVM, and almost always fed into an OutputAnalyzer.
>
> There's another function executeTestJvm, that both creates a
> ProcessBuilder and then feeds it into an OutputAnalyzer (plus a bit
> more). This function uses createJavaProcessBuilder(true, cmd), and
> thereby adds the test.java.opts and test.vm.opts flags.
>
> This means that one has to know about this difference when reading
> code using createJavaProcessBuilder(cmd) and executeTestJvm(cmd), and
> when creating (copying) code using these functions.
>
> It has been suggested that createJavaProcessBuilder is intended to be
> a lower-level, building block API and that it's not confusing that
> they have different behavior. I don't really agree, but I'm buying
> into the notion of lower-level vs higher-level APIs here. So, my
> proposal is to remove the addTestVmAndJavaOptions feature from
> createJavaProcessBuilder, and instead create a new function called
> createTestJvm that adds test.java.opts and test.vm.opts. The name is
> intentionally similar to executeTestJvm, and in fact, the
> executeTestJvm implementation will use createTestJvm:
>
> public static OutputAnalyzer executeTestJvm(String... cmds)
> throws Exception {
> - ProcessBuilder pb = createJavaProcessBuilder(true, cmds);
> + ProcessBuilder pb = createTestJvm(cmds);
> return executeProcess(pb);
> }
>
> The rest of the patch is mainly:
> - leaving createJavaProcessBuilder(cmd) as is
> - replacing createJavaProcessBuilder(false, cmd) with
> createJavaProcessBuilder(cmd)
> - replacing createJavaProcessBuilder(true, cmd) with createTestJvm(cmd)
>
> There was one odd thing in jdi that requires extra scrutiny:
> https://cr.openjdk.java.net/~stefank/8244078/webrev.01/test/jdk/com/sun/jdi/lib/jdb/Debuggee.java.udiff.html
>
Yes, that did look a odd at first glance, but I think that fact that
your removed addTestVmAndJavaOptions() and everything still built is
proof enough that it was just bit rotted code and not needed.
Chris
>
> I've run this through tier1-3, and are currently running this through
> higher tiers.
>
> Thanks,
> StefanK
More information about the serviceability-dev
mailing list