Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1100)

Unified Diff: webrtc/api/trackmediainfomap_unittest.cc

Issue 2611983002: TrackMediaInfoMap added. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« webrtc/api/trackmediainfomap.cc ('K') | « webrtc/api/trackmediainfomap.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/trackmediainfomap_unittest.cc
diff --git a/webrtc/api/trackmediainfomap_unittest.cc b/webrtc/api/trackmediainfomap_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6d0b095b0c4d4d0313a4edab6f261f970b89e6e6
--- /dev/null
+++ b/webrtc/api/trackmediainfomap_unittest.cc
@@ -0,0 +1,538 @@
+/*
+ * Copyright 2016 The WebRTC Project Authors. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/api/trackmediainfomap.h"
+
+#include <initializer_list>
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "webrtc/api/audiotrack.h"
+#include "webrtc/api/rtpreceiverinterface.h"
+#include "webrtc/api/rtpsenderinterface.h"
+#include "webrtc/api/test/fakertpsenderreceiver.h"
+#include "webrtc/api/test/fakevideotracksource.h"
+#include "webrtc/api/videotrack.h"
+#include "webrtc/base/refcount.h"
+#include "webrtc/media/base/mediachannel.h"
+#include "webrtc/test/gtest.h"
+
+namespace webrtc {
+
+namespace {
+
+RtpParameters CreateRtpParametersWithSsrcs(
+ std::initializer_list<uint32_t> ssrcs) {
+ RtpParameters params;
+ for (uint32_t ssrc : ssrcs) {
+ RtpEncodingParameters encoding_params;
+ encoding_params.ssrc = rtc::Optional<uint32_t>(ssrc);
+ params.encodings.push_back(encoding_params);
+ }
+ return params;
+}
+
+TrackMediaInfoMap CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo> voice_media_info,
+ std::unique_ptr<cricket::VideoMediaInfo> video_media_info,
+ const std::vector<rtc::scoped_refptr<RtpSenderInterface>>& rtp_senders,
+ const std::vector<rtc::scoped_refptr<RtpReceiverInterface>>&
+ rtp_receivers) {
+ TrackMediaInfoMap map(std::move(voice_media_info),
+ std::move(video_media_info));
+ map.Initialize(rtp_senders, rtp_receivers);
+ return map;
+}
+
+} // namespace
+
+TEST(TrackMediaInfoMapTest, SingleSenderAndReceiverWithOneSsrc) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders;
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers;
+
+ // Local audio track and sender info using an RTP sender with SSRC 1.
+ rtc::scoped_refptr<AudioTrack> local_audio_track =
+ AudioTrack::Create("LocalAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpSender> audio_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1}));
+ audio_sender->SetTrack(local_audio_track);
+ rtp_senders.push_back(audio_sender);
+
+ 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 = 1;
+
+ // Remote audio track and receiver info using an RTP sender with SSRC 2.
+ rtc::scoped_refptr<AudioTrack> remote_audio_track =
+ AudioTrack::Create("RemoteAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpReceiver> audio_receiver =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({2}));
+ audio_receiver->SetTrack(remote_audio_track);
+ rtp_receivers.push_back(audio_receiver);
+
+ 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 = 2;
+
+ // Local video track and sender info using an RTP sender with SSRC 3.
+ rtc::scoped_refptr<VideoTrack> local_video_track =
+ VideoTrack::Create("LocalVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpSender> video_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({3}));
+ video_sender->SetTrack(local_video_track);
+ rtp_senders.push_back(video_sender);
+
+ 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 = 3;
+
+ // Remote video track and receiver info using an RTP sender with SSRC 4.
+ rtc::scoped_refptr<VideoTrack> remote_video_track =
+ VideoTrack::Create("RemoteVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpReceiver> video_receiver =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({4}));
+ video_receiver->SetTrack(remote_video_track);
+ rtp_receivers.push_back(video_receiver);
+
+ 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 = 4;
+
+ TrackMediaInfoMap map = CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ rtp_senders,
+ rtp_receivers);
+
+ // Local audio track <-> RTP audio sender
+ ASSERT_TRUE(map.GetVoiceSenderInfos(*local_audio_track));
+ EXPECT_EQ(*map.GetVoiceSenderInfos(*local_audio_track),
+ std::vector<cricket::VoiceSenderInfo*>({
+ &voice_media_info->senders[0] }));
+ EXPECT_EQ(map.GetAudioTrack(voice_media_info->senders[0]),
+ local_audio_track.get());
+
+ // Remote audio track <-> RTP audio receiver
+ EXPECT_EQ(map.GetVoiceReceiverInfo(*remote_audio_track),
+ &voice_media_info->receivers[0]);
+ EXPECT_EQ(map.GetAudioTrack(voice_media_info->receivers[0]),
+ remote_audio_track.get());
+
+ // Local video track <-> RTP video sender
+ ASSERT_TRUE(map.GetVideoSenderInfos(*local_video_track));
+ EXPECT_EQ(*map.GetVideoSenderInfos(*local_video_track),
+ std::vector<cricket::VideoSenderInfo*>({
+ &video_media_info->senders[0] }));
+ EXPECT_EQ(map.GetVideoTrack(video_media_info->senders[0]),
+ local_video_track.get());
+
+ // Remote video track <-> RTP video receiver
+ EXPECT_EQ(map.GetVideoReceiverInfo(*remote_video_track),
+ &video_media_info->receivers[0]);
+ EXPECT_EQ(map.GetVideoTrack(video_media_info->receivers[0]),
+ remote_video_track.get());
+}
+
+TEST(TrackMediaInfoMapTest, SingleSenderWithMissingSsrc) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders;
+
+ // Local audio track and sender info using an RTP sender without an SSRC.
+ rtc::scoped_refptr<AudioTrack> local_audio_track =
+ AudioTrack::Create("LocalAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpSender> audio_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({}));
+ audio_sender->SetTrack(local_audio_track);
+ rtp_senders.push_back(audio_sender);
+
+ // Local video track and sender info using an RTP sender without an SSRC.
+ rtc::scoped_refptr<VideoTrack> local_video_track =
+ VideoTrack::Create("LocalVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpSender> video_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({}));
+ video_sender->SetTrack(local_video_track);
+ rtp_senders.push_back(video_sender);
+
+ TrackMediaInfoMap map = CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ rtp_senders,
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>>());
+
+ EXPECT_FALSE(map.GetVoiceSenderInfos(*local_audio_track));
+ EXPECT_FALSE(map.GetVideoSenderInfos(*local_video_track));
+}
+
+TEST(TrackMediaInfoMapTest, SingleSenderWithMultipleSsrcs) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders;
+
+ // Local audio track and sender infos using RTP sender with SSRCs 1 and 2.
+ rtc::scoped_refptr<AudioTrack> local_audio_track =
+ AudioTrack::Create("LocalAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpSender> audio_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1, 2}));
+ audio_sender->SetTrack(local_audio_track);
+ rtp_senders.push_back(audio_sender);
+
+ 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 = 1;
+ 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 = 2;
+
+ // Local video track and sender infos using RTP sender with SSRCs 3 and 4.
+ rtc::scoped_refptr<VideoTrack> local_video_track =
+ VideoTrack::Create("LocalVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpSender> video_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({3, 4}));
+ video_sender->SetTrack(local_video_track);
+ rtp_senders.push_back(video_sender);
+
+ video_media_info->senders.push_back(cricket::VideoSenderInfo());
hta-webrtc 2017/01/05 09:46:56 There's a ton of repeated code here. Can you make
hbos 2017/01/05 15:27:56 Done.
+ video_media_info->senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
+ video_media_info->senders[0].local_stats[0].ssrc = 3;
+ video_media_info->senders.push_back(cricket::VideoSenderInfo());
+ video_media_info->senders[1].local_stats.push_back(cricket::SsrcSenderInfo());
+ video_media_info->senders[1].local_stats[0].ssrc = 4;
+
+ TrackMediaInfoMap map = CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ rtp_senders,
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>>());
+
+ // Local audio track <-> RTP audio senders
+ ASSERT_TRUE(map.GetVoiceSenderInfos(*local_audio_track));
+ EXPECT_EQ(*map.GetVoiceSenderInfos(*local_audio_track),
+ std::vector<cricket::VoiceSenderInfo*>({
+ &voice_media_info->senders[0],
+ &voice_media_info->senders[1] }));
+ EXPECT_EQ(map.GetAudioTrack(voice_media_info->senders[0]),
+ local_audio_track.get());
+ EXPECT_EQ(map.GetAudioTrack(voice_media_info->senders[1]),
+ local_audio_track.get());
+
+ // Local video track <-> RTP video senders
+ ASSERT_TRUE(map.GetVideoSenderInfos(*local_video_track));
+ EXPECT_EQ(*map.GetVideoSenderInfos(*local_video_track),
+ std::vector<cricket::VideoSenderInfo*>({
+ &video_media_info->senders[0],
+ &video_media_info->senders[1] }));
+ EXPECT_EQ(map.GetVideoTrack(video_media_info->senders[0]),
+ local_video_track.get());
+ EXPECT_EQ(map.GetVideoTrack(video_media_info->senders[1]),
+ local_video_track.get());
+}
+
+TEST(TrackMediaInfoMapTest, MultipleSendersWithOneSsrc) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders;
+
+ // Local audio track and sender infos using RTP senders with SSRC 1 and 2.
+ rtc::scoped_refptr<AudioTrack> local_audio_track =
+ AudioTrack::Create("LocalAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpSender> audio_sender_ssrc1 =
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1}));
+ audio_sender_ssrc1->SetTrack(local_audio_track);
+ rtp_senders.push_back(audio_sender_ssrc1);
+
+ rtc::scoped_refptr<FakeRtpSender> audio_sender_ssrc2 =
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({2}));
+ audio_sender_ssrc2->SetTrack(local_audio_track);
+ rtp_senders.push_back(audio_sender_ssrc2);
+
+ 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 = 1;
+ 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 = 2;
+
+ // Local video track and sender infos using RTP senders with SSRC 3 and 4.
+ rtc::scoped_refptr<VideoTrack> local_video_track =
+ VideoTrack::Create("LocalVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpSender> video_sender_ssrc3 =
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({3}));
+ video_sender_ssrc3->SetTrack(local_video_track);
+ rtp_senders.push_back(video_sender_ssrc3);
+
+ rtc::scoped_refptr<FakeRtpSender> video_sender_ssrc4 =
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({4}));
+ video_sender_ssrc4->SetTrack(local_video_track);
+ rtp_senders.push_back(video_sender_ssrc4);
+
+ 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 = 3;
+ video_media_info->senders.push_back(cricket::VideoSenderInfo());
+ video_media_info->senders[1].local_stats.push_back(cricket::SsrcSenderInfo());
+ video_media_info->senders[1].local_stats[0].ssrc = 4;
+
+ TrackMediaInfoMap map = CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ rtp_senders,
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>>());
+
+ // Local audio track <-> RTP audio senders
+ ASSERT_TRUE(map.GetVoiceSenderInfos(*local_audio_track));
+ EXPECT_EQ(*map.GetVoiceSenderInfos(*local_audio_track),
+ std::vector<cricket::VoiceSenderInfo*>({
+ &voice_media_info->senders[0],
+ &voice_media_info->senders[1] }));
+ EXPECT_EQ(map.GetAudioTrack(voice_media_info->senders[0]),
+ local_audio_track.get());
+ EXPECT_EQ(map.GetAudioTrack(voice_media_info->senders[1]),
+ local_audio_track.get());
+
+ // Local video track <-> RTP video senders
+ ASSERT_TRUE(map.GetVideoSenderInfos(*local_video_track));
+ EXPECT_EQ(*map.GetVideoSenderInfos(*local_video_track),
+ std::vector<cricket::VideoSenderInfo*>({
+ &video_media_info->senders[0],
+ &video_media_info->senders[1] }));
+ EXPECT_EQ(map.GetVideoTrack(video_media_info->senders[0]),
+ local_video_track.get());
+ EXPECT_EQ(map.GetVideoTrack(video_media_info->senders[1]),
+ local_video_track.get());
+}
+
+// Death tests.
+// Disabled on Android because death tests misbehave on Android, see
+// base/test/gtest_util.h.
+#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
+
+TEST(TrackMediaInfoMapDeathTest, SingleReceiverWithMultipleSsrcs) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers;
+
+ // Remote audio track and receiver infos using RTP receiver /w SSRCs 1 and 2.
+ rtc::scoped_refptr<AudioTrack> remote_audio_track =
+ AudioTrack::Create("RemoteAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpReceiver> audio_receiver =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1, 2}));
+ audio_receiver->SetTrack(remote_audio_track);
+ rtp_receivers.push_back(audio_receiver);
+
+ 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 = 1;
+ voice_media_info->receivers.push_back(cricket::VoiceReceiverInfo());
+ voice_media_info->receivers[1].local_stats.push_back(
+ cricket::SsrcReceiverInfo());
+ voice_media_info->receivers[1].local_stats[0].ssrc = 2;
+
+ // Remote video track and receiver infos using RTP receiver /w SSRCs 3 and 4.
+ rtc::scoped_refptr<VideoTrack> remote_video_track =
+ VideoTrack::Create("RemoteVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpReceiver> video_receiver =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({3, 4}));
+ video_receiver->SetTrack(remote_video_track);
+ rtp_receivers.push_back(video_receiver);
+
+ 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 = 3;
+ video_media_info->receivers.push_back(cricket::VideoReceiverInfo());
+ video_media_info->receivers[1].local_stats.push_back(
+ cricket::SsrcReceiverInfo());
+ video_media_info->receivers[1].local_stats[0].ssrc = 4;
+
+ EXPECT_DEATH(CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>>(),
+ rtp_receivers), "");
+}
+
+TEST(TrackMediaInfoMapDeathTest, MultipleReceiversWithOneSsrc) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers;
+
+ // Remote audio track and receiver infos using RTP receivers /w SSRC 1 and 2.
+ rtc::scoped_refptr<AudioTrack> remote_audio_track =
+ AudioTrack::Create("RemoteAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpReceiver> audio_receiver_ssrc1 =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1}));
+ audio_receiver_ssrc1->SetTrack(remote_audio_track);
+ rtp_receivers.push_back(audio_receiver_ssrc1);
+
+ rtc::scoped_refptr<FakeRtpReceiver> audio_receiver_ssrc2 =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({2}));
+ audio_receiver_ssrc2->SetTrack(remote_audio_track);
+ rtp_receivers.push_back(audio_receiver_ssrc2);
+
+ 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 = 1;
+ voice_media_info->receivers.push_back(cricket::VoiceReceiverInfo());
+ voice_media_info->receivers[1].local_stats.push_back(
+ cricket::SsrcReceiverInfo());
+ voice_media_info->receivers[1].local_stats[0].ssrc = 2;
+
+ // Remote video track and receiver infos using RTP receivers /w SSRC 3 and 4.
+ rtc::scoped_refptr<VideoTrack> remote_video_track =
+ VideoTrack::Create("RemoteVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpReceiver> video_receiver_ssrc3 =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({3}));
+ video_receiver_ssrc3->SetTrack(remote_video_track);
+ rtp_receivers.push_back(video_receiver_ssrc3);
+
+ rtc::scoped_refptr<FakeRtpReceiver> video_receiver_ssrc4 =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({4}));
+ video_receiver_ssrc4->SetTrack(remote_video_track);
+ rtp_receivers.push_back(video_receiver_ssrc4);
+
+ 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 = 3;
+ video_media_info->receivers.push_back(cricket::VideoReceiverInfo());
+ video_media_info->receivers[1].local_stats.push_back(
+ cricket::SsrcReceiverInfo());
+ video_media_info->receivers[1].local_stats[0].ssrc = 4;
+
+ EXPECT_DEATH(CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>>(),
+ rtp_receivers), "");
+}
+
+TEST(TrackMediaInfoMapDeathTest, SingleSenderAndReceiverWithSsrcNotUnique) {
+ cricket::VoiceMediaInfo* voice_media_info = new cricket::VoiceMediaInfo();
+ cricket::VideoMediaInfo* video_media_info = new cricket::VideoMediaInfo();
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders;
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers;
+
+ // Local audio track and sender info using an RTP sender with SSRC 1.
+ rtc::scoped_refptr<AudioTrack> local_audio_track =
+ AudioTrack::Create("LocalAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpSender> audio_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1}));
+ audio_sender->SetTrack(local_audio_track);
+ rtp_senders.push_back(audio_sender);
+
+ 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 = 1;
+
+ // Remote audio track and receiver info using an RTP sender with SSRC 1.
+ rtc::scoped_refptr<AudioTrack> remote_audio_track =
+ AudioTrack::Create("RemoteAudioTrack", nullptr);
+
+ rtc::scoped_refptr<FakeRtpReceiver> audio_receiver =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
+ CreateRtpParametersWithSsrcs({1}));
+ audio_receiver->SetTrack(remote_audio_track);
+ rtp_receivers.push_back(audio_receiver);
+
+ 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 = 1;
+
+ // Local video track and sender info using an RTP sender with SSRC 1.
+ rtc::scoped_refptr<VideoTrack> local_video_track =
+ VideoTrack::Create("LocalVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpSender> video_sender =
+ new FakeRtpSender(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({1}));
+ video_sender->SetTrack(local_video_track);
+ rtp_senders.push_back(video_sender);
+
+ 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 = 1;
+
+ // Remote video track and receiver info using an RTP sender with SSRC 1.
+ rtc::scoped_refptr<VideoTrack> remote_video_track =
+ VideoTrack::Create("RemoteVideoTrack",
+ FakeVideoTrackSource::Create(false));
+
+ rtc::scoped_refptr<FakeRtpReceiver> video_receiver =
+ new FakeRtpReceiver(cricket::MEDIA_TYPE_VIDEO,
+ CreateRtpParametersWithSsrcs({1}));
+ video_receiver->SetTrack(remote_video_track);
+ rtp_receivers.push_back(video_receiver);
+
+ 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 = 1;
+
+ EXPECT_DEATH(CreateAndInitializeMap(
+ std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info),
+ std::unique_ptr<cricket::VideoMediaInfo>(video_media_info),
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>>(),
+ rtp_receivers), "");
+}
+
+#endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
+
+} // namespace webrtc
« webrtc/api/trackmediainfomap.cc ('K') | « webrtc/api/trackmediainfomap.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698