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 >