0
6
Login
Code
Issues
1
Pull requests
Events
Packages
edc67dcac9b82003f89767c87c187a854babf98f
edc67dcac9b82003f89767c87c187a854babf98f

libnativehelper MTS tests

These tests cover the API surface of libnativehelper that is applicable once the runtime is initialized.

These tests do not cover the API surface relating to the binding of the ART runtime (DalvikVM), that preclude the initialization of the runtime, nor do they cover JNI_CreateJavaVM(). These APIs have been invoked before the test harness runs these tests.

API surface not directly covered here are:

    JNI_GetCreatedJavaVMs

    JniInvocationCreate
    JniInvocationDestroy
    JniInvocationInit
    JniInvocationGetLibrary

    jniUninitializeConstants

JniInvocationInit() is responsible for binding the ART runtime and specifically the following methods:

    JNI_CreateJavaVM
    JNI_GetCreatedJavaVMs
    JNI_GetDefaultJavaVMInitArgs

These tests do check that JNI_GetCreatedJavaVMs() and JNI_GetDefaultJavaVMInitArgs() behave as expected and are thus asserted to be correctly bound. JNI_CreateJavaVM() cannot be called in these tests because Android only supports a single runtime per process.

JniInvocationInit() uses JniInvocationGetLibrary() to determine which runtime to load (release, debug, or custom). The code responsible for that decision is tested comprehensively in libnativehelper_gtests.

jniUninitializeConstants is only intended to be called when the runtime is shutting down and unloading the managed core libraries.

Potential Issues

The test harness depends on libnativehelper_compat_libc++ and the tests depend on libnativehelper. The former library is a subset of libnativehelper. There are potential ODR problems if the two libraries having overlapping global state. It would be better to have two separate test suites for these two libraries.