blob: 65e75c46b6ea436d8469c42c578a55cd6107e038 [file] [log] [blame]
hbos1f8239c2017-01-16 04:24:10 -08001/*
2 * Copyright 2016 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "pc/trackmediainfomap.h"
hbos1f8239c2017-01-16 04:24:10 -080012
13#include <initializer_list>
14#include <memory>
15#include <utility>
16#include <vector>
17
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020018#include "api/rtpreceiverinterface.h"
19#include "api/rtpsenderinterface.h"
20#include "api/test/mock_rtpreceiver.h"
21#include "api/test/mock_rtpsender.h"
22#include "media/base/mediachannel.h"
23#include "pc/audiotrack.h"
24#include "pc/test/fakevideotracksource.h"
25#include "pc/videotrack.h"
26#include "rtc_base/refcount.h"
27#include "test/gtest.h"
hbos1f8239c2017-01-16 04:24:10 -080028
29namespace webrtc {
30
31namespace {
32
33RtpParameters CreateRtpParametersWithSsrcs(
34 std::initializer_list<uint32_t> ssrcs) {
35 RtpParameters params;
36 for (uint32_t ssrc : ssrcs) {
37 RtpEncodingParameters encoding_params;
Oskar Sundbom36f8f3e2017-11-16 10:54:27 +010038 encoding_params.ssrc = ssrc;
hbos1f8239c2017-01-16 04:24:10 -080039 params.encodings.push_back(encoding_params);
40 }
41 return params;
42}
43
44rtc::scoped_refptr<MockRtpSender> CreateMockRtpSender(
deadbeef804c1af2017-02-11 19:07:31 -080045 cricket::MediaType media_type,
46 std::initializer_list<uint32_t> ssrcs,
hbos1f8239c2017-01-16 04:24:10 -080047 rtc::scoped_refptr<MediaStreamTrackInterface> track) {
48 uint32_t first_ssrc;
49 if (ssrcs.size()) {
50 first_ssrc = *ssrcs.begin();
51 } else {
52 first_ssrc = 0;
53 }
54 rtc::scoped_refptr<MockRtpSender> sender(
55 new rtc::RefCountedObject<MockRtpSender>());
Mirko Bonadeic61ce0d2017-11-21 17:04:20 +010056 EXPECT_CALL(*sender, track())
57 .WillRepeatedly(testing::Return(std::move(track)));
hbos1f8239c2017-01-16 04:24:10 -080058 EXPECT_CALL(*sender, ssrc()).WillRepeatedly(testing::Return(first_ssrc));
deadbeef804c1af2017-02-11 19:07:31 -080059 EXPECT_CALL(*sender, media_type())
60 .WillRepeatedly(testing::Return(media_type));
61 EXPECT_CALL(*sender, GetParameters())
62 .WillRepeatedly(testing::Return(CreateRtpParametersWithSsrcs(ssrcs)));
hbos1f8239c2017-01-16 04:24:10 -080063 return sender;
64}
65
66rtc::scoped_refptr<MockRtpReceiver> CreateMockRtpReceiver(
deadbeef804c1af2017-02-11 19:07:31 -080067 cricket::MediaType media_type,
68 std::initializer_list<uint32_t> ssrcs,
hbos1f8239c2017-01-16 04:24:10 -080069 rtc::scoped_refptr<MediaStreamTrackInterface> track) {
70 rtc::scoped_refptr<MockRtpReceiver> receiver(
71 new rtc::RefCountedObject<MockRtpReceiver>());
Mirko Bonadeic61ce0d2017-11-21 17:04:20 +010072 EXPECT_CALL(*receiver, track())
73 .WillRepeatedly(testing::Return(std::move(track)));
deadbeef804c1af2017-02-11 19:07:31 -080074 EXPECT_CALL(*receiver, media_type())
75 .WillRepeatedly(testing::Return(media_type));
76 EXPECT_CALL(*receiver, GetParameters())
77 .WillRepeatedly(testing::Return(CreateRtpParametersWithSsrcs(ssrcs)));
hbos1f8239c2017-01-16 04:24:10 -080078 return receiver;
79}
80
81class TrackMediaInfoMapTest : public testing::Test {
82 public:
83 TrackMediaInfoMapTest()
84 : voice_media_info_(new cricket::VoiceMediaInfo()),
85 video_media_info_(new cricket::VideoMediaInfo()),
86 local_audio_track_(AudioTrack::Create("LocalAudioTrack", nullptr)),
87 remote_audio_track_(AudioTrack::Create("RemoteAudioTrack", nullptr)),
88 local_video_track_(
89 VideoTrack::Create("LocalVideoTrack",
perkj773be362017-07-31 23:22:01 -070090 FakeVideoTrackSource::Create(false),
91 rtc::Thread::Current())),
hbos1f8239c2017-01-16 04:24:10 -080092 remote_video_track_(
93 VideoTrack::Create("RemoteVideoTrack",
perkj773be362017-07-31 23:22:01 -070094 FakeVideoTrackSource::Create(false),
95 rtc::Thread::Current())) {}
hbos1f8239c2017-01-16 04:24:10 -080096
97 ~TrackMediaInfoMapTest() {
98 // If we have a map the ownership has been passed to the map, only delete if
99 // |CreateMap| has not been called.
100 if (!map_) {
101 delete voice_media_info_;
102 delete video_media_info_;
103 }
104 }
105
106 void AddRtpSenderWithSsrcs(std::initializer_list<uint32_t> ssrcs,
107 MediaStreamTrackInterface* local_track) {
108 rtc::scoped_refptr<MockRtpSender> rtp_sender = CreateMockRtpSender(
deadbeef804c1af2017-02-11 19:07:31 -0800109 local_track->kind() == MediaStreamTrackInterface::kAudioKind
110 ? cricket::MEDIA_TYPE_AUDIO
111 : cricket::MEDIA_TYPE_VIDEO,
hbos1f8239c2017-01-16 04:24:10 -0800112 ssrcs, local_track);
113 rtp_senders_.push_back(rtp_sender);
114
115 if (local_track->kind() == MediaStreamTrackInterface::kAudioKind) {
116 cricket::VoiceSenderInfo voice_sender_info;
117 size_t i = 0;
118 for (uint32_t ssrc : ssrcs) {
119 voice_sender_info.local_stats.push_back(cricket::SsrcSenderInfo());
120 voice_sender_info.local_stats[i++].ssrc = ssrc;
121 }
122 voice_media_info_->senders.push_back(voice_sender_info);
123 } else {
124 cricket::VideoSenderInfo video_sender_info;
125 size_t i = 0;
126 for (uint32_t ssrc : ssrcs) {
127 video_sender_info.local_stats.push_back(cricket::SsrcSenderInfo());
128 video_sender_info.local_stats[i++].ssrc = ssrc;
129 }
130 video_media_info_->senders.push_back(video_sender_info);
131 }
132 }
133
134 void AddRtpReceiverWithSsrcs(std::initializer_list<uint32_t> ssrcs,
135 MediaStreamTrackInterface* remote_track) {
136 rtc::scoped_refptr<MockRtpReceiver> rtp_receiver = CreateMockRtpReceiver(
deadbeef804c1af2017-02-11 19:07:31 -0800137 remote_track->kind() == MediaStreamTrackInterface::kAudioKind
138 ? cricket::MEDIA_TYPE_AUDIO
139 : cricket::MEDIA_TYPE_VIDEO,
hbos1f8239c2017-01-16 04:24:10 -0800140 ssrcs, remote_track);
141 rtp_receivers_.push_back(rtp_receiver);
142
143 if (remote_track->kind() == MediaStreamTrackInterface::kAudioKind) {
144 cricket::VoiceReceiverInfo voice_receiver_info;
145 size_t i = 0;
146 for (uint32_t ssrc : ssrcs) {
147 voice_receiver_info.local_stats.push_back(cricket::SsrcReceiverInfo());
148 voice_receiver_info.local_stats[i++].ssrc = ssrc;
149 }
150 voice_media_info_->receivers.push_back(voice_receiver_info);
151 } else {
152 cricket::VideoReceiverInfo video_receiver_info;
153 size_t i = 0;
154 for (uint32_t ssrc : ssrcs) {
155 video_receiver_info.local_stats.push_back(cricket::SsrcReceiverInfo());
156 video_receiver_info.local_stats[i++].ssrc = ssrc;
157 }
158 video_media_info_->receivers.push_back(video_receiver_info);
159 }
160 }
161
162 void CreateMap() {
163 RTC_DCHECK(!map_);
164 map_.reset(new TrackMediaInfoMap(
165 std::unique_ptr<cricket::VoiceMediaInfo>(voice_media_info_),
166 std::unique_ptr<cricket::VideoMediaInfo>(video_media_info_),
deadbeef804c1af2017-02-11 19:07:31 -0800167 rtp_senders_, rtp_receivers_));
hbos1f8239c2017-01-16 04:24:10 -0800168 }
169
170 protected:
171 cricket::VoiceMediaInfo* voice_media_info_;
172 cricket::VideoMediaInfo* video_media_info_;
173 std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders_;
174 std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers_;
175 std::unique_ptr<TrackMediaInfoMap> map_;
176 rtc::scoped_refptr<AudioTrack> local_audio_track_;
177 rtc::scoped_refptr<AudioTrack> remote_audio_track_;
178 rtc::scoped_refptr<VideoTrack> local_video_track_;
179 rtc::scoped_refptr<VideoTrack> remote_video_track_;
180};
181
182} // namespace
183
184TEST_F(TrackMediaInfoMapTest, SingleSenderReceiverPerTrackWithOneSsrc) {
deadbeef804c1af2017-02-11 19:07:31 -0800185 AddRtpSenderWithSsrcs({1}, local_audio_track_);
186 AddRtpReceiverWithSsrcs({2}, remote_audio_track_);
187 AddRtpSenderWithSsrcs({3}, local_video_track_);
188 AddRtpReceiverWithSsrcs({4}, remote_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800189 CreateMap();
190
191 // Local audio track <-> RTP audio sender
192 ASSERT_TRUE(map_->GetVoiceSenderInfos(*local_audio_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800193 EXPECT_EQ(
194 *map_->GetVoiceSenderInfos(*local_audio_track_),
195 std::vector<cricket::VoiceSenderInfo*>({&voice_media_info_->senders[0]}));
hbos1f8239c2017-01-16 04:24:10 -0800196 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[0]),
197 local_audio_track_.get());
198
199 // Remote audio track <-> RTP audio receiver
200 EXPECT_EQ(map_->GetVoiceReceiverInfo(*remote_audio_track_),
201 &voice_media_info_->receivers[0]);
202 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->receivers[0]),
203 remote_audio_track_.get());
204
205 // Local video track <-> RTP video sender
206 ASSERT_TRUE(map_->GetVideoSenderInfos(*local_video_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800207 EXPECT_EQ(
208 *map_->GetVideoSenderInfos(*local_video_track_),
209 std::vector<cricket::VideoSenderInfo*>({&video_media_info_->senders[0]}));
hbos1f8239c2017-01-16 04:24:10 -0800210 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[0]),
211 local_video_track_.get());
212
213 // Remote video track <-> RTP video receiver
214 EXPECT_EQ(map_->GetVideoReceiverInfo(*remote_video_track_),
215 &video_media_info_->receivers[0]);
216 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->receivers[0]),
217 remote_video_track_.get());
218}
219
220TEST_F(TrackMediaInfoMapTest, SingleSenderReceiverPerTrackWithMissingSsrc) {
221 AddRtpSenderWithSsrcs({}, local_audio_track_);
222 AddRtpSenderWithSsrcs({}, local_video_track_);
223 AddRtpReceiverWithSsrcs({}, remote_audio_track_);
224 AddRtpReceiverWithSsrcs({}, remote_video_track_);
225 CreateMap();
226
227 EXPECT_FALSE(map_->GetVoiceSenderInfos(*local_audio_track_));
228 EXPECT_FALSE(map_->GetVideoSenderInfos(*local_video_track_));
229 EXPECT_FALSE(map_->GetVoiceReceiverInfo(*remote_audio_track_));
230 EXPECT_FALSE(map_->GetVideoReceiverInfo(*remote_video_track_));
231}
232
233TEST_F(TrackMediaInfoMapTest,
234 SingleSenderReceiverPerTrackWithAudioAndVideoUseSameSsrc) {
deadbeef804c1af2017-02-11 19:07:31 -0800235 AddRtpSenderWithSsrcs({1}, local_audio_track_);
236 AddRtpReceiverWithSsrcs({2}, remote_audio_track_);
237 AddRtpSenderWithSsrcs({1}, local_video_track_);
238 AddRtpReceiverWithSsrcs({2}, remote_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800239 CreateMap();
240
241 // Local audio track <-> RTP audio sender
242 ASSERT_TRUE(map_->GetVoiceSenderInfos(*local_audio_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800243 EXPECT_EQ(
244 *map_->GetVoiceSenderInfos(*local_audio_track_),
245 std::vector<cricket::VoiceSenderInfo*>({&voice_media_info_->senders[0]}));
hbos1f8239c2017-01-16 04:24:10 -0800246 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[0]),
247 local_audio_track_.get());
248
249 // Remote audio track <-> RTP audio receiver
250 EXPECT_EQ(map_->GetVoiceReceiverInfo(*remote_audio_track_),
251 &voice_media_info_->receivers[0]);
252 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->receivers[0]),
253 remote_audio_track_.get());
254
255 // Local video track <-> RTP video sender
256 ASSERT_TRUE(map_->GetVideoSenderInfos(*local_video_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800257 EXPECT_EQ(
258 *map_->GetVideoSenderInfos(*local_video_track_),
259 std::vector<cricket::VideoSenderInfo*>({&video_media_info_->senders[0]}));
hbos1f8239c2017-01-16 04:24:10 -0800260 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[0]),
261 local_video_track_.get());
262
263 // Remote video track <-> RTP video receiver
264 EXPECT_EQ(map_->GetVideoReceiverInfo(*remote_video_track_),
265 &video_media_info_->receivers[0]);
266 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->receivers[0]),
267 remote_video_track_.get());
268}
269
270TEST_F(TrackMediaInfoMapTest, SingleMultiSsrcSenderPerTrack) {
deadbeef804c1af2017-02-11 19:07:31 -0800271 AddRtpSenderWithSsrcs({1, 2}, local_audio_track_);
272 AddRtpSenderWithSsrcs({3, 4}, local_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800273 CreateMap();
274
275 // Local audio track <-> RTP audio senders
276 ASSERT_TRUE(map_->GetVoiceSenderInfos(*local_audio_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800277 EXPECT_EQ(
278 *map_->GetVoiceSenderInfos(*local_audio_track_),
279 std::vector<cricket::VoiceSenderInfo*>({&voice_media_info_->senders[0]}));
hbos1f8239c2017-01-16 04:24:10 -0800280 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[0]),
281 local_audio_track_.get());
282
283 // Local video track <-> RTP video senders
284 ASSERT_TRUE(map_->GetVideoSenderInfos(*local_video_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800285 EXPECT_EQ(
286 *map_->GetVideoSenderInfos(*local_video_track_),
287 std::vector<cricket::VideoSenderInfo*>({&video_media_info_->senders[0]}));
hbos1f8239c2017-01-16 04:24:10 -0800288 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[0]),
289 local_video_track_.get());
290}
291
292TEST_F(TrackMediaInfoMapTest, MultipleOneSsrcSendersPerTrack) {
deadbeef804c1af2017-02-11 19:07:31 -0800293 AddRtpSenderWithSsrcs({1}, local_audio_track_);
294 AddRtpSenderWithSsrcs({2}, local_audio_track_);
295 AddRtpSenderWithSsrcs({3}, local_video_track_);
296 AddRtpSenderWithSsrcs({4}, local_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800297 CreateMap();
298
299 // Local audio track <-> RTP audio senders
300 ASSERT_TRUE(map_->GetVoiceSenderInfos(*local_audio_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800301 EXPECT_EQ(
302 *map_->GetVoiceSenderInfos(*local_audio_track_),
303 std::vector<cricket::VoiceSenderInfo*>(
304 {&voice_media_info_->senders[0], &voice_media_info_->senders[1]}));
hbos1f8239c2017-01-16 04:24:10 -0800305 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[0]),
306 local_audio_track_.get());
307 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[1]),
308 local_audio_track_.get());
309
310 // Local video track <-> RTP video senders
311 ASSERT_TRUE(map_->GetVideoSenderInfos(*local_video_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800312 EXPECT_EQ(
313 *map_->GetVideoSenderInfos(*local_video_track_),
314 std::vector<cricket::VideoSenderInfo*>(
315 {&video_media_info_->senders[0], &video_media_info_->senders[1]}));
hbos1f8239c2017-01-16 04:24:10 -0800316 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[0]),
317 local_video_track_.get());
318 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[1]),
319 local_video_track_.get());
320}
321
322TEST_F(TrackMediaInfoMapTest, MultipleMultiSsrcSendersPerTrack) {
deadbeef804c1af2017-02-11 19:07:31 -0800323 AddRtpSenderWithSsrcs({1, 2}, local_audio_track_);
324 AddRtpSenderWithSsrcs({3, 4}, local_audio_track_);
325 AddRtpSenderWithSsrcs({5, 6}, local_video_track_);
326 AddRtpSenderWithSsrcs({7, 8}, local_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800327 CreateMap();
328
329 // Local audio track <-> RTP audio senders
330 ASSERT_TRUE(map_->GetVoiceSenderInfos(*local_audio_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800331 EXPECT_EQ(
332 *map_->GetVoiceSenderInfos(*local_audio_track_),
333 std::vector<cricket::VoiceSenderInfo*>(
334 {&voice_media_info_->senders[0], &voice_media_info_->senders[1]}));
hbos1f8239c2017-01-16 04:24:10 -0800335 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[0]),
336 local_audio_track_.get());
337 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[1]),
338 local_audio_track_.get());
339
340 // Local video track <-> RTP video senders
341 ASSERT_TRUE(map_->GetVideoSenderInfos(*local_video_track_));
deadbeef804c1af2017-02-11 19:07:31 -0800342 EXPECT_EQ(
343 *map_->GetVideoSenderInfos(*local_video_track_),
344 std::vector<cricket::VideoSenderInfo*>(
345 {&video_media_info_->senders[0], &video_media_info_->senders[1]}));
hbos1f8239c2017-01-16 04:24:10 -0800346 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[0]),
347 local_video_track_.get());
348 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[1]),
349 local_video_track_.get());
350}
351
hbosfe90ad12017-02-20 02:05:13 -0800352// SSRCs can be reused for send and receive in loopback.
353TEST_F(TrackMediaInfoMapTest, SingleSenderReceiverPerTrackWithSsrcNotUnique) {
354 AddRtpSenderWithSsrcs({1}, local_audio_track_);
355 AddRtpReceiverWithSsrcs({1}, remote_audio_track_);
356 AddRtpSenderWithSsrcs({2}, local_video_track_);
357 AddRtpReceiverWithSsrcs({2}, remote_video_track_);
358 CreateMap();
359
360 // Local audio track <-> RTP audio senders
361 ASSERT_TRUE(map_->GetVoiceSenderInfos(*local_audio_track_));
362 EXPECT_EQ(
363 *map_->GetVoiceSenderInfos(*local_audio_track_),
364 std::vector<cricket::VoiceSenderInfo*>({&voice_media_info_->senders[0]}));
365 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->senders[0]),
366 local_audio_track_.get());
367
368 // Remote audio track <-> RTP audio receiver
369 EXPECT_EQ(map_->GetVoiceReceiverInfo(*remote_audio_track_),
370 &voice_media_info_->receivers[0]);
371 EXPECT_EQ(map_->GetAudioTrack(voice_media_info_->receivers[0]),
372 remote_audio_track_.get());
373
374 // Local video track <-> RTP video senders
375 ASSERT_TRUE(map_->GetVideoSenderInfos(*local_video_track_));
376 EXPECT_EQ(
377 *map_->GetVideoSenderInfos(*local_video_track_),
378 std::vector<cricket::VideoSenderInfo*>({&video_media_info_->senders[0]}));
379 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->senders[0]),
380 local_video_track_.get());
381
382 // Remote video track <-> RTP video receiver
383 EXPECT_EQ(map_->GetVideoReceiverInfo(*remote_video_track_),
384 &video_media_info_->receivers[0]);
385 EXPECT_EQ(map_->GetVideoTrack(video_media_info_->receivers[0]),
386 remote_video_track_.get());
387}
388
hbos1f8239c2017-01-16 04:24:10 -0800389// Death tests.
390// Disabled on Android because death tests misbehave on Android, see
391// base/test/gtest_util.h.
392#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
393
deadbeef804c1af2017-02-11 19:07:31 -0800394class TrackMediaInfoMapDeathTest : public TrackMediaInfoMapTest {};
hbos1f8239c2017-01-16 04:24:10 -0800395
396TEST_F(TrackMediaInfoMapDeathTest, MultipleOneSsrcReceiversPerTrack) {
deadbeef804c1af2017-02-11 19:07:31 -0800397 AddRtpReceiverWithSsrcs({1}, remote_audio_track_);
398 AddRtpReceiverWithSsrcs({2}, remote_audio_track_);
399 AddRtpReceiverWithSsrcs({3}, remote_video_track_);
400 AddRtpReceiverWithSsrcs({4}, remote_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800401 EXPECT_DEATH(CreateMap(), "");
402}
403
404TEST_F(TrackMediaInfoMapDeathTest, MultipleMultiSsrcReceiversPerTrack) {
deadbeef804c1af2017-02-11 19:07:31 -0800405 AddRtpReceiverWithSsrcs({1, 2}, remote_audio_track_);
406 AddRtpReceiverWithSsrcs({3, 4}, remote_audio_track_);
407 AddRtpReceiverWithSsrcs({5, 6}, remote_video_track_);
408 AddRtpReceiverWithSsrcs({7, 8}, remote_video_track_);
hbos1f8239c2017-01-16 04:24:10 -0800409 EXPECT_DEATH(CreateMap(), "");
410}
411
hbos1f8239c2017-01-16 04:24:10 -0800412#endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
413
414} // namespace webrtc