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 |