From 4389b4d96bb98cf210b761b4f152434fceb767a6 Mon Sep 17 00:00:00 2001 From: deadbeef Date: Thu, 7 Sep 2017 09:07:36 -0700 Subject: [PATCH] Add a PeerConnection integration test for adding an audio track mid-call BUG=None Review-Url: https://codereview.webrtc.org/3007923002 Cr-Commit-Position: refs/heads/master@{#19731} --- webrtc/pc/peerconnection_integrationtest.cc | 27 +++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/webrtc/pc/peerconnection_integrationtest.cc b/webrtc/pc/peerconnection_integrationtest.cc index d20e2f965b..6b3ddd55bf 100644 --- a/webrtc/pc/peerconnection_integrationtest.cc +++ b/webrtc/pc/peerconnection_integrationtest.cc @@ -1393,8 +1393,7 @@ TEST_F(PeerConnectionIntegrationTest, AudioToVideoUpgrade) { // Initially, offer an audio/video stream from the caller, but refuse to // send/receive video on the callee side. caller()->AddAudioVideoMediaStream(); - callee()->AddMediaStreamFromTracks(callee()->CreateLocalAudioTrack(), - nullptr); + callee()->AddAudioOnlyMediaStream(); PeerConnectionInterface::RTCOfferAnswerOptions options; options.offer_to_receive_video = 0; callee()->SetOfferAnswerOptions(options); @@ -1425,6 +1424,30 @@ TEST_F(PeerConnectionIntegrationTest, AudioToVideoUpgrade) { kMaxWaitForFramesMs); } +// Simpler than the above test; just add an audio track to an established +// video-only connection. +TEST_F(PeerConnectionIntegrationTest, AddAudioToVideoOnlyCall) { + ASSERT_TRUE(CreatePeerConnectionWrappers()); + ConnectFakeSignaling(); + // Do initial offer/answer with just a video track. + caller()->AddVideoOnlyMediaStream(); + callee()->AddVideoOnlyMediaStream(); + caller()->CreateAndSetAndSignalOffer(); + ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); + // Now add an audio track and do another offer/answer. + caller()->AddMediaStreamFromTracksWithLabel(caller()->CreateLocalAudioTrack(), + nullptr, "audio_stream"); + callee()->AddMediaStreamFromTracksWithLabel(callee()->CreateLocalAudioTrack(), + nullptr, "audio_stream"); + caller()->CreateAndSetAndSignalOffer(); + ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); + // Ensure both audio and video frames are received end-to-end. + ExpectNewFramesReceivedWithWait( + kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, + kDefaultExpectedAudioFrameCount, kDefaultExpectedVideoFrameCount, + kMaxWaitForFramesMs); +} + // This test sets up a call that's transferred to a new caller with a different // DTLS fingerprint. TEST_F(PeerConnectionIntegrationTest, CallTransferredForCallee) {