Use external classes in @run driver

Jonathan Gibbons jonathan.gibbons at oracle.com
Mon Jun 15 18:18:36 UTC 2020


On 6/15/20 11:05 AM, Jonathan Gibbons wrote:
> Hi,
>
> Yes, this is the primary use case for external.lib.roots.
>
> You may need to adjust the order of items in external.lib.roots, 
> especially as you seem to have an anti-pattern going on, of one 
> library inside another, as indicated by
>
> external.lib.roots=../../jdk ../../jdk/test/lib
>
> Poking around the 8u/8u forest, the reference to ../../jdk seems 
> questionable as that seems to indicate the the top of the jdk repo. 
> That being said ...
>
> Poking around a bit more, I see there is 
> 8U-FOREST/jdk/test/lib/jdk/test/lib, and that FileInstaller.java is in 
> `package jdk.test.lib` which means that the package root for the class 
> is 8U-FOREST/jdk/test/lib
>
> This means that you need an entry in external.lib.roots and a @library 
> that together form the path ../../jdk/test/lib
Within the jdk repo, I believe you could or would access 
FileInstaller.java using `@library /lib`.

With that in mind, I might recommend that in the hotspot repo, you might 
use `external.lib.roots = ../../jdk/test` to point to the root of the 
jdk repo test directory, and then use `@library /lib` in your test, the 
same way you would if you were writing a test in the jdk repo.

-- Jon


>
> Can you find any other tests in the hotspot test repo that are using 
> external.lib.roots?  I'm guessing maybe not, since I don't see an 
> entry in the hotspot/test TEST.ROOT file.
>
> Separately, I will investigate why jtreg is reporting an invalid value 
> for the number of seconds it took.
>
> -- Jon
>
>
> On 6/15/20 10:14 AM, Liu, Xin wrote:
>> Hi, Jonathan,
>>
>> Thank you to look into it.
>>
>> I am using " jtreg, version 5.1 dev 821".  It's not 5.2.  my bad.
>>
>> I am working on jdk8u/hotspot + vmTestbase.  You probably know that 
>> test directories are separated in jdk8u.
>> I'd like to reuse FileInstaller.java in 
>> ../../jdk/test/lib/jdk/test/lib.  Otherwise, I need a clone of 
>> tes/lib/* in hotspot/test.
>>
>> Do you think it's a reasonable use-case?  if so, is it possible to 
>> access external classes in annotation @run?
>>
>> The output was written by jtreg.  Something weird happened. I think I 
>> need to put FileInstaller in its classpath first.
>>
>> thanks,
>> --lx
>>
>> On 6/15/20, 7:44 AM, "jtreg-use on behalf of Jonathan Gibbons" 
>> <jtreg-use-bounces at openjdk.java.net on behalf of 
>> jonathan.gibbons at oracle.com> wrote:
>>
>>      CAUTION: This email originated from outside of the organization. 
>> Do not click links or open attachments unless you can confirm the 
>> sender and know the content is safe.
>>
>>
>>
>>      Hi,
>>
>>      There's at least a couple of things going on here.
>>
>>      1. external.lib.roots is only used for library code that is 
>> outside the
>>      current test suite (i.e. outside the directory containing 
>> TEST.ROOT)
>>           It provides root directories in which to resolve @library
>>      directories that begin with '/'.
>>           In other words, if you have
>>               @library /my/lib
>>           and you have
>>               external.lib.roots=../A ../B
>>           Then jtreg will look for library files in TESTROOTDIR/my/lib,
>>      TESTROOTDIR/../A,  TESTROOTDIR/../B
>>           where TESTROOTDIR is the root directory of the test suite.
>>
>>      2. There's something weird the output you posted:
>>      TIME: .lib.FileInstaller seconds
>>           If that's what jtreg wrote, that is an unexpected error in 
>> jtreg
>>
>>      3. Minor: the current released version of jtreg is 5.1, as 
>> indicated by
>>      the Mercurial tag jtreg5.1-b01
>>           The default version of 5.2 in the tip changeset will be the 
>> version
>>      of the next update.
>>
>>      -- Jon
>>
>>
>>      On 6/14/20 1:18 AM, Liu, Xin wrote:
>>      > Hi,
>>      >
>>      > I'd like to use some external classes in @run driver. Those 
>> classes are “external” in the sense of directory.  They locate out of 
>> my current test directory.
>>      > Eg. “@run driver jdk.test.lib.FileInstaller . .”  and the 
>> class FileInstaller is here.
>>      > $find ../../ -name FileInstaller.java
>>      > ../../jdk/test/lib/jdk/test/lib/FileInstaller.java
>>      >
>>      > I am now using the latest jreg(5.2). Doc says that jtreg acts 
>> like adding an “@build classname” before @run driver.
>>      > About how to discover the classes, quote the corresponding 
>> description in Action Types/build 
>> (https://openjdk.java.net/jtreg/tag-spec.html#ACTION_TYPES),
>>      > "
>>      > To locate a source file for a named class, the harness takes 
>> the first matching file found by looking in the test-source directory 
>> and then in each appropriate directory of the library path list.
>>      > "
>>      > quote end. I don't understand the definition of library path 
>> list here.  Is it the same thing as @library? I try to tell jtreg 
>> that use these two external roots in TEST.ROOT.
>>      > # depends on jdk/test
>>      > external.lib.roots=../../jdk ../../jdk/test/lib
>>      >
>>      > and also, I see that the test does have the annotation @library.
>>      > * @library /vmTestbase
>>      > *          /test/lib
>>      > * @run driver jdk.test.lib.FileInstaller . .
>>      >
>>      > But it doesn’t work. I still get the error message as follows.
>>      > ACTION: build -- Not run. Test running...
>>      > REASON: Named class compiled on demand
>>      > TIME:   .lib.FileInstaller seconds
>>      > messages:
>>      > command: build jdk.test.lib.FileInstaller
>>      > reason: Named class compiled on demand
>>      >
>>      > TEST RESULT: Error. can't find jdk.test.lib.FileInstaller in 
>> test directory or libraries
>>      >
>>      > Could you educate me the right usage?
>>      > Thank you in advance.
>>      > --lx
>>      >
>>      >
>>


More information about the jtreg-use mailing list