Chromium Code Reviews| Index: talk/media/webrtc/webrtcvoiceengine_unittest.cc |
| diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc |
| index a62bcb225fc7c6111fed44c0a43507f1ecf7b353..2da92138031d479312fbc7190020fa497f9083a4 100644 |
| --- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc |
| +++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc |
| @@ -72,6 +72,11 @@ class FakeVoEWrapper : public cricket::VoEWrapper { |
| }; |
| } // namespace |
| +class FakeAudioSink : public rtc::RefCountedObject<webrtc::AudioSinkInterface> { |
|
tommi
2016/01/13 23:14:24
no need for refcounted?
|
| + public: |
| + void OnData(const Data& audio) override {} |
| +}; |
| + |
| class WebRtcVoiceEngineTestFake : public testing::Test { |
| public: |
| WebRtcVoiceEngineTestFake() |
| @@ -125,6 +130,12 @@ class WebRtcVoiceEngineTestFake : public testing::Test { |
| return *send_stream; |
| } |
| + const cricket::FakeAudioReceiveStream& GetRecvStream(uint32_t ssrc) { |
| + const auto* recv_stream = call_.GetAudioReceiveStream(ssrc); |
| + EXPECT_TRUE(recv_stream); |
| + return *recv_stream; |
| + } |
| + |
| const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) { |
| const auto* send_stream = call_.GetAudioSendStream(ssrc); |
| EXPECT_TRUE(send_stream); |
| @@ -3105,6 +3116,52 @@ TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) { |
| EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1); |
| } |
| +TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { |
| + EXPECT_TRUE(SetupEngine()); |
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
| + |
| + // Setting the sink before a recv stream exists should do nothing. |
| + channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); |
| + EXPECT_TRUE( |
| + channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); |
| + EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
| + |
| + // Now try actually setting the sink. |
| + channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); |
| + EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
| + |
| + // Now try resetting it. |
| + channel_->SetRawAudioSink(kSsrc1, nullptr); |
| + EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
| +} |
| + |
| +TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { |
| + EXPECT_TRUE(SetupEngine()); |
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
| + |
| + // Should be able to set a default sink even when no stream exists. |
| + channel_->SetRawAudioSink(0, std::move(fake_sink_1)); |
| + |
| + // Create default channel and ensure it's assigned the default sink. |
| + DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
| + EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); |
| + |
| + // Try resetting the default sink. |
| + channel_->SetRawAudioSink(0, nullptr); |
| + EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); |
| + |
| + // Try setting the default sink while the default stream exists. |
| + channel_->SetRawAudioSink(0, std::move(fake_sink_2)); |
| + EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); |
| + |
| + // If we remove and add a default stream, it should get the same sink. |
| + EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); |
| + DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
| + EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); |
| +} |
| + |
| // Tests that the library initializes and shuts down properly. |
| TEST(WebRtcVoiceEngineTest, StartupShutdown) { |
| cricket::WebRtcVoiceEngine engine; |