Add a PeerConnection integration test for adding an audio track mid-call BUG=None Review-Url: https://codereview.webrtc.org/3007923002 Cr-Original-Commit-Position: refs/heads/master@{#19731} Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc Cr-Mirrored-Commit: 4389b4d96bb98cf210b761b4f152434fceb767a6
diff --git a/pc/peerconnection_integrationtest.cc b/pc/peerconnection_integrationtest.cc index d20e2f9..6b3ddd5 100644 --- a/pc/peerconnection_integrationtest.cc +++ b/pc/peerconnection_integrationtest.cc
@@ -1393,8 +1393,7 @@ // 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 @@ 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) {