root/net/quic/congestion_control/inter_arrival_probe_test.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. start_
  2. TEST_F
  3. TEST_F
  4. TEST_F

// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "net/quic/congestion_control/inter_arrival_probe.h"

#include "base/basictypes.h"
#include "base/logging.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace net {
namespace test {

class InterArrivalProbeTest : public ::testing::Test {
 protected:
  InterArrivalProbeTest()
      : probe_(kDefaultMaxPacketSize),
        start_(QuicTime::Zero()) {
  }

  InterArrivalProbe probe_;
  QuicTime start_;
};

TEST_F(InterArrivalProbeTest, CongestionWindow) {
  for (size_t i = 0; i < 10; i++) {
    probe_.OnPacketSent(kDefaultMaxPacketSize);
    EXPECT_EQ((9 - i) * kDefaultMaxPacketSize,
              probe_.GetAvailableCongestionWindow());
  }
  probe_.OnAcknowledgedPacket(kDefaultMaxPacketSize);
  EXPECT_EQ(kDefaultMaxPacketSize, probe_.GetAvailableCongestionWindow());

  probe_.OnPacketSent(kDefaultMaxPacketSize);
  EXPECT_EQ(0u, probe_.GetAvailableCongestionWindow());
}

TEST_F(InterArrivalProbeTest, Estimate) {
  QuicPacketSequenceNumber sequence_number = 1;
  QuicByteCount bytes_sent = kDefaultMaxPacketSize;
  QuicTime time_received = start_.Add(QuicTime::Delta::FromMilliseconds(10));
  QuicTime time_sent = start_.Add(QuicTime::Delta::FromMilliseconds(1));
  QuicBandwidth available_channel_estimate = QuicBandwidth::Zero();

  for (size_t i = 0; i < 10; ++i) {
    EXPECT_FALSE(probe_.GetEstimate(&available_channel_estimate));

    probe_.OnIncomingFeedback(sequence_number++,
                              bytes_sent,
                              time_sent,
                              time_received);
    time_sent = time_sent.Add(QuicTime::Delta::FromMilliseconds(1));
    time_received = time_received.Add(QuicTime::Delta::FromMilliseconds(10));
  }
  EXPECT_TRUE(probe_.GetEstimate(&available_channel_estimate));
  EXPECT_EQ(kDefaultMaxPacketSize * 100,
            static_cast<uint64>(available_channel_estimate.ToBytesPerSecond()));
}

TEST_F(InterArrivalProbeTest, EstimateWithLoss) {
  QuicPacketSequenceNumber sequence_number = 1;
  QuicByteCount bytes_sent = kDefaultMaxPacketSize;
  QuicTime time_received = start_.Add(QuicTime::Delta::FromMilliseconds(10));
  QuicTime time_sent = start_.Add(QuicTime::Delta::FromMilliseconds(1));
  QuicBandwidth available_channel_estimate = QuicBandwidth::Zero();

  for (size_t i = 0; i < 6; ++i) {
    EXPECT_FALSE(probe_.GetEstimate(&available_channel_estimate));

    probe_.OnIncomingFeedback(sequence_number,
                              bytes_sent,
                              time_sent,
                              time_received);
    sequence_number += 2;
    time_sent = time_sent.Add(QuicTime::Delta::FromMilliseconds(1));
    time_received = time_received.Add(QuicTime::Delta::FromMilliseconds(10));
  }
  EXPECT_TRUE(probe_.GetEstimate(&available_channel_estimate));
  EXPECT_EQ(kDefaultMaxPacketSize * 50,
            static_cast<uint64>(available_channel_estimate.ToBytesPerSecond()));
}

}  // namespace test
}  // namespace net

/* [<][>][^][v][top][bottom][index][help] */