| 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 26 matching lines...) Expand all Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |