| // Copyright (c) 2019 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/third_party/quiche/src/quic/core/quic_bandwidth.h" | |
| #include "net/third_party/quiche/src/quic/core/quic_time.h" | |
| #include "net/third_party/quiche/src/quic/core/quic_types.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" | |
| #include "net/third_party/quiche/src/quic/quartc/simulated_packet_transport.h" | |
| #include "net/third_party/quiche/src/quic/quartc/test/bidi_test_runner.h" | |
| #include "net/third_party/quiche/src/quic/quartc/test/random_delay_link.h" | |
| #include "net/third_party/quiche/src/quic/quartc/test/random_packet_filter.h" | |
| #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h" | |
| #include "net/third_party/quiche/src/quic/test_tools/simulator/simulator.h" | |
| namespace quic { | |
| namespace test { | |
| namespace { | |
| class QuartcBidiTest : public QuicTest { | |
| protected: | |
| QuartcBidiTest() { | |
| uint64_t seed = QuicRandom::GetInstance()->RandUint64(); | |
| QUIC_LOG(INFO) << "Setting random seed to " << seed; | |
| random_.set_seed(seed); | |
| simulator_.set_random_generator(&random_); | |
| } | |
| void CreateTransports(QuicBandwidth bandwidth, | |
| QuicTime::Delta propagation_delay, | |
| QuicByteCount queue_length, | |
| int loss_percent) { | |
| client_transport_ = | |
| QuicMakeUnique<simulator::SimulatedQuartcPacketTransport>( | |
| &simulator_, "client_transport", "server_transport", queue_length); | |
| server_transport_ = | |
| QuicMakeUnique<simulator::SimulatedQuartcPacketTransport>( | |
| &simulator_, "server_transport", "client_transport", queue_length); | |
| client_filter_ = QuicMakeUnique<simulator::RandomPacketFilter>( | |
| &simulator_, "client_filter", client_transport_.get()); | |
| server_filter_ = QuicMakeUnique<simulator::RandomPacketFilter>( | |
| &simulator_, "server_filter", server_transport_.get()); | |
| client_server_link_ = QuicMakeUnique<simulator::SymmetricRandomDelayLink>( | |
| client_filter_.get(), server_filter_.get(), bandwidth, | |
| propagation_delay); | |
| client_filter_->set_loss_percent(loss_percent); | |
| server_filter_->set_loss_percent(loss_percent); | |
| } | |
| simulator::Simulator simulator_; | |
| SimpleRandom random_; | |
| std::unique_ptr<simulator::SimulatedQuartcPacketTransport> client_transport_; | |
| std::unique_ptr<simulator::SimulatedQuartcPacketTransport> server_transport_; | |
| std::unique_ptr<simulator::RandomPacketFilter> client_filter_; | |
| std::unique_ptr<simulator::RandomPacketFilter> server_filter_; | |
| std::unique_ptr<simulator::SymmetricRandomDelayLink> client_server_link_; | |
| }; | |
| TEST_F(QuartcBidiTest, Basic300kbps200ms) { | |
| CreateTransports(QuicBandwidth::FromKBitsPerSecond(300), | |
| QuicTime::Delta::FromMilliseconds(200), | |
| 10 * kDefaultMaxPacketSize, /*loss_percent=*/0); | |
| BidiTestRunner runner(&simulator_, client_transport_.get(), | |
| server_transport_.get()); | |
| EXPECT_TRUE(runner.RunTest(QuicTime::Delta::FromSeconds(30))); | |
| } | |
| TEST_F(QuartcBidiTest, 300kbps200ms2PercentLoss) { | |
| CreateTransports(QuicBandwidth::FromKBitsPerSecond(300), | |
| QuicTime::Delta::FromMilliseconds(200), | |
| 10 * kDefaultMaxPacketSize, /*loss_percent=*/2); | |
| BidiTestRunner runner(&simulator_, client_transport_.get(), | |
| server_transport_.get()); | |
| EXPECT_TRUE(runner.RunTest(QuicTime::Delta::FromSeconds(30))); | |
| } | |
| TEST_F(QuartcBidiTest, 300kbps200ms25msRandom2PercentLoss) { | |
| CreateTransports(QuicBandwidth::FromKBitsPerSecond(300), | |
| QuicTime::Delta::FromMilliseconds(200), | |
| 10 * kDefaultMaxPacketSize, /*loss_percent=*/2); | |
| client_server_link_->set_median_random_delay( | |
| QuicTime::Delta::FromMilliseconds(25)); | |
| BidiTestRunner runner(&simulator_, client_transport_.get(), | |
| server_transport_.get()); | |
| EXPECT_TRUE(runner.RunTest(QuicTime::Delta::FromSeconds(30))); | |
| } | |
| } // namespace | |
| } // namespace test | |
| } // namespace quic |