blob: dcacf587f562b4f9a5267b4ac275add788e2731b [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 */
10#include "pc/sessiondescription.h"
11#include "rtc_base/gunit.h"
12
13namespace cricket {
14
15TEST(MediaContentDescriptionTest, ExtmapAllowMixedDefaultValue) {
16 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020017 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020018}
19
20TEST(MediaContentDescriptionTest, SetExtmapAllowMixed) {
21 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020022 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
23 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
24 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020025 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020026 video_desc.extmap_allow_mixed_enum());
27 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
Johannes Kron9ac3c912018-10-12 10:54:26 +020028 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020029 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020030
31 // Not allowed to downgrade from kSession to kMedia.
Johannes Kron9581bc42018-10-23 10:17:39 +020032 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020033 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020034 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020035
36 // Always okay to set not supported.
Johannes Kron9581bc42018-10-23 10:17:39 +020037 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
38 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
39 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020040 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020041 video_desc.extmap_allow_mixed_enum());
42 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
43 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020044}
45
46TEST(MediaContentDescriptionTest, MixedOneTwoByteHeaderSupported) {
47 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020048 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
49 EXPECT_FALSE(video_desc.extmap_allow_mixed());
50 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
51 EXPECT_TRUE(video_desc.extmap_allow_mixed());
52 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
53 EXPECT_TRUE(video_desc.extmap_allow_mixed());
Johannes Kron9ac3c912018-10-12 10:54:26 +020054}
55
56TEST(SessionDescriptionTest, SetExtmapAllowMixed) {
57 SessionDescription session_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020058 session_desc.set_extmap_allow_mixed(true);
59 EXPECT_TRUE(session_desc.extmap_allow_mixed());
60 session_desc.set_extmap_allow_mixed(false);
61 EXPECT_FALSE(session_desc.extmap_allow_mixed());
Johannes Kron9ac3c912018-10-12 10:54:26 +020062}
63
64TEST(SessionDescriptionTest, SetExtmapAllowMixedPropagatesToMediaLevel) {
65 SessionDescription session_desc;
66 MediaContentDescription* video_desc = new VideoContentDescription();
67 session_desc.AddContent("video", MediaProtocolType::kRtp, video_desc);
68
69 // Setting true on session level propagates to media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020070 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +020071 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020072 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020073
74 // Don't downgrade from session level to media level
Johannes Kron9581bc42018-10-23 10:17:39 +020075 video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
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 // Setting false on session level propagates to media level if the current
80 // state is kSession.
Johannes Kron9581bc42018-10-23 10:17:39 +020081 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +020082 EXPECT_EQ(MediaContentDescription::kNo,
Johannes Kron9581bc42018-10-23 10:17:39 +020083 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020084
85 // Now possible to set at media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020086 video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020087 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020088 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020089
90 // Setting false on session level does not override on media level if current
91 // state is kMedia.
Johannes Kron9581bc42018-10-23 10:17:39 +020092 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +020093 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020094 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020095
96 // Setting true on session level overrides setting on media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020097 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +020098 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020099 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200100}
101
102TEST(SessionDescriptionTest, AddContentTransfersExtmapAllowMixedSetting) {
103 SessionDescription session_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +0200104 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200105 MediaContentDescription* audio_desc = new AudioContentDescription();
Johannes Kron9581bc42018-10-23 10:17:39 +0200106 audio_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200107
108 // If session setting is false, media level setting is preserved when new
109 // content is added.
110 session_desc.AddContent("audio", MediaProtocolType::kRtp, audio_desc);
111 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +0200112 audio_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200113
114 // If session setting is true, it's transferred to media level when new
115 // content is added.
Johannes Kron9581bc42018-10-23 10:17:39 +0200116 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200117 MediaContentDescription* video_desc = new VideoContentDescription();
118 session_desc.AddContent("video", MediaProtocolType::kRtp, video_desc);
119 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +0200120 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200121
122 // Session level setting overrides media level when new content is added.
123 MediaContentDescription* data_desc = new DataContentDescription;
Johannes Kron9581bc42018-10-23 10:17:39 +0200124 data_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200125 session_desc.AddContent("data", MediaProtocolType::kRtp, data_desc);
126 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +0200127 data_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200128}
129
130} // namespace cricket