Index: webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java |
diff --git a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java |
index a4cb3093bc082562d25b46d0bea9b06d0c4f1506..59809365d44e0bcc64ec824715c72787ca417b23 100644 |
--- a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java |
+++ b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java |
@@ -43,9 +43,9 @@ public class PeerConnectionTest extends ActivityTestCase { |
getInstrumentation().getContext(), true, true, true)); |
} |
- private static class ObserverExpectations implements PeerConnection.Observer, |
- VideoRenderer.Callbacks, |
- DataChannel.Observer, StatsObserver { |
+ private static class ObserverExpectations |
+ implements PeerConnection.Observer, VideoRenderer.Callbacks, DataChannel.Observer, |
+ StatsObserver, RtpReceiver.Observer { |
private final String name; |
private int expectedIceCandidates = 0; |
private int expectedErrors = 0; |
@@ -71,6 +71,8 @@ public class PeerConnectionTest extends ActivityTestCase { |
private int expectedStatsCallbacks = 0; |
private LinkedList<StatsReport[]> gotStatsReports = new LinkedList<StatsReport[]>(); |
private final HashSet<MediaStream> gotRemoteStreams = new HashSet<MediaStream>(); |
+ private int expectedFirstAudioPacket = 0; |
+ private int expectedFirstVideoPacket = 0; |
public ObserverExpectations(String name) { |
this.name = name; |
@@ -258,6 +260,23 @@ public class PeerConnectionTest extends ActivityTestCase { |
gotStatsReports.add(reports); |
} |
+ @Override |
+ public synchronized void onFirstPacketReceived(MediaStreamTrack.MediaType mediaType) { |
+ if (mediaType == MediaStreamTrack.MediaType.MEDIA_TYPE_AUDIO) { |
+ expectedFirstAudioPacket--; |
+ } else { |
+ expectedFirstVideoPacket--; |
+ } |
+ if (expectedFirstAudioPacket < 0 || expectedFirstVideoPacket < 0) { |
+ throw new RuntimeException("Unexpected call of onFirstPacketReceived"); |
+ } |
+ } |
+ |
+ public synchronized void expectFirstPacketReceived() { |
+ expectedFirstAudioPacket = 1; |
+ expectedFirstVideoPacket = 1; |
+ } |
+ |
public synchronized void expectStatsCallback() { |
++expectedStatsCallbacks; |
} |
@@ -314,6 +333,12 @@ public class PeerConnectionTest extends ActivityTestCase { |
if (expectedStatsCallbacks != 0) { |
stillWaitingForExpectations.add("expectedStatsCallbacks: " + expectedStatsCallbacks); |
} |
+ if (expectedFirstAudioPacket > 0) { |
+ stillWaitingForExpectations.add("expectedFirstAudioPacket: " + expectedFirstAudioPacket); |
+ } |
+ if (expectedFirstVideoPacket > 0) { |
+ stillWaitingForExpectations.add("expectedFirstVideoPacket: " + expectedFirstVideoPacket); |
+ } |
return stillWaitingForExpectations; |
} |
@@ -626,6 +651,17 @@ public class PeerConnectionTest extends ActivityTestCase { |
assertEquals(answeringPC.getSenders().size(), 2); |
assertEquals(answeringPC.getReceivers().size(), 2); |
+ offeringExpectations.expectFirstPacketReceived(); |
+ answeringExpectations.expectFirstPacketReceived(); |
+ |
+ for (RtpReceiver receiver : offeringPC.getReceivers()) { |
+ receiver.SetObserver(offeringExpectations); |
+ } |
+ |
+ for (RtpReceiver receiver : answeringPC.getReceivers()) { |
+ receiver.SetObserver(answeringExpectations); |
+ } |
+ |
// Wait for at least some frames to be delivered at each end (number |
// chosen arbitrarily). |
offeringExpectations.expectFramesDelivered(10); |