Index: webrtc/api/rtcstatscollector_unittest.cc |
diff --git a/webrtc/api/rtcstatscollector_unittest.cc b/webrtc/api/rtcstatscollector_unittest.cc |
index 72d00c49acc8d108d0ba2075409100f05b5c3947..724ba89e1c5ba1f55b59d84f2a08e285a2b8e0b7 100644 |
--- a/webrtc/api/rtcstatscollector_unittest.cc |
+++ b/webrtc/api/rtcstatscollector_unittest.cc |
@@ -23,6 +23,8 @@ |
#include "webrtc/api/stats/rtcstatsreport.h" |
#include "webrtc/api/test/mock_datachannel.h" |
#include "webrtc/api/test/mock_peerconnection.h" |
+#include "webrtc/api/test/mock_rtpreceiver.h" |
+#include "webrtc/api/test/mock_rtpsender.h" |
#include "webrtc/api/test/mock_webrtcsession.h" |
#include "webrtc/api/test/rtcstatsobtainer.h" |
#include "webrtc/base/checks.h" |
@@ -288,6 +290,26 @@ class FakeVideoTrackForStats |
rtc::scoped_refptr<VideoTrackSourceInterface> source_; |
}; |
+rtc::scoped_refptr<MediaStreamTrackInterface> CreateFakeTrack( |
+ cricket::MediaType media_type, |
+ const std::string& track_id) { |
+ if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
+ return FakeAudioTrackForStats::Create( |
+ track_id, |
+ MediaStreamTrackInterface::TrackState::kLive, |
+ 32767, |
+ new FakeAudioProcessorForStats( |
+ AudioProcessorInterface::AudioProcessorStats())); |
+ } else { |
+ RTC_DCHECK_EQ(media_type, cricket::MEDIA_TYPE_VIDEO); |
+ return FakeVideoTrackForStats::Create( |
+ track_id, |
+ MediaStreamTrackInterface::TrackState::kLive, |
+ new FakeVideoTrackSourceForStats( |
+ VideoTrackSourceInterface::Stats())); |
+ } |
+} |
+ |
class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { |
public: |
RTCStatsCollectorTestHelper() |
@@ -309,6 +331,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()); |
@@ -336,6 +362,81 @@ class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { |
RTC_NOTREACHED() << error; |
} |
+ void SetupLocalTrackAndSender(cricket::MediaType media_type, |
+ const std::string& track_id, |
+ uint32_t ssrc) { |
+ rtc::scoped_refptr<StreamCollection> local_streams = |
+ StreamCollection::Create(); |
+ EXPECT_CALL(pc_, local_streams()) |
+ .WillRepeatedly(Return(local_streams)); |
+ |
+ rtc::scoped_refptr<MediaStream> local_stream = |
+ MediaStream::Create("LocalStreamLabel"); |
+ local_streams->AddStream(local_stream); |
+ |
+ rtc::scoped_refptr<MediaStreamTrackInterface> track; |
+ if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
+ track = CreateFakeTrack(media_type, track_id); |
+ local_stream->AddTrack(static_cast<AudioTrackInterface*>(track.get())); |
+ } else { |
+ track = CreateFakeTrack(media_type, track_id); |
+ local_stream->AddTrack(static_cast<VideoTrackInterface*>(track.get())); |
+ } |
+ |
+ rtc::scoped_refptr<MockRtpSender> sender( |
+ new rtc::RefCountedObject<MockRtpSender>()); |
+ EXPECT_CALL(*sender, track()).WillRepeatedly(Return(track)); |
+ EXPECT_CALL(*sender, ssrc()).WillRepeatedly(Return(ssrc)); |
+ EXPECT_CALL(*sender, media_type()).WillRepeatedly(Return(media_type)); |
+ EXPECT_CALL(*sender, GetParameters()).WillRepeatedly(Invoke( |
+ [ssrc]() { |
+ RtpParameters params; |
+ params.encodings.push_back(RtpEncodingParameters()); |
+ params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc); |
+ return params; |
+ })); |
+ EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return( |
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>>({ |
+ rtc::scoped_refptr<RtpSenderInterface>(sender.get()) }))); |
+ } |
+ |
+ void SetupRemoteTrackAndReceiver(cricket::MediaType media_type, |
+ const std::string& track_id, |
+ uint32_t ssrc) { |
+ rtc::scoped_refptr<StreamCollection> remote_streams = |
+ StreamCollection::Create(); |
+ EXPECT_CALL(pc_, remote_streams()) |
+ .WillRepeatedly(Return(remote_streams)); |
+ |
+ rtc::scoped_refptr<MediaStream> remote_stream = |
+ MediaStream::Create("RemoteStreamLabel"); |
+ remote_streams->AddStream(remote_stream); |
+ |
+ rtc::scoped_refptr<MediaStreamTrackInterface> track; |
+ if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
+ track = CreateFakeTrack(media_type, track_id); |
+ remote_stream->AddTrack(static_cast<AudioTrackInterface*>(track.get())); |
+ } else { |
+ track = CreateFakeTrack(media_type, track_id); |
+ remote_stream->AddTrack(static_cast<VideoTrackInterface*>(track.get())); |
+ } |
+ |
+ rtc::scoped_refptr<MockRtpReceiver> receiver( |
+ new rtc::RefCountedObject<MockRtpReceiver>()); |
+ EXPECT_CALL(*receiver, track()).WillRepeatedly(Return(track)); |
+ EXPECT_CALL(*receiver, media_type()).WillRepeatedly(Return(media_type)); |
+ EXPECT_CALL(*receiver, GetParameters()).WillRepeatedly(Invoke( |
+ [ssrc]() { |
+ RtpParameters params; |
+ params.encodings.push_back(RtpEncodingParameters()); |
+ params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc); |
+ return params; |
+ })); |
+ EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return( |
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>>({ |
+ rtc::scoped_refptr<RtpReceiverInterface>(receiver.get()) }))); |
+ } |
+ |
private: |
rtc::ScopedFakeClock fake_clock_; |
RtcEventLogNullImpl event_log_; |
@@ -1259,7 +1360,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< |
@@ -1270,14 +1371,14 @@ 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; |
@@ -1291,7 +1392,7 @@ 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; |
@@ -1331,7 +1432,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; |
@@ -1396,7 +1497,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< |
@@ -1407,14 +1508,14 @@ 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; |
@@ -1427,7 +1528,7 @@ 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; |
@@ -1447,6 +1548,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
voice_media_channel, nullptr, "VoiceContentName", kDefaultRtcpEnabled, |
kDefaultSrtpRequired); |
+ test_->SetupRemoteTrackAndReceiver( |
+ cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", 1); |
+ |
cricket::VoiceMediaInfo voice_media_info; |
voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo()); |
@@ -1495,6 +1599,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
expected_audio.ssrc = "1"; |
expected_audio.is_remote = false; |
expected_audio.media_type = "audio"; |
+ expected_audio.media_track_id = |
+ "RTCMediaStreamTrack_remote_RemoteAudioTrackID"; |
expected_audio.transport_id = "RTCTransport_TransportName_" + |
rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
expected_audio.codec_id = "RTCCodec_InboundAudio_42"; |
@@ -1509,8 +1615,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
expected_audio.id())->cast_to<RTCInboundRTPStreamStats>(); |
EXPECT_EQ(audio, expected_audio); |
- ASSERT_TRUE(report->Get(*expected_audio.transport_id)); |
- ASSERT_TRUE(report->Get(*expected_audio.codec_id)); |
+ EXPECT_TRUE(report->Get(*expected_audio.media_track_id)); |
+ EXPECT_TRUE(report->Get(*expected_audio.transport_id)); |
+ EXPECT_TRUE(report->Get(*expected_audio.codec_id)); |
} |
TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { |
@@ -1519,6 +1626,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { |
test_->worker_thread(), test_->network_thread(), video_media_channel, |
nullptr, "VideoContentName", kDefaultRtcpEnabled, kDefaultSrtpRequired); |
+ test_->SetupRemoteTrackAndReceiver( |
+ cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID", 1); |
+ |
cricket::VideoMediaInfo video_media_info; |
video_media_info.receivers.push_back(cricket::VideoReceiverInfo()); |
@@ -1570,6 +1680,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { |
expected_video.ssrc = "1"; |
expected_video.is_remote = false; |
expected_video.media_type = "video"; |
+ expected_video.media_track_id = |
+ "RTCMediaStreamTrack_remote_RemoteVideoTrackID"; |
expected_video.transport_id = "RTCTransport_TransportName_" + |
rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
expected_video.codec_id = "RTCCodec_InboundVideo_42"; |
@@ -1587,8 +1699,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { |
expected_video.id())->cast_to<RTCInboundRTPStreamStats>(); |
EXPECT_EQ(video, expected_video); |
- ASSERT_TRUE(report->Get(*expected_video.transport_id)); |
- ASSERT_TRUE(report->Get(*video.codec_id)); |
+ EXPECT_TRUE(report->Get(*expected_video.media_track_id)); |
+ EXPECT_TRUE(report->Get(*expected_video.transport_id)); |
+ EXPECT_TRUE(report->Get(*video.codec_id)); |
} |
TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { |
@@ -1598,6 +1711,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { |
voice_media_channel, nullptr, "VoiceContentName", kDefaultRtcpEnabled, |
kDefaultSrtpRequired); |
+ test_->SetupLocalTrackAndSender( |
+ cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", 1); |
+ |
cricket::VoiceMediaInfo voice_media_info; |
voice_media_info.senders.push_back(cricket::VoiceSenderInfo()); |
@@ -1643,6 +1759,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { |
expected_audio.ssrc = "1"; |
expected_audio.is_remote = false; |
expected_audio.media_type = "audio"; |
+ expected_audio.media_track_id = "RTCMediaStreamTrack_local_LocalAudioTrackID"; |
expected_audio.transport_id = "RTCTransport_TransportName_" + |
rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
expected_audio.codec_id = "RTCCodec_OutboundAudio_42"; |
@@ -1655,8 +1772,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { |
expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>(); |
EXPECT_EQ(audio, expected_audio); |
- ASSERT_TRUE(report->Get(*expected_audio.transport_id)); |
- ASSERT_TRUE(report->Get(*expected_audio.codec_id)); |
+ EXPECT_TRUE(report->Get(*expected_audio.media_track_id)); |
+ EXPECT_TRUE(report->Get(*expected_audio.transport_id)); |
+ EXPECT_TRUE(report->Get(*expected_audio.codec_id)); |
} |
TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { |
@@ -1665,6 +1783,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { |
test_->worker_thread(), test_->network_thread(), video_media_channel, |
nullptr, "VideoContentName", kDefaultRtcpEnabled, kDefaultSrtpRequired); |
+ test_->SetupLocalTrackAndSender( |
+ cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", 1); |
+ |
cricket::VideoMediaInfo video_media_info; |
video_media_info.senders.push_back(cricket::VideoSenderInfo()); |
@@ -1715,6 +1836,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { |
expected_video.ssrc = "1"; |
expected_video.is_remote = false; |
expected_video.media_type = "video"; |
+ expected_video.media_track_id = "RTCMediaStreamTrack_local_LocalVideoTrackID"; |
expected_video.transport_id = "RTCTransport_TransportName_" + |
rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
expected_video.codec_id = "RTCCodec_OutboundVideo_42"; |
@@ -1732,8 +1854,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { |
expected_video.id())->cast_to<RTCOutboundRTPStreamStats>(); |
EXPECT_EQ(video, expected_video); |
- ASSERT_TRUE(report->Get(*expected_video.transport_id)); |
- ASSERT_TRUE(report->Get(*expected_video.codec_id)); |
+ EXPECT_TRUE(report->Get(*expected_video.media_track_id)); |
+ EXPECT_TRUE(report->Get(*expected_video.transport_id)); |
+ EXPECT_TRUE(report->Get(*expected_video.codec_id)); |
} |
TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Default) { |