blob: c990cf6d5f568fd5c3e6500c07c6a061567b0dec [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;
Emil Lundmark801c9992021-01-19 13:06:32 +010020 EXPECT_EQ(MediaContentDescription::kMedia,
21 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020022}
23
24TEST(MediaContentDescriptionTest, SetExtmapAllowMixed) {
25 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020026 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
27 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
28 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020029 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020030 video_desc.extmap_allow_mixed_enum());
31 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
Johannes Kron9ac3c912018-10-12 10:54:26 +020032 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020033 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020034
35 // Not allowed to downgrade from kSession to kMedia.
Johannes Kron9581bc42018-10-23 10:17:39 +020036 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020037 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020038 video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020039
40 // Always okay to set not supported.
Johannes Kron9581bc42018-10-23 10:17:39 +020041 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
42 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
43 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020044 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +020045 video_desc.extmap_allow_mixed_enum());
46 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
47 EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020048}
49
50TEST(MediaContentDescriptionTest, MixedOneTwoByteHeaderSupported) {
51 VideoContentDescription video_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020052 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
53 EXPECT_FALSE(video_desc.extmap_allow_mixed());
54 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
55 EXPECT_TRUE(video_desc.extmap_allow_mixed());
56 video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
57 EXPECT_TRUE(video_desc.extmap_allow_mixed());
Johannes Kron9ac3c912018-10-12 10:54:26 +020058}
59
60TEST(SessionDescriptionTest, SetExtmapAllowMixed) {
61 SessionDescription session_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +020062 session_desc.set_extmap_allow_mixed(true);
63 EXPECT_TRUE(session_desc.extmap_allow_mixed());
64 session_desc.set_extmap_allow_mixed(false);
65 EXPECT_FALSE(session_desc.extmap_allow_mixed());
Johannes Kron9ac3c912018-10-12 10:54:26 +020066}
67
68TEST(SessionDescriptionTest, SetExtmapAllowMixedPropagatesToMediaLevel) {
69 SessionDescription session_desc;
Harald Alvestrand1716d392019-06-03 20:35:45 +020070 session_desc.AddContent("video", MediaProtocolType::kRtp,
Mirko Bonadei317a1f02019-09-17 17:06:18 +020071 std::make_unique<VideoContentDescription>());
Harald Alvestrand1716d392019-06-03 20:35:45 +020072 MediaContentDescription* video_desc =
73 session_desc.GetContentDescriptionByName("video");
Johannes Kron9ac3c912018-10-12 10:54:26 +020074
75 // Setting true on session level propagates to media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020076 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +020077 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020078 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020079
80 // Don't downgrade from session level to media level
Johannes Kron9581bc42018-10-23 10:17:39 +020081 video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +020082 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +020083 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020084
85 // Setting false on session level propagates to media level if the current
86 // state is kSession.
Johannes Kron9581bc42018-10-23 10:17:39 +020087 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +020088 EXPECT_EQ(MediaContentDescription::kNo,
Johannes Kron9581bc42018-10-23 10:17:39 +020089 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +020090
91 // Now possible to set at media level.
Johannes Kron9581bc42018-10-23 10:17:39 +020092 video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
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 false on session level does not override on media level if current
97 // state is kMedia.
Johannes Kron9581bc42018-10-23 10:17:39 +020098 session_desc.set_extmap_allow_mixed(false);
Johannes Kron9ac3c912018-10-12 10:54:26 +020099 EXPECT_EQ(MediaContentDescription::kMedia,
Johannes Kron9581bc42018-10-23 10:17:39 +0200100 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200101
102 // Setting true on session level overrides setting on media level.
Johannes Kron9581bc42018-10-23 10:17:39 +0200103 session_desc.set_extmap_allow_mixed(true);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200104 EXPECT_EQ(MediaContentDescription::kSession,
Johannes Kron9581bc42018-10-23 10:17:39 +0200105 video_desc->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200106}
107
108TEST(SessionDescriptionTest, AddContentTransfersExtmapAllowMixedSetting) {
109 SessionDescription session_desc;
Johannes Kron9581bc42018-10-23 10:17:39 +0200110 session_desc.set_extmap_allow_mixed(false);
Harald Alvestrand1716d392019-06-03 20:35:45 +0200111 std::unique_ptr<MediaContentDescription> audio_desc =
Mirko Bonadei317a1f02019-09-17 17:06:18 +0200112 std::make_unique<AudioContentDescription>();
Johannes Kron9581bc42018-10-23 10:17:39 +0200113 audio_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Johannes Kron9ac3c912018-10-12 10:54:26 +0200114
115 // If session setting is false, media level setting is preserved when new
116 // content is added.
Harald Alvestrand1716d392019-06-03 20:35:45 +0200117 session_desc.AddContent("audio", MediaProtocolType::kRtp,
118 std::move(audio_desc));
Johannes Kron9ac3c912018-10-12 10:54:26 +0200119 EXPECT_EQ(MediaContentDescription::kMedia,
Harald Alvestrand1716d392019-06-03 20:35:45 +0200120 session_desc.GetContentDescriptionByName("audio")
121 ->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200122
123 // If session setting is true, it's transferred to media level when new
124 // content is added.
Johannes Kron9581bc42018-10-23 10:17:39 +0200125 session_desc.set_extmap_allow_mixed(true);
Harald Alvestrand1716d392019-06-03 20:35:45 +0200126 std::unique_ptr<MediaContentDescription> video_desc =
Mirko Bonadei317a1f02019-09-17 17:06:18 +0200127 std::make_unique<VideoContentDescription>();
Harald Alvestrand1716d392019-06-03 20:35:45 +0200128 session_desc.AddContent("video", MediaProtocolType::kRtp,
129 std::move(video_desc));
Johannes Kron9ac3c912018-10-12 10:54:26 +0200130 EXPECT_EQ(MediaContentDescription::kSession,
Harald Alvestrand1716d392019-06-03 20:35:45 +0200131 session_desc.GetContentDescriptionByName("video")
132 ->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200133
134 // Session level setting overrides media level when new content is added.
Harald Alvestrand1716d392019-06-03 20:35:45 +0200135 std::unique_ptr<MediaContentDescription> data_desc =
Mirko Bonadei317a1f02019-09-17 17:06:18 +0200136 std::make_unique<RtpDataContentDescription>();
Johannes Kron9581bc42018-10-23 10:17:39 +0200137 data_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
Harald Alvestrand1716d392019-06-03 20:35:45 +0200138 session_desc.AddContent("data", MediaProtocolType::kRtp,
139 std::move(data_desc));
Johannes Kron9ac3c912018-10-12 10:54:26 +0200140 EXPECT_EQ(MediaContentDescription::kSession,
Harald Alvestrand1716d392019-06-03 20:35:45 +0200141 session_desc.GetContentDescriptionByName("data")
142 ->extmap_allow_mixed_enum());
Johannes Kron9ac3c912018-10-12 10:54:26 +0200143}
144
Johannes Kron9ac3c912018-10-12 10:54:26 +0200145} // namespace cricket