The change in jtreg that I would like to see is the addition of a flag to 
specify the path of the test binaries. I’m thinking something like 
“-natives:<path>”. This would do two things:

- Set the java.library.path when invoking tests. This is needed for 
System.loadLibrary() to work.
- Set a test.natives property. This is needed in the cases where the test 
binary is not a library, but a program. In this case the test will want to 
launch that program and needs the path to the program.

Both of these would be set to <path> above. Jtreg should check that the path 
exists.

Does that sound like a reasonable change?

Thanks,
/Staffan


On 25 apr 2014, at 14:02, Staffan Larsen <staffan.lar...@oracle.com> wrote:

> There are a couple of jtreg tests today that depend on native components 
> (either JNI libraries or executables). These are handled in one of two ways:
> 
> 1) The binaries are pre-compiled and checked into the repository (often 
> inside jar files).
> 2) The test will try to invoke a compiler (gcc, cl, …) when the test is being 
> run.
> 
> Neither of these are very good solutions. #1 makes it hard to run the setup 
> the test for all platforms and requires binaries in the source control 
> system. #2 is hit-and-miss: the correct compiler may or may not be installed 
> on the test machine, and the approach requires platform specific logic to be 
> maintained.
> 
> I would like to propose that these native components are instead compiled 
> when the product is built by the same makefile logic as the product. At 
> product build time we know we have access to the (correct) compilers and we 
> have excellent support in the makefiles for building on all platforms.
> 
> If we build the native test components together with the product, we also 
> have to take care of distributing the result together with the product when 
> we do testing across a larger number of machines. We will also need a way to 
> tell the jtreg tests where these pre-built binaries are located.
> 
> I suggest that at the end of a distributed build run, the pre-built test 
> binaries are packaged in a zip or tar file (just like the product bits) and 
> stored next to the product bundles. When we run distributed tests, we need to 
> pick up the product bundle and the test bundle before the testing is started.
> 
> To tell the tests where the native code is, I would like to add a flag to 
> jtreg to point out the path to the binaries. This should cause jtreg to set 
> java.library.path before invoking a test and also set a test.* property which 
> can be used by test to find it’s native components.
> 
> This kind of setup would make it easier to add and maintain tests that have a 
> native component. I think this will be especially important as more tests are 
> written using jtreg in the hotspot repository.
> 
> Thoughts on this? Is the general approach ok? There are lots of details to be 
> figured out, but at this stage I would like to hear feedback on the idea as 
> such.
> 
> Thanks,
> /Staffan
> 

Reply via email to