Bug: webrtc:342905193 No-Try: True Change-Id: Icc968be43b8830038ea9a1f5f604307220457807 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/361021 Auto-Submit: Florent Castelli <orphis@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Florent Castelli <orphis@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42911}
87 lines
3.0 KiB
C++
87 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2021 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 "net/dcsctp/tx/retransmission_error_counter.h"
|
|
|
|
#include "net/dcsctp/public/dcsctp_options.h"
|
|
#include "rtc_base/gunit.h"
|
|
#include "test/gmock.h"
|
|
|
|
namespace dcsctp {
|
|
namespace {
|
|
|
|
TEST(RetransmissionErrorCounterTest, HasInitialValue) {
|
|
DcSctpOptions options;
|
|
RetransmissionErrorCounter counter("log: ", options);
|
|
EXPECT_EQ(counter.value(), 0);
|
|
}
|
|
|
|
TEST(RetransmissionErrorCounterTest, ReturnsFalseAtMaximumValue) {
|
|
DcSctpOptions options;
|
|
options.max_retransmissions = 5;
|
|
RetransmissionErrorCounter counter("log: ", options);
|
|
EXPECT_TRUE(counter.Increment("test")); // 1
|
|
EXPECT_TRUE(counter.Increment("test")); // 2
|
|
EXPECT_TRUE(counter.Increment("test")); // 3
|
|
EXPECT_TRUE(counter.Increment("test")); // 4
|
|
EXPECT_TRUE(counter.Increment("test")); // 5
|
|
EXPECT_FALSE(counter.Increment("test")); // Too many retransmissions
|
|
}
|
|
|
|
TEST(RetransmissionErrorCounterTest, CanHandleZeroRetransmission) {
|
|
DcSctpOptions options;
|
|
options.max_retransmissions = 0;
|
|
RetransmissionErrorCounter counter("log: ", options);
|
|
EXPECT_FALSE(counter.Increment("test")); // One is too many.
|
|
}
|
|
|
|
TEST(RetransmissionErrorCounterTest, IsExhaustedAtMaximum) {
|
|
DcSctpOptions options;
|
|
options.max_retransmissions = 3;
|
|
RetransmissionErrorCounter counter("log: ", options);
|
|
EXPECT_TRUE(counter.Increment("test")); // 1
|
|
EXPECT_FALSE(counter.IsExhausted());
|
|
EXPECT_TRUE(counter.Increment("test")); // 2
|
|
EXPECT_FALSE(counter.IsExhausted());
|
|
EXPECT_TRUE(counter.Increment("test")); // 3
|
|
EXPECT_FALSE(counter.IsExhausted());
|
|
EXPECT_FALSE(counter.Increment("test")); // Too many retransmissions
|
|
EXPECT_TRUE(counter.IsExhausted());
|
|
EXPECT_FALSE(counter.Increment("test")); // One after too many
|
|
EXPECT_TRUE(counter.IsExhausted());
|
|
}
|
|
|
|
TEST(RetransmissionErrorCounterTest, ClearingCounter) {
|
|
DcSctpOptions options;
|
|
options.max_retransmissions = 3;
|
|
RetransmissionErrorCounter counter("log: ", options);
|
|
EXPECT_TRUE(counter.Increment("test")); // 1
|
|
EXPECT_TRUE(counter.Increment("test")); // 2
|
|
counter.Clear();
|
|
EXPECT_TRUE(counter.Increment("test")); // 1
|
|
EXPECT_TRUE(counter.Increment("test")); // 2
|
|
EXPECT_TRUE(counter.Increment("test")); // 3
|
|
EXPECT_FALSE(counter.IsExhausted());
|
|
EXPECT_FALSE(counter.Increment("test")); // Too many retransmissions
|
|
EXPECT_TRUE(counter.IsExhausted());
|
|
}
|
|
|
|
TEST(RetransmissionErrorCounterTest, CanBeLimitless) {
|
|
DcSctpOptions options;
|
|
options.max_retransmissions = std::nullopt;
|
|
RetransmissionErrorCounter counter("log: ", options);
|
|
for (int i = 0; i < 100; ++i) {
|
|
EXPECT_TRUE(counter.Increment("test"));
|
|
EXPECT_FALSE(counter.IsExhausted());
|
|
}
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace dcsctp
|