• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
3  *
4  *  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.
9  */
10 #include "net/dcsctp/tx/retransmission_error_counter.h"
11 
12 #include "net/dcsctp/public/dcsctp_options.h"
13 #include "rtc_base/gunit.h"
14 #include "test/gmock.h"
15 
16 namespace dcsctp {
17 namespace {
18 
TEST(RetransmissionErrorCounterTest,HasInitialValue)19 TEST(RetransmissionErrorCounterTest, HasInitialValue) {
20   DcSctpOptions options;
21   RetransmissionErrorCounter counter("log: ", options);
22   EXPECT_EQ(counter.value(), 0);
23 }
24 
TEST(RetransmissionErrorCounterTest,ReturnsFalseAtMaximumValue)25 TEST(RetransmissionErrorCounterTest, ReturnsFalseAtMaximumValue) {
26   DcSctpOptions options;
27   options.max_retransmissions = 5;
28   RetransmissionErrorCounter counter("log: ", options);
29   EXPECT_TRUE(counter.Increment("test"));   // 1
30   EXPECT_TRUE(counter.Increment("test"));   // 2
31   EXPECT_TRUE(counter.Increment("test"));   // 3
32   EXPECT_TRUE(counter.Increment("test"));   // 4
33   EXPECT_TRUE(counter.Increment("test"));   // 5
34   EXPECT_FALSE(counter.Increment("test"));  // Too many retransmissions
35 }
36 
TEST(RetransmissionErrorCounterTest,CanHandleZeroRetransmission)37 TEST(RetransmissionErrorCounterTest, CanHandleZeroRetransmission) {
38   DcSctpOptions options;
39   options.max_retransmissions = 0;
40   RetransmissionErrorCounter counter("log: ", options);
41   EXPECT_FALSE(counter.Increment("test"));  // One is too many.
42 }
43 
TEST(RetransmissionErrorCounterTest,IsExhaustedAtMaximum)44 TEST(RetransmissionErrorCounterTest, IsExhaustedAtMaximum) {
45   DcSctpOptions options;
46   options.max_retransmissions = 3;
47   RetransmissionErrorCounter counter("log: ", options);
48   EXPECT_TRUE(counter.Increment("test"));  // 1
49   EXPECT_FALSE(counter.IsExhausted());
50   EXPECT_TRUE(counter.Increment("test"));  // 2
51   EXPECT_FALSE(counter.IsExhausted());
52   EXPECT_TRUE(counter.Increment("test"));  // 3
53   EXPECT_FALSE(counter.IsExhausted());
54   EXPECT_FALSE(counter.Increment("test"));  // Too many retransmissions
55   EXPECT_TRUE(counter.IsExhausted());
56   EXPECT_FALSE(counter.Increment("test"));  // One after too many
57   EXPECT_TRUE(counter.IsExhausted());
58 }
59 
TEST(RetransmissionErrorCounterTest,ClearingCounter)60 TEST(RetransmissionErrorCounterTest, ClearingCounter) {
61   DcSctpOptions options;
62   options.max_retransmissions = 3;
63   RetransmissionErrorCounter counter("log: ", options);
64   EXPECT_TRUE(counter.Increment("test"));  // 1
65   EXPECT_TRUE(counter.Increment("test"));  // 2
66   counter.Clear();
67   EXPECT_TRUE(counter.Increment("test"));  // 1
68   EXPECT_TRUE(counter.Increment("test"));  // 2
69   EXPECT_TRUE(counter.Increment("test"));  // 3
70   EXPECT_FALSE(counter.IsExhausted());
71   EXPECT_FALSE(counter.Increment("test"));  // Too many retransmissions
72   EXPECT_TRUE(counter.IsExhausted());
73 }
74 
TEST(RetransmissionErrorCounterTest,CanBeLimitless)75 TEST(RetransmissionErrorCounterTest, CanBeLimitless) {
76   DcSctpOptions options;
77   options.max_retransmissions = absl::nullopt;
78   RetransmissionErrorCounter counter("log: ", options);
79   for (int i = 0; i < 100; ++i) {
80     EXPECT_TRUE(counter.Increment("test"));
81     EXPECT_FALSE(counter.IsExhausted());
82   }
83 }
84 
85 }  // namespace
86 }  // namespace dcsctp
87