Index: webrtc/audio/audio_send_stream_unittest.cc |
diff --git a/webrtc/audio/audio_send_stream_unittest.cc b/webrtc/audio/audio_send_stream_unittest.cc |
index 727178ed5b40775dc0adb58c58706f8d2dde4fda..ada15acddf5ff2a151a055e4901b069d20f9bf67 100644 |
--- a/webrtc/audio/audio_send_stream_unittest.cc |
+++ b/webrtc/audio/audio_send_stream_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "webrtc/audio/audio_send_stream.h" |
+#include "webrtc/audio/audio_state.h" |
#include "webrtc/audio/conversion.h" |
#include "webrtc/test/mock_voice_engine.h" |
@@ -20,6 +21,72 @@ namespace { |
const int kChannelId = 1; |
const uint32_t kSsrc = 1234; |
+const int kEchoDelayMedian = 254; |
+const int kEchoDelayStdDev = -3; |
+const int kEchoReturnLoss = -65; |
+const int kEchoReturnLossEnhancement = 101; |
+const unsigned int kSpeechInputLevel = 96; |
+const CallStatistics kCallStats = { |
+ 1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123}; |
+const CodecInst kCodecInst = {-121, "codec_name_send", 48000, -231, -451, -671}; |
+const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354}; |
+ |
+struct ConfigHelper { |
+ ConfigHelper() : stream_config_(nullptr) { |
+ EXPECT_CALL(voice_engine_, |
+ RegisterVoiceEngineObserver(testing::_)).WillOnce(testing::Return(0)); |
+ EXPECT_CALL(voice_engine_, |
+ DeRegisterVoiceEngineObserver()).WillOnce(testing::Return(0)); |
+ AudioState::Config config; |
+ config.voice_engine = &voice_engine_; |
+ audio_state_ = AudioState::Create(config); |
+ stream_config_.voe_channel_id = kChannelId; |
+ stream_config_.rtp.ssrc = kSsrc; |
+ } |
+ |
+ AudioSendStream::Config& config() { return stream_config_; } |
+ rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } |
+ |
+ void SetupMockForGetStats() { |
+ std::vector<ReportBlock> report_blocks; |
+ webrtc::ReportBlock block = kReportBlock; |
+ report_blocks.push_back(block); // Has wrong SSRC. |
+ block.source_SSRC = kSsrc; |
+ report_blocks.push_back(block); // Correct block. |
+ block.fraction_lost = 0; |
+ report_blocks.push_back(block); // Duplicate SSRC, bad fraction_lost. |
+ |
+ using testing::_; |
+ using testing::DoAll; |
+ using testing::Return; |
+ using testing::SetArgPointee; |
+ using testing::SetArgReferee; |
+ EXPECT_CALL(voice_engine_, GetLocalSSRC(kChannelId, _)) |
+ .WillRepeatedly(DoAll(SetArgReferee<1>(0), Return(0))); |
+ EXPECT_CALL(voice_engine_, GetRTCPStatistics(kChannelId, _)) |
+ .WillRepeatedly(DoAll(SetArgReferee<1>(kCallStats), Return(0))); |
+ EXPECT_CALL(voice_engine_, GetSendCodec(kChannelId, _)) |
+ .WillRepeatedly(DoAll(SetArgReferee<1>(kCodecInst), Return(0))); |
+ EXPECT_CALL(voice_engine_, GetRemoteRTCPReportBlocks(kChannelId, _)) |
+ .WillRepeatedly(DoAll(SetArgPointee<1>(report_blocks), Return(0))); |
+ EXPECT_CALL(voice_engine_, GetSpeechInputLevelFullRange(_)) |
+ .WillRepeatedly(DoAll(SetArgReferee<0>(kSpeechInputLevel), Return(0))); |
+ EXPECT_CALL(voice_engine_, GetEcMetricsStatus(_)) |
+ .WillRepeatedly(DoAll(SetArgReferee<0>(true), Return(0))); |
+ EXPECT_CALL(voice_engine_, GetEchoMetrics(_, _, _, _)) |
+ .WillRepeatedly(DoAll(SetArgReferee<0>(kEchoReturnLoss), |
+ SetArgReferee<1>(kEchoReturnLossEnhancement), |
+ Return(0))); |
+ EXPECT_CALL(voice_engine_, GetEcDelayMetrics(_, _, _)) |
+ .WillRepeatedly(DoAll(SetArgReferee<0>(kEchoDelayMedian), |
+ SetArgReferee<1>(kEchoDelayStdDev), Return(0))); |
+ } |
+ |
+ private: |
+ MockVoiceEngine voice_engine_; |
+ rtc::scoped_refptr<AudioState> audio_state_; |
+ AudioSendStream::Config stream_config_; |
+}; |
} // namespace |
TEST(AudioSendStreamTest, ConfigToString) { |
@@ -39,67 +106,14 @@ TEST(AudioSendStreamTest, ConfigToString) { |
} |
TEST(AudioSendStreamTest, ConstructDestruct) { |
- MockVoiceEngine voice_engine; |
- AudioSendStream::Config config(nullptr); |
- config.voe_channel_id = kChannelId; |
- internal::AudioSendStream send_stream(config, &voice_engine); |
+ ConfigHelper helper; |
+ internal::AudioSendStream send_stream(helper.config(), helper.audio_state()); |
} |
TEST(AudioSendStreamTest, GetStats) { |
- const int kEchoDelayMedian = 254; |
- const int kEchoDelayStdDev = -3; |
- const int kEchoReturnLoss = -65; |
- const int kEchoReturnLossEnhancement = 101; |
- const unsigned int kSpeechInputLevel = 96; |
- |
- const CallStatistics kCallStats = {1345, 1678, 1901, 1234, 112, |
- 13456, 17890, 1567, -1890, -1123}; |
- |
- const CodecInst kCodecInst = {-121, "codec_name_send", 48000, -231, -451, |
- -671}; |
- |
- const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354}; |
- |
- std::vector<ReportBlock> report_blocks; |
- { |
- webrtc::ReportBlock block = kReportBlock; |
- report_blocks.push_back(block); // Has wrong SSRC. |
- block.source_SSRC = kSsrc; |
- report_blocks.push_back(block); // Correct block. |
- block.fraction_lost = 0; |
- report_blocks.push_back(block); // Duplicate SSRC, bad fraction_lost. |
- } |
- |
- MockVoiceEngine voice_engine; |
- AudioSendStream::Config config(nullptr); |
- config.rtp.ssrc = kSsrc; |
- config.voe_channel_id = kChannelId; |
- internal::AudioSendStream send_stream(config, &voice_engine); |
- |
- using testing::_; |
- using testing::DoAll; |
- using testing::Return; |
- using testing::SetArgPointee; |
- using testing::SetArgReferee; |
- EXPECT_CALL(voice_engine, GetLocalSSRC(kChannelId, _)) |
- .WillOnce(DoAll(SetArgReferee<1>(0), Return(0))); |
- EXPECT_CALL(voice_engine, GetRTCPStatistics(kChannelId, _)) |
- .WillOnce(DoAll(SetArgReferee<1>(kCallStats), Return(0))); |
- EXPECT_CALL(voice_engine, GetSendCodec(kChannelId, _)) |
- .WillOnce(DoAll(SetArgReferee<1>(kCodecInst), Return(0))); |
- EXPECT_CALL(voice_engine, GetRemoteRTCPReportBlocks(kChannelId, _)) |
- .WillOnce(DoAll(SetArgPointee<1>(report_blocks), Return(0))); |
- EXPECT_CALL(voice_engine, GetSpeechInputLevelFullRange(_)) |
- .WillOnce(DoAll(SetArgReferee<0>(kSpeechInputLevel), Return(0))); |
- EXPECT_CALL(voice_engine, GetEcMetricsStatus(_)) |
- .WillOnce(DoAll(SetArgReferee<0>(true), Return(0))); |
- EXPECT_CALL(voice_engine, GetEchoMetrics(_, _, _, _)) |
- .WillOnce(DoAll(SetArgReferee<0>(kEchoReturnLoss), |
- SetArgReferee<1>(kEchoReturnLossEnhancement), Return(0))); |
- EXPECT_CALL(voice_engine, GetEcDelayMetrics(_, _, _)) |
- .WillOnce(DoAll(SetArgReferee<0>(kEchoDelayMedian), |
- SetArgReferee<1>(kEchoDelayStdDev), Return(0))); |
- |
+ ConfigHelper helper; |
+ internal::AudioSendStream send_stream(helper.config(), helper.audio_state()); |
+ helper.SetupMockForGetStats(); |
AudioSendStream::Stats stats = send_stream.GetStats(); |
EXPECT_EQ(kSsrc, stats.local_ssrc); |
EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); |
@@ -122,5 +136,21 @@ TEST(AudioSendStreamTest, GetStats) { |
EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); |
EXPECT_FALSE(stats.typing_noise_detected); |
} |
+ |
+TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { |
+ ConfigHelper helper; |
+ internal::AudioSendStream send_stream(helper.config(), helper.audio_state()); |
+ helper.SetupMockForGetStats(); |
+ EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); |
+ |
+ internal::AudioState* internal_audio_state = |
+ static_cast<internal::AudioState*>(helper.audio_state().get()); |
+ VoiceEngineObserver* voe_observer = |
+ static_cast<VoiceEngineObserver*>(internal_audio_state); |
+ voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); |
+ EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); |
+ voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); |
+ EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); |
+} |
} // namespace test |
} // namespace webrtc |