| OLD | NEW |
| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "base/stringprintf.h" | 7 #include "base/stringprintf.h" |
| 8 #include "chrome/browser/net/network_stats.h" | 8 #include "chrome/browser/net/network_stats.h" |
| 9 #include "net/base/host_resolver.h" | 9 #include "net/base/host_resolver.h" |
| 10 #include "net/base/mock_host_resolver.h" | 10 #include "net/base/mock_host_resolver.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 | 29 |
| 30 class NetworkStatsTestUDP : public NetworkStatsTest { | 30 class NetworkStatsTestUDP : public NetworkStatsTest { |
| 31 public: | 31 public: |
| 32 NetworkStatsTestUDP() | 32 NetworkStatsTestUDP() |
| 33 : test_server_(net::TestServer::TYPE_UDP_ECHO, | 33 : test_server_(net::TestServer::TYPE_UDP_ECHO, |
| 34 net::TestServer::kLocalhost, | 34 net::TestServer::kLocalhost, |
| 35 FilePath(FILE_PATH_LITERAL("net/data"))) { | 35 FilePath(FILE_PATH_LITERAL("net/data"))) { |
| 36 } | 36 } |
| 37 | 37 |
| 38 protected: | 38 protected: |
| 39 void RunUDPEchoTest(int bytes, int packets) { | 39 void RunUDPEchoTest(int bytes, int packets, bool has_proxy) { |
| 40 net::TestCompletionCallback cb; | 40 net::TestCompletionCallback cb; |
| 41 | 41 |
| 42 scoped_ptr<net::MockHostResolver> host_resolver( | 42 scoped_ptr<net::MockHostResolver> host_resolver( |
| 43 new net::MockHostResolver()); | 43 new net::MockHostResolver()); |
| 44 | 44 |
| 45 // We will use HISTOGRAM_PORT_MAX as the PortIndex enum for testing | 45 // We will use HISTOGRAM_PORT_MAX as the PortIndex enum for testing |
| 46 // purposes. | 46 // purposes. |
| 47 UDPStatsClient* udp_stats_client = new UDPStatsClient(); | 47 UDPStatsClient* udp_stats_client = new UDPStatsClient(); |
| 48 EXPECT_TRUE(udp_stats_client->Start(host_resolver.get(), | 48 EXPECT_TRUE(udp_stats_client->Start(host_resolver.get(), |
| 49 test_server_.host_port_pair(), | 49 test_server_.host_port_pair(), |
| 50 NetworkStats::HISTOGRAM_PORT_MAX, | 50 NetworkStats::HISTOGRAM_PORT_MAX, |
| 51 has_proxy, |
| 51 bytes, | 52 bytes, |
| 52 packets, | 53 packets, |
| 53 cb.callback())); | 54 cb.callback())); |
| 54 int rv = cb.WaitForResult(); | 55 int rv = cb.WaitForResult(); |
| 55 // Check there were no errors during connect/write/read to echo UDP server. | 56 // Check there were no errors during connect/write/read to echo UDP server. |
| 56 EXPECT_EQ(0, rv); | 57 EXPECT_EQ(0, rv); |
| 57 } | 58 } |
| 58 | 59 |
| 59 net::TestServer test_server_; | 60 net::TestServer test_server_; |
| 60 }; | 61 }; |
| 61 | 62 |
| 62 class NetworkStatsTestTCP : public NetworkStatsTest { | 63 class NetworkStatsTestTCP : public NetworkStatsTest { |
| 63 public: | 64 public: |
| 64 NetworkStatsTestTCP() | 65 NetworkStatsTestTCP() |
| 65 : test_server_(net::TestServer::TYPE_TCP_ECHO, | 66 : test_server_(net::TestServer::TYPE_TCP_ECHO, |
| 66 net::TestServer::kLocalhost, | 67 net::TestServer::kLocalhost, |
| 67 FilePath(FILE_PATH_LITERAL("net/data"))) { | 68 FilePath(FILE_PATH_LITERAL("net/data"))) { |
| 68 } | 69 } |
| 69 | 70 |
| 70 protected: | 71 protected: |
| 71 void RunTCPEchoTest(int bytes, int packets) { | 72 void RunTCPEchoTest(int bytes, int packets, bool has_proxy) { |
| 72 net::TestCompletionCallback cb; | 73 net::TestCompletionCallback cb; |
| 73 | 74 |
| 74 scoped_ptr<net::MockHostResolver> host_resolver( | 75 scoped_ptr<net::MockHostResolver> host_resolver( |
| 75 new net::MockHostResolver()); | 76 new net::MockHostResolver()); |
| 76 | 77 |
| 77 // We will use HISTOGRAM_PORT_MAX as the PortIndex enum for testing | 78 // We will use HISTOGRAM_PORT_MAX as the PortIndex enum for testing |
| 78 // purposes. | 79 // purposes. |
| 79 TCPStatsClient* tcp_stats_client = new TCPStatsClient(); | 80 TCPStatsClient* tcp_stats_client = new TCPStatsClient(); |
| 80 EXPECT_TRUE(tcp_stats_client->Start(host_resolver.get(), | 81 EXPECT_TRUE(tcp_stats_client->Start(host_resolver.get(), |
| 81 test_server_.host_port_pair(), | 82 test_server_.host_port_pair(), |
| 82 NetworkStats::HISTOGRAM_PORT_MAX, | 83 NetworkStats::HISTOGRAM_PORT_MAX, |
| 84 has_proxy, |
| 83 bytes, | 85 bytes, |
| 84 packets, | 86 packets, |
| 85 cb.callback())); | 87 cb.callback())); |
| 86 int rv = cb.WaitForResult(); | 88 int rv = cb.WaitForResult(); |
| 87 // Check there were no errors during connect/write/read to echo TCP server. | 89 // Check there were no errors during connect/write/read to echo TCP server. |
| 88 EXPECT_EQ(0, rv); | 90 EXPECT_EQ(0, rv); |
| 89 } | 91 } |
| 90 | 92 |
| 91 net::TestServer test_server_; | 93 net::TestServer test_server_; |
| 92 }; | 94 }; |
| 93 | 95 |
| 94 TEST_F(NetworkStatsTestUDP, UDPEcho_100B_Of_Data) { | 96 TEST_F(NetworkStatsTestUDP, UDPEcho100BytesHasProxy) { |
| 95 ASSERT_TRUE(test_server_.Start()); | 97 ASSERT_TRUE(test_server_.Start()); |
| 96 RunUDPEchoTest(100, 1); | 98 RunUDPEchoTest(100, 1, true); |
| 97 } | 99 } |
| 98 | 100 |
| 99 TEST_F(NetworkStatsTestUDP, UDPEcho_1K_Of_Data) { | 101 TEST_F(NetworkStatsTestUDP, UDPEcho100BytesNoProxy) { |
| 100 ASSERT_TRUE(test_server_.Start()); | 102 ASSERT_TRUE(test_server_.Start()); |
| 101 RunUDPEchoTest(1024, 1); | 103 RunUDPEchoTest(100, 1, false); |
| 102 } | 104 } |
| 103 | 105 |
| 104 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePackets) { | 106 TEST_F(NetworkStatsTestUDP, UDPEcho1KBytesHasProxy) { |
| 105 ASSERT_TRUE(test_server_.Start()); | 107 ASSERT_TRUE(test_server_.Start()); |
| 106 RunUDPEchoTest(1024, 4); | 108 RunUDPEchoTest(1024, 1, true); |
| 107 } | 109 } |
| 108 | 110 |
| 109 TEST_F(NetworkStatsTestTCP, TCPEcho_100B_Of_Data) { | 111 TEST_F(NetworkStatsTestUDP, UDPEcho1KBytesNoProxy) { |
| 110 ASSERT_TRUE(test_server_.Start()); | 112 ASSERT_TRUE(test_server_.Start()); |
| 111 RunTCPEchoTest(100, 1); | 113 RunUDPEchoTest(1024, 1, false); |
| 112 } | 114 } |
| 113 | 115 |
| 114 TEST_F(NetworkStatsTestTCP, TCPEcho_1K_Of_Data) { | 116 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePacketsHasProxy) { |
| 115 ASSERT_TRUE(test_server_.Start()); | 117 ASSERT_TRUE(test_server_.Start()); |
| 116 RunTCPEchoTest(1024, 1); | 118 RunUDPEchoTest(1024, 4, true); |
| 119 } |
| 120 |
| 121 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePacketsNoProxy) { |
| 122 ASSERT_TRUE(test_server_.Start()); |
| 123 RunUDPEchoTest(1024, 4, false); |
| 124 } |
| 125 |
| 126 TEST_F(NetworkStatsTestTCP, TCPEcho100BytesHasProxy) { |
| 127 ASSERT_TRUE(test_server_.Start()); |
| 128 RunTCPEchoTest(100, 1, true); |
| 129 } |
| 130 |
| 131 TEST_F(NetworkStatsTestTCP, TCPEcho100BytesNoProxy) { |
| 132 ASSERT_TRUE(test_server_.Start()); |
| 133 RunTCPEchoTest(100, 1, false); |
| 134 } |
| 135 |
| 136 TEST_F(NetworkStatsTestTCP, TCPEcho1KBytesHasProxy) { |
| 137 ASSERT_TRUE(test_server_.Start()); |
| 138 RunTCPEchoTest(1024, 1, true); |
| 139 } |
| 140 |
| 141 TEST_F(NetworkStatsTestTCP, TCPEcho1KBytesNoProxy) { |
| 142 ASSERT_TRUE(test_server_.Start()); |
| 143 RunTCPEchoTest(1024, 1, false); |
| 117 } | 144 } |
| 118 | 145 |
| 119 TEST_F(NetworkStatsTestTCP, VerifyBytes) { | 146 TEST_F(NetworkStatsTestTCP, VerifyBytes) { |
| 120 static const uint32 KBytesToSend = 100; | 147 static const uint32 KBytesToSend = 100; |
| 121 static const uint32 packets_to_send = 1; | 148 static const uint32 packets_to_send = 1; |
| 122 static const uint32 packet_number = 1; | 149 static const uint32 packet_number = 1; |
| 123 TCPStatsClient network_stats; | 150 TCPStatsClient network_stats; |
| 124 net::TestCompletionCallback cb; | 151 net::TestCompletionCallback cb; |
| 125 network_stats.Initialize(KBytesToSend, | 152 network_stats.Initialize(KBytesToSend, |
| 126 NetworkStats::HISTOGRAM_PORT_MAX, | 153 NetworkStats::HISTOGRAM_PORT_MAX, |
| 154 true, |
| 127 packets_to_send, | 155 packets_to_send, |
| 128 cb.callback()); | 156 cb.callback()); |
| 129 | 157 |
| 130 std::string message; | 158 std::string message; |
| 131 EXPECT_EQ(NetworkStats::ZERO_LENGTH_ERROR, | 159 EXPECT_EQ(NetworkStats::ZERO_LENGTH_ERROR, |
| 132 network_stats.VerifyBytes(message)); | 160 network_stats.VerifyBytes(message)); |
| 133 | 161 |
| 134 std::string version = base::StringPrintf("%02d", 1); | 162 std::string version = base::StringPrintf("%02d", 1); |
| 135 std::string invalid_checksum = base::StringPrintf("%010d", 0); | 163 std::string invalid_checksum = base::StringPrintf("%010d", 0); |
| 136 std::string payload_size = base::StringPrintf("%07d", KBytesToSend); | 164 std::string payload_size = base::StringPrintf("%07d", KBytesToSend); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 message = version + checksum + payload_size + key_string + invalid_payload; | 267 message = version + checksum + payload_size + key_string + invalid_payload; |
| 240 EXPECT_EQ(NetworkStats::PATTERN_CHANGED, network_stats.VerifyBytes(message)); | 268 EXPECT_EQ(NetworkStats::PATTERN_CHANGED, network_stats.VerifyBytes(message)); |
| 241 EXPECT_EQ(0u, network_stats.packets_received_mask()); | 269 EXPECT_EQ(0u, network_stats.packets_received_mask()); |
| 242 | 270 |
| 243 message = version + checksum + payload_size + key_string + encoded_payload; | 271 message = version + checksum + payload_size + key_string + encoded_payload; |
| 244 EXPECT_EQ(NetworkStats::SUCCESS, network_stats.VerifyBytes(message)); | 272 EXPECT_EQ(NetworkStats::SUCCESS, network_stats.VerifyBytes(message)); |
| 245 EXPECT_EQ(1u, network_stats.packets_received_mask()); | 273 EXPECT_EQ(1u, network_stats.packets_received_mask()); |
| 246 } | 274 } |
| 247 | 275 |
| 248 TEST_F(NetworkStatsTest, GetHistogramNames) { | 276 TEST_F(NetworkStatsTest, GetHistogramNames) { |
| 249 // Test TCP, large packet, success histogram name. | |
| 250 std::string rtt_histogram_name; | 277 std::string rtt_histogram_name; |
| 278 std::string rtt_no_proxy_histogram_name; |
| 251 std::string status_histogram_name; | 279 std::string status_histogram_name; |
| 280 std::string status_no_proxy_histogram_name; |
| 252 std::string packet_loss_histogram_name; | 281 std::string packet_loss_histogram_name; |
| 282 std::string packet_loss_no_proxy_histogram_name; |
| 283 |
| 284 // Test TCP, large packet, success histogram name, without proxy server. |
| 253 NetworkStats::GetHistogramNames(NetworkStats::PROTOCOL_TCP, | 285 NetworkStats::GetHistogramNames(NetworkStats::PROTOCOL_TCP, |
| 254 NetworkStats::PORT_53, | 286 NetworkStats::PORT_53, |
| 287 false, // Has no proxy. |
| 255 1024, | 288 1024, |
| 256 net::OK, | 289 net::OK, |
| 257 &rtt_histogram_name, | 290 &rtt_histogram_name, |
| 291 &rtt_no_proxy_histogram_name, |
| 258 &status_histogram_name, | 292 &status_histogram_name, |
| 259 &packet_loss_histogram_name); | 293 &status_no_proxy_histogram_name, |
| 294 &packet_loss_histogram_name, |
| 295 &packet_loss_no_proxy_histogram_name); |
| 260 EXPECT_EQ("NetConnectivity.TCP.Success.53.1K.RTT", rtt_histogram_name); | 296 EXPECT_EQ("NetConnectivity.TCP.Success.53.1K.RTT", rtt_histogram_name); |
| 297 EXPECT_EQ("NetConnectivity.TCP.NoProxy.Success.53.1K.RTT", |
| 298 rtt_no_proxy_histogram_name); |
| 261 EXPECT_EQ("NetConnectivity.TCP.Status.53.1K", status_histogram_name); | 299 EXPECT_EQ("NetConnectivity.TCP.Status.53.1K", status_histogram_name); |
| 300 EXPECT_EQ("NetConnectivity.TCP.NoProxy.Status.53.1K", |
| 301 status_no_proxy_histogram_name); |
| 262 EXPECT_EQ("NetConnectivity.TCP.PacketLoss.53.1K", packet_loss_histogram_name); | 302 EXPECT_EQ("NetConnectivity.TCP.PacketLoss.53.1K", packet_loss_histogram_name); |
| 303 EXPECT_EQ("NetConnectivity.TCP.NoProxy.PacketLoss.53.1K", |
| 304 packet_loss_no_proxy_histogram_name); |
| 263 | 305 |
| 264 // Test UDP, small packet, failure histogram name. | 306 // Test TCP, large packet, success histogram name, with proxy server. |
| 265 std::string rtt_histogram_name1; | 307 NetworkStats::GetHistogramNames(NetworkStats::PROTOCOL_TCP, |
| 266 std::string status_histogram_name1; | 308 NetworkStats::PORT_53, |
| 309 true, // Has proxy. |
| 310 1024, |
| 311 net::OK, |
| 312 &rtt_histogram_name, |
| 313 &rtt_no_proxy_histogram_name, |
| 314 &status_histogram_name, |
| 315 &status_no_proxy_histogram_name, |
| 316 &packet_loss_histogram_name, |
| 317 &packet_loss_no_proxy_histogram_name); |
| 318 EXPECT_EQ("NetConnectivity.TCP.Success.53.1K.RTT", rtt_histogram_name); |
| 319 EXPECT_EQ("", rtt_no_proxy_histogram_name); |
| 320 EXPECT_EQ("NetConnectivity.TCP.Status.53.1K", status_histogram_name); |
| 321 EXPECT_EQ("", status_no_proxy_histogram_name); |
| 322 EXPECT_EQ("NetConnectivity.TCP.PacketLoss.53.1K", packet_loss_histogram_name); |
| 323 EXPECT_EQ("", packet_loss_no_proxy_histogram_name); |
| 324 |
| 325 // Test UDP, small packet, failure histogram name, without proxy server. |
| 267 std::string packet_loss_histogram_name1; | 326 std::string packet_loss_histogram_name1; |
| 268 NetworkStats::GetHistogramNames(NetworkStats::PROTOCOL_UDP, | 327 NetworkStats::GetHistogramNames(NetworkStats::PROTOCOL_UDP, |
| 269 NetworkStats::PORT_6121, | 328 NetworkStats::PORT_6121, |
| 329 false, // Has no proxy. |
| 270 100, | 330 100, |
| 271 net::ERR_INVALID_ARGUMENT, | 331 net::ERR_INVALID_ARGUMENT, |
| 272 &rtt_histogram_name1, | 332 &rtt_histogram_name, |
| 273 &status_histogram_name1, | 333 &rtt_no_proxy_histogram_name, |
| 274 &packet_loss_histogram_name1); | 334 &status_histogram_name, |
| 275 EXPECT_EQ("", rtt_histogram_name1); | 335 &status_no_proxy_histogram_name, |
| 276 EXPECT_EQ("NetConnectivity.UDP.Status.6121.100B", status_histogram_name1); | 336 &packet_loss_histogram_name, |
| 337 &packet_loss_no_proxy_histogram_name); |
| 338 EXPECT_EQ("", rtt_histogram_name); |
| 339 EXPECT_EQ("", rtt_no_proxy_histogram_name); |
| 340 EXPECT_EQ("NetConnectivity.UDP.Status.6121.100B", status_histogram_name); |
| 341 EXPECT_EQ("NetConnectivity.UDP.NoProxy.Status.6121.100B", |
| 342 status_no_proxy_histogram_name); |
| 277 EXPECT_EQ("NetConnectivity.UDP.PacketLoss.6121.100B", | 343 EXPECT_EQ("NetConnectivity.UDP.PacketLoss.6121.100B", |
| 278 packet_loss_histogram_name1); | 344 packet_loss_histogram_name); |
| 345 EXPECT_EQ("NetConnectivity.UDP.NoProxy.PacketLoss.6121.100B", |
| 346 packet_loss_no_proxy_histogram_name); |
| 347 |
| 348 // Test UDP, small packet, failure histogram name, with proxy server. |
| 349 NetworkStats::GetHistogramNames(NetworkStats::PROTOCOL_UDP, |
| 350 NetworkStats::PORT_6121, |
| 351 true, // Has proxy. |
| 352 100, |
| 353 net::ERR_INVALID_ARGUMENT, |
| 354 &rtt_histogram_name, |
| 355 &rtt_no_proxy_histogram_name, |
| 356 &status_histogram_name, |
| 357 &status_no_proxy_histogram_name, |
| 358 &packet_loss_histogram_name, |
| 359 &packet_loss_no_proxy_histogram_name); |
| 360 EXPECT_EQ("", rtt_histogram_name); |
| 361 EXPECT_EQ("", rtt_no_proxy_histogram_name); |
| 362 EXPECT_EQ("NetConnectivity.UDP.Status.6121.100B", status_histogram_name); |
| 363 EXPECT_EQ("", status_no_proxy_histogram_name); |
| 364 EXPECT_EQ("NetConnectivity.UDP.PacketLoss.6121.100B", |
| 365 packet_loss_histogram_name); |
| 366 EXPECT_EQ("", packet_loss_no_proxy_histogram_name); |
| 279 } | 367 } |
| 280 | 368 |
| 281 } // namespace chrome_browser_net | 369 } // namespace chrome_browser_net |
| OLD | NEW |