blob: 75e0974ecd3580f41e48a590925ddb4598de12c9 [file] [log] [blame]
Johannes Kron9ac3c912018-10-12 10:54:26 +02001/*
2 * Copyright 2018 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 */
Steve Anton10542f22019-01-11 09:11:00 -080010#include "pc/session_description.h"
Yves Gerey3e707812018-11-28 16:47:49 +010011
Mirko Bonadei317a1f02019-09-17 17:06:18 +020012#include <memory>
13
Yves Gerey3e707812018-11-28 16:47:49 +010014#include "test/gtest.h"
Johannes Kron9ac3c912018-10-12 10:54:26 +020015
16namespace cricket {
17
18TEST(MediaContentDescriptionTest, ExtmapAllowMixedDefaultValue) {
19 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020020 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020021}
22
23TEST(MediaContentDescriptionTest, SetExtmapAllowMixed) {
24 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020025 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
26 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
27 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020028 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020029 video_desc.extmap_allow_mixed_enum());
30 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
Johannes Kron9ac3c912018-10-12 10:54:26 +020031 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020032 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020033
34 // Not allowed to downgrade from kSession to kMedia.
Johannes Kron9581bc42018-10-23 10:17:39 +020035 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020036 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020037 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020038
39 // Always okay to set not supported.
Johannes Kron9581bc42018-10-23 10:17:39 +020040 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
41 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
42 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020043 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020044 video_desc.extmap_allow_mixed_enum());
45 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
46 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020047}
48
49TEST(MediaContentDescriptionTest, MixedOneTwoByteHeaderSupported) {
50 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020051 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
52 EXPECT_FALSE(video_desc.extmap_allow_mixed());
53 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
54 EXPECT_TRUE(video_desc.extmap_allow_mixed());
55 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
56 EXPECT_TRUE(video_desc.extmap_allow_mixed());
Johannes Kron9ac3c912018-10-12 10:54:26 +020057}
58
59TEST(SessionDescriptionTest, SetExtmapAllowMixed) {
60 SessionDescription session_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020061 session_desc.set_extmap_allow_mixed(true);
62 EXPECT_TRUE(session_desc.extmap_allow_mixed());
63 session_desc.set_extmap_allow_mixed(false);
64 EXPECT_FALSE(session_desc.extmap_allow_mixed());
Johannes Kron9ac3c912018-10-12 10:54:26 +020065}
66
67TEST(SessionDescriptionTest, SetExtmapAllowMixedPropagatesToMediaLevel) {
68 SessionDescription session_desc;
Harald Alvestrand1716d392019-06-03 20:35:45 +020069 session_desc.AddContent("video", MediaProtocolType::kRtp,
Mirko Bonadei317a1f02019-09-17 17:06:18 +020070 std::make_unique<VideoContentDescription>());
Harald Alvestrand1716d392019-06-03 20:35:45 +020071 MediaContentDescription* video_desc =
72 session_desc.GetContentDescriptionByName("video");
Johannes Kron9ac3c912018-10-12 10:54:26 +020073
74 // Setting true on session level propagates to media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020075 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +020076 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020077 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020078
79 // Don't downgrade from session level to media level
Johannes Kron9581bc42018-10-23 10:17:39 +020080 video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020081 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020082 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020083
84 // Setting false on session level propagates to media level if the current
85 // state is kSession.
Johannes Kron9581bc42018-10-23 10:17:39 +020086 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +020087 EXPECT_EQ(MediaContentDescription::kNo,
Johannes Kron9581bc42018-10-23 10:17:39 +020088 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020089
90 // Now possible to set at media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020091 video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020092 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020093 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020094
95 // Setting false on session level does not override on media level if current
96 // state is kMedia.
Johannes Kron9581bc42018-10-23 10:17:39 +020097 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +020098 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020099 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200100
101 // Setting true on session level overrides setting on media level.
Johannes Kron9581bc42018-10-23 10:17:39 +0200102 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200103 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +0200104 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200105}
106
107TEST(SessionDescriptionTest, AddContentTransfersExtmapAllowMixedSetting) {
108 SessionDescription session_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +0200109 session_desc.set_extmap_allow_mixed(false);
Harald Alvestrand1716d392019-06-03 20:35:45 +0200110 std::unique_ptr<MediaContentDescription> audio_desc =
Mirko Bonadei317a1f02019-09-17 17:06:18 +0200111 std::make_unique<AudioContentDescription>();
Johannes Kron9581bc42018-10-23 10:17:39 +0200112 audio_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200113
114 // If session setting is false, media level setting is preserved when new
115 // content is added.
Harald Alvestrand1716d392019-06-03 20:35:45 +0200116 session_desc.AddContent("audio", MediaProtocolType::kRtp,
117 std::move(audio_desc));
Johannes Kron9ac3c912018-10-12 10:54:26 +0200118 EXPECT_EQ(MediaContentDescription::kMedia,
Harald Alvestrand1716d392019-06-03 20:35:45 +0200119 session_desc.GetContentDescriptionByName("audio")
120 ->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200121
122 // If session setting is true, it's transferred to media level when new
123 // content is added.
Johannes Kron9581bc42018-10-23 10:17:39 +0200124 session_desc.set_extmap_allow_mixed(true);
Harald Alvestrand1716d392019-06-03 20:35:45 +0200125 std::unique_ptr<MediaContentDescription> video_desc =
Mirko Bonadei317a1f02019-09-17 17:06:18 +0200126 std::make_unique<VideoContentDescription>();
Harald Alvestrand1716d392019-06-03 20:35:45 +0200127 session_desc.AddContent("video", MediaProtocolType::kRtp,
128 std::move(video_desc));
Johannes Kron9ac3c912018-10-12 10:54:26 +0200129 EXPECT_EQ(MediaContentDescription::kSession,
Harald Alvestrand1716d392019-06-03 20:35:45 +0200130 session_desc.GetContentDescriptionByName("video")
131 ->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200132
133 // Session level setting overrides media level when new content is added.
Harald Alvestrand1716d392019-06-03 20:35:45 +0200134 std::unique_ptr<MediaContentDescription> data_desc =
Mirko Bonadei317a1f02019-09-17 17:06:18 +0200135 std::make_unique<RtpDataContentDescription>();
Johannes Kron9581bc42018-10-23 10:17:39 +0200136 data_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Harald Alvestrand1716d392019-06-03 20:35:45 +0200137 session_desc.AddContent("data", MediaProtocolType::kRtp,
138 std::move(data_desc));
Johannes Kron9ac3c912018-10-12 10:54:26 +0200139 EXPECT_EQ(MediaContentDescription::kSession,
Harald Alvestrand1716d392019-06-03 20:35:45 +0200140 session_desc.GetContentDescriptionByName("data")
141 ->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200142}
143
Johannes Kron9ac3c912018-10-12 10:54:26 +0200144} // namespace cricket