diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /third_party/libwebrtc/pc/rtcp_mux_filter_unittest.cc | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/pc/rtcp_mux_filter_unittest.cc')
-rw-r--r-- | third_party/libwebrtc/pc/rtcp_mux_filter_unittest.cc | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/third_party/libwebrtc/pc/rtcp_mux_filter_unittest.cc b/third_party/libwebrtc/pc/rtcp_mux_filter_unittest.cc new file mode 100644 index 0000000000..586da23df8 --- /dev/null +++ b/third_party/libwebrtc/pc/rtcp_mux_filter_unittest.cc @@ -0,0 +1,192 @@ +/* + * Copyright 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "pc/rtcp_mux_filter.h" + +#include "test/gtest.h" + +TEST(RtcpMuxFilterTest, IsActiveSender) { + cricket::RtcpMuxFilter filter; + // Init state - not active + EXPECT_FALSE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // After sent offer, demux should not be active. + filter.SetOffer(true, cricket::CS_LOCAL); + EXPECT_FALSE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // Remote accepted, filter is now active. + filter.SetAnswer(true, cricket::CS_REMOTE); + EXPECT_TRUE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_TRUE(filter.IsFullyActive()); +} + +// Test that we can receive provisional answer and final answer. +TEST(RtcpMuxFilterTest, ReceivePrAnswer) { + cricket::RtcpMuxFilter filter; + filter.SetOffer(true, cricket::CS_LOCAL); + // Received provisional answer with mux enabled. + EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_REMOTE)); + // We are now provisionally active since both sender and receiver support mux. + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // Received provisional answer with mux disabled. + EXPECT_TRUE(filter.SetProvisionalAnswer(false, cricket::CS_REMOTE)); + // We are now inactive since the receiver doesn't support mux. + EXPECT_FALSE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // Received final answer with mux enabled. + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_TRUE(filter.IsFullyActive()); +} + +TEST(RtcpMuxFilterTest, IsActiveReceiver) { + cricket::RtcpMuxFilter filter; + // Init state - not active. + EXPECT_FALSE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // After received offer, demux should not be active + filter.SetOffer(true, cricket::CS_REMOTE); + EXPECT_FALSE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // We accept, filter is now active + filter.SetAnswer(true, cricket::CS_LOCAL); + EXPECT_TRUE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_TRUE(filter.IsFullyActive()); +} + +// Test that we can send provisional answer and final answer. +TEST(RtcpMuxFilterTest, SendPrAnswer) { + cricket::RtcpMuxFilter filter; + filter.SetOffer(true, cricket::CS_REMOTE); + // Send provisional answer with mux enabled. + EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // Received provisional answer with mux disabled. + EXPECT_TRUE(filter.SetProvisionalAnswer(false, cricket::CS_LOCAL)); + EXPECT_FALSE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_FALSE(filter.IsFullyActive()); + // Send final answer with mux enabled. + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_FALSE(filter.IsProvisionallyActive()); + EXPECT_TRUE(filter.IsFullyActive()); +} + +// Test that we can enable the filter in an update. +// We can not disable the filter later since that would mean we need to +// recreate a rtcp transport channel. +TEST(RtcpMuxFilterTest, EnableFilterDuringUpdate) { + cricket::RtcpMuxFilter filter; + EXPECT_FALSE(filter.IsActive()); + EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL)); + EXPECT_FALSE(filter.IsActive()); + + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetOffer(false, cricket::CS_REMOTE)); + EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); +} + +// Test that SetOffer can be called twice. +TEST(RtcpMuxFilterTest, SetOfferTwice) { + cricket::RtcpMuxFilter filter; + + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + + cricket::RtcpMuxFilter filter2; + EXPECT_TRUE(filter2.SetOffer(false, cricket::CS_LOCAL)); + EXPECT_TRUE(filter2.SetOffer(false, cricket::CS_LOCAL)); + EXPECT_TRUE(filter2.SetAnswer(false, cricket::CS_REMOTE)); + EXPECT_FALSE(filter2.IsActive()); +} + +// Test that the filter can be enabled twice. +TEST(RtcpMuxFilterTest, EnableFilterTwiceDuringUpdate) { + cricket::RtcpMuxFilter filter; + + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); +} + +// Test that the filter can be kept disabled during updates. +TEST(RtcpMuxFilterTest, KeepFilterDisabledDuringUpdate) { + cricket::RtcpMuxFilter filter; + + EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL)); + EXPECT_FALSE(filter.IsActive()); + + EXPECT_TRUE(filter.SetOffer(false, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.SetAnswer(false, cricket::CS_LOCAL)); + EXPECT_FALSE(filter.IsActive()); +} + +// Test that we can SetActive and then can't deactivate. +TEST(RtcpMuxFilterTest, SetActiveCantDeactivate) { + cricket::RtcpMuxFilter filter; + + filter.SetActive(); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetOffer(false, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetProvisionalAnswer(false, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetOffer(false, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.SetOffer(true, cricket::CS_REMOTE)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetProvisionalAnswer(false, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.SetProvisionalAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + + EXPECT_FALSE(filter.SetAnswer(false, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); + EXPECT_TRUE(filter.SetAnswer(true, cricket::CS_LOCAL)); + EXPECT_TRUE(filter.IsActive()); +} |