hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/libAddModuleUsesAndProvidesTest.c
author alanb
Thu, 01 Dec 2016 08:56:41 +0000
changeset 42307 cefc81dc1d52
child 42868 9c9281518887
permissions -rw-r--r--
8169069: Module system implementation refresh (11/2016) Reviewed-by: lfoltan, acorn, ctornqvi, mchung Contributed-by: lois.foltan@oracle.com, harold.seigel@oracle.com, alan.bateman@oracle.com, mandy.chung@oracle.com, serguei.spitsyn@oracle.com, george.triantafillou@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42307
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     1
/*
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     2
 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     4
 *
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     8
 *
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    13
 * accompanied this code).
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    14
 *
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    18
 *
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    21
 * questions.
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    22
 */
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    23
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    24
#include <stdio.h>
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    25
#include <string.h>
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    26
#include "jvmti.h"
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    27
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    28
#ifdef __cplusplus
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    29
extern "C" {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    30
#endif
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    31
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    32
#ifndef JNI_ENV_ARG
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    33
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    34
#ifdef __cplusplus
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    35
#define JNI_ENV_ARG(x, y) y
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    36
#define JNI_ENV_PTR(x) x
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    37
#else
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    38
#define JNI_ENV_ARG(x,y) x, y
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    39
#define JNI_ENV_PTR(x) (*x)
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    40
#endif
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    41
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    42
#endif
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    43
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    44
#define TranslateError(err) "JVMTI error"
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    45
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    46
#define PASSED 0
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    47
#define FAILED 2
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    48
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    49
static const char *EXC_CNAME = "java/lang/Exception";
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    50
static const char* MOD_CNAME = "Ljava/lang/reflect/Module;";
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    51
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    52
static jvmtiEnv *jvmti = NULL;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    53
static jint result = PASSED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    54
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    55
static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    56
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    57
JNIEXPORT
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    58
jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    59
    return Agent_Initialize(jvm, options, reserved);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    60
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    61
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    62
JNIEXPORT
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    63
jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    64
    return Agent_Initialize(jvm, options, reserved);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    65
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    66
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    67
JNIEXPORT
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    68
jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    69
    return JNI_VERSION_1_8;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    70
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    71
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    72
static
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    73
jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    74
    jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti),
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    75
                                        JVMTI_VERSION_9);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    76
    if (res != JNI_OK || jvmti == NULL) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    77
        printf("    Error: wrong result of a valid call to GetEnv!\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    78
        return JNI_ERR;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    79
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    80
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    81
    return JNI_OK;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    82
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    83
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    84
static
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    85
jint throw_exc(JNIEnv *env, char *msg) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    86
    jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME));
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    87
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    88
    if (exc_class == NULL) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    89
        printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    90
        return -1;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    91
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    92
    return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    93
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    94
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    95
static
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    96
jclass jlrM(JNIEnv *env) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    97
    jclass cls = NULL;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    98
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
    99
    cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME));
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   100
    if (cls == NULL) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   101
        printf("    Error in JNI FindClass: %s\n", MOD_CNAME);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   102
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   103
    return cls;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   104
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   105
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   106
jmethodID
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   107
get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   108
    jmethodID method = NULL;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   109
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   110
    method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   111
    if (method == NULL) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   112
        printf("    Error in JNI GetMethodID %s with signature %s", name, sig);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   113
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   114
    return method;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   115
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   116
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   117
static
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   118
jboolean can_use_service(JNIEnv *env, jobject module, jclass service) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   119
    static jmethodID mCanUse = NULL;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   120
    jboolean res = JNI_FALSE;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   121
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   122
    if (mCanUse == NULL) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   123
        const char* sign = "(Ljava/lang/Class;)Z";
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   124
        mCanUse = get_method(env, jlrM(env), "canUse", sign);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   125
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   126
    res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module),
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   127
                                              mCanUse, service);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   128
    return res;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   129
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   130
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   131
JNIEXPORT jint JNICALL
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   132
Java_MyPackage_AddModuleUsesAndProvidesTest_checkUses(JNIEnv *env,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   133
                                                      jclass  cls,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   134
                                                      jobject baseModule,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   135
                                                      jclass  service) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   136
    jvmtiError err = JVMTI_ERROR_NONE;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   137
    jboolean used = JNI_FALSE;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   138
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   139
    // Add a service to use to NULL module
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   140
    printf("Check #UN1:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   141
    err = (*jvmti)->AddModuleUses(jvmti, NULL, service);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   142
    if (err != JVMTI_ERROR_NULL_POINTER) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   143
        printf("#UN1: jvmtiError from AddModuleUses: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   144
        throw_exc(env, "Check #UN1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   145
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   146
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   147
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   148
    // Add NULL service to use to baseModule
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   149
    printf("Check #UN2:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   150
    err = (*jvmti)->AddModuleUses(jvmti, baseModule, NULL);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   151
    if (err != JVMTI_ERROR_NULL_POINTER) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   152
        printf("#UN2: jvmtiError from AddModuleUses: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   153
        throw_exc(env, "Check #UN2: failed to return JVMTI_ERROR_NULL_POINTER for service==NULL");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   154
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   155
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   156
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   157
    // Add service to use to invalid module (cls)
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   158
    printf("Check #UI1:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   159
    err = (*jvmti)->AddModuleUses(jvmti, (jobject)cls, service);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   160
    if (err != JVMTI_ERROR_INVALID_MODULE) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   161
        printf("#UI1: jvmtiError from AddModuleUses: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   162
        throw_exc(env, "Check #UI1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   163
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   164
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   165
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   166
    // Add invalid service (thisModule) to use to baseModule
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   167
    printf("Check #UI2:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   168
    err = (*jvmti)->AddModuleUses(jvmti, baseModule, baseModule);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   169
    if (err != JVMTI_ERROR_INVALID_CLASS) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   170
        printf("#UI2: jvmtiError from AddModuleUses: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   171
        throw_exc(env, "Check #UI2: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid service");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   172
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   173
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   174
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   175
    // Check if the service can not be used
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   176
    printf("Check #UC1:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   177
    used = can_use_service(env, baseModule, service);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   178
    if (used != JNI_FALSE) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   179
        throw_exc(env, "Check #UC1: unexpected use of service");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   180
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   181
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   182
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   183
    // Add uses of a correct service
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   184
    printf("Check #UC2:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   185
    err = (*jvmti)->AddModuleUses(jvmti, baseModule, service);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   186
    if (err != JVMTI_ERROR_NONE) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   187
        printf("#UC2: jvmtiError from AddModuleUses: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   188
        throw_exc(env, "Check #UC2: got unexpected JVMTI error");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   189
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   190
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   191
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   192
    // Check if the service can not be used
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   193
    printf("Check #UC3:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   194
    used = can_use_service(env, baseModule, service);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   195
    if (used == JNI_FALSE) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   196
        throw_exc(env, "Check #UC3: service can not be used unexpectedly");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   197
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   198
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   199
    fflush(0);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   200
    return PASSED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   201
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   202
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   203
JNIEXPORT jint JNICALL
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   204
Java_MyPackage_AddModuleUsesAndProvidesTest_checkProvides(JNIEnv *env,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   205
                                                          jclass  cls,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   206
                                                          jobject baseModule,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   207
                                                          jclass  service,
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   208
                                                          jclass  serviceImpl) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   209
   jvmtiError err = JVMTI_ERROR_NONE;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   210
   jboolean provided = JNI_FALSE;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   211
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   212
    // Add provides to NULL module
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   213
    printf("Check #PN1:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   214
    err = (*jvmti)->AddModuleProvides(jvmti, NULL, service, serviceImpl);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   215
    if (err != JVMTI_ERROR_NULL_POINTER) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   216
        printf("#PN1: jvmtiError from AddModuleProvides: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   217
        throw_exc(env, "Check #PN1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   218
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   219
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   220
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   221
    // Add provides with NULL service
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   222
    printf("Check #PN2:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   223
    err = (*jvmti)->AddModuleProvides(jvmti, baseModule, NULL, serviceImpl);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   224
    if (err != JVMTI_ERROR_NULL_POINTER) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   225
        printf("#PN2: jvmtiError from AddModuleProvides: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   226
        throw_exc(env, "Check #PN2: failed to return JVMTI_ERROR_NULL_POINTER for service==NULL");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   227
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   228
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   229
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   230
    // Add provides with NULL serviceImpl
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   231
    printf("Check #PN3:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   232
    err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, NULL);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   233
    if (err != JVMTI_ERROR_NULL_POINTER) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   234
        printf("#PN3: jvmtiError from AddModuleProvides: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   235
        throw_exc(env, "Check #PN3: failed to return JVMTI_ERROR_NULL_POINTER for serviceImpl==NULL");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   236
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   237
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   238
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   239
    // Add provides to invalid module (cls)
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   240
    printf("Check #PI1:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   241
    err = (*jvmti)->AddModuleProvides(jvmti, (jobject)cls, service, serviceImpl);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   242
    if (err != JVMTI_ERROR_INVALID_MODULE) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   243
        printf("#PI1: jvmtiError from AddModuleProvides: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   244
        throw_exc(env, "Check #PI1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   245
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   246
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   247
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   248
    // Add provides with invalid service (baseModule)
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   249
    printf("Check #PI2:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   250
    err = (*jvmti)->AddModuleProvides(jvmti, baseModule, baseModule, serviceImpl);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   251
    if (err != JVMTI_ERROR_INVALID_CLASS) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   252
        printf("#PI2: jvmtiError from AddModuleProvides: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   253
        throw_exc(env, "Check #PI2: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid service");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   254
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   255
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   256
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   257
    // Add provides with invalid serviceImpl (baseModule)
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   258
    printf("Check #PI3:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   259
    err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, baseModule);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   260
    if (err != JVMTI_ERROR_INVALID_CLASS) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   261
        printf("#PI3: jvmtiError from AddModuleProvides: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   262
        throw_exc(env, "Check #PI3: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid serviceImpl");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   263
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   264
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   265
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   266
    // Add provides to baseModule with correct service and serviceImpl
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   267
    printf("Check #PC2:\n");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   268
    err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, serviceImpl);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   269
    if (err != JVMTI_ERROR_NONE) {
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   270
        printf("#PC2: jvmtiError from AddModuleExports: %d\n", err);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   271
        throw_exc(env, "Check #PC2: error in add provides to baseModule with correct service and serviceImpl");
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   272
        return FAILED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   273
    }
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   274
    fflush(0);
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   275
    return PASSED;
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   276
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   277
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   278
#ifdef __cplusplus
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   279
}
cefc81dc1d52 8169069: Module system implementation refresh (11/2016)
alanb
parents:
diff changeset
   280
#endif