RFC: add starred module(s)

Alexandre (Shura) Iline alexandre.iline at oracle.com
Wed Dec 20 19:55:06 UTC 2017


On 12/20/17 9:14 AM, Jiri Vanek wrote:
> On 12/18/2017 10:13 PM, Alexandre (Shura) Iline wrote:
>> Hi.
>>
>> I just wanted to commend on enhancing JTreg to automatically calculate 
>> module dependencies. Yes, compiler knows the direct static 
>> dependencies of the compiler code, but that is not all that is needed 
>> to be known. @module annotation is used for a few not completely 
>> related things. Besides requesting "--add-exports”, it can also 
>> request "--add-opens" and it can influence test selection during 
>> execution. Of this three usages, only one could be covered by static 
>> dependency analysis.
>>
> 
> 
> Thank you very much for this input!
> 
>  From what you are saying, the need for more support of @module-whatever 
> is needed - and doable.
> Current @modules is adding --add-exports and --add-opens  of the modules 
> you specified to the  command.
> If there will be way to add exports and opens of those, which can be 
> covered by static analyse, then it will be already more then helpfull! 
> Especially if you will be able to add some more manually.
> Of course more granular support like @modules-export and @modules-opens 
> and similar would be nice, but Thats more far away from this proposal.

The point I was trying to make was that it is impossible to statically 
compute what --add-opens should be added or what modules a test requires 
to be present.

I am completely with Jonathan on this, sorry for not making it clear.

Shura

> 
> J.
> 
>>
>>> On Dec 14, 2017, at 7:56 AM, Jiri Vanek <jvanek at redhat.com> wrote:
>>>
>>> Hi Jonathan!
>>>
>>> Thank you very much for great answer. Few remarks inline.
>>>
>>>
>>> On 12/09/2017 02:51 AM, Jonathan Gibbons wrote:
>>>> Jiri, Mila,
>>>> There are three significant questions here.
>>>> 1. @modules all-needed
>>>> This is a non-starter. @modules participates in a relatively 
>>>> light-weight test selection mechanism
>>>
>>> Sure. It is last step, if it will be ever started.
>>>
>>>> ... i.e. tests are not selected if the specified modules are not 
>>>> available in the system image. Having jtreg analyse the source code 
>>>> to determine the set of necessary modules is just not practical.
>>>> 2. Starred modules, as in @modules 
>>>> java.security.jgss/sun.security.krb5.internal.*
>>>> Setting aside whether this is desirable or not, this is not 
>>>> necessarily an easy thing to do. It requires that we can list the 
>>>> (internal) packages of a module. Yes, there may be a attribute that 
>>>> provides the info, but the attribute is not guaranteed to be 
>>>> available, and if it's not, you're
>>> terrible truth. see at bottom.
>>>
>>>> reduced to scanning the module contents.  On the desirability point 
>>>> of view, the use of this sort of syntax was discussed, and rejected, 
>>>> for module declarations, and while that is separate from what is
>>>
>>> I was reading most of this discussion, and I can agree with it for 
>>> final deployment, but not for testing.
>>>> proposed here, it does lend guidance.  Neither is the '*' syntax 
>>>> supported by the options for the Java launcher or javac, and this 
>>>> construct is intended to be a thinly-veiled wrapper for those options.
>>>
>>> This is probably the only sentence I moreover disagree with you. 
>>> Jtreg is far away fro being tinny wrapper, and it always  did huge 
>>> help for tests authors.  So helping testers with setting up module 
>>> path a bit, may be good step.
>>>> One minor comment ... you can reduce the "wordiness" of your 
>>>> examples by almost 50% by just having a single @modules directive 
>>>> with many arg values, possibly spanning many lines, as in ...
>>>>    * ....
>>>>    * @modules java.security.jgss/sun.security.krb5.internal
>>>>    * java.security.jgss/sun.security.krb5.internal.ccache
>>>>    * java.security.jgss/sun.security.krb5.internal.crypto
>>>>    * java.security.jgss/sun.security.krb5.internal.ktab
>>>>    * java.base/sun.security.util
>>>>    * java.security.jgss/sun.security.jgss
>>>
>>> Still you need to enumerate them all. That mean to run javac and jmod 
>>> in loops  one by one, untill you get collect them.
>>>> 3. Shell scripts.
>>>> Using shell scripts for jtreg tests is generally discouraged, these 
>>>> days, to the point that we have made efforts to convert many/most 
>>>> JDK shell tests to Java code. The general experience was that such 
>>>> tests were very fragile, and were often wrong/broken. They typically 
>>>> execute slower than equivalent Java code, especially when using 
>>>> libraries providing commonly-used or domain-specific functionality.
>>>
>>> Well, shell lunchers have theirs dark sides, thats right. But are 
>>> awesome feature without replacement.
>>>> And as you note below, processing variables like TESTMODULES is 
>>>> problematic. (It is a bug if present for JDK 8 tests).
>>>
>>> Its a bug :)
>>>> When using Java code instead of shell scripts, you can look to 
>>>> libraries in the various test suites for suggestions on useful 
>>>> methods to provide, such as invoking generating and compiling source 
>>>> code, providing simple equivalents for regex search (simple grep), 
>>>> comparison (simple diff), etc, as well as support for running 
>>>> subprocesses when necessary. One common pattern is to use Java code 
>>>> to validate whether it is appropriate to run a test in the current 
>>>> configuration and to then launch a JVM with a selected combination 
>>>> of options. This sort of mode has explicit support in jtreg:  "@run 
>>>> driver" is similar to "@run main" for running a class, but it is not 
>>>> run with any JVM options intended for test JVMs. This makes it 
>>>> suitable for running "test driver" classes which spawn JVMs to run 
>>>> the "real" test code.  And if you're just writing API tests, then I 
>>>> recommend using plain old Java code and "agentvm" mode to have the 
>>>> tests as fast as possible.
>>>
>>>
>>> You are mostly right. But consider this: The locating of modules is 
>>> painful when you are dealing with private apis. And that is what you 
>>> do in jtregs for half of the time...
>>> So naturally, the help would be easy.
>>> On contrary, the help do not come from JDK itself in any "supported" 
>>> way (or am I missing something?)
>>> Still the javac can do so. So it would be natural to enahnce javac to 
>>> help with this a bit more via some more solid api. Maybe you know 
>>> something here?
>>>
>>> One would say, that writing private api jtreg is one or two modules 
>>> usage only. Unluckily, oposite is true, and Mila's * idea is another 
>>> proof of it. And If I look to past to my recent work, I was facing 
>>> the same. Just got angry later.
>>>
>>>
>>> So generally - some help should be provided in JDK to deal with it. 
>>> And as JDK looks to have its reasons to not to do so, Jtregs should.
>>>
>>>
>>> Thanx for again for your reply!
>>>   J.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
> 
> 



More information about the jtreg-dev mailing list