| Index: webrtc/call/call_unittest.cc
|
| diff --git a/webrtc/call/call_unittest.cc b/webrtc/call/call_unittest.cc
|
| index 1cdd48ad964a3d79653dc44f94f5481cd217b250..2b93deb857d5c15c0efbb42afdd1be0e07890740 100644
|
| --- a/webrtc/call/call_unittest.cc
|
| +++ b/webrtc/call/call_unittest.cc
|
| @@ -32,6 +32,7 @@ struct CallHelper {
|
| }
|
|
|
| webrtc::Call* operator->() { return call_.get(); }
|
| + webrtc::test::MockVoiceEngine* voice_engine() { return &voice_engine_; }
|
|
|
| private:
|
| testing::NiceMock<webrtc::test::MockVoiceEngine> voice_engine_;
|
| @@ -118,6 +119,102 @@ TEST(CallTest, CreateDestroy_AudioReceiveStreams) {
|
| }
|
| }
|
|
|
| +TEST(CallTest, CreateDestroy_AssociateAudioSendReceiveStreams_RecvFirst) {
|
| + rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory(
|
| + new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>);
|
| + CallHelper call(decoder_factory);
|
| +
|
| + constexpr int kRecvChannelId = 101;
|
| +
|
| + // Set up the mock to create a channel proxy which we know of, so that we can
|
| + // add our expectations to it.
|
| + test::MockVoEChannelProxy* recv_channel_proxy = nullptr;
|
| + EXPECT_CALL(*call.voice_engine(), ChannelProxyFactory(testing::_))
|
| + .WillRepeatedly(testing::Invoke([&](int channel_id) {
|
| + test::MockVoEChannelProxy* channel_proxy =
|
| + new testing::NiceMock<test::MockVoEChannelProxy>();
|
| + EXPECT_CALL(*channel_proxy, GetAudioDecoderFactory())
|
| + .WillRepeatedly(testing::ReturnRef(decoder_factory));
|
| + // If being called for the send channel, save a pointer to the channel
|
| + // proxy for later.
|
| + if (channel_id == kRecvChannelId) {
|
| + EXPECT_FALSE(recv_channel_proxy);
|
| + recv_channel_proxy = channel_proxy;
|
| + }
|
| + return channel_proxy;
|
| + }));
|
| +
|
| + AudioReceiveStream::Config recv_config;
|
| + recv_config.rtp.remote_ssrc = 42;
|
| + recv_config.rtp.local_ssrc = 777;
|
| + recv_config.voe_channel_id = kRecvChannelId;
|
| + recv_config.decoder_factory = decoder_factory;
|
| + AudioReceiveStream* recv_stream = call->CreateAudioReceiveStream(recv_config);
|
| + EXPECT_NE(recv_stream, nullptr);
|
| +
|
| + EXPECT_CALL(*recv_channel_proxy, AssociateSendChannel(testing::_)).Times(1);
|
| + AudioSendStream::Config send_config(nullptr);
|
| + send_config.rtp.ssrc = 777;
|
| + send_config.voe_channel_id = 123;
|
| + AudioSendStream* send_stream = call->CreateAudioSendStream(send_config);
|
| + EXPECT_NE(send_stream, nullptr);
|
| +
|
| + EXPECT_CALL(*recv_channel_proxy, DisassociateSendChannel()).Times(1);
|
| + call->DestroyAudioSendStream(send_stream);
|
| +
|
| + EXPECT_CALL(*recv_channel_proxy, DisassociateSendChannel()).Times(1);
|
| + call->DestroyAudioReceiveStream(recv_stream);
|
| +}
|
| +
|
| +TEST(CallTest, CreateDestroy_AssociateAudioSendReceiveStreams_SendFirst) {
|
| + rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory(
|
| + new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>);
|
| + CallHelper call(decoder_factory);
|
| +
|
| + constexpr int kRecvChannelId = 101;
|
| +
|
| + // Set up the mock to create a channel proxy which we know of, so that we can
|
| + // add our expectations to it.
|
| + test::MockVoEChannelProxy* recv_channel_proxy = nullptr;
|
| + EXPECT_CALL(*call.voice_engine(), ChannelProxyFactory(testing::_))
|
| + .WillRepeatedly(testing::Invoke([&](int channel_id) {
|
| + test::MockVoEChannelProxy* channel_proxy =
|
| + new testing::NiceMock<test::MockVoEChannelProxy>();
|
| + EXPECT_CALL(*channel_proxy, GetAudioDecoderFactory())
|
| + .WillRepeatedly(testing::ReturnRef(decoder_factory));
|
| + // If being called for the send channel, save a pointer to the channel
|
| + // proxy for later.
|
| + if (channel_id == kRecvChannelId) {
|
| + EXPECT_FALSE(recv_channel_proxy);
|
| + recv_channel_proxy = channel_proxy;
|
| + // We need to set this expectation here since the channel proxy is
|
| + // created as a side effect of CreateAudioReceiveStream().
|
| + EXPECT_CALL(*recv_channel_proxy,
|
| + AssociateSendChannel(testing::_)).Times(1);
|
| + }
|
| + return channel_proxy;
|
| + }));
|
| +
|
| + AudioSendStream::Config send_config(nullptr);
|
| + send_config.rtp.ssrc = 777;
|
| + send_config.voe_channel_id = 123;
|
| + AudioSendStream* send_stream = call->CreateAudioSendStream(send_config);
|
| + EXPECT_NE(send_stream, nullptr);
|
| +
|
| + AudioReceiveStream::Config recv_config;
|
| + recv_config.rtp.remote_ssrc = 42;
|
| + recv_config.rtp.local_ssrc = 777;
|
| + recv_config.voe_channel_id = kRecvChannelId;
|
| + recv_config.decoder_factory = decoder_factory;
|
| + AudioReceiveStream* recv_stream = call->CreateAudioReceiveStream(recv_config);
|
| + EXPECT_NE(recv_stream, nullptr);
|
| +
|
| + EXPECT_CALL(*recv_channel_proxy, DisassociateSendChannel()).Times(1);
|
| + call->DestroyAudioReceiveStream(recv_stream);
|
| +
|
| + call->DestroyAudioSendStream(send_stream);
|
| +}
|
| +
|
| TEST(CallTest, CreateDestroy_FlexfecReceiveStream) {
|
| CallHelper call;
|
| FlexfecReceiveStream::Config config;
|
|
|