diff options
author | Sebastien Hertz <shertz@google.com> | 2015-02-19 18:01:24 +0100 |
---|---|---|
committer | Sebastien Hertz <shertz@google.com> | 2015-02-19 18:37:23 +0100 |
commit | d5d6209b5cc789d290237847f0a7a514191092e0 (patch) | |
tree | 2762a6d2261f911edb334e016b1eb46cdae2124c | |
parent | 6b65531cd7e778e8e30fcf24313e2b4985565822 (diff) | |
download | apache-harmony-lollipop-mr1-wfc-release.tar.gz |
Fix flaky test ThreadStartTestandroid-5.1.1_r5android-5.1.1_r28android-5.1.1_r22android-5.1.1_r17android-5.1.1_r12lollipop-mr1-wfc-release
We may receive THREAD_START events for runtime internal threads (like
GCDaemon) before receiving one for the tested thread.
We now loop until receiving a THREAD_START event for the tested
thread. If we receive a THREAD_START event for another thread, we
just ignore it and wait for the next event.
Bug: 19438651
(cherry picked from commit 2d5d534cf8b1e4788317678df2301227c16e0433)
Change-Id: I6b12ef318ecb779cf9fec66b28c495b34604a668
-rw-r--r-- | jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java index b13b497..58c696f 100644 --- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java +++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java @@ -69,29 +69,36 @@ public class ThreadStartTest extends JDWPEventTestCase { // wait for thread start and finish synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); - logWriter.println("=> vmMirror.receiveEvent()..."); - CommandPacket event = debuggeeWrapper.vmMirror.receiveEvent(); - - assertNotNull("Invalid (null) event received", event); - logWriter.println("=> Event received!"); - - ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(event); - logWriter.println("=> Number of events = " + parsedEvents.length); - assertEquals("Invalid number of events,", 1, parsedEvents.length); - logWriter.println("=> EventKind() = " + parsedEvents[0].getEventKind() - + " (" + JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()) + ")"); - assertEquals("Invalid event kind,", - JDWPConstants.EventKind.THREAD_START, - parsedEvents[0].getEventKind(), - JDWPConstants.EventKind.getName(JDWPConstants.EventKind.THREAD_START), - JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind())); - logWriter.println("=> EventRequestID() = " + parsedEvents[0].getRequestID()); - - long threadID = ((Event_THREAD_START)parsedEvents[0]).getThreadID(); - logWriter.println("=> threadID = " + threadID); - String threadName = debuggeeWrapper.vmMirror.getThreadName(threadID); - logWriter.println("=> threadName = " + threadName); - assertEquals("Invalid thread name", EventDebuggee.testedThreadName, threadName); + // The runtime may start internal threads before starting the debuggee's thread. + // We loop until receiving a THREAD_START event for our thread. + boolean receivedExpectedThreadStartEvent = false; + while (!receivedExpectedThreadStartEvent) { + logWriter.println("=> vmMirror.receiveEvent()..."); + CommandPacket event = debuggeeWrapper.vmMirror.receiveEvent(); + + assertNotNull("Invalid (null) event received", event); + logWriter.println("=> Event received!"); + + ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(event); + logWriter.println("=> Number of events = " + parsedEvents.length); + assertEquals("Invalid number of events,", 1, parsedEvents.length); + logWriter.println("=> EventKind() = " + parsedEvents[0].getEventKind() + + " (" + JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()) + ")"); + assertEquals("Invalid event kind,", + JDWPConstants.EventKind.THREAD_START, + parsedEvents[0].getEventKind(), + JDWPConstants.EventKind.getName(JDWPConstants.EventKind.THREAD_START), + JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind())); + logWriter.println("=> EventRequestID() = " + parsedEvents[0].getRequestID()); + + long threadID = ((Event_THREAD_START)parsedEvents[0]).getThreadID(); + logWriter.println("=> threadID = " + threadID); + String threadName = debuggeeWrapper.vmMirror.getThreadName(threadID); + logWriter.println("=> threadName = " + threadName); + + // Is it the debuggee's thread ? + receivedExpectedThreadStartEvent = threadName.equals(EventDebuggee.testedThreadName); + } synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); logWriter.println("==> testThreadStartEvent001 - OK"); |