Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassSignature/getclsig006/getclsig006.cpp
40952 views
/*1* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223#include <stdio.h>24#include <string.h>25#include <jvmti.h>26#include "agent_common.h"2728#include "nsk_tools.h"29#include "jni_tools.h"30#include "JVMTITools.h"31#include "jvmti_tools.h"3233extern "C" {3435#define CLS_NUM 5 /* overall number of tested classes */3637#define STATUS_FAILED 238#define PASSED 03940/* expected class signatures are below */41static const char *class_sig[][CLS_NUM] = {42{ "getclsig006", "Lnsk/jvmti/GetClassSignature/getclsig006;", "NULL" },43{ "getclsig006b", "Lnsk/jvmti/GetClassSignature/getclsig006b;",44"<L:Ljava/lang/String;>Ljava/lang/Object;" },45{ "getclsig006c", "Lnsk/jvmti/GetClassSignature/getclsig006c;",46"<A:Ljava/lang/Object;B:Ljava/lang/Integer;>Ljava/lang/Object;" },47{ "getclsig006if", "Lnsk/jvmti/GetClassSignature/getclsig006if;",48"<I:Ljava/lang/Object;>Ljava/lang/Object;" },49{ "getclsig006g", "Lnsk/jvmti/GetClassSignature/getclsig006g;",50"<E:Lnsk/jvmti/GetClassSignature/getclsig006e;:Lnsk/jvmti/GetClassSignature/getclsig006if;>Ljava/lang/Object;" }51};5253static jvmtiEnv *jvmti = NULL;5455static int checkSig(JNIEnv *jni_env, jclass testedCls, int idx) {56int totRes = PASSED;57char *sign;58char *gen_sign;5960if (!NSK_JVMTI_VERIFY(jvmti->GetClassSignature(testedCls, &sign, &gen_sign))) {61NSK_COMPLAIN1("TEST FAILED: unable to get class signature for \"%s\"\n\n",62class_sig[idx][0]);63return STATUS_FAILED;64} else {65NSK_DISPLAY1(">>> Checking signatures for \"%s\" ...\n",66class_sig[idx][0]);6768if (strcmp(class_sig[idx][1], sign) != 0 ||69strcmp(class_sig[idx][2], (gen_sign == NULL) ? "NULL" : gen_sign) != 0) {70NSK_COMPLAIN5(71"TEST FAILED: class: \"%s\" has\n"72"\tsignature: \"%s\"\n"73"\tgeneric signature: \"%s\"\n\n"74"\tExpected: \"%s\"\n"75"\t\"%s\"\n\n",76class_sig[idx][0],77sign, (gen_sign == NULL) ? "NULL" : gen_sign,78class_sig[idx][1], class_sig[idx][2]);79totRes = STATUS_FAILED;80}81else82NSK_DISPLAY2("CHECK PASSED: signature: \"%s\",\n\tgeneric signature: \"%s\"\n",83sign, (gen_sign == NULL) ? "NULL" : gen_sign);8485NSK_DISPLAY0("Deallocating the signature array\n");86if (!NSK_JVMTI_VERIFY(jvmti->Deallocate((unsigned char*) sign))) {87totRes = STATUS_FAILED;88}89if (gen_sign != NULL)90if (!NSK_JVMTI_VERIFY(jvmti->Deallocate((unsigned char*) gen_sign))) {91totRes = STATUS_FAILED;92}9394NSK_DISPLAY0("<<<\n");95}9697return totRes;98}99100JNIEXPORT jint JNICALL101Java_nsk_jvmti_GetClassSignature_getclsig006_check(102JNIEnv *jni, jobject obj) {103int res = PASSED, i;104jclass testedCls;105106for (i=0; i<CLS_NUM; i++) {107if (!NSK_JNI_VERIFY(jni, (testedCls = jni->FindClass(class_sig[i][1])) != NULL)) {108NSK_COMPLAIN1("TEST FAILURE: unable to find class \"%s\"\n\n",109class_sig[i][0]);110res = STATUS_FAILED;111continue;112}113114if (checkSig(jni, testedCls, i) == STATUS_FAILED)115res = STATUS_FAILED;116}117118return res;119}120121#ifdef STATIC_BUILD122JNIEXPORT jint JNICALL Agent_OnLoad_getclsig006(JavaVM *jvm, char *options, void *reserved) {123return Agent_Initialize(jvm, options, reserved);124}125JNIEXPORT jint JNICALL Agent_OnAttach_getclsig006(JavaVM *jvm, char *options, void *reserved) {126return Agent_Initialize(jvm, options, reserved);127}128JNIEXPORT jint JNI_OnLoad_getclsig006(JavaVM *jvm, char *options, void *reserved) {129return JNI_VERSION_1_8;130}131#endif132jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {133/* init framework and parse options */134if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))135return JNI_ERR;136137/* create JVMTI environment */138if (!NSK_VERIFY((jvmti =139nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))140return JNI_ERR;141142return JNI_OK;143}144145}146147148