tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

simpletokenbucket_unittest.cpp (3079B)


      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 
     14 using mozilla::SimpleTokenBucket;
     15 
     16 class TestSimpleTokenBucket : public SimpleTokenBucket {
     17 public:
     18  TestSimpleTokenBucket(size_t bucketSize, size_t tokensPerSecond)
     19      : SimpleTokenBucket(bucketSize, tokensPerSecond) {}
     20 
     21  void fastForward(int32_t timeMilliSeconds) {
     22    if (timeMilliSeconds >= 0) {
     23      last_time_tokens_added_ -= PR_MillisecondsToInterval(timeMilliSeconds);
     24    } else {
     25      last_time_tokens_added_ += PR_MillisecondsToInterval(-timeMilliSeconds);
     26    }
     27  }
     28 };
     29 
     30 TEST(SimpleTokenBucketTest, TestConstruct)
     31 {
     32  TestSimpleTokenBucket b(10, 1);
     33 }
     34 
     35 TEST(SimpleTokenBucketTest, TestGet)
     36 {
     37  TestSimpleTokenBucket b(10, 1);
     38  ASSERT_EQ(5U, b.getTokens(5));
     39 }
     40 
     41 TEST(SimpleTokenBucketTest, TestGetAll)
     42 {
     43  TestSimpleTokenBucket b(10, 1);
     44  ASSERT_EQ(10U, b.getTokens(10));
     45 }
     46 
     47 TEST(SimpleTokenBucketTest, TestGetInsufficient)
     48 {
     49  TestSimpleTokenBucket b(10, 1);
     50  ASSERT_EQ(5U, b.getTokens(5));
     51  ASSERT_EQ(5U, b.getTokens(6));
     52 }
     53 
     54 TEST(SimpleTokenBucketTest, TestGetBucketCount)
     55 {
     56  TestSimpleTokenBucket b(10, 1);
     57  ASSERT_EQ(10U, b.getTokens(UINT32_MAX));
     58  ASSERT_EQ(5U, b.getTokens(5));
     59  ASSERT_EQ(5U, b.getTokens(UINT32_MAX));
     60 }
     61 
     62 TEST(SimpleTokenBucketTest, TestTokenRefill)
     63 {
     64  TestSimpleTokenBucket b(10, 1);
     65  ASSERT_EQ(5U, b.getTokens(5));
     66  b.fastForward(1000);
     67  ASSERT_EQ(6U, b.getTokens(6));
     68 }
     69 
     70 TEST(SimpleTokenBucketTest, TestNoTimeWasted)
     71 {
     72  // Makes sure that when the time elapsed is insufficient to add any
     73  // tokens to the bucket, the internal timestamp that is used in this
     74  // calculation is not updated (ie; two subsequent 0.5 second elapsed times
     75  // counts as a full second)
     76  TestSimpleTokenBucket b(10, 1);
     77  ASSERT_EQ(5U, b.getTokens(5));
     78  b.fastForward(500);
     79  ASSERT_EQ(5U, b.getTokens(6));
     80  b.fastForward(500);
     81  ASSERT_EQ(6U, b.getTokens(6));
     82 }
     83 
     84 TEST(SimpleTokenBucketTest, TestNegativeTime)
     85 {
     86  TestSimpleTokenBucket b(10, 1);
     87  b.fastForward(-1000);
     88  // Make sure we don't end up with an invalid number of tokens, but otherwise
     89  // permit anything.
     90  ASSERT_GT(11U, b.getTokens(100));
     91 }
     92 
     93 TEST(SimpleTokenBucketTest, TestEmptyBucket)
     94 {
     95  TestSimpleTokenBucket b(10, 1);
     96  ASSERT_EQ(10U, b.getTokens(10));
     97  ASSERT_EQ(0U, b.getTokens(10));
     98 }
     99 
    100 TEST(SimpleTokenBucketTest, TestEmptyThenFillBucket)
    101 {
    102  TestSimpleTokenBucket b(10, 1);
    103  ASSERT_EQ(10U, b.getTokens(10));
    104  ASSERT_EQ(0U, b.getTokens(1));
    105  b.fastForward(50000);
    106  ASSERT_EQ(10U, b.getTokens(10));
    107 }
    108 
    109 TEST(SimpleTokenBucketTest, TestNoOverflow)
    110 {
    111  TestSimpleTokenBucket b(10, 1);
    112  ASSERT_EQ(10U, b.getTokens(10));
    113  ASSERT_EQ(0U, b.getTokens(1));
    114  b.fastForward(50000);
    115  ASSERT_EQ(10U, b.getTokens(11));
    116 }