8204695: [Graal] vmTestbase/nsk/jdi/ClassPrepareRequest/addSourceNameFilter/addSourceNameFilter002/addSourceNameFilter002.java fails

Reviewed-by: sspitsyn, cjplummer
This commit is contained in:
Daniil Titov 2018-07-19 16:53:33 -07:00
parent 898e0f8607
commit 301f3c3bb5

@ -70,6 +70,7 @@ package nsk.jdi.ClassPrepareRequest.addSourceNameFilter.addSourceNameFilter002;
import java.io.*;
import java.util.ArrayList;
import com.sun.jdi.ThreadReference;
import com.sun.jdi.event.*;
import com.sun.jdi.request.*;
import nsk.share.Consts;
@ -79,6 +80,9 @@ import nsk.share.jdi.sde.*;
import nsk.share.jpda.AbstractDebuggeeTest;
public class addSourceNameFilter002 extends SDEDebugger {
private static final String DEBUGGEE_MAIN_THREAD = "main";
public static void main(String argv[]) {
System.exit(run(argv, System.out) + Consts.JCK_STATUS_BASE);
}
@ -87,6 +91,8 @@ public class addSourceNameFilter002 extends SDEDebugger {
return new addSourceNameFilter002().runIt(argv, out);
}
private static volatile int eventReceived;
protected boolean canRunTest() {
if (!vm.canUseSourceNameFilters()) {
log.display("TEST CANCELLED due to: vm.canUseSourceNameFilters() = false");
@ -124,14 +130,17 @@ public class addSourceNameFilter002 extends SDEDebugger {
// listener counting ClassPrepareEvent
public class ClassPrepareEventListener extends EventHandler.EventListener {
public int eventReceived;
public boolean eventReceived(Event event) {
if (event instanceof ClassPrepareEvent) {
ClassPrepareEvent classPrepareEvent = (ClassPrepareEvent) event;
eventReceived++;
ThreadReference thread = classPrepareEvent.thread();
if (thread != null && DEBUGGEE_MAIN_THREAD.equals(thread.name())) {
eventReceived++;
}
log.display("Event received: " + event + " Class: " + classPrepareEvent.referenceType().name());
log.display("Event received: " + event + " Class: " + classPrepareEvent.referenceType().name() +
" Thread:" + (thread != null ? thread.name() : ""));
vm.resume();
@ -153,12 +162,8 @@ public class addSourceNameFilter002 extends SDEDebugger {
request.addSourceNameFilter(sourceName);
request.enable();
// this listener wait ClassPrepareEvent
ClassPrepareEventListener listener = new ClassPrepareEventListener();
eventHandler.addListener(listener);
log.display("Load class: " + className + ", use follows source filter: " + sourceName);
// Reset event counter
eventReceived = 0;
// force debuggee load class
pipe.println(AbstractDebuggeeTest.COMMAND_LOAD_CLASS + ":" + className);
@ -167,16 +172,14 @@ public class addSourceNameFilter002 extends SDEDebugger {
request.disable();
eventHandler.removeListener(listener);
// check is event was correct filtered or not
if (expectEvent) {
if (listener.eventReceived == 0) {
if (eventReceived == 0) {
setSuccess(false);
log.complain("Expected ClassPrepareEvent was not received");
}
} else {
if (listener.eventReceived > 0) {
if (eventReceived > 0) {
setSuccess(false);
log.complain("Unexpected ClassPrepareEvent was received");
}
@ -217,6 +220,11 @@ public class addSourceNameFilter002 extends SDEDebugger {
eventHandler = new EventHandler(debuggee, log);
eventHandler.startListening();
// Add a listener to count ClassPrepare events.
// The listener should be added after EventHandler.startListening()
// is called to ensure it will be the first to process events.
eventHandler.addListener(new ClassPrepareEventListener());
// set valid source name
testSourceFilter(className, sourceName, true);
for (int i = 0; i < testStratumSourceNames.length; i++) {