xref: /aosp_15_r20/external/webrtc/pc/session_description_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker #include "pc/session_description.h"
11*d9f75844SAndroid Build Coastguard Worker 
12*d9f75844SAndroid Build Coastguard Worker #include "test/gtest.h"
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker namespace cricket {
15*d9f75844SAndroid Build Coastguard Worker 
TEST(MediaContentDescriptionTest,ExtmapAllowMixedDefaultValue)16*d9f75844SAndroid Build Coastguard Worker TEST(MediaContentDescriptionTest, ExtmapAllowMixedDefaultValue) {
17*d9f75844SAndroid Build Coastguard Worker   VideoContentDescription video_desc;
18*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kMedia,
19*d9f75844SAndroid Build Coastguard Worker             video_desc.extmap_allow_mixed_enum());
20*d9f75844SAndroid Build Coastguard Worker }
21*d9f75844SAndroid Build Coastguard Worker 
TEST(MediaContentDescriptionTest,SetExtmapAllowMixed)22*d9f75844SAndroid Build Coastguard Worker TEST(MediaContentDescriptionTest, SetExtmapAllowMixed) {
23*d9f75844SAndroid Build Coastguard Worker   VideoContentDescription video_desc;
24*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
25*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
26*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
27*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kMedia,
28*d9f75844SAndroid Build Coastguard Worker             video_desc.extmap_allow_mixed_enum());
29*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
30*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kSession,
31*d9f75844SAndroid Build Coastguard Worker             video_desc.extmap_allow_mixed_enum());
32*d9f75844SAndroid Build Coastguard Worker 
33*d9f75844SAndroid Build Coastguard Worker   // Not allowed to downgrade from kSession to kMedia.
34*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
35*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kSession,
36*d9f75844SAndroid Build Coastguard Worker             video_desc.extmap_allow_mixed_enum());
37*d9f75844SAndroid Build Coastguard Worker 
38*d9f75844SAndroid Build Coastguard Worker   // Always okay to set not supported.
39*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
40*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
41*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
42*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kMedia,
43*d9f75844SAndroid Build Coastguard Worker             video_desc.extmap_allow_mixed_enum());
44*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
45*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kNo, video_desc.extmap_allow_mixed_enum());
46*d9f75844SAndroid Build Coastguard Worker }
47*d9f75844SAndroid Build Coastguard Worker 
TEST(MediaContentDescriptionTest,MixedOneTwoByteHeaderSupported)48*d9f75844SAndroid Build Coastguard Worker TEST(MediaContentDescriptionTest, MixedOneTwoByteHeaderSupported) {
49*d9f75844SAndroid Build Coastguard Worker   VideoContentDescription video_desc;
50*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kNo);
51*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(video_desc.extmap_allow_mixed());
52*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
53*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(video_desc.extmap_allow_mixed());
54*d9f75844SAndroid Build Coastguard Worker   video_desc.set_extmap_allow_mixed_enum(MediaContentDescription::kSession);
55*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(video_desc.extmap_allow_mixed());
56*d9f75844SAndroid Build Coastguard Worker }
57*d9f75844SAndroid Build Coastguard Worker 
TEST(SessionDescriptionTest,SetExtmapAllowMixed)58*d9f75844SAndroid Build Coastguard Worker TEST(SessionDescriptionTest, SetExtmapAllowMixed) {
59*d9f75844SAndroid Build Coastguard Worker   SessionDescription session_desc;
60*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(true);
61*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(session_desc.extmap_allow_mixed());
62*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(false);
63*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(session_desc.extmap_allow_mixed());
64*d9f75844SAndroid Build Coastguard Worker }
65*d9f75844SAndroid Build Coastguard Worker 
TEST(SessionDescriptionTest,SetExtmapAllowMixedPropagatesToMediaLevel)66*d9f75844SAndroid Build Coastguard Worker TEST(SessionDescriptionTest, SetExtmapAllowMixedPropagatesToMediaLevel) {
67*d9f75844SAndroid Build Coastguard Worker   SessionDescription session_desc;
68*d9f75844SAndroid Build Coastguard Worker   session_desc.AddContent("video", MediaProtocolType::kRtp,
69*d9f75844SAndroid Build Coastguard Worker                           std::make_unique<VideoContentDescription>());
70*d9f75844SAndroid Build Coastguard Worker   MediaContentDescription* video_desc =
71*d9f75844SAndroid Build Coastguard Worker       session_desc.GetContentDescriptionByName("video");
72*d9f75844SAndroid Build Coastguard Worker 
73*d9f75844SAndroid Build Coastguard Worker   // Setting true on session level propagates to media level.
74*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(true);
75*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kSession,
76*d9f75844SAndroid Build Coastguard Worker             video_desc->extmap_allow_mixed_enum());
77*d9f75844SAndroid Build Coastguard Worker 
78*d9f75844SAndroid Build Coastguard Worker   // Don't downgrade from session level to media level
79*d9f75844SAndroid Build Coastguard Worker   video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
80*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kSession,
81*d9f75844SAndroid Build Coastguard Worker             video_desc->extmap_allow_mixed_enum());
82*d9f75844SAndroid Build Coastguard Worker 
83*d9f75844SAndroid Build Coastguard Worker   // Setting false on session level propagates to media level if the current
84*d9f75844SAndroid Build Coastguard Worker   // state is kSession.
85*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(false);
86*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kNo,
87*d9f75844SAndroid Build Coastguard Worker             video_desc->extmap_allow_mixed_enum());
88*d9f75844SAndroid Build Coastguard Worker 
89*d9f75844SAndroid Build Coastguard Worker   // Now possible to set at media level.
90*d9f75844SAndroid Build Coastguard Worker   video_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
91*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kMedia,
92*d9f75844SAndroid Build Coastguard Worker             video_desc->extmap_allow_mixed_enum());
93*d9f75844SAndroid Build Coastguard Worker 
94*d9f75844SAndroid Build Coastguard Worker   // Setting false on session level does not override on media level if current
95*d9f75844SAndroid Build Coastguard Worker   // state is kMedia.
96*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(false);
97*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kMedia,
98*d9f75844SAndroid Build Coastguard Worker             video_desc->extmap_allow_mixed_enum());
99*d9f75844SAndroid Build Coastguard Worker 
100*d9f75844SAndroid Build Coastguard Worker   // Setting true on session level overrides setting on media level.
101*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(true);
102*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kSession,
103*d9f75844SAndroid Build Coastguard Worker             video_desc->extmap_allow_mixed_enum());
104*d9f75844SAndroid Build Coastguard Worker }
105*d9f75844SAndroid Build Coastguard Worker 
TEST(SessionDescriptionTest,AddContentTransfersExtmapAllowMixedSetting)106*d9f75844SAndroid Build Coastguard Worker TEST(SessionDescriptionTest, AddContentTransfersExtmapAllowMixedSetting) {
107*d9f75844SAndroid Build Coastguard Worker   SessionDescription session_desc;
108*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(false);
109*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<MediaContentDescription> audio_desc =
110*d9f75844SAndroid Build Coastguard Worker       std::make_unique<AudioContentDescription>();
111*d9f75844SAndroid Build Coastguard Worker   audio_desc->set_extmap_allow_mixed_enum(MediaContentDescription::kMedia);
112*d9f75844SAndroid Build Coastguard Worker 
113*d9f75844SAndroid Build Coastguard Worker   // If session setting is false, media level setting is preserved when new
114*d9f75844SAndroid Build Coastguard Worker   // content is added.
115*d9f75844SAndroid Build Coastguard Worker   session_desc.AddContent("audio", MediaProtocolType::kRtp,
116*d9f75844SAndroid Build Coastguard Worker                           std::move(audio_desc));
117*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kMedia,
118*d9f75844SAndroid Build Coastguard Worker             session_desc.GetContentDescriptionByName("audio")
119*d9f75844SAndroid Build Coastguard Worker                 ->extmap_allow_mixed_enum());
120*d9f75844SAndroid Build Coastguard Worker 
121*d9f75844SAndroid Build Coastguard Worker   // If session setting is true, it's transferred to media level when new
122*d9f75844SAndroid Build Coastguard Worker   // content is added.
123*d9f75844SAndroid Build Coastguard Worker   session_desc.set_extmap_allow_mixed(true);
124*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<MediaContentDescription> video_desc =
125*d9f75844SAndroid Build Coastguard Worker       std::make_unique<VideoContentDescription>();
126*d9f75844SAndroid Build Coastguard Worker   session_desc.AddContent("video", MediaProtocolType::kRtp,
127*d9f75844SAndroid Build Coastguard Worker                           std::move(video_desc));
128*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(MediaContentDescription::kSession,
129*d9f75844SAndroid Build Coastguard Worker             session_desc.GetContentDescriptionByName("video")
130*d9f75844SAndroid Build Coastguard Worker                 ->extmap_allow_mixed_enum());
131*d9f75844SAndroid Build Coastguard Worker }
132*d9f75844SAndroid Build Coastguard Worker 
133*d9f75844SAndroid Build Coastguard Worker }  // namespace cricket
134