15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/network_stats.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h"
9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "net/base/network_change_notifier.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/test_completion_callback.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/host_resolver.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h"
13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "net/socket/socket_test_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/platform_test.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkStatsTest : public PlatformTest {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkStatsTest() {}
22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
25558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void SetUp() {
26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
27558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    base::MessageLoop::current()->RunUntilIdle();
28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_writes_.clear();
29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_reads_.clear();
30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() {
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // Empty the current queue.
35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    base::MessageLoop::current()->RunUntilIdle();
36558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    PlatformTest::TearDown();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void CreateToken(uint64 timestamp_micros,
40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                   const string& hash,
41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                   ProbePacket_Token* token) {
42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    token->set_timestamp_micros(timestamp_micros);
43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    token->mutable_hash()->assign(hash);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // DeterministicMockData defines the exact sequence of the read/write
47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // operations (specified by the last parameter of MockRead/MockWrite).
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // |io_mode_write| is the IO mode for writing only. Reading is always async.
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void MakeDeterministicMockData(uint32 max_tests,
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                 uint32 max_probe_packets,
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                 uint32 probe_bytes,
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                 net::IoMode io_mode_write) {
53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // Only allow 0 or 1 test because the test 2 in NetworkStats is random.
54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    DCHECK_LT(max_tests, 2U);
55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    outputs_.resize(10);
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ProbePacket probe_packet;
57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ProbeMessage probe_message;
58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_message.SetPacketHeader(ProbePacket_Type_HELLO_REQUEST,
59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                  &probe_packet);
60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_packet.set_group_id(0);
61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    outputs_[0] = probe_message.MakeEncodedPacket(probe_packet);
62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_writes_.clear();
63558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_writes_.push_back(net::MockWrite(
64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        io_mode_write, &outputs_[0][0], outputs_[0].size(), 0));
65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // Add one probe_request.
66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_packet = ProbePacket();  // Clear all content.
67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ProbePacket_Token token;
68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CreateToken(1L, "1010", &token);
69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_message.GenerateProbeRequest(
70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        token, 1, probe_bytes, 0, max_probe_packets, &probe_packet);
71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    outputs_[1] = probe_message.MakeEncodedPacket(probe_packet);
72558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_writes_.push_back(net::MockWrite(
73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        io_mode_write, &outputs_[1][0], outputs_[1].size(), 2));
74558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
75558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    inputs_.resize(10);
76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_reads_.clear();
77558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // Add a hello reply.
78558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_packet = ProbePacket();  // Clear all content.
79558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_message.SetPacketHeader(ProbePacket_Type_HELLO_REPLY, &probe_packet);
80558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_packet.set_group_id(0);
81558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CreateToken(1L, "1010", probe_packet.mutable_token());
82558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    inputs_[0] = probe_message.MakeEncodedPacket(probe_packet);
83558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_reads_.push_back(
84558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        net::MockRead(net::ASYNC, &inputs_[0][0], inputs_[0].size(), 1));
85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
86558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    for (uint32 i = 0; i < max_probe_packets; ++i) {
87558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      // Add a probe reply.
88558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet = ProbePacket();  // Clear all content.
89558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_message.SetPacketHeader(ProbePacket_Type_PROBE_REPLY,
90558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                    &probe_packet);
91558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      int padding_size = probe_bytes - probe_packet.ByteSize() - 8;
92558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.mutable_padding()->append(
93558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          std::string(std::max(0, padding_size), 0));
94558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.mutable_header()->set_checksum(0);
95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.set_group_id(1);
96558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.set_packet_index(i);
97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      inputs_[1 + i] = probe_message.MakeEncodedPacket(probe_packet);
98558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      mock_reads_.push_back(net::MockRead(
99558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          net::ASYNC, &inputs_[1 + i][0], inputs_[1 + i].size(), 3 + i));
100558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    }
101558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
103558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Test NetworkStats::Start(...) method.
104558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void TestStart(bool has_proxy,
105558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                 uint32 max_tests,
106558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                 uint32 max_probe_packets,
107558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                 uint32 bytes,
108558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                 net::IoMode io_mode) {
109558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::DeterministicMockClientSocketFactory mock_socket_factory;
110558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    MakeDeterministicMockData(max_tests, max_probe_packets, bytes, io_mode);
111558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::DeterministicSocketData test_data(
112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        &mock_reads_[0], mock_reads_.size(),
113558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        &mock_writes_[0], mock_writes_.size());
114558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_socket_factory.AddSocketDataProvider(&test_data);
115558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    NetworkStats* udp_stats_client = new NetworkStats(&mock_socket_factory);
116558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->maximum_tests_ = max_tests;
117558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->maximum_sequential_packets_ = max_probe_packets;
118558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
119558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::TestCompletionCallback cb;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::MockHostResolver> host_resolver(
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new net::MockHostResolver());
122558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::HostPortPair host_port_pair;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(udp_stats_client->Start(host_resolver.get(),
124558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        host_port_pair,
125558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        9999,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        has_proxy,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        bytes,
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        bytes,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        cb.callback()));
130558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    int num_packets_run = (max_tests + 1) * 2 + max_probe_packets - 1;
131558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    test_data.RunFor(num_packets_run);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int rv = cb.WaitForResult();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Check there were no errors during connect/write/read to echo UDP server.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0, rv);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Make one write and then |max_probe_packets| reads.
138558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void MakeDelayedMockData(NetworkStats::TestType test_type,
139558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                           uint32 probe_bytes,
140558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                           uint32 pacing_interval_micros,
141558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                           uint32 max_probe_packets,
142558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                           net::IoMode io_mode) {
143558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    outputs_.resize(1);
144558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ProbePacket probe_packet;
145558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ProbeMessage probe_message;
146558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_writes_.clear();
147558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ProbePacket_Token token;
148558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CreateToken(2L, "2a2b", &token);
149558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    switch (test_type) {
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      case NetworkStats::PACKET_SIZE_TEST:
151558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      case NetworkStats::NON_PACED_PACKET_TEST:
152558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        pacing_interval_micros = 0;
153558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        break;
154558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      case NetworkStats::NAT_BIND_TEST:
155558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        // For NAT_BIND_TEST, we always set this to 1000000 to avoid the
156558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        // randomness in NetworkStats::SendProbeRequest() and to match
157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        // the value chosen in TestStartOneTest() below.
158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        pacing_interval_micros = 1000000;
159558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        break;
160558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      default: {}  // Do nothing here.
161558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    }
162558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    probe_message.GenerateProbeRequest(token,
163558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                       1,  // current_test_index_ = 1.
164558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                       probe_bytes,
165558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                       pacing_interval_micros,
166558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                       max_probe_packets,
167558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                       &probe_packet);
168558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    outputs_[0] = probe_message.MakeEncodedPacket(probe_packet);
169558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_writes_.push_back(
170558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        net::MockWrite(io_mode, &outputs_[0][0], outputs_[0].size()));
171558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
172558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    inputs_.resize(max_probe_packets);
173558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_reads_.clear();
174558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    for (uint32 i = 0; i < max_probe_packets; ++i) {
175558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      // Add a probe reply.
176558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet = ProbePacket();  // Clear all content.
177558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_message.SetPacketHeader(ProbePacket_Type_PROBE_REPLY,
178558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                    &probe_packet);
179558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      int padding_size = probe_bytes - probe_packet.ByteSize() - 8;
180558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.mutable_padding()->append(
181558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          std::string(std::max(0, padding_size), 0));
182558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.mutable_header()->set_checksum(0);
183558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.set_group_id(1);
184558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      probe_packet.set_packet_index(i);
185558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      inputs_[i] = probe_message.MakeEncodedPacket(probe_packet);
186558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      mock_reads_.push_back(
187558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          net::MockRead(io_mode, &inputs_[i][0], inputs_[i].size()));
188558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    }
189558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
190558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
191558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Test NetworkStats::StartOneTest(...) method.
192558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void TestStartOneTest(bool has_proxy,
193558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        NetworkStats::TestType test_type,
194558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        uint32 bytes,
195558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        uint32 interval_micros,
196558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        uint32 max_probe_packets,
197558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        net::IoMode io_mode) {
198558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
199558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::MockClientSocketFactory mock_socket_factory;
200558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    MakeDelayedMockData(
201558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        test_type, bytes, interval_micros, max_probe_packets, io_mode);
202558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::DelayedSocketData test_data(1,
203558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                     &mock_reads_[0],
204558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                     mock_reads_.size(),
205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                     &mock_writes_[0],
206558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                     mock_writes_.size());
207558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    mock_socket_factory.AddSocketDataProvider(&test_data);
208558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    NetworkStats* udp_stats_client = new NetworkStats(&mock_socket_factory);
209558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->maximum_tests_ = 1;  // Only do one probe at a time.
210558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->maximum_sequential_packets_ = max_probe_packets;
211558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->maximum_NAT_packets_ = max_probe_packets;
212558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // For NAT_BIND_TEST, we always set this to 1 (second) to avoid the
213558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // randomness in NetworkStats::SendProbeRequest().
214558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->maximum_NAT_idle_seconds_ = 1;
215558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->start_test_after_connect_ = false;
216558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->inter_arrival_time_ =
217558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        base::TimeDelta::FromMicroseconds(interval_micros);
218558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CreateToken(2L, "2a2b", &udp_stats_client->token_);
219558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
220558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::TestCompletionCallback cb;
221558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    scoped_ptr<net::MockHostResolver> host_resolver(
222558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        new net::MockHostResolver());
223558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    net::HostPortPair host_port_pair;
224558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    EXPECT_TRUE(udp_stats_client->Start(host_resolver.get(),
225558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        host_port_pair,
226558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        9999,
227558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        has_proxy,
228558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        bytes,
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        bytes,
230558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        cb.callback()));
231558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // Test need to be added after Start() because Start() will reset
232558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // test_sequence_
233558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->test_sequence_.push_back(test_type);
234558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->current_test_index_ = 1;
235558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // Wait for host resolving and check if there were no errors during
236558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    // connect/write/read to UDP server.
237558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    int rv = cb.WaitForResult();
238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    EXPECT_EQ(0, rv);
239558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->ReadData();
240558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    udp_stats_client->StartOneTest();
241558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    rv = cb.WaitForResult();
242558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    EXPECT_EQ(0, rv);
243558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
244558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
245558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::MessageLoopForIO message_loop_;
246558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  std::vector<std::string> inputs_;
247558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  std::vector<std::string> outputs_;
248558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  std::vector<net::MockRead> mock_reads_;
249558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  std::vector<net::MockWrite> mock_writes_;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
252558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest100BHasProxyGetToken) {
253558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 0, 1, 100, net::ASYNC);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
256558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest500BHasNoProxyGetTokenSync) {
257558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 0, 1, 500, net::SYNCHRONOUS);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
260558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest100BHasNoProxyOneTest) {
261558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 1, 100, net::ASYNC);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
264558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest100BHasNoProxyOneTestSync) {
265558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 1, 100, net::SYNCHRONOUS);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
268558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest100BHasProxyOneTest) {
269558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 1, 100, net::ASYNC);
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
272558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest100BHasProxyOneTestSync) {
273558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 1, 100, net::SYNCHRONOUS);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
276558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest500BHasProxyOneTest) {
277558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 1, 500, net::ASYNC);
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
280558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest500BHasNoProxyOneTestSync) {
281558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 1, 500, net::SYNCHRONOUS);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
284558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest500BHasNoProxyOneTest) {
285558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 1, 500, net::ASYNC);
286558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
288558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest500BHasProxyOneTestSync) {
289558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 1, 500, net::SYNCHRONOUS);
290558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
291558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
292558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest1200BHasProxyOneTest) {
293558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 1, 1200, net::ASYNC);
294558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
295558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
296558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest1200BHasNoProxyOneTestSync) {
297558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 1, 1200, net::SYNCHRONOUS);
298558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
299558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
300558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest1200BHasNoProxyOneTest) {
301558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 1, 1200, net::ASYNC);
302558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
303558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
304558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest1200BHasProxyOneTestSync) {
305558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 1, 1200, net::SYNCHRONOUS);
306558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
307558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
308558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest100BHasNoProxyOneTestMultiPackets) {
309558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(false, 1, 4, 100, net::ASYNC);
310558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
311558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
312558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, ProbeTest1200BHasProxyOneTestMultiPacketsSync) {
313558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStart(true, 1, 4, 1200, net::SYNCHRONOUS);
314558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
315558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
316558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNonPacedTest100BHasProxy) {
317558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
318558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::NON_PACED_PACKET_TEST, 100, 0, 1, net::ASYNC);
319558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
320558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
321558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNonPacedTest100BHasNoProxySync) {
322558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
323558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::NON_PACED_PACKET_TEST, 100, 0, 1, net::SYNCHRONOUS);
324558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
325558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
326558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNonPacedTest500BHasNoProxy) {
327558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
328558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::NON_PACED_PACKET_TEST, 500, 3, 1, net::ASYNC);
329558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
330558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
331558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNonPacedTest1200BHasProxySync) {
332558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
333558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::NON_PACED_PACKET_TEST, 1200, 1, 1, net::SYNCHRONOUS);
334558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
335558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
336558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNonPacedTest500BHasNoProxyMulti) {
337558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
338558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::NON_PACED_PACKET_TEST, 500, 2, 3, net::ASYNC);
339558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
340558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
341558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNonPacedTest1200BHasProxySyncMulti) {
342558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
343558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::NON_PACED_PACKET_TEST, 1200, 1, 4, net::SYNCHRONOUS);
344558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
345558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
346558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartPacedTest100BHasProxy) {
347558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
348558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::PACED_PACKET_TEST, 100, 0, 1, net::ASYNC);
349558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
350558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
351558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartPacedTest100BHasNoProxySync) {
352558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
353558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::PACED_PACKET_TEST, 100, 0, 1, net::SYNCHRONOUS);
354558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
355558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
356558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartPacedTest500BHasNoProxy) {
357558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
358558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::PACED_PACKET_TEST, 500, 3, 1, net::ASYNC);
359558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
360558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
361558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartPacedTest1200BHasProxySync) {
362558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
363558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::PACED_PACKET_TEST, 1200, 1, 1, net::SYNCHRONOUS);
364558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
365558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
366558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartPacedTest500BHasNoProxyMulti) {
367558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
368558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::PACED_PACKET_TEST, 500, 2, 3, net::ASYNC);
369558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
370558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
371558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartPacedTest1200BHasProxySyncMulti) {
372558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
373558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::PACED_PACKET_TEST, 1200, 1, 4, net::SYNCHRONOUS);
374558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
375558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
376558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNATBindTest100BHasProxy) {
377558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(true, NetworkStats::NAT_BIND_TEST, 100, 0, 1, net::ASYNC);
378558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
379558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
380558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNATBindTest100BHasNoProxySync) {
381558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
382558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      false, NetworkStats::NAT_BIND_TEST, 100, 3, 1, net::SYNCHRONOUS);
383558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
384558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
385558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNATBindTest500BHasNoProxy) {
386558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(false, NetworkStats::NAT_BIND_TEST, 500, 0, 2, net::ASYNC);
387558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
389558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(NetworkStatsTest, StartNATBindTest1200BHasProxySync) {
390558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  TestStartOneTest(
391558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      true, NetworkStats::NAT_BIND_TEST, 1200, 3, 2, net::SYNCHRONOUS);
3927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(NetworkStatsTest, StartPacketSizeTest1500BHasProxy) {
395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TestStartOneTest(
396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      true, NetworkStats::PACKET_SIZE_TEST, 1500, 0, 1, net::ASYNC);
397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(NetworkStatsTest, StartPacketSizeTest1500HasNoProxySync) {
400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TestStartOneTest(
401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      false, NetworkStats::PACKET_SIZE_TEST, 1500, 0, 1, net::SYNCHRONOUS);
402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(NetworkStatsTest, StartPacketSizeTest1500BHasNoProxy) {
405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TestStartOneTest(
406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      false, NetworkStats::PACKET_SIZE_TEST, 1500, 0, 1, net::ASYNC);
407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome_browser_net
410