blob: 555ab5c4681054c40a71e1dce6c34aa970ce124a [file] [log] [blame]
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +00001/*
kjellander65c7f672016-02-12 00:05:01 -08002 * Copyright 2011 The WebRTC project authors. All Rights Reserved.
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +00003 *
kjellander65c7f672016-02-12 00:05:01 -08004 * 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.
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +00009 */
henrike@webrtc.org28e20752013-07-10 00:45:36 +000010
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "pc/rtcpmuxfilter.h"
12#include "media/base/testutils.h"
13#include "rtc_base/gunit.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000014
henrike@webrtc.org28e20752013-07-10 00:45:36 +000015TEST(RtcpMuxFilterTest, IsActiveSender) {
16 cricket::RtcpMuxFilter filter;
17 // Init state - not active
18 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070019 EXPECT_FALSE(filter.IsProvisionallyActive());
20 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000021 // After sent offer, demux should not be active.
22 filter.SetOffer(true, cricket::CS_LOCAL);
23 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070024 EXPECT_FALSE(filter.IsProvisionallyActive());
25 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026 // Remote accepted, filter is now active.
27 filter.SetAnswer(true, cricket::CS_REMOTE);
28 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070029 EXPECT_FALSE(filter.IsProvisionallyActive());
30 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000031}
32
33// Test that we can receive provisional answer and final answer.
34TEST(RtcpMuxFilterTest, ReceivePrAnswer) {
35 cricket::RtcpMuxFilter filter;
36 filter.SetOffer(true, cricket::CS_LOCAL);
37 // Received provisional answer with mux enabled.
38 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_REMOTE));
deadbeef23d947d2016-08-22 16:00:30 -070039 // We are now provisionally active since both sender and receiver support mux.
henrike@webrtc.org28e20752013-07-10 00:45:36 +000040 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070041 EXPECT_TRUE(filter.IsProvisionallyActive());
42 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000043 // Received provisional answer with mux disabled.
44 EXPECT_TRUE(filter.SetProvisionalAnswer(false, cricket::CS_REMOTE));
45 // We are now inactive since the receiver doesn't support mux.
46 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070047 EXPECT_FALSE(filter.IsProvisionallyActive());
48 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000049 // Received final answer with mux enabled.
50 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_REMOTE));
51 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070052 EXPECT_FALSE(filter.IsProvisionallyActive());
53 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000054}
55
56TEST(RtcpMuxFilterTest, IsActiveReceiver) {
57 cricket::RtcpMuxFilter filter;
58 // Init state - not active.
59 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070060 EXPECT_FALSE(filter.IsProvisionallyActive());
61 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000062 // After received offer, demux should not be active
63 filter.SetOffer(true, cricket::CS_REMOTE);
64 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070065 EXPECT_FALSE(filter.IsProvisionallyActive());
66 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000067 // We accept, filter is now active
68 filter.SetAnswer(true, cricket::CS_LOCAL);
69 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070070 EXPECT_FALSE(filter.IsProvisionallyActive());
71 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000072}
73
74// Test that we can send provisional answer and final answer.
75TEST(RtcpMuxFilterTest, SendPrAnswer) {
76 cricket::RtcpMuxFilter filter;
77 filter.SetOffer(true, cricket::CS_REMOTE);
78 // Send provisional answer with mux enabled.
79 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_LOCAL));
80 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070081 EXPECT_TRUE(filter.IsProvisionallyActive());
82 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000083 // Received provisional answer with mux disabled.
84 EXPECT_TRUE(filter.SetProvisionalAnswer(false, cricket::CS_LOCAL));
85 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070086 EXPECT_FALSE(filter.IsProvisionallyActive());
87 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000088 // Send final answer with mux enabled.
89 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
90 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 16:00:30 -070091 EXPECT_FALSE(filter.IsProvisionallyActive());
92 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000093}
94
95// Test that we can enable the filter in an update.
96// We can not disable the filter later since that would mean we need to
97// recreate a rtcp transport channel.
98TEST(RtcpMuxFilterTest, EnableFilterDuringUpdate) {
99 cricket::RtcpMuxFilter filter;
100 EXPECT_FALSE(filter.IsActive());
101 EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE));
102 EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL));
103 EXPECT_FALSE(filter.IsActive());
104
105 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
106 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
107 EXPECT_TRUE(filter.IsActive());
108
109 EXPECT_FALSE(filter.SetOffer(false, cricket::CS_REMOTE));
110 EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_LOCAL));
111 EXPECT_TRUE(filter.IsActive());
112}
113
114// Test that SetOffer can be called twice.
115TEST(RtcpMuxFilterTest, SetOfferTwice) {
116 cricket::RtcpMuxFilter filter;
117
118 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
119 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
120 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
121 EXPECT_TRUE(filter.IsActive());
122
123 cricket::RtcpMuxFilter filter2;
124 EXPECT_TRUE(filter2.SetOffer(false, cricket::CS_LOCAL));
125 EXPECT_TRUE(filter2.SetOffer(false, cricket::CS_LOCAL));
126 EXPECT_TRUE(filter2.SetAnswer(false, cricket::CS_REMOTE));
127 EXPECT_FALSE(filter2.IsActive());
128}
129
130// Test that the filter can be enabled twice.
131TEST(RtcpMuxFilterTest, EnableFilterTwiceDuringUpdate) {
132 cricket::RtcpMuxFilter filter;
133
134 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
135 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
136 EXPECT_TRUE(filter.IsActive());
137
138 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
139 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
140 EXPECT_TRUE(filter.IsActive());
141}
142
143// Test that the filter can be kept disabled during updates.
144TEST(RtcpMuxFilterTest, KeepFilterDisabledDuringUpdate) {
145 cricket::RtcpMuxFilter filter;
146
147 EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE));
148 EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL));
149 EXPECT_FALSE(filter.IsActive());
150
151 EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE));
152 EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL));
153 EXPECT_FALSE(filter.IsActive());
154}
Peter Thatcheraf55ccc2015-05-21 07:48:41 -0700155
156// Test that we can SetActive and then can't deactivate.
157TEST(RtcpMuxFilterTest, SetActiveCantDeactivate) {
158 cricket::RtcpMuxFilter filter;
Peter Thatcheraf55ccc2015-05-21 07:48:41 -0700159
160 filter.SetActive();
161 EXPECT_TRUE(filter.IsActive());
Peter Thatcheraf55ccc2015-05-21 07:48:41 -0700162
163 EXPECT_FALSE(filter.SetOffer(false, cricket::CS_LOCAL));
164 EXPECT_TRUE(filter.IsActive());
165 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_LOCAL));
166 EXPECT_TRUE(filter.IsActive());
167
168 EXPECT_FALSE(filter.SetProvisionalAnswer(false, cricket::CS_REMOTE));
169 EXPECT_TRUE(filter.IsActive());
170 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_REMOTE));
171 EXPECT_TRUE(filter.IsActive());
172
173 EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_REMOTE));
174 EXPECT_TRUE(filter.IsActive());
175 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_REMOTE));
176 EXPECT_TRUE(filter.IsActive());
177
178 EXPECT_FALSE(filter.SetOffer(false, cricket::CS_REMOTE));
179 EXPECT_TRUE(filter.IsActive());
180 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
181 EXPECT_TRUE(filter.IsActive());
182
183 EXPECT_FALSE(filter.SetProvisionalAnswer(false, cricket::CS_LOCAL));
184 EXPECT_TRUE(filter.IsActive());
185 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_LOCAL));
186 EXPECT_TRUE(filter.IsActive());
187
188 EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_LOCAL));
189 EXPECT_TRUE(filter.IsActive());
190 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
191 EXPECT_TRUE(filter.IsActive());
192}