Fix Android peer connection client instrumentation tests.
- Updated Java VideoRenderer removes setSize() from video renderer interface. Remove no longer valid test, which requires setSize() call before any frame can be rendered. - test_runner.py tries to run private member of InstrumentationTestCase class. Workaround it by renaming private loopback test method. R=wzh@webrtc.org Review URL: https://webrtc-codereview.appspot.com/47549004 Cr-Commit-Position: refs/heads/master@{#8707} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8707 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
fde1de93f9
commit
3d3c005f36
@ -61,6 +61,8 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
private static final String VIDEO_CODEC_H264 = "H264";
|
||||
private static final int AUDIO_RUN_TIMEOUT = 1000;
|
||||
private static final String DTLS_SRTP_KEY_AGREEMENT_CONSTRAINT = "DtlsSrtpKeyAgreement";
|
||||
private static final String LOCAL_RENDERER_NAME = "Local renderer";
|
||||
private static final String REMOTE_RENDERER_NAME = "Remote renderer";
|
||||
|
||||
// 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.
|
||||
@ -81,43 +83,36 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
// Mock renderer implementation.
|
||||
private static class MockRenderer implements VideoRenderer.Callbacks {
|
||||
// These are protected by 'this' since we gets called from worker threads.
|
||||
private int width = -1;
|
||||
private int height = -1;
|
||||
private String rendererName;
|
||||
private boolean renderFrameCalled = false;
|
||||
private boolean setSizeCalledBeforeRenderFrame = false;
|
||||
|
||||
// Thread-safe in itself.
|
||||
private CountDownLatch doneRendering;
|
||||
|
||||
public MockRenderer(int expectedFrames) {
|
||||
public MockRenderer(int expectedFrames, String rendererName) {
|
||||
this.rendererName = rendererName;
|
||||
reset(expectedFrames);
|
||||
}
|
||||
|
||||
// Resets render to wait for new amount of video frames.
|
||||
public synchronized void reset(int expectedFrames) {
|
||||
renderFrameCalled = false;
|
||||
doneRendering = new CountDownLatch(expectedFrames);
|
||||
}
|
||||
|
||||
private synchronized void setSize(int width, int height) {
|
||||
Log.d(TAG, "Set size: " + width + " x " + height);
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
if (!renderFrameCalled) {
|
||||
setSizeCalledBeforeRenderFrame = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void renderFrame(VideoRenderer.I420Frame frame) {
|
||||
if (!renderFrameCalled) {
|
||||
if (rendererName != null) {
|
||||
Log.d(TAG, rendererName + " render frame: " + frame.width + " x " + frame.height);
|
||||
} else {
|
||||
Log.d(TAG, "Render frame: " + frame.width + " x " + frame.height);
|
||||
}
|
||||
}
|
||||
renderFrameCalled = true;
|
||||
doneRendering.countDown();
|
||||
}
|
||||
|
||||
public synchronized int getWidth() { return width; }
|
||||
public synchronized int getHeight() { return height; }
|
||||
public synchronized boolean setSizeCalledBeforeRenderFrame() {
|
||||
return setSizeCalledBeforeRenderFrame;
|
||||
}
|
||||
|
||||
// This method shouldn't hold any locks or touch member variables since it
|
||||
// blocks.
|
||||
@ -288,9 +283,9 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
public void testSetLocalOfferMakesVideoFlowLocally()
|
||||
throws InterruptedException {
|
||||
Log.d(TAG, "testSetLocalOfferMakesVideoFlowLocally");
|
||||
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, LOCAL_RENDERER_NAME);
|
||||
pcClient = createPeerConnectionClient(
|
||||
localRenderer, new MockRenderer(0), true, VIDEO_CODEC_VP8);
|
||||
localRenderer, new MockRenderer(0, null), true, VIDEO_CODEC_VP8);
|
||||
|
||||
// Wait for local SDP and ice candidates set events.
|
||||
assertTrue("Local SDP was not set.", waitForLocalSDP(WAIT_TIMEOUT));
|
||||
@ -307,38 +302,15 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
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), true, VIDEO_CODEC_VP8);
|
||||
|
||||
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.");
|
||||
}
|
||||
|
||||
private void testLoopback(boolean enableVideo, String videoCodec)
|
||||
private void doLoopbackTest(boolean enableVideo, String videoCodec)
|
||||
throws InterruptedException {
|
||||
loopback = true;
|
||||
MockRenderer localRenderer = null;
|
||||
MockRenderer remoteRenderer = null;
|
||||
if (enableVideo) {
|
||||
Log.d(TAG, "testLoopback for video " + videoCodec);
|
||||
localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, LOCAL_RENDERER_NAME);
|
||||
remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, REMOTE_RENDERER_NAME);
|
||||
} else {
|
||||
Log.d(TAG, "testLoopback for audio.");
|
||||
}
|
||||
@ -373,19 +345,19 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
}
|
||||
|
||||
public void testLoopbackAudio() throws InterruptedException {
|
||||
testLoopback(false, VIDEO_CODEC_VP8);
|
||||
doLoopbackTest(false, VIDEO_CODEC_VP8);
|
||||
}
|
||||
|
||||
public void testLoopbackVp8() throws InterruptedException {
|
||||
testLoopback(true, VIDEO_CODEC_VP8);
|
||||
doLoopbackTest(true, VIDEO_CODEC_VP8);
|
||||
}
|
||||
|
||||
public void testLoopbackVp9() throws InterruptedException {
|
||||
testLoopback(true, VIDEO_CODEC_VP9);
|
||||
doLoopbackTest(true, VIDEO_CODEC_VP9);
|
||||
}
|
||||
|
||||
public void testLoopbackH264() throws InterruptedException {
|
||||
testLoopback(true, VIDEO_CODEC_H264);
|
||||
doLoopbackTest(true, VIDEO_CODEC_H264);
|
||||
}
|
||||
|
||||
// Checks if default front camera can be switched to back camera and then
|
||||
@ -394,8 +366,8 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
Log.d(TAG, "testCameraSwitch");
|
||||
loopback = true;
|
||||
|
||||
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
MockRenderer remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, LOCAL_RENDERER_NAME);
|
||||
MockRenderer remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, REMOTE_RENDERER_NAME);
|
||||
|
||||
pcClient = createPeerConnectionClient(
|
||||
localRenderer, remoteRenderer, true, VIDEO_CODEC_VP8);
|
||||
@ -440,8 +412,8 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
Log.d(TAG, "testVideoSourceRestart");
|
||||
loopback = true;
|
||||
|
||||
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
MockRenderer remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, LOCAL_RENDERER_NAME);
|
||||
MockRenderer remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, REMOTE_RENDERER_NAME);
|
||||
|
||||
pcClient = createPeerConnectionClient(
|
||||
localRenderer, remoteRenderer, true, VIDEO_CODEC_VP8);
|
||||
|
Loading…
x
Reference in New Issue
Block a user