No longer asserting in mocks, split first test case in two methods.
This way assertions will be caught in the test runner instead of crashing other Android threads. BUG=None R=glaznev@webrtc.org Review URL: https://webrtc-codereview.appspot.com/32989004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@8054 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
69f47381fb
commit
ef090927f4
@ -52,8 +52,12 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
|||||||
private static final int WAIT_TIMEOUT = 5000;
|
private static final int WAIT_TIMEOUT = 5000;
|
||||||
private static final int EXPECTED_VIDEO_FRAMES = 15;
|
private static final int EXPECTED_VIDEO_FRAMES = 15;
|
||||||
|
|
||||||
|
// The peer connection client is assumed to be thread safe in itself; the
|
||||||
|
// reference is written by the test thread and read by worker threads.
|
||||||
private volatile PeerConnectionClient pcClient;
|
private volatile PeerConnectionClient pcClient;
|
||||||
private volatile boolean loopback;
|
private volatile boolean loopback;
|
||||||
|
|
||||||
|
// These are protected by their respective event objects.
|
||||||
private boolean isClosed;
|
private boolean isClosed;
|
||||||
private boolean isIceConnected;
|
private boolean isIceConnected;
|
||||||
private SessionDescription localSdp;
|
private SessionDescription localSdp;
|
||||||
@ -65,10 +69,14 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
|||||||
|
|
||||||
// Mock renderer implementation.
|
// Mock renderer implementation.
|
||||||
private static class MockRenderer implements VideoRenderer.Callbacks {
|
private static class MockRenderer implements VideoRenderer.Callbacks {
|
||||||
private final CountDownLatch doneRendering;
|
// These are protected by 'this' since we gets called from worker threads.
|
||||||
private int width = -1;
|
private int width = -1;
|
||||||
private int height = -1;
|
private int height = -1;
|
||||||
private int numFramesDelivered = 0;
|
private boolean renderFrameCalled = false;
|
||||||
|
private boolean setSizeCalledBeforeRenderFrame = false;
|
||||||
|
|
||||||
|
// Thread-safe in itself.
|
||||||
|
private final CountDownLatch doneRendering;
|
||||||
|
|
||||||
public MockRenderer(int expectedFrames) {
|
public MockRenderer(int expectedFrames) {
|
||||||
doneRendering = new CountDownLatch(expectedFrames);
|
doneRendering = new CountDownLatch(expectedFrames);
|
||||||
@ -79,18 +87,25 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
|||||||
Log.d(TAG, "Set size: " + width + " x " + height);
|
Log.d(TAG, "Set size: " + width + " x " + height);
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
if (!renderFrameCalled) {
|
||||||
|
setSizeCalledBeforeRenderFrame = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void renderFrame(VideoRenderer.I420Frame frame) {
|
public synchronized void renderFrame(VideoRenderer.I420Frame frame) {
|
||||||
// Check that video dimensions have been set.
|
renderFrameCalled = true;
|
||||||
if (numFramesDelivered == 0) {
|
|
||||||
assertTrue("Video dimensions were not set.", width > 0 && height > 0);
|
|
||||||
}
|
|
||||||
numFramesDelivered++;
|
|
||||||
doneRendering.countDown();
|
doneRendering.countDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized int getWidth() { return width; }
|
||||||
|
public synchronized int getHeight() { return width; }
|
||||||
|
public synchronized boolean setSizeCalledBeforeRenderFrame() {
|
||||||
|
return setSizeCalledBeforeRenderFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This method shouldn't hold any locks or touch member variables since it
|
||||||
|
// blocks.
|
||||||
public boolean waitForFramesRendered(int timeoutMs)
|
public boolean waitForFramesRendered(int timeoutMs)
|
||||||
throws InterruptedException {
|
throws InterruptedException {
|
||||||
doneRendering.await(timeoutMs, TimeUnit.MILLISECONDS);
|
doneRendering.await(timeoutMs, TimeUnit.MILLISECONDS);
|
||||||
@ -211,31 +226,24 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
|||||||
return signalingParameters;
|
return signalingParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unit tests.
|
PeerConnectionClient createPeerConnectionClient(MockRenderer localRenderer,
|
||||||
@Override
|
MockRenderer remoteRenderer) {
|
||||||
protected void setUp() throws Exception {
|
|
||||||
Log.d(TAG, "setUp");
|
|
||||||
super.setUp();
|
|
||||||
pcClient = null;
|
|
||||||
localSdp = null;
|
|
||||||
iceCandidates.clear();
|
|
||||||
isClosed = false;
|
|
||||||
isIceConnected = false;
|
|
||||||
loopback = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInitiatorCreation() throws InterruptedException {
|
|
||||||
Log.d(TAG, "testInitiatorCreation");
|
|
||||||
MockRenderer localRender = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
|
||||||
MockRenderer remoteRender = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
|
||||||
SignalingParameters signalingParameters = getTestSignalingParameters();
|
SignalingParameters signalingParameters = getTestSignalingParameters();
|
||||||
|
|
||||||
pcClient = new PeerConnectionClient();
|
PeerConnectionClient client = new PeerConnectionClient();
|
||||||
pcClient.createPeerConnectionFactory(
|
client.createPeerConnectionFactory(
|
||||||
getInstrumentation().getContext(), true, null, this);
|
getInstrumentation().getContext(), true, null, this);
|
||||||
pcClient.createPeerConnection(
|
client.createPeerConnection(
|
||||||
localRender, remoteRender, signalingParameters, 1000);
|
localRenderer, remoteRenderer, signalingParameters, 1000);
|
||||||
pcClient.createOffer();
|
client.createOffer();
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSetLocalOfferMakesVideoFlowLocally()
|
||||||
|
throws InterruptedException {
|
||||||
|
Log.d(TAG, "testSetLocalOfferMakesVideoFlowLocally");
|
||||||
|
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||||
|
pcClient = createPeerConnectionClient(localRenderer, new MockRenderer(0));
|
||||||
|
|
||||||
// Wait for local SDP and ice candidates set events.
|
// Wait for local SDP and ice candidates set events.
|
||||||
assertTrue("Local SDP was not set.", waitForLocalSDP(WAIT_TIMEOUT));
|
assertTrue("Local SDP was not set.", waitForLocalSDP(WAIT_TIMEOUT));
|
||||||
@ -244,27 +252,44 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
|||||||
|
|
||||||
// Check that local video frames were rendered.
|
// Check that local video frames were rendered.
|
||||||
assertTrue("Local video frames were not rendered.",
|
assertTrue("Local video frames were not rendered.",
|
||||||
localRender.waitForFramesRendered(WAIT_TIMEOUT));
|
localRenderer.waitForFramesRendered(WAIT_TIMEOUT));
|
||||||
|
|
||||||
pcClient.close();
|
pcClient.close();
|
||||||
assertTrue("PeerConnection close event was not received.",
|
assertTrue("PeerConnection close event was not received.",
|
||||||
waitForPeerConnectionClosed(WAIT_TIMEOUT));
|
waitForPeerConnectionClosed(WAIT_TIMEOUT));
|
||||||
Log.d(TAG, "testInitiatorCreation Done.");
|
Log.d(TAG, "testSetLocalOfferMakesVideoFlowLocally Done.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSizeIsSetBeforeStartingToRender()
|
||||||
|
throws InterruptedException {
|
||||||
|
Log.d(TAG, "testSizeIsSetBeforeStartingToRender");
|
||||||
|
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||||
|
pcClient = createPeerConnectionClient(localRenderer, new MockRenderer(0));
|
||||||
|
|
||||||
|
waitForLocalSDP(WAIT_TIMEOUT);
|
||||||
|
waitForIceCandidates(WAIT_TIMEOUT);
|
||||||
|
|
||||||
|
// Check that local video frames were rendered.
|
||||||
|
assertTrue("Local video frames were not rendered.",
|
||||||
|
localRenderer.waitForFramesRendered(WAIT_TIMEOUT));
|
||||||
|
assertTrue("Should have set size before rendering frames; size wasn't set",
|
||||||
|
localRenderer.setSizeCalledBeforeRenderFrame());
|
||||||
|
assertTrue(localRenderer.getWidth() > 0);
|
||||||
|
assertTrue(localRenderer.getHeight() > 0);
|
||||||
|
|
||||||
|
pcClient.close();
|
||||||
|
waitForPeerConnectionClosed(WAIT_TIMEOUT);
|
||||||
|
Log.d(TAG, "testSizeIsSetBeforeStartingToRender Done.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testLoopback() throws InterruptedException {
|
public void testLoopback() throws InterruptedException {
|
||||||
Log.d(TAG, "testLoopback");
|
Log.d(TAG, "testLoopback");
|
||||||
MockRenderer localRender = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
|
||||||
MockRenderer remoteRender = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
|
||||||
SignalingParameters signalingParameters = getTestSignalingParameters();
|
|
||||||
loopback = true;
|
loopback = true;
|
||||||
|
|
||||||
pcClient = new PeerConnectionClient();
|
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||||
pcClient.createPeerConnectionFactory(
|
MockRenderer remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||||
getInstrumentation().getContext(), true, null, this);
|
|
||||||
pcClient.createPeerConnection(
|
pcClient = createPeerConnectionClient(localRenderer, remoteRenderer);
|
||||||
localRender, remoteRender, signalingParameters, 1000);
|
|
||||||
pcClient.createOffer();
|
|
||||||
|
|
||||||
// Wait for local SDP, rename it to answer and set as remote SDP.
|
// Wait for local SDP, rename it to answer and set as remote SDP.
|
||||||
assertTrue("Local SDP was not set.", waitForLocalSDP(WAIT_TIMEOUT));
|
assertTrue("Local SDP was not set.", waitForLocalSDP(WAIT_TIMEOUT));
|
||||||
@ -278,11 +303,11 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
|||||||
|
|
||||||
// Check that local video frames were rendered.
|
// Check that local video frames were rendered.
|
||||||
assertTrue("Local video frames were not rendered.",
|
assertTrue("Local video frames were not rendered.",
|
||||||
localRender.waitForFramesRendered(WAIT_TIMEOUT));
|
localRenderer.waitForFramesRendered(WAIT_TIMEOUT));
|
||||||
|
|
||||||
// Check that remote video frames were rendered.
|
// Check that remote video frames were rendered.
|
||||||
assertTrue("Remote video frames were not rendered.",
|
assertTrue("Remote video frames were not rendered.",
|
||||||
remoteRender.waitForFramesRendered(WAIT_TIMEOUT));
|
remoteRenderer.waitForFramesRendered(WAIT_TIMEOUT));
|
||||||
|
|
||||||
pcClient.close();
|
pcClient.close();
|
||||||
assertTrue(waitForPeerConnectionClosed(WAIT_TIMEOUT));
|
assertTrue(waitForPeerConnectionClosed(WAIT_TIMEOUT));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user