blob: a6ac4478fcd5ae75ba5716c036f90003fe08aa0b [file] [log] [blame]
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:131/*
kjellander65c7f672016-02-12 08:05:012 * Copyright 2011 The WebRTC project authors. All Rights Reserved.
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:133 *
kjellander65c7f672016-02-12 08:05:014 * 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:139 */
henrike@webrtc.org28e20752013-07-10 00:45:3610
Mirko Bonadei92ea95e2017-09-15 04:47:3111#include "pc/rtcpmuxfilter.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3112#include "rtc_base/gunit.h"
henrike@webrtc.org28e20752013-07-10 00:45:3613
henrike@webrtc.org28e20752013-07-10 00:45:3614TEST(RtcpMuxFilterTest, IsActiveSender) {
15 cricket::RtcpMuxFilter filter;
16 // Init state - not active
17 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3018 EXPECT_FALSE(filter.IsProvisionallyActive());
19 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3620 // After sent offer, demux should not be active.
21 filter.SetOffer(true, cricket::CS_LOCAL);
22 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3023 EXPECT_FALSE(filter.IsProvisionallyActive());
24 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3625 // Remote accepted, filter is now active.
26 filter.SetAnswer(true, cricket::CS_REMOTE);
27 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3028 EXPECT_FALSE(filter.IsProvisionallyActive());
29 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3630}
31
32// Test that we can receive provisional answer and final answer.
33TEST(RtcpMuxFilterTest, ReceivePrAnswer) {
34 cricket::RtcpMuxFilter filter;
35 filter.SetOffer(true, cricket::CS_LOCAL);
36 // Received provisional answer with mux enabled.
37 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_REMOTE));
deadbeef23d947d2016-08-22 23:00:3038 // We are now provisionally active since both sender and receiver support mux.
henrike@webrtc.org28e20752013-07-10 00:45:3639 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3040 EXPECT_TRUE(filter.IsProvisionallyActive());
41 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3642 // Received provisional answer with mux disabled.
43 EXPECT_TRUE(filter.SetProvisionalAnswer(false, cricket::CS_REMOTE));
44 // We are now inactive since the receiver doesn't support mux.
45 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3046 EXPECT_FALSE(filter.IsProvisionallyActive());
47 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3648 // Received final answer with mux enabled.
49 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_REMOTE));
50 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3051 EXPECT_FALSE(filter.IsProvisionallyActive());
52 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3653}
54
55TEST(RtcpMuxFilterTest, IsActiveReceiver) {
56 cricket::RtcpMuxFilter filter;
57 // Init state - not active.
58 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3059 EXPECT_FALSE(filter.IsProvisionallyActive());
60 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3661 // After received offer, demux should not be active
62 filter.SetOffer(true, cricket::CS_REMOTE);
63 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3064 EXPECT_FALSE(filter.IsProvisionallyActive());
65 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3666 // We accept, filter is now active
67 filter.SetAnswer(true, cricket::CS_LOCAL);
68 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3069 EXPECT_FALSE(filter.IsProvisionallyActive());
70 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3671}
72
73// Test that we can send provisional answer and final answer.
74TEST(RtcpMuxFilterTest, SendPrAnswer) {
75 cricket::RtcpMuxFilter filter;
76 filter.SetOffer(true, cricket::CS_REMOTE);
77 // Send provisional answer with mux enabled.
78 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_LOCAL));
79 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3080 EXPECT_TRUE(filter.IsProvisionallyActive());
81 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3682 // Received provisional answer with mux disabled.
83 EXPECT_TRUE(filter.SetProvisionalAnswer(false, cricket::CS_LOCAL));
84 EXPECT_FALSE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3085 EXPECT_FALSE(filter.IsProvisionallyActive());
86 EXPECT_FALSE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3687 // Send final answer with mux enabled.
88 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
89 EXPECT_TRUE(filter.IsActive());
deadbeef23d947d2016-08-22 23:00:3090 EXPECT_FALSE(filter.IsProvisionallyActive());
91 EXPECT_TRUE(filter.IsFullyActive());
henrike@webrtc.org28e20752013-07-10 00:45:3692}
93
94// Test that we can enable the filter in an update.
95// We can not disable the filter later since that would mean we need to
96// recreate a rtcp transport channel.
97TEST(RtcpMuxFilterTest, EnableFilterDuringUpdate) {
98 cricket::RtcpMuxFilter filter;
99 EXPECT_FALSE(filter.IsActive());
100 EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE));
101 EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL));
102 EXPECT_FALSE(filter.IsActive());
103
104 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
105 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
106 EXPECT_TRUE(filter.IsActive());
107
108 EXPECT_FALSE(filter.SetOffer(false, cricket::CS_REMOTE));
109 EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_LOCAL));
110 EXPECT_TRUE(filter.IsActive());
111}
112
113// Test that SetOffer can be called twice.
114TEST(RtcpMuxFilterTest, SetOfferTwice) {
115 cricket::RtcpMuxFilter filter;
116
117 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
118 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
119 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
120 EXPECT_TRUE(filter.IsActive());
121
122 cricket::RtcpMuxFilter filter2;
123 EXPECT_TRUE(filter2.SetOffer(false, cricket::CS_LOCAL));
124 EXPECT_TRUE(filter2.SetOffer(false, cricket::CS_LOCAL));
125 EXPECT_TRUE(filter2.SetAnswer(false, cricket::CS_REMOTE));
126 EXPECT_FALSE(filter2.IsActive());
127}
128
129// Test that the filter can be enabled twice.
130TEST(RtcpMuxFilterTest, EnableFilterTwiceDuringUpdate) {
131 cricket::RtcpMuxFilter filter;
132
133 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
134 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
135 EXPECT_TRUE(filter.IsActive());
136
137 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
138 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
139 EXPECT_TRUE(filter.IsActive());
140}
141
142// Test that the filter can be kept disabled during updates.
143TEST(RtcpMuxFilterTest, KeepFilterDisabledDuringUpdate) {
144 cricket::RtcpMuxFilter filter;
145
146 EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE));
147 EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL));
148 EXPECT_FALSE(filter.IsActive());
149
150 EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE));
151 EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL));
152 EXPECT_FALSE(filter.IsActive());
153}
Peter Thatcheraf55ccc2015-05-21 14:48:41154
155// Test that we can SetActive and then can't deactivate.
156TEST(RtcpMuxFilterTest, SetActiveCantDeactivate) {
157 cricket::RtcpMuxFilter filter;
Peter Thatcheraf55ccc2015-05-21 14:48:41158
159 filter.SetActive();
160 EXPECT_TRUE(filter.IsActive());
Peter Thatcheraf55ccc2015-05-21 14:48:41161
162 EXPECT_FALSE(filter.SetOffer(false, cricket::CS_LOCAL));
163 EXPECT_TRUE(filter.IsActive());
164 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_LOCAL));
165 EXPECT_TRUE(filter.IsActive());
166
167 EXPECT_FALSE(filter.SetProvisionalAnswer(false, cricket::CS_REMOTE));
168 EXPECT_TRUE(filter.IsActive());
169 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_REMOTE));
170 EXPECT_TRUE(filter.IsActive());
171
172 EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_REMOTE));
173 EXPECT_TRUE(filter.IsActive());
174 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_REMOTE));
175 EXPECT_TRUE(filter.IsActive());
176
177 EXPECT_FALSE(filter.SetOffer(false, cricket::CS_REMOTE));
178 EXPECT_TRUE(filter.IsActive());
179 EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE));
180 EXPECT_TRUE(filter.IsActive());
181
182 EXPECT_FALSE(filter.SetProvisionalAnswer(false, cricket::CS_LOCAL));
183 EXPECT_TRUE(filter.IsActive());
184 EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_LOCAL));
185 EXPECT_TRUE(filter.IsActive());
186
187 EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_LOCAL));
188 EXPECT_TRUE(filter.IsActive());
189 EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL));
190 EXPECT_TRUE(filter.IsActive());
191}