Index: webrtc/api/rtcstatscollector_unittest.cc |
diff --git a/webrtc/api/rtcstatscollector_unittest.cc b/webrtc/api/rtcstatscollector_unittest.cc |
index a9426622fb391cddbe54edf32b9ef4a9724a235e..53925862f0d999865638ee6d78167a591d209b4b 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_; |
@@ -1260,7 +1361,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< |
@@ -1271,14 +1372,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; |
@@ -1292,7 +1393,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; |
@@ -1332,7 +1433,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; |
@@ -1397,7 +1498,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< |
@@ -1408,14 +1509,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; |
@@ -1428,7 +1529,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; |
@@ -1448,6 +1549,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
test_->media_engine(), voice_media_channel, "VoiceContentName", |
kDefaultRtcpMuxRequired, kDefaultSrtpRequired); |
+ test_->SetupRemoteTrackAndReceiver( |
+ cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", 1); |
+ |
cricket::VoiceMediaInfo voice_media_info; |
voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo()); |
@@ -1496,6 +1600,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"; |
@@ -1510,8 +1616,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) { |
@@ -1521,6 +1628,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { |
video_media_channel, "VideoContentName", kDefaultRtcpMuxRequired, |
kDefaultSrtpRequired); |
+ test_->SetupRemoteTrackAndReceiver( |
+ cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID", 1); |
+ |
cricket::VideoMediaInfo video_media_info; |
video_media_info.receivers.push_back(cricket::VideoReceiverInfo()); |
@@ -1572,6 +1682,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"; |
@@ -1589,8 +1701,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) { |
@@ -1600,6 +1713,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { |
test_->media_engine(), voice_media_channel, "VoiceContentName", |
kDefaultRtcpMuxRequired, kDefaultSrtpRequired); |
+ test_->SetupLocalTrackAndSender( |
+ cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", 1); |
+ |
cricket::VoiceMediaInfo voice_media_info; |
voice_media_info.senders.push_back(cricket::VoiceSenderInfo()); |
@@ -1645,6 +1761,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"; |
@@ -1657,8 +1774,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) { |
@@ -1668,6 +1786,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { |
video_media_channel, "VideoContentName", kDefaultRtcpMuxRequired, |
kDefaultSrtpRequired); |
+ test_->SetupLocalTrackAndSender( |
+ cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", 1); |
+ |
cricket::VideoMediaInfo video_media_info; |
video_media_info.senders.push_back(cricket::VideoSenderInfo()); |
@@ -1718,6 +1839,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"; |
@@ -1735,8 +1857,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) { |