Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/media/mtransport/test/simpletokenbucket_unittest.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
/* Original author: bcampen@mozilla.com */
8
9
#include "simpletokenbucket.h"
10
11
#define GTEST_HAS_RTTI 0
12
#include "gtest/gtest.h"
13
#include "gtest_utils.h"
14
15
using mozilla::SimpleTokenBucket;
16
17
class TestSimpleTokenBucket : public SimpleTokenBucket {
18
  public:
19
    TestSimpleTokenBucket(size_t bucketSize, size_t tokensPerSecond) :
20
0
      SimpleTokenBucket(bucketSize, tokensPerSecond) {
21
0
    }
22
23
0
    void fastForward(int32_t timeMilliSeconds) {
24
0
      if (timeMilliSeconds >= 0) {
25
0
        last_time_tokens_added_ -= PR_MillisecondsToInterval(timeMilliSeconds);
26
0
      } else {
27
0
        last_time_tokens_added_ += PR_MillisecondsToInterval(-timeMilliSeconds);
28
0
      }
29
0
    }
30
};
31
32
0
TEST(SimpleTokenBucketTest, TestConstruct) {
33
0
  TestSimpleTokenBucket b(10, 1);
34
0
}
35
36
0
TEST(SimpleTokenBucketTest, TestGet) {
37
0
  TestSimpleTokenBucket b(10, 1);
38
0
  ASSERT_EQ(5U, b.getTokens(5));
39
0
}
40
41
0
TEST(SimpleTokenBucketTest, TestGetAll) {
42
0
  TestSimpleTokenBucket b(10, 1);
43
0
  ASSERT_EQ(10U, b.getTokens(10));
44
0
}
45
46
0
TEST(SimpleTokenBucketTest, TestGetInsufficient) {
47
0
  TestSimpleTokenBucket b(10, 1);
48
0
  ASSERT_EQ(5U, b.getTokens(5));
49
0
  ASSERT_EQ(5U, b.getTokens(6));
50
0
}
51
52
0
TEST(SimpleTokenBucketTest, TestGetBucketCount) {
53
0
  TestSimpleTokenBucket b(10, 1);
54
0
  ASSERT_EQ(10U, b.getTokens(UINT32_MAX));
55
0
  ASSERT_EQ(5U, b.getTokens(5));
56
0
  ASSERT_EQ(5U, b.getTokens(UINT32_MAX));
57
0
}
58
59
0
TEST(SimpleTokenBucketTest, TestTokenRefill) {
60
0
  TestSimpleTokenBucket b(10, 1);
61
0
  ASSERT_EQ(5U, b.getTokens(5));
62
0
  b.fastForward(1000);
63
0
  ASSERT_EQ(6U, b.getTokens(6));
64
0
}
65
66
0
TEST(SimpleTokenBucketTest, TestNoTimeWasted) {
67
0
  // Makes sure that when the time elapsed is insufficient to add any
68
0
  // tokens to the bucket, the internal timestamp that is used in this
69
0
  // calculation is not updated (ie; two subsequent 0.5 second elapsed times
70
0
  // counts as a full second)
71
0
  TestSimpleTokenBucket b(10, 1);
72
0
  ASSERT_EQ(5U, b.getTokens(5));
73
0
  b.fastForward(500);
74
0
  ASSERT_EQ(5U, b.getTokens(6));
75
0
  b.fastForward(500);
76
0
  ASSERT_EQ(6U, b.getTokens(6));
77
0
}
78
79
0
TEST(SimpleTokenBucketTest, TestNegativeTime) {
80
0
  TestSimpleTokenBucket b(10, 1);
81
0
  b.fastForward(-1000);
82
0
  // Make sure we don't end up with an invalid number of tokens, but otherwise
83
0
  // permit anything.
84
0
  ASSERT_GT(11U, b.getTokens(100));
85
0
}
86
87
0
TEST(SimpleTokenBucketTest, TestEmptyBucket) {
88
0
  TestSimpleTokenBucket b(10, 1);
89
0
  ASSERT_EQ(10U, b.getTokens(10));
90
0
  ASSERT_EQ(0U, b.getTokens(10));
91
0
}
92
93
0
TEST(SimpleTokenBucketTest, TestEmptyThenFillBucket) {
94
0
  TestSimpleTokenBucket b(10, 1);
95
0
  ASSERT_EQ(10U, b.getTokens(10));
96
0
  ASSERT_EQ(0U, b.getTokens(1));
97
0
  b.fastForward(50000);
98
0
  ASSERT_EQ(10U, b.getTokens(10));
99
0
}
100
101
0
TEST(SimpleTokenBucketTest, TestNoOverflow) {
102
0
  TestSimpleTokenBucket b(10, 1);
103
0
  ASSERT_EQ(10U, b.getTokens(10));
104
0
  ASSERT_EQ(0U, b.getTokens(1));
105
0
  b.fastForward(50000);
106
0
  ASSERT_EQ(10U, b.getTokens(11));
107
0
}