test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassPrepareRequest/addSourceNameFilter/addSourceNameFilter002/addSourceNameFilter002.java
changeset 51173 6c62929bd870
parent 50018 3ba0d8631f24
equal deleted inserted replaced
51172:e443c637b238 51173:6c62929bd870
    68 package nsk.jdi.ClassPrepareRequest.addSourceNameFilter.addSourceNameFilter002;
    68 package nsk.jdi.ClassPrepareRequest.addSourceNameFilter.addSourceNameFilter002;
    69 
    69 
    70 import java.io.*;
    70 import java.io.*;
    71 import java.util.ArrayList;
    71 import java.util.ArrayList;
    72 
    72 
       
    73 import com.sun.jdi.ThreadReference;
    73 import com.sun.jdi.event.*;
    74 import com.sun.jdi.event.*;
    74 import com.sun.jdi.request.*;
    75 import com.sun.jdi.request.*;
    75 import nsk.share.Consts;
    76 import nsk.share.Consts;
    76 import nsk.share.TestBug;
    77 import nsk.share.TestBug;
    77 import nsk.share.jdi.*;
    78 import nsk.share.jdi.*;
    78 import nsk.share.jdi.sde.*;
    79 import nsk.share.jdi.sde.*;
    79 import nsk.share.jpda.AbstractDebuggeeTest;
    80 import nsk.share.jpda.AbstractDebuggeeTest;
    80 
    81 
    81 public class addSourceNameFilter002 extends SDEDebugger {
    82 public class addSourceNameFilter002 extends SDEDebugger {
       
    83 
       
    84     private static final String DEBUGGEE_MAIN_THREAD = "main";
       
    85 
    82     public static void main(String argv[]) {
    86     public static void main(String argv[]) {
    83         System.exit(run(argv, System.out) + Consts.JCK_STATUS_BASE);
    87         System.exit(run(argv, System.out) + Consts.JCK_STATUS_BASE);
    84     }
    88     }
    85 
    89 
    86     public static int run(String argv[], PrintStream out) {
    90     public static int run(String argv[], PrintStream out) {
    87         return new addSourceNameFilter002().runIt(argv, out);
    91         return new addSourceNameFilter002().runIt(argv, out);
    88     }
    92     }
       
    93 
       
    94     private static volatile int eventReceived;
    89 
    95 
    90     protected boolean canRunTest() {
    96     protected boolean canRunTest() {
    91         if (!vm.canUseSourceNameFilters()) {
    97         if (!vm.canUseSourceNameFilters()) {
    92             log.display("TEST CANCELLED due to:  vm.canUseSourceNameFilters() = false");
    98             log.display("TEST CANCELLED due to:  vm.canUseSourceNameFilters() = false");
    93             return false;
    99             return false;
   122         return AbstractJDIDebuggee.class.getName() + " -testClassPath " + testWorkDir;
   128         return AbstractJDIDebuggee.class.getName() + " -testClassPath " + testWorkDir;
   123     }
   129     }
   124 
   130 
   125     // listener counting ClassPrepareEvent
   131     // listener counting ClassPrepareEvent
   126     public class ClassPrepareEventListener extends EventHandler.EventListener {
   132     public class ClassPrepareEventListener extends EventHandler.EventListener {
   127         public int eventReceived;
       
   128 
   133 
   129         public boolean eventReceived(Event event) {
   134         public boolean eventReceived(Event event) {
   130             if (event instanceof ClassPrepareEvent) {
   135             if (event instanceof ClassPrepareEvent) {
   131                 ClassPrepareEvent classPrepareEvent = (ClassPrepareEvent) event;
   136                 ClassPrepareEvent classPrepareEvent = (ClassPrepareEvent) event;
   132                 eventReceived++;
   137                 ThreadReference thread = classPrepareEvent.thread();
   133 
   138                 if (thread != null && DEBUGGEE_MAIN_THREAD.equals(thread.name())) {
   134                 log.display("Event received: " + event + " Class: " + classPrepareEvent.referenceType().name());
   139                     eventReceived++;
       
   140                 }
       
   141 
       
   142                 log.display("Event received: " + event + " Class: " + classPrepareEvent.referenceType().name() +
       
   143                         " Thread:" + (thread != null ? thread.name() : ""));
   135 
   144 
   136                 vm.resume();
   145                 vm.resume();
   137 
   146 
   138                 return true;
   147                 return true;
   139             }
   148             }
   151         request = debuggee.getEventRequestManager().createClassPrepareRequest();
   160         request = debuggee.getEventRequestManager().createClassPrepareRequest();
   152         request.setSuspendPolicy(EventRequest.SUSPEND_ALL);
   161         request.setSuspendPolicy(EventRequest.SUSPEND_ALL);
   153         request.addSourceNameFilter(sourceName);
   162         request.addSourceNameFilter(sourceName);
   154         request.enable();
   163         request.enable();
   155 
   164 
   156         // this listener wait ClassPrepareEvent
   165         // Reset event counter
   157         ClassPrepareEventListener listener = new ClassPrepareEventListener();
   166         eventReceived = 0;
   158         eventHandler.addListener(listener);
       
   159 
       
   160         log.display("Load class: " + className + ", use follows source filter: " + sourceName);
       
   161 
       
   162         // force debuggee load class
   167         // force debuggee load class
   163         pipe.println(AbstractDebuggeeTest.COMMAND_LOAD_CLASS + ":" + className);
   168         pipe.println(AbstractDebuggeeTest.COMMAND_LOAD_CLASS + ":" + className);
   164 
   169 
   165         if (!isDebuggeeReady())
   170         if (!isDebuggeeReady())
   166             return;
   171             return;
   167 
   172 
   168         request.disable();
   173         request.disable();
   169 
   174 
   170         eventHandler.removeListener(listener);
       
   171 
       
   172         // check is event was correct filtered or not
   175         // check is event was correct filtered or not
   173         if (expectEvent) {
   176         if (expectEvent) {
   174             if (listener.eventReceived == 0) {
   177             if (eventReceived == 0) {
   175                 setSuccess(false);
   178                 setSuccess(false);
   176                 log.complain("Expected ClassPrepareEvent was not received");
   179                 log.complain("Expected ClassPrepareEvent was not received");
   177             }
   180             }
   178         } else {
   181         } else {
   179             if (listener.eventReceived > 0) {
   182             if (eventReceived > 0) {
   180                 setSuccess(false);
   183                 setSuccess(false);
   181                 log.complain("Unexpected ClassPrepareEvent was received");
   184                 log.complain("Unexpected ClassPrepareEvent was received");
   182             }
   185             }
   183         }
   186         }
   184     }
   187     }
   215         preparePathcedClassFile(className, testStratumSourceNames);
   218         preparePathcedClassFile(className, testStratumSourceNames);
   216 
   219 
   217         eventHandler = new EventHandler(debuggee, log);
   220         eventHandler = new EventHandler(debuggee, log);
   218         eventHandler.startListening();
   221         eventHandler.startListening();
   219 
   222 
       
   223         // Add a listener to count ClassPrepare events.
       
   224         // The listener should be added after EventHandler.startListening()
       
   225         // is called to ensure it will be the first to process events.
       
   226         eventHandler.addListener(new ClassPrepareEventListener());
       
   227 
   220         // set valid source name
   228         // set valid source name
   221         testSourceFilter(className, sourceName, true);
   229         testSourceFilter(className, sourceName, true);
   222         for (int i = 0; i < testStratumSourceNames.length; i++) {
   230         for (int i = 0; i < testStratumSourceNames.length; i++) {
   223             testSourceFilter(className, testStratumSourceNames[i], true);
   231             testSourceFilter(className, testStratumSourceNames[i], true);
   224         }
   232         }