Index: chrome/browser/net/network_stats_unittest.cc |
diff --git a/chrome/browser/net/network_stats_unittest.cc b/chrome/browser/net/network_stats_unittest.cc |
deleted file mode 100644 |
index 52c03f1e00129858e132c4fa3490fad49196655c..0000000000000000000000000000000000000000 |
--- a/chrome/browser/net/network_stats_unittest.cc |
+++ /dev/null |
@@ -1,410 +0,0 @@ |
-// Copyright (c) 2012 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 "base/basictypes.h" |
-#include "base/message_loop/message_loop.h" |
-#include "chrome/browser/net/network_stats.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/network_change_notifier.h" |
-#include "net/base/test_completion_callback.h" |
-#include "net/dns/host_resolver.h" |
-#include "net/dns/mock_host_resolver.h" |
-#include "net/socket/socket_test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "testing/platform_test.h" |
- |
-using std::string; |
- |
-namespace chrome_browser_net { |
- |
-class NetworkStatsTest : public PlatformTest { |
- public: |
- NetworkStatsTest() {} |
- |
- protected: |
- void SetUp() override { |
- net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
- base::MessageLoop::current()->RunUntilIdle(); |
- mock_writes_.clear(); |
- mock_reads_.clear(); |
- } |
- |
- void TearDown() override { |
- net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
- // Empty the current queue. |
- base::MessageLoop::current()->RunUntilIdle(); |
- PlatformTest::TearDown(); |
- } |
- |
- void CreateToken(uint64 timestamp_micros, |
- const string& hash, |
- ProbePacket_Token* token) { |
- token->set_timestamp_micros(timestamp_micros); |
- token->mutable_hash()->assign(hash); |
- } |
- |
- // DeterministicMockData defines the exact sequence of the read/write |
- // operations (specified by the last parameter of MockRead/MockWrite). |
- // |io_mode_write| is the IO mode for writing only. Reading is always async. |
- void MakeDeterministicMockData(uint32 max_tests, |
- uint32 max_probe_packets, |
- uint32 probe_bytes, |
- net::IoMode io_mode_write) { |
- // Only allow 0 or 1 test because the test 2 in NetworkStats is random. |
- DCHECK_LT(max_tests, 2U); |
- outputs_.resize(10); |
- ProbePacket probe_packet; |
- ProbeMessage probe_message; |
- probe_message.SetPacketHeader(ProbePacket_Type_HELLO_REQUEST, |
- &probe_packet); |
- probe_packet.set_group_id(0); |
- outputs_[0] = probe_message.MakeEncodedPacket(probe_packet); |
- mock_writes_.clear(); |
- mock_writes_.push_back(net::MockWrite( |
- io_mode_write, &outputs_[0][0], outputs_[0].size(), 0)); |
- // Add one probe_request. |
- probe_packet = ProbePacket(); // Clear all content. |
- ProbePacket_Token token; |
- CreateToken(1L, "1010", &token); |
- probe_message.GenerateProbeRequest( |
- token, 1, probe_bytes, 0, max_probe_packets, &probe_packet); |
- outputs_[1] = probe_message.MakeEncodedPacket(probe_packet); |
- mock_writes_.push_back(net::MockWrite( |
- io_mode_write, &outputs_[1][0], outputs_[1].size(), 2)); |
- |
- inputs_.resize(10); |
- mock_reads_.clear(); |
- // Add a hello reply. |
- probe_packet = ProbePacket(); // Clear all content. |
- probe_message.SetPacketHeader(ProbePacket_Type_HELLO_REPLY, &probe_packet); |
- probe_packet.set_group_id(0); |
- CreateToken(1L, "1010", probe_packet.mutable_token()); |
- inputs_[0] = probe_message.MakeEncodedPacket(probe_packet); |
- mock_reads_.push_back( |
- net::MockRead(net::ASYNC, &inputs_[0][0], inputs_[0].size(), 1)); |
- |
- for (uint32 i = 0; i < max_probe_packets; ++i) { |
- // Add a probe reply. |
- probe_packet = ProbePacket(); // Clear all content. |
- probe_message.SetPacketHeader(ProbePacket_Type_PROBE_REPLY, |
- &probe_packet); |
- int padding_size = probe_bytes - probe_packet.ByteSize() - 8; |
- probe_packet.mutable_padding()->append( |
- std::string(std::max(0, padding_size), 0)); |
- probe_packet.mutable_header()->set_checksum(0); |
- probe_packet.set_group_id(1); |
- probe_packet.set_packet_index(i); |
- inputs_[1 + i] = probe_message.MakeEncodedPacket(probe_packet); |
- mock_reads_.push_back(net::MockRead( |
- net::ASYNC, &inputs_[1 + i][0], inputs_[1 + i].size(), 3 + i)); |
- } |
- } |
- |
- // Test NetworkStats::Start(...) method. |
- void TestStart(bool has_proxy, |
- uint32 max_tests, |
- uint32 max_probe_packets, |
- uint32 bytes, |
- net::IoMode io_mode) { |
- net::DeterministicMockClientSocketFactory mock_socket_factory; |
- MakeDeterministicMockData(max_tests, max_probe_packets, bytes, io_mode); |
- net::DeterministicSocketData test_data( |
- &mock_reads_[0], mock_reads_.size(), |
- &mock_writes_[0], mock_writes_.size()); |
- mock_socket_factory.AddSocketDataProvider(&test_data); |
- NetworkStats* udp_stats_client = new NetworkStats(&mock_socket_factory); |
- udp_stats_client->maximum_tests_ = max_tests; |
- udp_stats_client->maximum_sequential_packets_ = max_probe_packets; |
- |
- net::TestCompletionCallback cb; |
- scoped_ptr<net::MockHostResolver> host_resolver( |
- new net::MockHostResolver()); |
- net::HostPortPair host_port_pair; |
- EXPECT_TRUE(udp_stats_client->Start(host_resolver.get(), |
- host_port_pair, |
- 9999, |
- has_proxy, |
- bytes, |
- bytes, |
- cb.callback())); |
- int num_packets_run = (max_tests + 1) * 2 + max_probe_packets - 1; |
- test_data.RunFor(num_packets_run); |
- int rv = cb.WaitForResult(); |
- // Check there were no errors during connect/write/read to echo UDP server. |
- EXPECT_EQ(0, rv); |
- } |
- |
- // Make one write and then |max_probe_packets| reads. |
- void MakeDelayedMockData(NetworkStats::TestType test_type, |
- uint32 probe_bytes, |
- uint32 pacing_interval_micros, |
- uint32 max_probe_packets, |
- net::IoMode io_mode) { |
- outputs_.resize(1); |
- ProbePacket probe_packet; |
- ProbeMessage probe_message; |
- mock_writes_.clear(); |
- ProbePacket_Token token; |
- CreateToken(2L, "2a2b", &token); |
- switch (test_type) { |
- case NetworkStats::PACKET_SIZE_TEST: |
- case NetworkStats::NON_PACED_PACKET_TEST: |
- pacing_interval_micros = 0; |
- break; |
- case NetworkStats::NAT_BIND_TEST: |
- // For NAT_BIND_TEST, we always set this to 1000000 to avoid the |
- // randomness in NetworkStats::SendProbeRequest() and to match |
- // the value chosen in TestStartOneTest() below. |
- pacing_interval_micros = 1000000; |
- break; |
- default: {} // Do nothing here. |
- } |
- probe_message.GenerateProbeRequest(token, |
- 1, // current_test_index_ = 1. |
- probe_bytes, |
- pacing_interval_micros, |
- max_probe_packets, |
- &probe_packet); |
- outputs_[0] = probe_message.MakeEncodedPacket(probe_packet); |
- mock_writes_.push_back( |
- net::MockWrite(io_mode, &outputs_[0][0], outputs_[0].size())); |
- |
- inputs_.resize(max_probe_packets); |
- mock_reads_.clear(); |
- for (uint32 i = 0; i < max_probe_packets; ++i) { |
- // Add a probe reply. |
- probe_packet = ProbePacket(); // Clear all content. |
- probe_message.SetPacketHeader(ProbePacket_Type_PROBE_REPLY, |
- &probe_packet); |
- int padding_size = probe_bytes - probe_packet.ByteSize() - 8; |
- probe_packet.mutable_padding()->append( |
- std::string(std::max(0, padding_size), 0)); |
- probe_packet.mutable_header()->set_checksum(0); |
- probe_packet.set_group_id(1); |
- probe_packet.set_packet_index(i); |
- inputs_[i] = probe_message.MakeEncodedPacket(probe_packet); |
- mock_reads_.push_back( |
- net::MockRead(io_mode, &inputs_[i][0], inputs_[i].size())); |
- } |
- } |
- |
- // Test NetworkStats::StartOneTest(...) method. |
- void TestStartOneTest(bool has_proxy, |
- NetworkStats::TestType test_type, |
- uint32 bytes, |
- uint32 interval_micros, |
- uint32 max_probe_packets, |
- net::IoMode io_mode) { |
- |
- net::MockClientSocketFactory mock_socket_factory; |
- MakeDelayedMockData( |
- test_type, bytes, interval_micros, max_probe_packets, io_mode); |
- net::DelayedSocketData test_data(1, |
- &mock_reads_[0], |
- mock_reads_.size(), |
- &mock_writes_[0], |
- mock_writes_.size()); |
- mock_socket_factory.AddSocketDataProvider(&test_data); |
- NetworkStats* udp_stats_client = new NetworkStats(&mock_socket_factory); |
- udp_stats_client->maximum_tests_ = 1; // Only do one probe at a time. |
- udp_stats_client->maximum_sequential_packets_ = max_probe_packets; |
- udp_stats_client->maximum_NAT_packets_ = max_probe_packets; |
- // For NAT_BIND_TEST, we always set this to 1 (second) to avoid the |
- // randomness in NetworkStats::SendProbeRequest(). |
- udp_stats_client->maximum_NAT_idle_seconds_ = 1; |
- udp_stats_client->start_test_after_connect_ = false; |
- udp_stats_client->inter_arrival_time_ = |
- base::TimeDelta::FromMicroseconds(interval_micros); |
- CreateToken(2L, "2a2b", &udp_stats_client->token_); |
- |
- net::TestCompletionCallback cb; |
- scoped_ptr<net::MockHostResolver> host_resolver( |
- new net::MockHostResolver()); |
- net::HostPortPair host_port_pair; |
- EXPECT_TRUE(udp_stats_client->Start(host_resolver.get(), |
- host_port_pair, |
- 9999, |
- has_proxy, |
- bytes, |
- bytes, |
- cb.callback())); |
- // Test need to be added after Start() because Start() will reset |
- // test_sequence_ |
- udp_stats_client->test_sequence_.push_back(test_type); |
- udp_stats_client->current_test_index_ = 1; |
- // Wait for host resolving and check if there were no errors during |
- // connect/write/read to UDP server. |
- int rv = cb.WaitForResult(); |
- EXPECT_EQ(0, rv); |
- udp_stats_client->ReadData(); |
- udp_stats_client->StartOneTest(); |
- rv = cb.WaitForResult(); |
- EXPECT_EQ(0, rv); |
- } |
- |
- base::MessageLoopForIO message_loop_; |
- std::vector<std::string> inputs_; |
- std::vector<std::string> outputs_; |
- std::vector<net::MockRead> mock_reads_; |
- std::vector<net::MockWrite> mock_writes_; |
-}; |
- |
-TEST_F(NetworkStatsTest, ProbeTest100BHasProxyGetToken) { |
- TestStart(true, 0, 1, 100, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest500BHasNoProxyGetTokenSync) { |
- TestStart(false, 0, 1, 500, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest100BHasNoProxyOneTest) { |
- TestStart(false, 1, 1, 100, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest100BHasNoProxyOneTestSync) { |
- TestStart(false, 1, 1, 100, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest100BHasProxyOneTest) { |
- TestStart(true, 1, 1, 100, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest100BHasProxyOneTestSync) { |
- TestStart(true, 1, 1, 100, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest500BHasProxyOneTest) { |
- TestStart(true, 1, 1, 500, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest500BHasNoProxyOneTestSync) { |
- TestStart(false, 1, 1, 500, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest500BHasNoProxyOneTest) { |
- TestStart(false, 1, 1, 500, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest500BHasProxyOneTestSync) { |
- TestStart(true, 1, 1, 500, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest1200BHasProxyOneTest) { |
- TestStart(true, 1, 1, 1200, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest1200BHasNoProxyOneTestSync) { |
- TestStart(false, 1, 1, 1200, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest1200BHasNoProxyOneTest) { |
- TestStart(false, 1, 1, 1200, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest1200BHasProxyOneTestSync) { |
- TestStart(true, 1, 1, 1200, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest100BHasNoProxyOneTestMultiPackets) { |
- TestStart(false, 1, 4, 100, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, ProbeTest1200BHasProxyOneTestMultiPacketsSync) { |
- TestStart(true, 1, 4, 1200, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNonPacedTest100BHasProxy) { |
- TestStartOneTest( |
- true, NetworkStats::NON_PACED_PACKET_TEST, 100, 0, 1, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNonPacedTest100BHasNoProxySync) { |
- TestStartOneTest( |
- false, NetworkStats::NON_PACED_PACKET_TEST, 100, 0, 1, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNonPacedTest500BHasNoProxy) { |
- TestStartOneTest( |
- false, NetworkStats::NON_PACED_PACKET_TEST, 500, 3, 1, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNonPacedTest1200BHasProxySync) { |
- TestStartOneTest( |
- true, NetworkStats::NON_PACED_PACKET_TEST, 1200, 1, 1, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNonPacedTest500BHasNoProxyMulti) { |
- TestStartOneTest( |
- false, NetworkStats::NON_PACED_PACKET_TEST, 500, 2, 3, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNonPacedTest1200BHasProxySyncMulti) { |
- TestStartOneTest( |
- true, NetworkStats::NON_PACED_PACKET_TEST, 1200, 1, 4, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacedTest100BHasProxy) { |
- TestStartOneTest( |
- true, NetworkStats::PACED_PACKET_TEST, 100, 0, 1, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacedTest100BHasNoProxySync) { |
- TestStartOneTest( |
- false, NetworkStats::PACED_PACKET_TEST, 100, 0, 1, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacedTest500BHasNoProxy) { |
- TestStartOneTest( |
- false, NetworkStats::PACED_PACKET_TEST, 500, 3, 1, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacedTest1200BHasProxySync) { |
- TestStartOneTest( |
- true, NetworkStats::PACED_PACKET_TEST, 1200, 1, 1, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacedTest500BHasNoProxyMulti) { |
- TestStartOneTest( |
- false, NetworkStats::PACED_PACKET_TEST, 500, 2, 3, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacedTest1200BHasProxySyncMulti) { |
- TestStartOneTest( |
- true, NetworkStats::PACED_PACKET_TEST, 1200, 1, 4, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNATBindTest100BHasProxy) { |
- TestStartOneTest(true, NetworkStats::NAT_BIND_TEST, 100, 0, 1, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNATBindTest100BHasNoProxySync) { |
- TestStartOneTest( |
- false, NetworkStats::NAT_BIND_TEST, 100, 3, 1, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNATBindTest500BHasNoProxy) { |
- TestStartOneTest(false, NetworkStats::NAT_BIND_TEST, 500, 0, 2, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartNATBindTest1200BHasProxySync) { |
- TestStartOneTest( |
- true, NetworkStats::NAT_BIND_TEST, 1200, 3, 2, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacketSizeTest1500BHasProxy) { |
- TestStartOneTest( |
- true, NetworkStats::PACKET_SIZE_TEST, 1500, 0, 1, net::ASYNC); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacketSizeTest1500HasNoProxySync) { |
- TestStartOneTest( |
- false, NetworkStats::PACKET_SIZE_TEST, 1500, 0, 1, net::SYNCHRONOUS); |
-} |
- |
-TEST_F(NetworkStatsTest, StartPacketSizeTest1500BHasNoProxy) { |
- TestStartOneTest( |
- false, NetworkStats::PACKET_SIZE_TEST, 1500, 0, 1, net::ASYNC); |
-} |
- |
-} // namespace chrome_browser_net |