Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1161)

Side by Side Diff: net/quic/test_tools/simulator/simulator_test.cc

Issue 2848203002: Add a platform implementation of QuicTest and QuicTestWithParam (Closed)
Patch Set: net/quic/platform/impl/quic_test_impl.cc Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/test_tools/simulator/simulator.h" 5 #include "net/quic/test_tools/simulator/simulator.h"
6 6
7 #include "net/quic/platform/api/quic_logging.h" 7 #include "net/quic/platform/api/quic_logging.h"
8 #include "net/quic/platform/api/quic_ptr_util.h" 8 #include "net/quic/platform/api/quic_ptr_util.h"
9 #include "net/quic/platform/api/quic_test.h"
9 #include "net/quic/test_tools/quic_test_utils.h" 10 #include "net/quic/test_tools/quic_test_utils.h"
10 #include "net/quic/test_tools/simulator/alarm_factory.h" 11 #include "net/quic/test_tools/simulator/alarm_factory.h"
11 #include "net/quic/test_tools/simulator/link.h" 12 #include "net/quic/test_tools/simulator/link.h"
12 #include "net/quic/test_tools/simulator/packet_filter.h" 13 #include "net/quic/test_tools/simulator/packet_filter.h"
13 #include "net/quic/test_tools/simulator/queue.h" 14 #include "net/quic/test_tools/simulator/queue.h"
14 #include "net/quic/test_tools/simulator/switch.h" 15 #include "net/quic/test_tools/simulator/switch.h"
15 #include "net/quic/test_tools/simulator/traffic_policer.h" 16 #include "net/quic/test_tools/simulator/traffic_policer.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 17
19 using std::string; 18 using std::string;
20 using testing::_; 19 using testing::_;
21 using testing::Return; 20 using testing::Return;
22 using testing::StrictMock; 21 using testing::StrictMock;
23 22
24 namespace net { 23 namespace net {
25 namespace simulator { 24 namespace simulator {
26 25
27 // A simple counter that increments its value by 1 every specified period. 26 // A simple counter that increments its value by 1 every specified period.
(...skipping 12 matching lines...) Expand all
40 QUIC_DVLOG(1) << name_ << " has value " << value_ << " at time " 39 QUIC_DVLOG(1) << name_ << " has value " << value_ << " at time "
41 << clock_->Now().ToDebuggingValue(); 40 << clock_->Now().ToDebuggingValue();
42 Schedule(clock_->Now() + period_); 41 Schedule(clock_->Now() + period_);
43 } 42 }
44 43
45 private: 44 private:
46 int value_; 45 int value_;
47 QuicTime::Delta period_; 46 QuicTime::Delta period_;
48 }; 47 };
49 48
49 class SimulatorTest : public QuicTest {};
50
50 // Test that the basic event handling works. 51 // Test that the basic event handling works.
51 TEST(SimulatorTest, Counters) { 52 TEST_F(SimulatorTest, Counters) {
52 Simulator simulator; 53 Simulator simulator;
53 Counter fast_counter(&simulator, "fast_counter", 54 Counter fast_counter(&simulator, "fast_counter",
54 QuicTime::Delta::FromSeconds(3)); 55 QuicTime::Delta::FromSeconds(3));
55 Counter slow_counter(&simulator, "slow_counter", 56 Counter slow_counter(&simulator, "slow_counter",
56 QuicTime::Delta::FromSeconds(10)); 57 QuicTime::Delta::FromSeconds(10));
57 58
58 simulator.RunUntil( 59 simulator.RunUntil(
59 [&slow_counter]() { return slow_counter.get_value() >= 10; }); 60 [&slow_counter]() { return slow_counter.get_value() >= 10; });
60 61
61 EXPECT_EQ(10, slow_counter.get_value()); 62 EXPECT_EQ(10, slow_counter.get_value());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 156
156 ConstrainedPortInterface* tx_port_; 157 ConstrainedPortInterface* tx_port_;
157 CounterPort rx_port_; 158 CounterPort rx_port_;
158 159
159 QuicByteCount bytes_transmitted_; 160 QuicByteCount bytes_transmitted_;
160 QuicPacketCount packets_transmitted_; 161 QuicPacketCount packets_transmitted_;
161 }; 162 };
162 163
163 // Saturate a symmetric link and verify that the number of packets sent and 164 // Saturate a symmetric link and verify that the number of packets sent and
164 // received is correct. 165 // received is correct.
165 TEST(SimulatorTest, DirectLinkSaturation) { 166 TEST_F(SimulatorTest, DirectLinkSaturation) {
166 Simulator simulator; 167 Simulator simulator;
167 LinkSaturator saturator_a(&simulator, "Saturator A", 1000, "Saturator B"); 168 LinkSaturator saturator_a(&simulator, "Saturator A", 1000, "Saturator B");
168 LinkSaturator saturator_b(&simulator, "Saturator B", 100, "Saturator A"); 169 LinkSaturator saturator_b(&simulator, "Saturator B", 100, "Saturator A");
169 SymmetricLink link(&saturator_a, &saturator_b, 170 SymmetricLink link(&saturator_a, &saturator_b,
170 QuicBandwidth::FromKBytesPerSecond(1000), 171 QuicBandwidth::FromKBytesPerSecond(1000),
171 QuicTime::Delta::FromMilliseconds(100) + 172 QuicTime::Delta::FromMilliseconds(100) +
172 QuicTime::Delta::FromMicroseconds(1)); 173 QuicTime::Delta::FromMicroseconds(1));
173 174
174 const QuicTime start_time = simulator.GetClock()->Now(); 175 const QuicTime start_time = simulator.GetClock()->Now();
175 const QuicTime after_first_50_ms = 176 const QuicTime after_first_50_ms =
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 return QuicTime::Delta::Zero(); 234 return QuicTime::Delta::Zero();
234 } 235 }
235 236
236 std::vector<std::unique_ptr<Packet>>* packets() { return &packets_; } 237 std::vector<std::unique_ptr<Packet>>* packets() { return &packets_; }
237 238
238 private: 239 private:
239 std::vector<std::unique_ptr<Packet>> packets_; 240 std::vector<std::unique_ptr<Packet>> packets_;
240 }; 241 };
241 242
242 // Ensure the queue behaves correctly with accepting packets. 243 // Ensure the queue behaves correctly with accepting packets.
243 TEST(SimulatorTest, Queue) { 244 TEST_F(SimulatorTest, Queue) {
244 Simulator simulator; 245 Simulator simulator;
245 Queue queue(&simulator, "Queue", 1000); 246 Queue queue(&simulator, "Queue", 1000);
246 PacketAcceptor acceptor; 247 PacketAcceptor acceptor;
247 queue.set_tx_port(&acceptor); 248 queue.set_tx_port(&acceptor);
248 249
249 EXPECT_EQ(0u, queue.bytes_queued()); 250 EXPECT_EQ(0u, queue.bytes_queued());
250 EXPECT_EQ(0u, queue.packets_queued()); 251 EXPECT_EQ(0u, queue.packets_queued());
251 EXPECT_EQ(0u, acceptor.packets()->size()); 252 EXPECT_EQ(0u, acceptor.packets()->size());
252 253
253 auto first_packet = QuicMakeUnique<Packet>(); 254 auto first_packet = QuicMakeUnique<Packet>();
(...skipping 22 matching lines...) Expand all
276 simulator.RunUntil([]() { return false; }); 277 simulator.RunUntil([]() { return false; });
277 EXPECT_EQ(0u, queue.bytes_queued()); 278 EXPECT_EQ(0u, queue.bytes_queued());
278 EXPECT_EQ(0u, queue.packets_queued()); 279 EXPECT_EQ(0u, queue.packets_queued());
279 ASSERT_EQ(2u, acceptor.packets()->size()); 280 ASSERT_EQ(2u, acceptor.packets()->size());
280 EXPECT_EQ(600u, acceptor.packets()->at(0)->size); 281 EXPECT_EQ(600u, acceptor.packets()->at(0)->size);
281 EXPECT_EQ(400u, acceptor.packets()->at(1)->size); 282 EXPECT_EQ(400u, acceptor.packets()->at(1)->size);
282 } 283 }
283 284
284 // Simulate a situation where the bottleneck link is 10 times slower than the 285 // Simulate a situation where the bottleneck link is 10 times slower than the
285 // uplink, and they are separated by a queue. 286 // uplink, and they are separated by a queue.
286 TEST(SimulatorTest, QueueBottleneck) { 287 TEST_F(SimulatorTest, QueueBottleneck) {
287 const QuicBandwidth local_bandwidth = 288 const QuicBandwidth local_bandwidth =
288 QuicBandwidth::FromKBytesPerSecond(1000); 289 QuicBandwidth::FromKBytesPerSecond(1000);
289 const QuicBandwidth bottleneck_bandwidth = 0.1f * local_bandwidth; 290 const QuicBandwidth bottleneck_bandwidth = 0.1f * local_bandwidth;
290 const QuicTime::Delta local_propagation_delay = 291 const QuicTime::Delta local_propagation_delay =
291 QuicTime::Delta::FromMilliseconds(1); 292 QuicTime::Delta::FromMilliseconds(1);
292 const QuicTime::Delta bottleneck_propagation_delay = 293 const QuicTime::Delta bottleneck_propagation_delay =
293 QuicTime::Delta::FromMilliseconds(20); 294 QuicTime::Delta::FromMilliseconds(20);
294 const QuicByteCount bdp = 295 const QuicByteCount bdp =
295 bottleneck_bandwidth * 296 bottleneck_bandwidth *
296 (local_propagation_delay + bottleneck_propagation_delay); 297 (local_propagation_delay + bottleneck_propagation_delay);
(...skipping 16 matching lines...) Expand all
313 simulator.RunUntil( 314 simulator.RunUntil(
314 [&counter]() { return counter.packets() == packets_received; }); 315 [&counter]() { return counter.packets() == packets_received; });
315 const double loss_ratio = 316 const double loss_ratio =
316 1 - 317 1 -
317 static_cast<double>(packets_received) / saturator.packets_transmitted(); 318 static_cast<double>(packets_received) / saturator.packets_transmitted();
318 EXPECT_NEAR(loss_ratio, 0.9, 0.001); 319 EXPECT_NEAR(loss_ratio, 0.9, 0.001);
319 } 320 }
320 321
321 // Verify that the queue of exactly one packet allows the transmission to 322 // Verify that the queue of exactly one packet allows the transmission to
322 // actually go through. 323 // actually go through.
323 TEST(SimulatorTest, OnePacketQueue) { 324 TEST_F(SimulatorTest, OnePacketQueue) {
324 const QuicBandwidth local_bandwidth = 325 const QuicBandwidth local_bandwidth =
325 QuicBandwidth::FromKBytesPerSecond(1000); 326 QuicBandwidth::FromKBytesPerSecond(1000);
326 const QuicBandwidth bottleneck_bandwidth = 0.1f * local_bandwidth; 327 const QuicBandwidth bottleneck_bandwidth = 0.1f * local_bandwidth;
327 const QuicTime::Delta local_propagation_delay = 328 const QuicTime::Delta local_propagation_delay =
328 QuicTime::Delta::FromMilliseconds(1); 329 QuicTime::Delta::FromMilliseconds(1);
329 const QuicTime::Delta bottleneck_propagation_delay = 330 const QuicTime::Delta bottleneck_propagation_delay =
330 QuicTime::Delta::FromMilliseconds(20); 331 QuicTime::Delta::FromMilliseconds(20);
331 332
332 Simulator simulator; 333 Simulator simulator;
333 LinkSaturator saturator(&simulator, "Saturator", 1000, "Counter"); 334 LinkSaturator saturator(&simulator, "Saturator", 1000, "Counter");
(...skipping 15 matching lines...) Expand all
349 simulator.GetClock()->Now() + QuicTime::Delta::FromSeconds(10); 350 simulator.GetClock()->Now() + QuicTime::Delta::FromSeconds(10);
350 simulator.RunUntil([&simulator, &counter, deadline]() { 351 simulator.RunUntil([&simulator, &counter, deadline]() {
351 return counter.packets() == packets_received || 352 return counter.packets() == packets_received ||
352 simulator.GetClock()->Now() > deadline; 353 simulator.GetClock()->Now() > deadline;
353 }); 354 });
354 ASSERT_EQ(packets_received, counter.packets()); 355 ASSERT_EQ(packets_received, counter.packets());
355 } 356 }
356 357
357 // Simulate a network where three endpoints are connected to a switch and they 358 // Simulate a network where three endpoints are connected to a switch and they
358 // are sending traffic in circle (1 -> 2, 2 -> 3, 3 -> 1). 359 // are sending traffic in circle (1 -> 2, 2 -> 3, 3 -> 1).
359 TEST(SimulatorTest, SwitchedNetwork) { 360 TEST_F(SimulatorTest, SwitchedNetwork) {
360 const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(10000); 361 const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(10000);
361 const QuicTime::Delta base_propagation_delay = 362 const QuicTime::Delta base_propagation_delay =
362 QuicTime::Delta::FromMilliseconds(50); 363 QuicTime::Delta::FromMilliseconds(50);
363 364
364 Simulator simulator; 365 Simulator simulator;
365 LinkSaturator saturator1(&simulator, "Saturator 1", 1000, "Saturator 2"); 366 LinkSaturator saturator1(&simulator, "Saturator 1", 1000, "Saturator 2");
366 LinkSaturator saturator2(&simulator, "Saturator 2", 1000, "Saturator 3"); 367 LinkSaturator saturator2(&simulator, "Saturator 2", 1000, "Saturator 3");
367 LinkSaturator saturator3(&simulator, "Saturator 3", 1000, "Saturator 1"); 368 LinkSaturator saturator3(&simulator, "Saturator 3", 1000, "Saturator 1");
368 Switch network_switch(&simulator, "Switch", 8, 369 Switch network_switch(&simulator, "Switch", 8,
369 bandwidth * base_propagation_delay * 10); 370 bandwidth * base_propagation_delay * 10);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 explicit CounterDelegate(size_t* counter) : counter_(counter) {} 475 explicit CounterDelegate(size_t* counter) : counter_(counter) {}
475 476
476 void OnAlarm() override { *counter_ += 1; } 477 void OnAlarm() override { *counter_ += 1; }
477 478
478 private: 479 private:
479 size_t* counter_; 480 size_t* counter_;
480 }; 481 };
481 482
482 // Verifies that the alarms work correctly, even when they are repeatedly 483 // Verifies that the alarms work correctly, even when they are repeatedly
483 // toggled. 484 // toggled.
484 TEST(SimulatorTest, Alarms) { 485 TEST_F(SimulatorTest, Alarms) {
485 Simulator simulator; 486 Simulator simulator;
486 QuicAlarmFactory* alarm_factory = simulator.GetAlarmFactory(); 487 QuicAlarmFactory* alarm_factory = simulator.GetAlarmFactory();
487 488
488 size_t fast_alarm_counter = 0; 489 size_t fast_alarm_counter = 0;
489 size_t slow_alarm_counter = 0; 490 size_t slow_alarm_counter = 0;
490 std::unique_ptr<QuicAlarm> alarm_fast( 491 std::unique_ptr<QuicAlarm> alarm_fast(
491 alarm_factory->CreateAlarm(new CounterDelegate(&fast_alarm_counter))); 492 alarm_factory->CreateAlarm(new CounterDelegate(&fast_alarm_counter)));
492 std::unique_ptr<QuicAlarm> alarm_slow( 493 std::unique_ptr<QuicAlarm> alarm_slow(
493 alarm_factory->CreateAlarm(new CounterDelegate(&slow_alarm_counter))); 494 alarm_factory->CreateAlarm(new CounterDelegate(&slow_alarm_counter)));
494 495
495 const QuicTime start_time = simulator.GetClock()->Now(); 496 const QuicTime start_time = simulator.GetClock()->Now();
496 alarm_fast->Set(start_time + QuicTime::Delta::FromMilliseconds(100)); 497 alarm_fast->Set(start_time + QuicTime::Delta::FromMilliseconds(100));
497 alarm_slow->Set(start_time + QuicTime::Delta::FromMilliseconds(750)); 498 alarm_slow->Set(start_time + QuicTime::Delta::FromMilliseconds(750));
498 AlarmToggler toggler(&simulator, "Toggler", alarm_slow.get(), 499 AlarmToggler toggler(&simulator, "Toggler", alarm_slow.get(),
499 QuicTime::Delta::FromMilliseconds(100)); 500 QuicTime::Delta::FromMilliseconds(100));
500 501
501 const QuicTime end_time = 502 const QuicTime end_time =
502 start_time + QuicTime::Delta::FromMilliseconds(1000); 503 start_time + QuicTime::Delta::FromMilliseconds(1000);
503 EXPECT_FALSE(simulator.RunUntil([&simulator, end_time]() { 504 EXPECT_FALSE(simulator.RunUntil([&simulator, end_time]() {
504 return simulator.GetClock()->Now() >= end_time; 505 return simulator.GetClock()->Now() >= end_time;
505 })); 506 }));
506 EXPECT_EQ(1u, slow_alarm_counter); 507 EXPECT_EQ(1u, slow_alarm_counter);
507 EXPECT_EQ(1u, fast_alarm_counter); 508 EXPECT_EQ(1u, fast_alarm_counter);
508 509
509 EXPECT_EQ(4, toggler.times_set()); 510 EXPECT_EQ(4, toggler.times_set());
510 EXPECT_EQ(4, toggler.times_cancelled()); 511 EXPECT_EQ(4, toggler.times_cancelled());
511 } 512 }
512 513
513 // Verifies that a cancelled alarm is never fired. 514 // Verifies that a cancelled alarm is never fired.
514 TEST(SimulatorTest, AlarmCancelling) { 515 TEST_F(SimulatorTest, AlarmCancelling) {
515 Simulator simulator; 516 Simulator simulator;
516 QuicAlarmFactory* alarm_factory = simulator.GetAlarmFactory(); 517 QuicAlarmFactory* alarm_factory = simulator.GetAlarmFactory();
517 518
518 size_t alarm_counter = 0; 519 size_t alarm_counter = 0;
519 std::unique_ptr<QuicAlarm> alarm( 520 std::unique_ptr<QuicAlarm> alarm(
520 alarm_factory->CreateAlarm(new CounterDelegate(&alarm_counter))); 521 alarm_factory->CreateAlarm(new CounterDelegate(&alarm_counter)));
521 522
522 const QuicTime start_time = simulator.GetClock()->Now(); 523 const QuicTime start_time = simulator.GetClock()->Now();
523 const QuicTime alarm_at = start_time + QuicTime::Delta::FromMilliseconds(300); 524 const QuicTime alarm_at = start_time + QuicTime::Delta::FromMilliseconds(300);
524 const QuicTime end_time = start_time + QuicTime::Delta::FromMilliseconds(400); 525 const QuicTime end_time = start_time + QuicTime::Delta::FromMilliseconds(400);
525 526
526 alarm->Set(alarm_at); 527 alarm->Set(alarm_at);
527 alarm->Cancel(); 528 alarm->Cancel();
528 EXPECT_FALSE(alarm->IsSet()); 529 EXPECT_FALSE(alarm->IsSet());
529 530
530 EXPECT_FALSE(simulator.RunUntil([&simulator, end_time]() { 531 EXPECT_FALSE(simulator.RunUntil([&simulator, end_time]() {
531 return simulator.GetClock()->Now() >= end_time; 532 return simulator.GetClock()->Now() >= end_time;
532 })); 533 }));
533 534
534 EXPECT_FALSE(alarm->IsSet()); 535 EXPECT_FALSE(alarm->IsSet());
535 EXPECT_EQ(0u, alarm_counter); 536 EXPECT_EQ(0u, alarm_counter);
536 } 537 }
537 538
538 // Tests Simulator::RunUntilOrTimeout() interface. 539 // Tests Simulator::RunUntilOrTimeout() interface.
539 TEST(SimulatorTest, RunUntilOrTimeout) { 540 TEST_F(SimulatorTest, RunUntilOrTimeout) {
540 Simulator simulator; 541 Simulator simulator;
541 bool simulation_result; 542 bool simulation_result;
542 543
543 // Count the number of seconds since the beginning of the simulation. 544 // Count the number of seconds since the beginning of the simulation.
544 Counter counter(&simulator, "counter", QuicTime::Delta::FromSeconds(1)); 545 Counter counter(&simulator, "counter", QuicTime::Delta::FromSeconds(1));
545 546
546 // Ensure that the counter reaches the value of 10 given a 20 second deadline. 547 // Ensure that the counter reaches the value of 10 given a 20 second deadline.
547 simulation_result = simulator.RunUntilOrTimeout( 548 simulation_result = simulator.RunUntilOrTimeout(
548 [&counter]() { return counter.get_value() == 10; }, 549 [&counter]() { return counter.get_value() == 10; },
549 QuicTime::Delta::FromSeconds(20)); 550 QuicTime::Delta::FromSeconds(20));
550 ASSERT_TRUE(simulation_result); 551 ASSERT_TRUE(simulation_result);
551 552
552 // Ensure that the counter will not reach the value of 100 given that the 553 // Ensure that the counter will not reach the value of 100 given that the
553 // starting value is 10 and the deadline is 20 seconds. 554 // starting value is 10 and the deadline is 20 seconds.
554 simulation_result = simulator.RunUntilOrTimeout( 555 simulation_result = simulator.RunUntilOrTimeout(
555 [&counter]() { return counter.get_value() == 100; }, 556 [&counter]() { return counter.get_value() == 100; },
556 QuicTime::Delta::FromSeconds(20)); 557 QuicTime::Delta::FromSeconds(20));
557 ASSERT_FALSE(simulation_result); 558 ASSERT_FALSE(simulation_result);
558 } 559 }
559 560
560 // Tests Simulator::RunFor() interface. 561 // Tests Simulator::RunFor() interface.
561 TEST(SimulatorTest, RunFor) { 562 TEST_F(SimulatorTest, RunFor) {
562 Simulator simulator; 563 Simulator simulator;
563 564
564 Counter counter(&simulator, "counter", QuicTime::Delta::FromSeconds(3)); 565 Counter counter(&simulator, "counter", QuicTime::Delta::FromSeconds(3));
565 566
566 simulator.RunFor(QuicTime::Delta::FromSeconds(100)); 567 simulator.RunFor(QuicTime::Delta::FromSeconds(100));
567 568
568 EXPECT_EQ(33, counter.get_value()); 569 EXPECT_EQ(33, counter.get_value());
569 } 570 }
570 571
571 class MockPacketFilter : public PacketFilter { 572 class MockPacketFilter : public PacketFilter {
572 public: 573 public:
573 MockPacketFilter(Simulator* simulator, string name, Endpoint* endpoint) 574 MockPacketFilter(Simulator* simulator, string name, Endpoint* endpoint)
574 : PacketFilter(simulator, name, endpoint) {} 575 : PacketFilter(simulator, name, endpoint) {}
575 MOCK_METHOD1(FilterPacket, bool(const Packet&)); 576 MOCK_METHOD1(FilterPacket, bool(const Packet&));
576 }; 577 };
577 578
578 // Set up two trivial packet filters, one allowing any packets, and one dropping 579 // Set up two trivial packet filters, one allowing any packets, and one dropping
579 // all of them. 580 // all of them.
580 TEST(SimulatorTest, PacketFilter) { 581 TEST_F(SimulatorTest, PacketFilter) {
581 const QuicBandwidth bandwidth = 582 const QuicBandwidth bandwidth =
582 QuicBandwidth::FromBytesPerSecond(1024 * 1024); 583 QuicBandwidth::FromBytesPerSecond(1024 * 1024);
583 const QuicTime::Delta base_propagation_delay = 584 const QuicTime::Delta base_propagation_delay =
584 QuicTime::Delta::FromMilliseconds(5); 585 QuicTime::Delta::FromMilliseconds(5);
585 586
586 Simulator simulator; 587 Simulator simulator;
587 LinkSaturator saturator_a(&simulator, "Saturator A", 1000, "Saturator B"); 588 LinkSaturator saturator_a(&simulator, "Saturator A", 1000, "Saturator B");
588 LinkSaturator saturator_b(&simulator, "Saturator B", 1000, "Saturator A"); 589 LinkSaturator saturator_b(&simulator, "Saturator B", 1000, "Saturator A");
589 590
590 // Attach packets to the switch to create a delay between the point at which 591 // Attach packets to the switch to create a delay between the point at which
(...skipping 18 matching lines...) Expand all
609 610
610 // Run the simulation for a while, and expect that only B will receive any 611 // Run the simulation for a while, and expect that only B will receive any
611 // packets. 612 // packets.
612 simulator.RunFor(QuicTime::Delta::FromSeconds(10)); 613 simulator.RunFor(QuicTime::Delta::FromSeconds(10));
613 EXPECT_GE(saturator_b.counter()->packets(), 1u); 614 EXPECT_GE(saturator_b.counter()->packets(), 1u);
614 EXPECT_EQ(saturator_a.counter()->packets(), 0u); 615 EXPECT_EQ(saturator_a.counter()->packets(), 0u);
615 } 616 }
616 617
617 // Set up a traffic policer in one direction that throttles at 25% of link 618 // Set up a traffic policer in one direction that throttles at 25% of link
618 // bandwidth, and put two link saturators at each endpoint. 619 // bandwidth, and put two link saturators at each endpoint.
619 TEST(SimulatorTest, TrafficPolicer) { 620 TEST_F(SimulatorTest, TrafficPolicer) {
620 const QuicBandwidth bandwidth = 621 const QuicBandwidth bandwidth =
621 QuicBandwidth::FromBytesPerSecond(1024 * 1024); 622 QuicBandwidth::FromBytesPerSecond(1024 * 1024);
622 const QuicTime::Delta base_propagation_delay = 623 const QuicTime::Delta base_propagation_delay =
623 QuicTime::Delta::FromMilliseconds(5); 624 QuicTime::Delta::FromMilliseconds(5);
624 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(10); 625 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(10);
625 626
626 Simulator simulator; 627 Simulator simulator;
627 LinkSaturator saturator1(&simulator, "Saturator 1", 1000, "Saturator 2"); 628 LinkSaturator saturator1(&simulator, "Saturator 1", 1000, "Saturator 2");
628 LinkSaturator saturator2(&simulator, "Saturator 2", 1000, "Saturator 1"); 629 LinkSaturator saturator2(&simulator, "Saturator 2", 1000, "Saturator 1");
629 Switch network_switch(&simulator, "Switch", 8, 630 Switch network_switch(&simulator, "Switch", 8,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 668
668 // Check that only one direction is throttled. 669 // Check that only one direction is throttled.
669 test::ExpectApproxEq(saturator1.bytes_transmitted() / 4, 670 test::ExpectApproxEq(saturator1.bytes_transmitted() / 4,
670 saturator2.counter()->bytes(), 0.1f); 671 saturator2.counter()->bytes(), 0.1f);
671 test::ExpectApproxEq(saturator2.bytes_transmitted(), 672 test::ExpectApproxEq(saturator2.bytes_transmitted(),
672 saturator1.counter()->bytes(), 0.1f); 673 saturator1.counter()->bytes(), 0.1f);
673 } 674 }
674 675
675 // Ensure that a larger burst is allowed when the policed saturator exits 676 // Ensure that a larger burst is allowed when the policed saturator exits
676 // quiescence. 677 // quiescence.
677 TEST(SimulatorTest, TrafficPolicerBurst) { 678 TEST_F(SimulatorTest, TrafficPolicerBurst) {
678 const QuicBandwidth bandwidth = 679 const QuicBandwidth bandwidth =
679 QuicBandwidth::FromBytesPerSecond(1024 * 1024); 680 QuicBandwidth::FromBytesPerSecond(1024 * 1024);
680 const QuicTime::Delta base_propagation_delay = 681 const QuicTime::Delta base_propagation_delay =
681 QuicTime::Delta::FromMilliseconds(5); 682 QuicTime::Delta::FromMilliseconds(5);
682 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(10); 683 const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(10);
683 684
684 Simulator simulator; 685 Simulator simulator;
685 LinkSaturator saturator1(&simulator, "Saturator 1", 1000, "Saturator 2"); 686 LinkSaturator saturator1(&simulator, "Saturator 1", 1000, "Saturator 2");
686 LinkSaturator saturator2(&simulator, "Saturator 2", 1000, "Saturator 1"); 687 LinkSaturator saturator2(&simulator, "Saturator 2", 1000, "Saturator 1");
687 Switch network_switch(&simulator, "Switch", 8, 688 Switch network_switch(&simulator, "Switch", 8,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 saturator2.counter()->bytes(), 0.1f); 723 saturator2.counter()->bytes(), 0.1f);
723 724
724 // Expect subsequent traffic to be policed. 725 // Expect subsequent traffic to be policed.
725 saturator1.Resume(); 726 saturator1.Resume();
726 simulator.RunFor(QuicTime::Delta::FromSeconds(10)); 727 simulator.RunFor(QuicTime::Delta::FromSeconds(10));
727 test::ExpectApproxEq(saturator1.bytes_transmitted() / 4, 728 test::ExpectApproxEq(saturator1.bytes_transmitted() / 4,
728 saturator2.counter()->bytes(), 0.1f); 729 saturator2.counter()->bytes(), 0.1f);
729 } 730 }
730 731
731 // Test that the packet aggregation support in queues work. 732 // Test that the packet aggregation support in queues work.
732 TEST(SimulatorTest, PacketAggregation) { 733 TEST_F(SimulatorTest, PacketAggregation) {
733 // Model network where the delays are dominated by transfer delay. 734 // Model network where the delays are dominated by transfer delay.
734 const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(1000); 735 const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(1000);
735 const QuicTime::Delta base_propagation_delay = 736 const QuicTime::Delta base_propagation_delay =
736 QuicTime::Delta::FromMicroseconds(1); 737 QuicTime::Delta::FromMicroseconds(1);
737 const QuicByteCount aggregation_threshold = 1000; 738 const QuicByteCount aggregation_threshold = 1000;
738 const QuicTime::Delta aggregation_timeout = QuicTime::Delta::FromSeconds(30); 739 const QuicTime::Delta aggregation_timeout = QuicTime::Delta::FromSeconds(30);
739 740
740 Simulator simulator; 741 Simulator simulator;
741 LinkSaturator saturator1(&simulator, "Saturator 1", 10, "Saturator 2"); 742 LinkSaturator saturator1(&simulator, "Saturator 1", 10, "Saturator 2");
742 LinkSaturator saturator2(&simulator, "Saturator 2", 10, "Saturator 1"); 743 LinkSaturator saturator2(&simulator, "Saturator 2", 10, "Saturator 1");
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 EXPECT_EQ(500u, queue->bytes_queued()); 800 EXPECT_EQ(500u, queue->bytes_queued());
800 801
801 // Time out again. 802 // Time out again.
802 simulator.RunFor(aggregation_timeout); 803 simulator.RunFor(aggregation_timeout);
803 EXPECT_EQ(6900u, saturator2.counter()->bytes()); 804 EXPECT_EQ(6900u, saturator2.counter()->bytes());
804 EXPECT_EQ(0u, queue->bytes_queued()); 805 EXPECT_EQ(0u, queue->bytes_queued());
805 } 806 }
806 807
807 } // namespace simulator 808 } // namespace simulator
808 } // namespace net 809 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/simulator/quic_endpoint_test.cc ('k') | net/tools/quic/chlo_extractor_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698