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

Side by Side Diff: chrome/browser/net/network_stats_unittest.cc

Issue 10913037: Network connectivity - packet pacing and FEC tests for packet loss. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/net/network_stats.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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 26 matching lines...) Expand all
37 37
38 protected: 38 protected:
39 void RunUDPEchoTest(int bytes, int packets, bool has_proxy) { 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 NetworkStats* udp_stats_client = new NetworkStats();
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 has_proxy,
52 bytes, 52 bytes,
53 packets, 53 packets,
54 cb.callback())); 54 cb.callback()));
55 int rv = cb.WaitForResult(); 55 int rv = cb.WaitForResult();
56 // 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.
57 EXPECT_EQ(0, rv); 57 EXPECT_EQ(0, rv);
58 } 58 }
59 59
60 net::TestServer test_server_; 60 net::TestServer test_server_;
61 }; 61 };
62 62
63 class NetworkStatsTestTCP : public NetworkStatsTest {
64 public:
65 NetworkStatsTestTCP()
66 : test_server_(net::TestServer::TYPE_TCP_ECHO,
67 net::TestServer::kLocalhost,
68 FilePath(FILE_PATH_LITERAL("net/data"))) {
69 }
70
71 protected:
72 void RunTCPEchoTest(int bytes, int packets, bool has_proxy) {
73 net::TestCompletionCallback cb;
74
75 scoped_ptr<net::MockHostResolver> host_resolver(
76 new net::MockHostResolver());
77
78 // We will use HISTOGRAM_PORT_MAX as the PortIndex enum for testing
79 // purposes.
80 TCPStatsClient* tcp_stats_client = new TCPStatsClient();
81 EXPECT_TRUE(tcp_stats_client->Start(host_resolver.get(),
82 test_server_.host_port_pair(),
83 NetworkStats::HISTOGRAM_PORT_MAX,
84 has_proxy,
85 bytes,
86 packets,
87 cb.callback()));
88 int rv = cb.WaitForResult();
89 // Check there were no errors during connect/write/read to echo TCP server.
90 EXPECT_EQ(0, rv);
91 }
92
93 net::TestServer test_server_;
94 };
95
96 TEST_F(NetworkStatsTestUDP, UDPEcho100BytesHasProxy) { 63 TEST_F(NetworkStatsTestUDP, UDPEcho100BytesHasProxy) {
97 ASSERT_TRUE(test_server_.Start()); 64 ASSERT_TRUE(test_server_.Start());
98 RunUDPEchoTest(100, 1, true); 65 RunUDPEchoTest(100, 1, true);
99 } 66 }
100 67
101 TEST_F(NetworkStatsTestUDP, UDPEcho100BytesNoProxy) { 68 TEST_F(NetworkStatsTestUDP, UDPEcho100BytesNoProxy) {
102 ASSERT_TRUE(test_server_.Start()); 69 ASSERT_TRUE(test_server_.Start());
103 RunUDPEchoTest(100, 1, false); 70 RunUDPEchoTest(100, 1, false);
104 } 71 }
105 72
(...skipping 20 matching lines...) Expand all
126 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePacketsHasProxy) { 93 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePacketsHasProxy) {
127 ASSERT_TRUE(test_server_.Start()); 94 ASSERT_TRUE(test_server_.Start());
128 RunUDPEchoTest(1024, 4, true); 95 RunUDPEchoTest(1024, 4, true);
129 } 96 }
130 97
131 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePacketsNoProxy) { 98 TEST_F(NetworkStatsTestUDP, UDPEchoMultiplePacketsNoProxy) {
132 ASSERT_TRUE(test_server_.Start()); 99 ASSERT_TRUE(test_server_.Start());
133 RunUDPEchoTest(1024, 4, false); 100 RunUDPEchoTest(1024, 4, false);
134 } 101 }
135 102
136 TEST_F(NetworkStatsTestTCP, TCPEcho100BytesHasProxy) { 103 TEST_F(NetworkStatsTestUDP, VerifyBytesInvalidHeaders) {
137 ASSERT_TRUE(test_server_.Start()); 104 const uint32 KBytesToSend = 100;
138 RunTCPEchoTest(100, 1, true); 105 const uint32 packets_to_send = 1;
139 } 106 NetworkStats network_stats;
140
141 TEST_F(NetworkStatsTestTCP, TCPEcho100BytesNoProxy) {
142 ASSERT_TRUE(test_server_.Start());
143 RunTCPEchoTest(100, 1, false);
144 }
145
146 TEST_F(NetworkStatsTestTCP, TCPEcho1KBytesHasProxy) {
147 ASSERT_TRUE(test_server_.Start());
148 RunTCPEchoTest(1024, 1, true);
149 }
150
151 TEST_F(NetworkStatsTestTCP, TCPEcho1KBytesNoProxy) {
152 ASSERT_TRUE(test_server_.Start());
153 RunTCPEchoTest(1024, 1, false);
154 }
155
156 TEST_F(NetworkStatsTestTCP, VerifyBytes) {
157 static const uint32 KBytesToSend = 100;
158 static const uint32 packets_to_send = 1;
159 static const uint32 packet_number = 1;
160 TCPStatsClient network_stats;
161 net::TestCompletionCallback cb; 107 net::TestCompletionCallback cb;
162 network_stats.Initialize(KBytesToSend, 108 network_stats.Initialize(KBytesToSend,
163 NetworkStats::HISTOGRAM_PORT_MAX, 109 NetworkStats::HISTOGRAM_PORT_MAX,
164 true, 110 true,
165 packets_to_send, 111 packets_to_send,
166 cb.callback()); 112 cb.callback());
113 uint32 packet_number = network_stats.packet_number();
114 network_stats.set_base_packet_number(packet_number);
167 115
168 std::string message; 116 std::string message;
169 EXPECT_EQ(NetworkStats::ZERO_LENGTH_ERROR, 117 EXPECT_EQ(NetworkStats::ZERO_LENGTH_ERROR,
170 network_stats.VerifyBytes(message)); 118 network_stats.VerifyBytes(message));
171 119
172 std::string version = base::StringPrintf("%02d", 1); 120 std::string version = base::StringPrintf("%02d", 1);
173 std::string invalid_checksum = base::StringPrintf("%010d", 0); 121 std::string invalid_checksum = base::StringPrintf("%010d", 0);
174 std::string payload_size = base::StringPrintf("%07d", KBytesToSend); 122 std::string payload_size = base::StringPrintf("%07d", KBytesToSend);
175 std::string invalid_key = base::StringPrintf("%06d", -1); 123 std::string invalid_key = base::StringPrintf("%06d", -1);
176 std::string key_string = base::StringPrintf("%06d", 899999); 124 std::string key_string = base::StringPrintf("%06d", 899999);
177 std::string packet_number_string = base::StringPrintf("%010d", packet_number); 125 std::string packet_number_string = base::StringPrintf("%010d", packet_number);
178 std::string invalid_packet_number_string = base::StringPrintf("%010d", -1);
179 std::string short_payload(packet_number_string + 126 std::string short_payload(packet_number_string +
180 "1234567890123456789012345678901234567890123456789012345678901234567890"); 127 "1234567890123456789012345678901234567890123456789012345678901234567890");
181 std::string long_payload(packet_number_string + 128 std::string long_payload(packet_number_string +
182 "1234567890123456789012345678901234567890123456789012345678901234567890" 129 "1234567890123456789012345678901234567890123456789012345678901234567890"
183 "1234567890123456789012345678901234567890123456789012345678901234567890"); 130 "1234567890123456789012345678901234567890123456789012345678901234567890");
184 131
185 message = version; 132 message = version;
186 EXPECT_EQ(NetworkStats::NO_CHECKSUM_ERROR, 133 EXPECT_EQ(NetworkStats::NO_CHECKSUM_ERROR,
187 network_stats.VerifyBytes(message)); 134 network_stats.VerifyBytes(message));
188 135
(...skipping 13 matching lines...) Expand all
202 network_stats.VerifyBytes(message)); 149 network_stats.VerifyBytes(message));
203 150
204 message = version + invalid_checksum + payload_size + key_string + 151 message = version + invalid_checksum + payload_size + key_string +
205 short_payload; 152 short_payload;
206 EXPECT_EQ(NetworkStats::TOO_SHORT_PAYLOAD, 153 EXPECT_EQ(NetworkStats::TOO_SHORT_PAYLOAD,
207 network_stats.VerifyBytes(message)); 154 network_stats.VerifyBytes(message));
208 155
209 message = version + invalid_checksum + payload_size + key_string + 156 message = version + invalid_checksum + payload_size + key_string +
210 long_payload; 157 long_payload;
211 EXPECT_EQ(NetworkStats::TOO_LONG_PAYLOAD, network_stats.VerifyBytes(message)); 158 EXPECT_EQ(NetworkStats::TOO_LONG_PAYLOAD, network_stats.VerifyBytes(message));
159 }
160
161 TEST_F(NetworkStatsTestUDP, VerifyBytesInvalidChecksum) {
162 const uint32 KBytesToSend = 100;
163 const uint32 packets_to_send = 1;
164 NetworkStats network_stats;
165 net::TestCompletionCallback cb;
166
167 network_stats.Initialize(KBytesToSend,
168 NetworkStats::HISTOGRAM_PORT_MAX,
169 true,
170 packets_to_send,
171 cb.callback());
172 uint32 packet_number = network_stats.packet_number();
173 network_stats.set_base_packet_number(packet_number);
174
175 std::string message;
176 EXPECT_EQ(NetworkStats::ZERO_LENGTH_ERROR,
177 network_stats.VerifyBytes(message));
178
179 std::string version = base::StringPrintf("%02d", 1);
180 std::string invalid_checksum = base::StringPrintf("%010d", 0);
181 std::string payload_size = base::StringPrintf("%07d", KBytesToSend);
182 std::string key_string = base::StringPrintf("%06d", 899999);
183 std::string packet_number_string = base::StringPrintf("%010d", packet_number);
212 184
213 scoped_refptr<net::IOBuffer> payload(new net::IOBuffer(KBytesToSend)); 185 scoped_refptr<net::IOBuffer> payload(new net::IOBuffer(KBytesToSend));
214 186
215 // Copy the Packet number into the payload. 187 // Copy the Packet number into the payload.
216 size_t packet_number_size = packet_number_string.size(); 188 size_t packet_number_size = packet_number_string.size();
217 memcpy(payload->data(), packet_number_string.c_str(), packet_number_size); 189 memcpy(payload->data(), packet_number_string.c_str(), packet_number_size);
218 190
219 // Get random bytes to fill rest of the payload. 191 // Get random bytes to fill rest of the payload.
220 network_stats.stream_.GetBytes(payload->data() + packet_number_size, 192 network_stats.stream_.GetBytes(payload->data() + packet_number_size,
221 KBytesToSend - packet_number_size); 193 KBytesToSend - packet_number_size);
222 194
223 // Calculate checksum for the payload. 195 // Calculate checksum for the payload.
224 char* payload_data = payload->data(); 196 char* payload_data = payload->data();
225 uint32 sum = network_stats.GetChecksum(payload_data, KBytesToSend); 197 uint32 sum = network_stats.GetChecksum(payload_data, KBytesToSend);
226 std::string checksum = base::StringPrintf("%010d", sum); 198 std::string checksum = base::StringPrintf("%010d", sum);
227 199
228 char encoded_data[KBytesToSend]; 200 char encoded_data[KBytesToSend];
229 memset(encoded_data, 0, KBytesToSend); 201 memset(encoded_data, 0, KBytesToSend);
230 const char* key = key_string.c_str(); 202 const char* key = key_string.c_str();
231 network_stats.Crypt( 203 network_stats.Crypt(
232 key, key_string.length(), payload_data, KBytesToSend, encoded_data); 204 key, key_string.length(), payload_data, KBytesToSend, encoded_data);
233 std::string encoded_payload(encoded_data, KBytesToSend); 205 std::string encoded_payload(encoded_data, KBytesToSend);
234 206
235 // Test invalid checksum error by sending wrong checksum. 207 // Test invalid checksum error by sending wrong checksum.
236 message = version + invalid_checksum + payload_size + key_string + 208 message = version + invalid_checksum + payload_size + key_string +
237 encoded_payload; 209 encoded_payload;
238 EXPECT_EQ(NetworkStats::INVALID_CHECKSUM, network_stats.VerifyBytes(message)); 210 EXPECT_EQ(NetworkStats::INVALID_CHECKSUM, network_stats.VerifyBytes(message));
211 }
239 212
240 // Corrupt the packet_number in payload data. 213 TEST_F(NetworkStatsTestUDP, VerifyBytesPreviousPacket) {
241 char corrupted_data_1[KBytesToSend]; 214 const uint32 KBytesToSend = 100;
242 memcpy(corrupted_data_1, payload_data, KBytesToSend); 215 const uint32 packets_to_send = 1;
243 char temp_char_0 = corrupted_data_1[packet_number_size - 1]; 216 NetworkStats network_stats;
244 corrupted_data_1[packet_number_size - 1] = 217 net::TestCompletionCallback cb;
245 corrupted_data_1[packet_number_size - 2]; 218
246 corrupted_data_1[packet_number_size - 2] = temp_char_0; 219 network_stats.Initialize(KBytesToSend,
247 char encoded_corrupted_data_1[KBytesToSend]; 220 NetworkStats::HISTOGRAM_PORT_MAX,
248 memset(encoded_corrupted_data_1, 0, KBytesToSend); 221 true,
249 network_stats.Crypt(key, 222 packets_to_send,
250 key_string.length(), 223 cb.callback());
251 corrupted_data_1, 224 uint32 packet_number = network_stats.packet_number();
252 KBytesToSend, 225 network_stats.set_base_packet_number(packet_number);
253 encoded_corrupted_data_1); 226 uint32 prev_packet_number = packet_number - 1;
254 std::string invalid_packet_number_payload(encoded_corrupted_data_1, 227
255 KBytesToSend); 228 std::string message;
256 message = version + checksum + payload_size + key_string + 229 std::string version = base::StringPrintf("%02d", 1);
257 invalid_packet_number_payload; 230 std::string payload_size = base::StringPrintf("%07d", KBytesToSend);
231 std::string key_string = base::StringPrintf("%06d", 899999);
232 std::string prev_packet_number_string =
233 base::StringPrintf("%010d", prev_packet_number);
234
235 // Copy the previous packet number into the payload.
236 scoped_refptr<net::IOBuffer> payload(new net::IOBuffer(KBytesToSend));
237 size_t packet_number_size = prev_packet_number_string.size();
238 memcpy(payload->data(), prev_packet_number_string.c_str(),
239 packet_number_size);
240
241 // Get random bytes to fill rest of the payload.
242 network_stats.stream_.GetBytes(payload->data() + packet_number_size,
243 KBytesToSend - packet_number_size);
244
245 // Calculate checksum for the previous packet number payload.
246 char* payload_data = payload->data();
247 uint32 sum = network_stats.GetChecksum(payload_data, KBytesToSend);
248 std::string checksum = base::StringPrintf("%010d", sum);
249
250 char encoded_data[KBytesToSend];
251 memset(encoded_data, 0, KBytesToSend);
252 const char* key = key_string.c_str();
253 network_stats.Crypt(
254 key, key_string.length(), payload_data, KBytesToSend, encoded_data);
255 std::string encoded_payload(encoded_data, KBytesToSend);
256
257 message = version + checksum + payload_size + key_string + encoded_payload;
258 EXPECT_EQ(NetworkStats::PREVIOUS_PACKET_NUMBER,
259 network_stats.VerifyBytes(message));
260 EXPECT_EQ(0u, network_stats.packets_received_mask());
261 }
262
263 TEST_F(NetworkStatsTestUDP, VerifyBytesInvalidPacketNumber) {
264 const uint32 KBytesToSend = 100;
265 const uint32 packets_to_send = 1;
266 NetworkStats network_stats;
267 net::TestCompletionCallback cb;
268
269 network_stats.Initialize(KBytesToSend,
270 NetworkStats::HISTOGRAM_PORT_MAX,
271 true,
272 packets_to_send,
273 cb.callback());
274 uint32 packet_number = network_stats.packet_number();
275 network_stats.set_base_packet_number(packet_number);
276 uint32 corrupt_packet_number = packet_number + 1;
277
278 std::string message;
279 std::string version = base::StringPrintf("%02d", 1);
280 std::string payload_size = base::StringPrintf("%07d", KBytesToSend);
281 std::string key_string = base::StringPrintf("%06d", 899999);
282 std::string corrupt_packet_number_string =
283 base::StringPrintf("%010d", corrupt_packet_number);
284
285 scoped_refptr<net::IOBuffer> payload(new net::IOBuffer(KBytesToSend));
286 size_t packet_number_size = corrupt_packet_number_string.size();
287 memcpy(payload->data(), corrupt_packet_number_string.c_str(),
288 packet_number_size);
289
290 // Get random bytes to fill rest of the payload.
291 network_stats.stream_.GetBytes(payload->data() + packet_number_size,
292 KBytesToSend - packet_number_size);
293
294 // Calculate checksum for the corrupt packet number payload.
295 char* payload_data = payload->data();
296 uint32 sum = network_stats.GetChecksum(payload_data, KBytesToSend);
297 std::string checksum = base::StringPrintf("%010d", sum);
298
299 char encoded_data[KBytesToSend];
300 memset(encoded_data, 0, KBytesToSend);
301 const char* key = key_string.c_str();
302 network_stats.Crypt(
303 key, key_string.length(), payload_data, KBytesToSend, encoded_data);
304 std::string encoded_payload(encoded_data, KBytesToSend);
305 message = version + checksum + payload_size + key_string + encoded_payload;
258 EXPECT_EQ(NetworkStats::INVALID_PACKET_NUMBER, 306 EXPECT_EQ(NetworkStats::INVALID_PACKET_NUMBER,
259 network_stats.VerifyBytes(message)); 307 network_stats.VerifyBytes(message));
260 EXPECT_EQ(0u, network_stats.packets_received_mask()); 308 EXPECT_EQ(0u, network_stats.packets_received_mask());
309 }
310
311 TEST_F(NetworkStatsTestUDP, VerifyBytesPatternChanged) {
312 const uint32 KBytesToSend = 100;
313 const uint32 packets_to_send = 1;
314 NetworkStats network_stats;
315 net::TestCompletionCallback cb;
316
317 network_stats.Initialize(KBytesToSend,
318 NetworkStats::HISTOGRAM_PORT_MAX,
319 true,
320 packets_to_send,
321 cb.callback());
322 uint32 packet_number = network_stats.packet_number();
323 network_stats.set_base_packet_number(packet_number);
324
325 std::string message;
326 std::string version = base::StringPrintf("%02d", 1);
327 std::string payload_size = base::StringPrintf("%07d", KBytesToSend);
328 std::string key_string = base::StringPrintf("%06d", 899999);
329 std::string packet_number_string = base::StringPrintf("%010d", packet_number);
330
331 scoped_refptr<net::IOBuffer> payload(new net::IOBuffer(KBytesToSend));
332
333 // Copy the Packet number into the payload.
334 size_t packet_number_size = packet_number_string.size();
335 memcpy(payload->data(), packet_number_string.c_str(), packet_number_size);
336
337 // Get random bytes to fill rest of the payload.
338 network_stats.stream_.GetBytes(payload->data() + packet_number_size,
339 KBytesToSend - packet_number_size);
340
341 // Calculate checksum for the payload.
342 char* payload_data = payload->data();
343 uint32 sum = network_stats.GetChecksum(payload_data, KBytesToSend);
344 std::string checksum = base::StringPrintf("%010d", sum);
345
346 const char* key = key_string.c_str();
261 347
262 // Corrupt the randomly generated bytes in payload data. 348 // Corrupt the randomly generated bytes in payload data.
263 char corrupted_data_2[KBytesToSend]; 349 char corrupted_data_2[KBytesToSend];
264 memcpy(corrupted_data_2, payload_data, KBytesToSend); 350 memcpy(corrupted_data_2, payload_data, KBytesToSend);
265 char temp_char_1 = corrupted_data_2[packet_number_size]; 351 char temp_char_1 = corrupted_data_2[packet_number_size];
266 corrupted_data_2[packet_number_size] = 352 corrupted_data_2[packet_number_size] =
267 corrupted_data_2[packet_number_size + 1]; 353 corrupted_data_2[packet_number_size + 1];
268 corrupted_data_2[packet_number_size + 1] = temp_char_1; 354 corrupted_data_2[packet_number_size + 1] = temp_char_1;
269 char encoded_corrupted_data_2[KBytesToSend]; 355 char encoded_corrupted_data_2[KBytesToSend];
270 memset(encoded_corrupted_data_2, 0, KBytesToSend); 356 memset(encoded_corrupted_data_2, 0, KBytesToSend);
271 network_stats.Crypt(key, 357 network_stats.Crypt(key,
272 key_string.length(), 358 key_string.length(),
273 corrupted_data_2, 359 corrupted_data_2,
274 KBytesToSend, 360 KBytesToSend,
275 encoded_corrupted_data_2); 361 encoded_corrupted_data_2);
276 std::string invalid_payload(encoded_corrupted_data_2, KBytesToSend); 362 std::string invalid_payload(encoded_corrupted_data_2, KBytesToSend);
277 message = version + checksum + payload_size + key_string + invalid_payload; 363 message = version + checksum + payload_size + key_string + invalid_payload;
278 EXPECT_EQ(NetworkStats::PATTERN_CHANGED, network_stats.VerifyBytes(message)); 364 EXPECT_EQ(NetworkStats::PATTERN_CHANGED, network_stats.VerifyBytes(message));
279 EXPECT_EQ(0u, network_stats.packets_received_mask()); 365 EXPECT_EQ(0u, network_stats.packets_received_mask());
366 }
367
368
369 TEST_F(NetworkStatsTestUDP, VerifyBytes) {
370 const uint32 KBytesToSend = 100;
371 const uint32 packets_to_send = 1;
372 NetworkStats network_stats;
373 net::TestCompletionCallback cb;
374
375 network_stats.Initialize(KBytesToSend,
376 NetworkStats::HISTOGRAM_PORT_MAX,
377 true,
378 packets_to_send,
379 cb.callback());
380 uint32 packet_number = network_stats.packet_number();
381 network_stats.set_base_packet_number(packet_number);
382
383 std::string message;
384 std::string version = base::StringPrintf("%02d", 1);
385 std::string payload_size = base::StringPrintf("%07d", KBytesToSend);
386 std::string key_string = base::StringPrintf("%06d", 899999);
387 std::string packet_number_string = base::StringPrintf("%010d", packet_number);
388
389 scoped_refptr<net::IOBuffer> payload(new net::IOBuffer(KBytesToSend));
390
391 // Copy the Packet number into the payload.
392 size_t packet_number_size = packet_number_string.size();
393 memcpy(payload->data(), packet_number_string.c_str(), packet_number_size);
394
395 // Get random bytes to fill rest of the payload.
396 network_stats.stream_.GetBytes(payload->data() + packet_number_size,
397 KBytesToSend - packet_number_size);
398
399 // Calculate checksum for the payload.
400 char* payload_data = payload->data();
401 uint32 sum = network_stats.GetChecksum(payload_data, KBytesToSend);
402 std::string checksum = base::StringPrintf("%010d", sum);
403
404 char encoded_data[KBytesToSend];
405 memset(encoded_data, 0, KBytesToSend);
406 const char* key = key_string.c_str();
407 network_stats.Crypt(
408 key, key_string.length(), payload_data, KBytesToSend, encoded_data);
409 std::string encoded_payload(encoded_data, KBytesToSend);
280 410
281 message = version + checksum + payload_size + key_string + encoded_payload; 411 message = version + checksum + payload_size + key_string + encoded_payload;
282 EXPECT_EQ(NetworkStats::SUCCESS, network_stats.VerifyBytes(message)); 412 EXPECT_EQ(NetworkStats::SUCCESS, network_stats.VerifyBytes(message));
283 EXPECT_EQ(1u, network_stats.packets_received_mask()); 413 EXPECT_EQ(1u, network_stats.packets_received_mask());
284 } 414 }
285 415
286 } // namespace chrome_browser_net 416 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/network_stats.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698