Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ClassFileLoadHook/classfloadhk005/TestDescription.java
40955 views
/*1* Copyright (c) 2018, 2020, 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*/222324/*25* @test26*27* @summary converted from VM Testbase nsk/jvmti/ClassFileLoadHook/classfloadhk005.28* VM Testbase keywords: [quick, jpda, jvmti, noras]29* VM Testbase readme:30* DESCRIPTION31* This JVMTI test exercises JVMTI event ClassFileLoadHook().32* This test checks if CLASS_FILE_LOAD_HOOK event is received33* upon loading of tested class and new instrumented bytecode34* provided in this event callback will be used for creating35* corresponding class.36* The tested class is loaded with custom classloader.37* This test uses two different bytecodes of the tested class38* 'classfloadhk005r' compiled from the different sources.39* The subdirectory 'loadclass' contains original source of40* the tested class, which is used to load class in debuggee class.41* The subdirectory 'newclass' contains modified class, which42* will be used as instrumented bytecode in CLASS_FILE_LOAD_HOOK43* event callback.44* The test performs the following checks:45* - CLASS_FILE_LOAD_HOOK event callback is invoked and46* only once for the tested class upon its loading47* - pointers to new bytecode size and bytes passed to48* CLASS_FILE_LOAD_HOOK event callback are not NULL49* - the new instrumented bytecode for tested class are50* successfully returned from CLASS_FILE_LOAD_HOOK event51* callback52* - the new bytecode of the tested class is actually used53* for creation of tested class54* The debuggee class preliminary loads instrumented bytecode55* of the tested class into static field and agent gets these56* bytes to use them in CLASS_FILE_LOAD_HOOK event callback.57* The debuggee loads tested class using custom classloader.58* Upon receiving CLASS_FILE_LOAD_HOOK event the agent replaces59* original bytecode of the tested class with the new bytecode.60* If no CLASS_FILE_LOAD_HOOK events were received, the agent61* complains an error.62* After tested class has been loaded debuggee uses reflection63* API to call static method of this class. If method returns value64* according to the new implementation, then the new bytecode65* was actually used for creation of tested class. Otherwise,66* if method returns value according to the old implementation,67* or any unexpected value, then the test complains an error.68* The agent does not deallocate memory used for instrumented69* bytecode, because this is VM responsibility.70* If all checks are successfull, the test passes with exit code 95,71* otherwise the test fails with exit code 97.72* COMMENTS73* Modified due to fix of the rfe74* 5010823 TEST_RFE: some JVMTI tests use the replaced capability75*76* @library /vmTestbase77* /test/lib78* @build nsk.jvmti.ClassFileLoadHook.classfloadhk00579*80* @comment compile loadclassXX to bin/loadclassXX81* @run driver nsk.share.ExtraClassesBuilder82* loadclass83*84* @comment compile newclassXX to bin/newclassXX85* @run driver nsk.share.ExtraClassesBuilder86* newclass87*88* @run main/othervm/native89* -agentlib:classfloadhk005=-waittime=590* nsk.jvmti.ClassFileLoadHook.classfloadhk00591* ./bin92*/93949596