Index: webrtc/api/rtcstatscollector_unittest.cc |
diff --git a/webrtc/api/rtcstatscollector_unittest.cc b/webrtc/api/rtcstatscollector_unittest.cc |
index 89161363a258668fd6fec90332f16b7b8a92579b..bbcb2bed162247e1174b99e65b0ca685892877b6 100644 |
--- a/webrtc/api/rtcstatscollector_unittest.cc |
+++ b/webrtc/api/rtcstatscollector_unittest.cc |
@@ -19,8 +19,11 @@ |
#include "webrtc/api/mediastream.h" |
#include "webrtc/api/mediastreamtrack.h" |
#include "webrtc/api/rtpparameters.h" |
+#include "webrtc/api/rtpreceiverinterface.h" |
+#include "webrtc/api/rtpsenderinterface.h" |
#include "webrtc/api/stats/rtcstats_objects.h" |
#include "webrtc/api/stats/rtcstatsreport.h" |
+#include "webrtc/api/test/fakertpsenderreceiver.h" |
#include "webrtc/api/test/mock_datachannel.h" |
#include "webrtc/api/test/mock_peerconnection.h" |
#include "webrtc/api/test/mock_webrtcsession.h" |
@@ -309,6 +312,10 @@ class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { |
EXPECT_CALL(pc_, local_streams()).WillRepeatedly(Return(nullptr)); |
EXPECT_CALL(pc_, remote_streams()).WillRepeatedly(Return(nullptr)); |
EXPECT_CALL(pc_, session()).WillRepeatedly(Return(&session_)); |
+ EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return( |
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>>())); |
+ EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return( |
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>>())); |
EXPECT_CALL(pc_, sctp_data_channels()).WillRepeatedly( |
ReturnRef(data_channels_)); |
EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); |
@@ -1240,6 +1247,61 @@ TEST_F(RTCStatsCollectorTest, |
new FakeAudioProcessorForStats(remote_audio_processor_stats)); |
remote_stream->AddTrack(remote_audio_track); |
+ // RTP sender/receivers for local/remote track to wire up SSRCs. |
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders; |
+ rtc::scoped_refptr<FakeRtpSender> rtp_sender = |
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO, |
+ CreateRtpParametersWithSsrc(1)); |
+ rtp_sender->SetTrack(local_audio_track); |
+ rtp_senders.push_back(rtp_sender); |
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers; |
+ rtc::scoped_refptr<FakeRtpReceiver> rtp_receiver = |
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_AUDIO, |
+ CreateRtpParametersWithSsrc(4)); |
Taylor Brandstetter
2017/01/04 00:36:56
May be overkill, but you could also test what happ
|
+ rtp_receiver->SetTrack(remote_audio_track); |
+ rtp_receivers.push_back(rtp_receiver); |
+ EXPECT_CALL(test_->pc(), GetSenders()).WillRepeatedly( |
+ Return(rtp_senders)); |
+ EXPECT_CALL(test_->pc(), GetReceivers()).WillRepeatedly( |
+ Return(rtp_receivers)); |
+ |
+ // |VoiceMediaInfo| for the above referenced SSRCs |
+ MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); |
+ cricket::VoiceChannel voice_channel( |
+ test_->worker_thread(), test_->network_thread(), test_->media_engine(), |
+ voice_media_channel, nullptr, "VoiceContentName", kDefaultRtcpEnabled, |
+ kDefaultSrtpRequired); |
+ cricket::VoiceMediaInfo voice_media_info; |
+ voice_media_info.senders.push_back(cricket::VoiceSenderInfo()); |
+ voice_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); |
+ voice_media_info.senders[0].local_stats[0].ssrc = 101010; // noise |
+ voice_media_info.senders.push_back(cricket::VoiceSenderInfo()); |
+ voice_media_info.senders[1].local_stats.push_back(cricket::SsrcSenderInfo()); |
+ voice_media_info.senders[1].local_stats[0].ssrc = 1; |
+ voice_media_info.senders[1].local_stats.push_back(cricket::SsrcSenderInfo()); |
+ voice_media_info.senders[1].local_stats[1].ssrc = 2; |
+ voice_media_info.senders[1].local_stats.push_back(cricket::SsrcSenderInfo()); |
+ voice_media_info.senders[1].local_stats[2].ssrc = 3; |
+ voice_media_info.senders.push_back(cricket::VoiceSenderInfo()); |
+ voice_media_info.senders[2].local_stats.push_back(cricket::SsrcSenderInfo()); |
+ voice_media_info.senders[2].local_stats[0].ssrc = 202020; // noise |
+ voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo()); |
+ voice_media_info.receivers[0].local_stats.push_back( |
+ cricket::SsrcReceiverInfo()); |
+ voice_media_info.receivers[0].local_stats[0].ssrc = 4; |
+ EXPECT_CALL(*voice_media_channel, GetStats(_)) |
+ .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true))); |
+ SessionStats session_stats; |
+ session_stats.proxy_to_transport["VoiceContentName"] = "TransportName"; |
+ session_stats.transport_stats["TransportName"].transport_name = |
+ "TransportName"; |
+ EXPECT_CALL(test_->session(), GetStats(_)).WillRepeatedly(Invoke( |
+ [&session_stats](const ChannelNamePairs&) { |
+ return std::unique_ptr<SessionStats>(new SessionStats(session_stats)); |
+ })); |
+ EXPECT_CALL(test_->session(), voice_channel()) |
+ .WillRepeatedly(Return(&voice_channel)); |
+ |
rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
RTCMediaStreamStats expected_local_stream( |
@@ -1247,7 +1309,7 @@ TEST_F(RTCStatsCollectorTest, |
expected_local_stream.stream_identifier = local_stream->label(); |
expected_local_stream.track_ids = std::vector<std::string>(); |
expected_local_stream.track_ids->push_back( |
- "RTCMediaStreamTrack_LocalAudioTrackID"); |
+ "RTCMediaStreamTrack_local_LocalAudioTrackID"); |
ASSERT_TRUE(report->Get(expected_local_stream.id())); |
EXPECT_EQ(expected_local_stream, |
report->Get(expected_local_stream.id())->cast_to< |
@@ -1258,18 +1320,20 @@ TEST_F(RTCStatsCollectorTest, |
expected_remote_stream.stream_identifier = remote_stream->label(); |
expected_remote_stream.track_ids = std::vector<std::string>(); |
expected_remote_stream.track_ids->push_back( |
- "RTCMediaStreamTrack_RemoteAudioTrackID"); |
+ "RTCMediaStreamTrack_remote_RemoteAudioTrackID"); |
ASSERT_TRUE(report->Get(expected_remote_stream.id())); |
EXPECT_EQ(expected_remote_stream, |
report->Get(expected_remote_stream.id())->cast_to< |
RTCMediaStreamStats>()); |
RTCMediaStreamTrackStats expected_local_audio_track( |
- "RTCMediaStreamTrack_LocalAudioTrackID", report->timestamp_us()); |
+ "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us()); |
expected_local_audio_track.track_identifier = local_audio_track->id(); |
expected_local_audio_track.remote_source = false; |
expected_local_audio_track.ended = true; |
expected_local_audio_track.detached = false; |
+ expected_local_audio_track.ssrc_ids = |
+ std::vector<std::string>({ "1", "2", "3" }); |
expected_local_audio_track.audio_level = 1.0; |
expected_local_audio_track.echo_return_loss = 42.0; |
expected_local_audio_track.echo_return_loss_enhancement = 52.0; |
@@ -1279,11 +1343,12 @@ TEST_F(RTCStatsCollectorTest, |
RTCMediaStreamTrackStats>()); |
RTCMediaStreamTrackStats expected_remote_audio_track( |
- "RTCMediaStreamTrack_RemoteAudioTrackID", report->timestamp_us()); |
+ "RTCMediaStreamTrack_remote_RemoteAudioTrackID", report->timestamp_us()); |
expected_remote_audio_track.track_identifier = remote_audio_track->id(); |
expected_remote_audio_track.remote_source = true; |
expected_remote_audio_track.ended = false; |
expected_remote_audio_track.detached = false; |
+ expected_remote_audio_track.ssrc_ids = std::vector<std::string>({ "4" }); |
expected_remote_audio_track.audio_level = 0.0; |
expected_remote_audio_track.echo_return_loss = 13.0; |
expected_remote_audio_track.echo_return_loss_enhancement = 37.0; |
@@ -1319,7 +1384,7 @@ TEST_F(RTCStatsCollectorTest, |
rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
RTCMediaStreamTrackStats expected_local_audio_track( |
- "RTCMediaStreamTrack_LocalAudioTrackID", report->timestamp_us()); |
+ "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us()); |
expected_local_audio_track.track_identifier = local_audio_track->id(); |
expected_local_audio_track.remote_source = false; |
expected_local_audio_track.ended = true; |
@@ -1377,6 +1442,53 @@ TEST_F(RTCStatsCollectorTest, |
remote_video_track_source); |
remote_stream->AddTrack(remote_video_track); |
+ // RTP sender/receivers for local/remote track to wire up SSRCs. |
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders; |
+ rtc::scoped_refptr<FakeRtpSender> rtp_sender = |
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO, |
+ CreateRtpParametersWithSsrc(42)); |
+ rtp_sender->SetTrack(local_video_track); |
+ rtp_senders.push_back(rtp_sender); |
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers; |
+ rtc::scoped_refptr<FakeRtpReceiver> rtp_receiver = |
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_VIDEO, |
+ CreateRtpParametersWithSsrc(43)); |
+ rtp_receiver->SetTrack(remote_video_track); |
+ rtp_receivers.push_back(rtp_receiver); |
+ EXPECT_CALL(test_->pc(), GetSenders()).WillRepeatedly( |
+ Return(rtp_senders)); |
+ EXPECT_CALL(test_->pc(), GetReceivers()).WillRepeatedly( |
+ Return(rtp_receivers)); |
+ |
+ // |VideoMediaInfo| for the above referenced SSRCs |
+ MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel(); |
+ cricket::VideoChannel video_channel( |
+ test_->worker_thread(), test_->network_thread(), video_media_channel, |
+ nullptr, "VideoContentName", kDefaultRtcpEnabled, kDefaultSrtpRequired); |
+ cricket::VideoMediaInfo video_media_info; |
+ video_media_info.senders.push_back(cricket::VideoSenderInfo()); |
+ video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); |
+ video_media_info.senders[0].local_stats[0].ssrc = 42; |
+ video_media_info.receivers.push_back(cricket::VideoReceiverInfo()); |
+ video_media_info.receivers[0].local_stats.push_back( |
+ cricket::SsrcReceiverInfo()); |
+ video_media_info.receivers[0].local_stats[0].ssrc = 43; |
+ video_media_info.receivers[0].local_stats.push_back( |
+ cricket::SsrcReceiverInfo()); |
+ video_media_info.receivers[0].local_stats[1].ssrc = 44; |
+ EXPECT_CALL(*video_media_channel, GetStats(_)) |
+ .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true))); |
+ SessionStats session_stats; |
+ session_stats.proxy_to_transport["VideoContentName"] = "TransportName"; |
+ session_stats.transport_stats["TransportName"].transport_name = |
+ "TransportName"; |
+ EXPECT_CALL(test_->session(), GetStats(_)).WillRepeatedly(Invoke( |
+ [&session_stats](const ChannelNamePairs&) { |
+ return std::unique_ptr<SessionStats>(new SessionStats(session_stats)); |
+ })); |
+ EXPECT_CALL(test_->session(), video_channel()) |
+ .WillRepeatedly(Return(&video_channel)); |
+ |
rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
RTCMediaStreamStats expected_local_stream( |
@@ -1384,7 +1496,7 @@ TEST_F(RTCStatsCollectorTest, |
expected_local_stream.stream_identifier = local_stream->label(); |
expected_local_stream.track_ids = std::vector<std::string>(); |
expected_local_stream.track_ids->push_back( |
- "RTCMediaStreamTrack_LocalVideoTrackID"); |
+ "RTCMediaStreamTrack_local_LocalVideoTrackID"); |
ASSERT_TRUE(report->Get(expected_local_stream.id())); |
EXPECT_EQ(expected_local_stream, |
report->Get(expected_local_stream.id())->cast_to< |
@@ -1395,18 +1507,19 @@ TEST_F(RTCStatsCollectorTest, |
expected_remote_stream.stream_identifier = remote_stream->label(); |
expected_remote_stream.track_ids = std::vector<std::string>(); |
expected_remote_stream.track_ids->push_back( |
- "RTCMediaStreamTrack_RemoteVideoTrackID"); |
+ "RTCMediaStreamTrack_remote_RemoteVideoTrackID"); |
ASSERT_TRUE(report->Get(expected_remote_stream.id())); |
EXPECT_EQ(expected_remote_stream, |
report->Get(expected_remote_stream.id())->cast_to< |
RTCMediaStreamStats>()); |
RTCMediaStreamTrackStats expected_local_video_track( |
- "RTCMediaStreamTrack_LocalVideoTrackID", report->timestamp_us()); |
+ "RTCMediaStreamTrack_local_LocalVideoTrackID", report->timestamp_us()); |
expected_local_video_track.track_identifier = local_video_track->id(); |
expected_local_video_track.remote_source = false; |
expected_local_video_track.ended = false; |
expected_local_video_track.detached = false; |
+ expected_local_video_track.ssrc_ids = std::vector<std::string>({ "42" }); |
expected_local_video_track.frame_width = 1234; |
expected_local_video_track.frame_height = 4321; |
ASSERT_TRUE(report->Get(expected_local_video_track.id())); |
@@ -1415,11 +1528,13 @@ TEST_F(RTCStatsCollectorTest, |
RTCMediaStreamTrackStats>()); |
RTCMediaStreamTrackStats expected_remote_video_track( |
- "RTCMediaStreamTrack_RemoteVideoTrackID", report->timestamp_us()); |
+ "RTCMediaStreamTrack_remote_RemoteVideoTrackID", report->timestamp_us()); |
expected_remote_video_track.track_identifier = remote_video_track->id(); |
expected_remote_video_track.remote_source = true; |
expected_remote_video_track.ended = true; |
expected_remote_video_track.detached = false; |
+ expected_remote_video_track.ssrc_ids = |
+ std::vector<std::string>({ "43", "44" }); |
expected_remote_video_track.frame_width = 1234; |
expected_remote_video_track.frame_height = 4321; |
ASSERT_TRUE(report->Get(expected_remote_video_track.id())); |