Author: mturk
Date: Fri Aug 21 18:13:55 2009
New Revision: 806663

URL: http://svn.apache.org/viewvc?rev=806663&view=rev
Log:
Add jvm test case

Modified:
    commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c
    commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c?rev=806663&r1=806662&r2=806663&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c Fri Aug 21 
18:13:55 2009
@@ -67,10 +67,10 @@
 ACR_DECLARE(int) ACR_Initialize(JavaVM *vm)
 {
 
-    if (initialized++)
-        return 0;
 
     acr_pvm = vm;
+    if (initialized++)
+        return 0;
 
     if (pthread_key_create(&acr_thread_key, acr_thread_key_destructor))
         return ACR_GET_OS_ERROR();
@@ -90,9 +90,8 @@
     void   *epp;
 
     UNREFERENCED(reserved);
-    if ((*vm)->GetEnv(vm, &epp, JNI_VERSION_1_4)) {
+    if ((*vm)->GetEnv(vm, &epp, JNI_VERSION_1_4))
         return JNI_ERR;
-    }
     if (ACR_Initialize(vm)) {
         /* Error during our init phase */
         return JNI_ERR;

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c?rev=806663&r1=806662&r2=806663&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c Fri Aug 21 
18:13:55 2009
@@ -140,6 +140,101 @@
     return 0;
 }
 
+static jint (JNICALL *jni_GetDefaultJavaVMInitArgs)(void *) = NULL;
+static jint (JNICALL *jni_CreateJavaVM)(JavaVM **, void **, void *) = NULL;
+static jint (JNICALL *jni_GetCreatedJavaVMs)(JavaVM **, jsize, jsize *) = NULL;
+
+/* Call with something like:
+ * ./testsuite -t jvm -- /opt/java/jre/lib/amd64/server/libjvm.so \
+ * -Djava.class.path=../../../dist/bin/java org/apache/commons/runtime/Main
+ */
+int test_runjvm(int argc, const char *const argv[])
+{
+    const char *jvmso;
+    const char *jvmcp;
+    const char *jvmmc = NULL;
+    int dso;
+    int i;
+    JavaVMInitArgs  in_args;
+    JavaVMOption    options[8];
+    JavaVMInitArgs  vm_args;
+    JavaVM *jvm;
+    JNIEnv *_E;
+    void   *env;
+    jclass  mc;
+    jobject mo;
+    jmethodID mm;
+
+    if (argc < 3)
+        return 22;
+    jvmso = argv[0];
+    jvmcp = argv[1];
+
+    dso = ACR_DsoLoad(NULL, jvmso);
+    if (dso < 0) {
+        fprintf(stderr, "Cannot load JVM from %s\n", jvmso);
+        fflush(stderr);
+        return 1;
+    }
+    fprintf(stdout, "Using JVM `%s\'\n", jvmso);
+
+    jni_GetDefaultJavaVMInitArgs = ACR_DsoSym(NULL, dso,
+                                         "JNI_GetDefaultJavaVMInitArgs");
+    jni_CreateJavaVM             = ACR_DsoSym(NULL, dso,
+                                         "JNI_CreateJavaVM");
+    jni_GetCreatedJavaVMs        = ACR_DsoSym(NULL, dso,
+                                         "JNI_GetCreatedJavaVMs");
+    if (!jni_GetDefaultJavaVMInitArgs || !jni_CreateJavaVM ||
+        !jni_GetCreatedJavaVMs) {
+        fprintf(stderr, "Cannot load JVM symbols from %s\n", jvmso);
+        fflush(stderr);
+        return 2;
+
+    }
+    in_args.version = JNI_VERSION_1_4;
+    if (jni_GetDefaultJavaVMInitArgs(&in_args) != JNI_OK) {
+        fprintf(stderr, "Cannot load default VM args from %s\n", jvmso);
+        fflush(stderr);
+        return 3;
+    }
+    options[0].optionString = (char *)jvmcp;        
+    vm_args.options  = options;
+    vm_args.nOptions = 1;
+    vm_args.ignoreUnrecognized = JNI_TRUE;
+    vm_args.version = in_args.version;
+
+    for (i = 2; i < argc; i++) {
+        if (*argv[i] == '-')
+            options[vm_args.nOptions++].optionString = (char *)argv[i];
+        else
+            jvmmc = argv[i];
+    }
+    if (jni_CreateJavaVM(&jvm, &env,
+                         &vm_args) != JNI_OK) {
+        fprintf(stderr, "Failed creating JVM\n");
+        fflush(stderr);
+        return 2;
+
+    }
+    _E = (JNIEnv *)env;
+    mc = (*_E)->FindClass(_E, jvmmc);
+    if (!mc) {
+        fprintf(stderr, "Cannot find Main class %s\n", jvmmc);
+        fflush(stderr);
+        return 2;
+    }
+    mo = (*_E)->NewGlobalRef(_E, mc);
+    mm = (*_E)->GetStaticMethodID(_E, mo, "main", "([Ljava/lang/String;)V");
+    if (!mc) {
+        fprintf(stderr, "Cannot find main method %s\n", jvmmc);
+        fflush(stderr);
+        return 2;
+    }
+    (*_E)->CallStaticVoidMethod(_E, mc, mm, NULL);
+    return 0;
+}
+
+
 int main(int argc, const char *const argv[])
 {
     int rv = 0;
@@ -193,6 +288,9 @@
         else if (!strcasecmp(run_test, "mktemp")) {
             rv = test_mktemp(argc, argv);
         }
+        else if (!strcasecmp(run_test, "jvm")) {
+            rv = test_runjvm(argc, argv);
+        }
     }
 
 cleanup:


Reply via email to