| 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 "net/quic/test_tools/quic_test_utils.h" | 5 #include "net/quic/test_tools/quic_test_utils.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "net/quic/crypto/crypto_framer.h" | 9 #include "net/quic/crypto/crypto_framer.h" |
| 10 #include "net/quic/crypto/crypto_handshake.h" | 10 #include "net/quic/crypto/crypto_handshake.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 using testing::_; | 25 using testing::_; |
| 26 using testing::AnyNumber; | 26 using testing::AnyNumber; |
| 27 | 27 |
| 28 namespace net { | 28 namespace net { |
| 29 namespace test { | 29 namespace test { |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 // No-op alarm implementation used by MockHelper. | 32 // No-op alarm implementation used by MockHelper. |
| 33 class TestAlarm : public QuicAlarm { | 33 class TestAlarm : public QuicAlarm { |
| 34 public: | 34 public: |
| 35 explicit TestAlarm(QuicAlarm::Delegate* delegate) | 35 explicit TestAlarm(QuicAlarm::Delegate* delegate) : QuicAlarm(delegate) {} |
| 36 : QuicAlarm(delegate) { | |
| 37 } | |
| 38 | 36 |
| 39 virtual void SetImpl() OVERRIDE {} | 37 virtual void SetImpl() OVERRIDE {} |
| 40 virtual void CancelImpl() OVERRIDE {} | 38 virtual void CancelImpl() OVERRIDE {} |
| 41 }; | 39 }; |
| 42 | 40 |
| 43 } // namespace | 41 } // namespace |
| 44 | 42 |
| 45 QuicAckFrame MakeAckFrame(QuicPacketSequenceNumber largest_observed, | 43 QuicAckFrame MakeAckFrame(QuicPacketSequenceNumber largest_observed, |
| 46 QuicPacketSequenceNumber least_unacked) { | 44 QuicPacketSequenceNumber least_unacked) { |
| 47 QuicAckFrame ack; | 45 QuicAckFrame ack; |
| 48 ack.received_info.largest_observed = largest_observed; | 46 ack.received_info.largest_observed = largest_observed; |
| 49 ack.received_info.entropy_hash = 0; | 47 ack.received_info.entropy_hash = 0; |
| 50 ack.sent_info.least_unacked = least_unacked; | 48 ack.sent_info.least_unacked = least_unacked; |
| 51 ack.sent_info.entropy_hash = 0; | 49 ack.sent_info.entropy_hash = 0; |
| 52 return ack; | 50 return ack; |
| 53 } | 51 } |
| 54 | 52 |
| 55 MockFramerVisitor::MockFramerVisitor() { | 53 MockFramerVisitor::MockFramerVisitor() { |
| 56 // By default, we want to accept packets. | 54 // By default, we want to accept packets. |
| 57 ON_CALL(*this, OnProtocolVersionMismatch(_)) | 55 ON_CALL(*this, OnProtocolVersionMismatch(_)) |
| 58 .WillByDefault(testing::Return(false)); | 56 .WillByDefault(testing::Return(false)); |
| 59 | 57 |
| 60 // By default, we want to accept packets. | 58 // By default, we want to accept packets. |
| 61 ON_CALL(*this, OnUnauthenticatedHeader(_)) | 59 ON_CALL(*this, OnUnauthenticatedHeader(_)) |
| 62 .WillByDefault(testing::Return(true)); | 60 .WillByDefault(testing::Return(true)); |
| 63 | 61 |
| 64 ON_CALL(*this, OnUnauthenticatedPublicHeader(_)) | 62 ON_CALL(*this, OnUnauthenticatedPublicHeader(_)) |
| 65 .WillByDefault(testing::Return(true)); | 63 .WillByDefault(testing::Return(true)); |
| 66 | 64 |
| 67 ON_CALL(*this, OnPacketHeader(_)) | 65 ON_CALL(*this, OnPacketHeader(_)).WillByDefault(testing::Return(true)); |
| 68 .WillByDefault(testing::Return(true)); | |
| 69 | 66 |
| 70 ON_CALL(*this, OnStreamFrame(_)) | 67 ON_CALL(*this, OnStreamFrame(_)).WillByDefault(testing::Return(true)); |
| 71 .WillByDefault(testing::Return(true)); | |
| 72 | 68 |
| 73 ON_CALL(*this, OnAckFrame(_)) | 69 ON_CALL(*this, OnAckFrame(_)).WillByDefault(testing::Return(true)); |
| 74 .WillByDefault(testing::Return(true)); | |
| 75 | 70 |
| 76 ON_CALL(*this, OnCongestionFeedbackFrame(_)) | 71 ON_CALL(*this, OnCongestionFeedbackFrame(_)) |
| 77 .WillByDefault(testing::Return(true)); | 72 .WillByDefault(testing::Return(true)); |
| 78 | 73 |
| 79 ON_CALL(*this, OnStopWaitingFrame(_)) | 74 ON_CALL(*this, OnStopWaitingFrame(_)).WillByDefault(testing::Return(true)); |
| 80 .WillByDefault(testing::Return(true)); | |
| 81 | 75 |
| 82 ON_CALL(*this, OnPingFrame(_)) | 76 ON_CALL(*this, OnPingFrame(_)).WillByDefault(testing::Return(true)); |
| 83 .WillByDefault(testing::Return(true)); | |
| 84 | 77 |
| 85 ON_CALL(*this, OnRstStreamFrame(_)) | 78 ON_CALL(*this, OnRstStreamFrame(_)).WillByDefault(testing::Return(true)); |
| 86 .WillByDefault(testing::Return(true)); | |
| 87 | 79 |
| 88 ON_CALL(*this, OnConnectionCloseFrame(_)) | 80 ON_CALL(*this, OnConnectionCloseFrame(_)) |
| 89 .WillByDefault(testing::Return(true)); | 81 .WillByDefault(testing::Return(true)); |
| 90 | 82 |
| 91 ON_CALL(*this, OnGoAwayFrame(_)) | 83 ON_CALL(*this, OnGoAwayFrame(_)).WillByDefault(testing::Return(true)); |
| 92 .WillByDefault(testing::Return(true)); | |
| 93 } | 84 } |
| 94 | 85 |
| 95 MockFramerVisitor::~MockFramerVisitor() { | 86 MockFramerVisitor::~MockFramerVisitor() { |
| 96 } | 87 } |
| 97 | 88 |
| 98 bool NoOpFramerVisitor::OnProtocolVersionMismatch(QuicVersion version) { | 89 bool NoOpFramerVisitor::OnProtocolVersionMismatch(QuicVersion version) { |
| 99 return false; | 90 return false; |
| 100 } | 91 } |
| 101 | 92 |
| 102 bool NoOpFramerVisitor::OnUnauthenticatedPublicHeader( | 93 bool NoOpFramerVisitor::OnUnauthenticatedPublicHeader( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 119 | 110 |
| 120 bool NoOpFramerVisitor::OnAckFrame(const QuicAckFrame& frame) { | 111 bool NoOpFramerVisitor::OnAckFrame(const QuicAckFrame& frame) { |
| 121 return true; | 112 return true; |
| 122 } | 113 } |
| 123 | 114 |
| 124 bool NoOpFramerVisitor::OnCongestionFeedbackFrame( | 115 bool NoOpFramerVisitor::OnCongestionFeedbackFrame( |
| 125 const QuicCongestionFeedbackFrame& frame) { | 116 const QuicCongestionFeedbackFrame& frame) { |
| 126 return true; | 117 return true; |
| 127 } | 118 } |
| 128 | 119 |
| 129 bool NoOpFramerVisitor::OnStopWaitingFrame( | 120 bool NoOpFramerVisitor::OnStopWaitingFrame(const QuicStopWaitingFrame& frame) { |
| 130 const QuicStopWaitingFrame& frame) { | |
| 131 return true; | 121 return true; |
| 132 } | 122 } |
| 133 | 123 |
| 134 bool NoOpFramerVisitor::OnPingFrame(const QuicPingFrame& frame) { | 124 bool NoOpFramerVisitor::OnPingFrame(const QuicPingFrame& frame) { |
| 135 return true; | 125 return true; |
| 136 } | 126 } |
| 137 | 127 |
| 138 bool NoOpFramerVisitor::OnRstStreamFrame( | 128 bool NoOpFramerVisitor::OnRstStreamFrame(const QuicRstStreamFrame& frame) { |
| 139 const QuicRstStreamFrame& frame) { | |
| 140 return true; | 129 return true; |
| 141 } | 130 } |
| 142 | 131 |
| 143 bool NoOpFramerVisitor::OnConnectionCloseFrame( | 132 bool NoOpFramerVisitor::OnConnectionCloseFrame( |
| 144 const QuicConnectionCloseFrame& frame) { | 133 const QuicConnectionCloseFrame& frame) { |
| 145 return true; | 134 return true; |
| 146 } | 135 } |
| 147 | 136 |
| 148 bool NoOpFramerVisitor::OnGoAwayFrame(const QuicGoAwayFrame& frame) { | 137 bool NoOpFramerVisitor::OnGoAwayFrame(const QuicGoAwayFrame& frame) { |
| 149 return true; | 138 return true; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 | 173 |
| 185 void MockHelper::AdvanceTime(QuicTime::Delta delta) { | 174 void MockHelper::AdvanceTime(QuicTime::Delta delta) { |
| 186 clock_.AdvanceTime(delta); | 175 clock_.AdvanceTime(delta); |
| 187 } | 176 } |
| 188 | 177 |
| 189 MockConnection::MockConnection(bool is_server) | 178 MockConnection::MockConnection(bool is_server) |
| 190 : QuicConnection(kTestConnectionId, | 179 : QuicConnection(kTestConnectionId, |
| 191 IPEndPoint(TestPeerIPAddress(), kTestPort), | 180 IPEndPoint(TestPeerIPAddress(), kTestPort), |
| 192 new testing::NiceMock<MockHelper>(), | 181 new testing::NiceMock<MockHelper>(), |
| 193 new testing::NiceMock<MockPacketWriter>(), | 182 new testing::NiceMock<MockPacketWriter>(), |
| 194 is_server, QuicSupportedVersions(), | 183 is_server, |
| 184 QuicSupportedVersions(), |
| 195 kInitialFlowControlWindowForTest), | 185 kInitialFlowControlWindowForTest), |
| 196 writer_(QuicConnectionPeer::GetWriter(this)), | 186 writer_(QuicConnectionPeer::GetWriter(this)), |
| 197 helper_(helper()) { | 187 helper_(helper()) { |
| 198 } | 188 } |
| 199 | 189 |
| 200 MockConnection::MockConnection(IPEndPoint address, | 190 MockConnection::MockConnection(IPEndPoint address, bool is_server) |
| 201 bool is_server) | 191 : QuicConnection(kTestConnectionId, |
| 202 : QuicConnection(kTestConnectionId, address, | 192 address, |
| 203 new testing::NiceMock<MockHelper>(), | 193 new testing::NiceMock<MockHelper>(), |
| 204 new testing::NiceMock<MockPacketWriter>(), | 194 new testing::NiceMock<MockPacketWriter>(), |
| 205 is_server, QuicSupportedVersions(), | 195 is_server, |
| 196 QuicSupportedVersions(), |
| 206 kInitialFlowControlWindowForTest), | 197 kInitialFlowControlWindowForTest), |
| 207 writer_(QuicConnectionPeer::GetWriter(this)), | 198 writer_(QuicConnectionPeer::GetWriter(this)), |
| 208 helper_(helper()) { | 199 helper_(helper()) { |
| 209 } | 200 } |
| 210 | 201 |
| 211 MockConnection::MockConnection(QuicConnectionId connection_id, | 202 MockConnection::MockConnection(QuicConnectionId connection_id, bool is_server) |
| 212 bool is_server) | |
| 213 : QuicConnection(connection_id, | 203 : QuicConnection(connection_id, |
| 214 IPEndPoint(TestPeerIPAddress(), kTestPort), | 204 IPEndPoint(TestPeerIPAddress(), kTestPort), |
| 215 new testing::NiceMock<MockHelper>(), | 205 new testing::NiceMock<MockHelper>(), |
| 216 new testing::NiceMock<MockPacketWriter>(), | 206 new testing::NiceMock<MockPacketWriter>(), |
| 217 is_server, QuicSupportedVersions(), | 207 is_server, |
| 208 QuicSupportedVersions(), |
| 218 kInitialFlowControlWindowForTest), | 209 kInitialFlowControlWindowForTest), |
| 219 writer_(QuicConnectionPeer::GetWriter(this)), | 210 writer_(QuicConnectionPeer::GetWriter(this)), |
| 220 helper_(helper()) { | 211 helper_(helper()) { |
| 221 } | 212 } |
| 222 | 213 |
| 223 MockConnection::MockConnection(bool is_server, | 214 MockConnection::MockConnection(bool is_server, |
| 224 const QuicVersionVector& supported_versions) | 215 const QuicVersionVector& supported_versions) |
| 225 : QuicConnection(kTestConnectionId, | 216 : QuicConnection(kTestConnectionId, |
| 226 IPEndPoint(TestPeerIPAddress(), kTestPort), | 217 IPEndPoint(TestPeerIPAddress(), kTestPort), |
| 227 new testing::NiceMock<MockHelper>(), | 218 new testing::NiceMock<MockHelper>(), |
| 228 new testing::NiceMock<MockPacketWriter>(), | 219 new testing::NiceMock<MockPacketWriter>(), |
| 229 is_server, supported_versions, | 220 is_server, |
| 221 supported_versions, |
| 230 kInitialFlowControlWindowForTest), | 222 kInitialFlowControlWindowForTest), |
| 231 writer_(QuicConnectionPeer::GetWriter(this)), | 223 writer_(QuicConnectionPeer::GetWriter(this)), |
| 232 helper_(helper()) { | 224 helper_(helper()) { |
| 233 } | 225 } |
| 234 | 226 |
| 235 MockConnection::~MockConnection() { | 227 MockConnection::~MockConnection() { |
| 236 } | 228 } |
| 237 | 229 |
| 238 void MockConnection::AdvanceTime(QuicTime::Delta delta) { | 230 void MockConnection::AdvanceTime(QuicTime::Delta delta) { |
| 239 static_cast<MockHelper*>(helper())->AdvanceTime(delta); | 231 static_cast<MockHelper*>(helper())->AdvanceTime(delta); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 252 PacketSavingConnection::~PacketSavingConnection() { | 244 PacketSavingConnection::~PacketSavingConnection() { |
| 253 STLDeleteElements(&packets_); | 245 STLDeleteElements(&packets_); |
| 254 STLDeleteElements(&encrypted_packets_); | 246 STLDeleteElements(&encrypted_packets_); |
| 255 } | 247 } |
| 256 | 248 |
| 257 bool PacketSavingConnection::SendOrQueuePacket( | 249 bool PacketSavingConnection::SendOrQueuePacket( |
| 258 EncryptionLevel level, | 250 EncryptionLevel level, |
| 259 const SerializedPacket& packet, | 251 const SerializedPacket& packet, |
| 260 TransmissionType transmission_type) { | 252 TransmissionType transmission_type) { |
| 261 packets_.push_back(packet.packet); | 253 packets_.push_back(packet.packet); |
| 262 QuicEncryptedPacket* encrypted = QuicConnectionPeer::GetFramer(this)-> | 254 QuicEncryptedPacket* encrypted = |
| 263 EncryptPacket(level, packet.sequence_number, *packet.packet); | 255 QuicConnectionPeer::GetFramer(this) |
| 256 ->EncryptPacket(level, packet.sequence_number, *packet.packet); |
| 264 encrypted_packets_.push_back(encrypted); | 257 encrypted_packets_.push_back(encrypted); |
| 265 return true; | 258 return true; |
| 266 } | 259 } |
| 267 | 260 |
| 268 MockSession::MockSession(QuicConnection* connection) | 261 MockSession::MockSession(QuicConnection* connection) |
| 269 : QuicSession(connection, DefaultQuicConfig()) { | 262 : QuicSession(connection, DefaultQuicConfig()) { |
| 270 ON_CALL(*this, WritevData(_, _, _, _, _)) | 263 ON_CALL(*this, WritevData(_, _, _, _, _)) |
| 271 .WillByDefault(testing::Return(QuicConsumedData(0, false))); | 264 .WillByDefault(testing::Return(QuicConsumedData(0, false))); |
| 272 } | 265 } |
| 273 | 266 |
| 274 MockSession::~MockSession() { | 267 MockSession::~MockSession() { |
| 275 } | 268 } |
| 276 | 269 |
| 277 TestSession::TestSession(QuicConnection* connection, | 270 TestSession::TestSession(QuicConnection* connection, const QuicConfig& config) |
| 278 const QuicConfig& config) | 271 : QuicSession(connection, config), crypto_stream_(NULL) { |
| 279 : QuicSession(connection, config), | |
| 280 crypto_stream_(NULL) { | |
| 281 } | 272 } |
| 282 | 273 |
| 283 TestSession::~TestSession() {} | 274 TestSession::~TestSession() { |
| 275 } |
| 284 | 276 |
| 285 void TestSession::SetCryptoStream(QuicCryptoStream* stream) { | 277 void TestSession::SetCryptoStream(QuicCryptoStream* stream) { |
| 286 crypto_stream_ = stream; | 278 crypto_stream_ = stream; |
| 287 } | 279 } |
| 288 | 280 |
| 289 QuicCryptoStream* TestSession::GetCryptoStream() { | 281 QuicCryptoStream* TestSession::GetCryptoStream() { |
| 290 return crypto_stream_; | 282 return crypto_stream_; |
| 291 } | 283 } |
| 292 | 284 |
| 293 TestClientSession::TestClientSession(QuicConnection* connection, | 285 TestClientSession::TestClientSession(QuicConnection* connection, |
| 294 const QuicConfig& config) | 286 const QuicConfig& config) |
| 295 : QuicClientSessionBase(connection, config), | 287 : QuicClientSessionBase(connection, config), crypto_stream_(NULL) { |
| 296 crypto_stream_(NULL) { | 288 EXPECT_CALL(*this, OnProofValid(_)).Times(AnyNumber()); |
| 297 EXPECT_CALL(*this, OnProofValid(_)).Times(AnyNumber()); | |
| 298 } | 289 } |
| 299 | 290 |
| 300 TestClientSession::~TestClientSession() {} | 291 TestClientSession::~TestClientSession() { |
| 292 } |
| 301 | 293 |
| 302 void TestClientSession::SetCryptoStream(QuicCryptoStream* stream) { | 294 void TestClientSession::SetCryptoStream(QuicCryptoStream* stream) { |
| 303 crypto_stream_ = stream; | 295 crypto_stream_ = stream; |
| 304 } | 296 } |
| 305 | 297 |
| 306 QuicCryptoStream* TestClientSession::GetCryptoStream() { | 298 QuicCryptoStream* TestClientSession::GetCryptoStream() { |
| 307 return crypto_stream_; | 299 return crypto_stream_; |
| 308 } | 300 } |
| 309 | 301 |
| 310 MockPacketWriter::MockPacketWriter() { | 302 MockPacketWriter::MockPacketWriter() { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 326 } | 318 } |
| 327 | 319 |
| 328 MockAckNotifierDelegate::MockAckNotifierDelegate() { | 320 MockAckNotifierDelegate::MockAckNotifierDelegate() { |
| 329 } | 321 } |
| 330 | 322 |
| 331 MockAckNotifierDelegate::~MockAckNotifierDelegate() { | 323 MockAckNotifierDelegate::~MockAckNotifierDelegate() { |
| 332 } | 324 } |
| 333 | 325 |
| 334 namespace { | 326 namespace { |
| 335 | 327 |
| 336 string HexDumpWithMarks(const char* data, int length, | 328 string HexDumpWithMarks(const char* data, |
| 337 const bool* marks, int mark_length) { | 329 int length, |
| 330 const bool* marks, |
| 331 int mark_length) { |
| 338 static const char kHexChars[] = "0123456789abcdef"; | 332 static const char kHexChars[] = "0123456789abcdef"; |
| 339 static const int kColumns = 4; | 333 static const int kColumns = 4; |
| 340 | 334 |
| 341 const int kSizeLimit = 1024; | 335 const int kSizeLimit = 1024; |
| 342 if (length > kSizeLimit || mark_length > kSizeLimit) { | 336 if (length > kSizeLimit || mark_length > kSizeLimit) { |
| 343 LOG(ERROR) << "Only dumping first " << kSizeLimit << " bytes."; | 337 LOG(ERROR) << "Only dumping first " << kSizeLimit << " bytes."; |
| 344 length = min(length, kSizeLimit); | 338 length = min(length, kSizeLimit); |
| 345 mark_length = min(mark_length, kSizeLimit); | 339 mark_length = min(mark_length, kSizeLimit); |
| 346 } | 340 } |
| 347 | 341 |
| 348 string hex; | 342 string hex; |
| 349 for (const char* row = data; length > 0; | 343 for (const char* row = data; length > 0; |
| 350 row += kColumns, length -= kColumns) { | 344 row += kColumns, length -= kColumns) { |
| 351 for (const char *p = row; p < row + 4; ++p) { | 345 for (const char* p = row; p < row + 4; ++p) { |
| 352 if (p < row + length) { | 346 if (p < row + length) { |
| 353 const bool mark = | 347 const bool mark = |
| 354 (marks && (p - data) < mark_length && marks[p - data]); | 348 (marks && (p - data) < mark_length && marks[p - data]); |
| 355 hex += mark ? '*' : ' '; | 349 hex += mark ? '*' : ' '; |
| 356 hex += kHexChars[(*p & 0xf0) >> 4]; | 350 hex += kHexChars[(*p & 0xf0) >> 4]; |
| 357 hex += kHexChars[*p & 0x0f]; | 351 hex += kHexChars[*p & 0x0f]; |
| 358 hex += mark ? '*' : ' '; | 352 hex += mark ? '*' : ' '; |
| 359 } else { | 353 } else { |
| 360 hex += " "; | 354 hex += " "; |
| 361 } | 355 } |
| 362 } | 356 } |
| 363 hex = hex + " "; | 357 hex = hex + " "; |
| 364 | 358 |
| 365 for (const char *p = row; p < row + 4 && p < row + length; ++p) | 359 for (const char* p = row; p < row + 4 && p < row + length; ++p) |
| 366 hex += (*p >= 0x20 && *p <= 0x7f) ? (*p) : '.'; | 360 hex += (*p >= 0x20 && *p <= 0x7f) ? (*p) : '.'; |
| 367 | 361 |
| 368 hex = hex + '\n'; | 362 hex = hex + '\n'; |
| 369 } | 363 } |
| 370 return hex; | 364 return hex; |
| 371 } | 365 } |
| 372 | 366 |
| 373 } // namespace | 367 } // namespace |
| 374 | 368 |
| 375 IPAddressNumber TestPeerIPAddress() { return Loopback4(); } | 369 IPAddressNumber TestPeerIPAddress() { |
| 370 return Loopback4(); |
| 371 } |
| 376 | 372 |
| 377 QuicVersion QuicVersionMax() { return QuicSupportedVersions().front(); } | 373 QuicVersion QuicVersionMax() { |
| 374 return QuicSupportedVersions().front(); |
| 375 } |
| 378 | 376 |
| 379 QuicVersion QuicVersionMin() { return QuicSupportedVersions().back(); } | 377 QuicVersion QuicVersionMin() { |
| 378 return QuicSupportedVersions().back(); |
| 379 } |
| 380 | 380 |
| 381 IPAddressNumber Loopback4() { | 381 IPAddressNumber Loopback4() { |
| 382 IPAddressNumber addr; | 382 IPAddressNumber addr; |
| 383 CHECK(ParseIPLiteralToNumber("127.0.0.1", &addr)); | 383 CHECK(ParseIPLiteralToNumber("127.0.0.1", &addr)); |
| 384 return addr; | 384 return addr; |
| 385 } | 385 } |
| 386 | 386 |
| 387 void GenerateBody(string* body, int length) { | 387 void GenerateBody(string* body, int length) { |
| 388 body->clear(); | 388 body->clear(); |
| 389 body->reserve(length); | 389 body->reserve(length); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 411 header.is_in_fec_group = NOT_IN_FEC_GROUP; | 411 header.is_in_fec_group = NOT_IN_FEC_GROUP; |
| 412 header.fec_group = 0; | 412 header.fec_group = 0; |
| 413 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data)); | 413 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data)); |
| 414 QuicFrame frame(&stream_frame); | 414 QuicFrame frame(&stream_frame); |
| 415 QuicFrames frames; | 415 QuicFrames frames; |
| 416 frames.push_back(frame); | 416 frames.push_back(frame); |
| 417 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); | 417 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); |
| 418 scoped_ptr<QuicPacket> packet( | 418 scoped_ptr<QuicPacket> packet( |
| 419 framer.BuildUnsizedDataPacket(header, frames).packet); | 419 framer.BuildUnsizedDataPacket(header, frames).packet); |
| 420 EXPECT_TRUE(packet != NULL); | 420 EXPECT_TRUE(packet != NULL); |
| 421 QuicEncryptedPacket* encrypted = framer.EncryptPacket(ENCRYPTION_NONE, | 421 QuicEncryptedPacket* encrypted = |
| 422 sequence_number, | 422 framer.EncryptPacket(ENCRYPTION_NONE, sequence_number, *packet); |
| 423 *packet); | |
| 424 EXPECT_TRUE(encrypted != NULL); | 423 EXPECT_TRUE(encrypted != NULL); |
| 425 return encrypted; | 424 return encrypted; |
| 426 } | 425 } |
| 427 | 426 |
| 428 void CompareCharArraysWithHexError( | 427 void CompareCharArraysWithHexError(const string& description, |
| 429 const string& description, | 428 const char* actual, |
| 430 const char* actual, | 429 const int actual_len, |
| 431 const int actual_len, | 430 const char* expected, |
| 432 const char* expected, | 431 const int expected_len) { |
| 433 const int expected_len) { | |
| 434 EXPECT_EQ(actual_len, expected_len); | 432 EXPECT_EQ(actual_len, expected_len); |
| 435 const int min_len = min(actual_len, expected_len); | 433 const int min_len = min(actual_len, expected_len); |
| 436 const int max_len = max(actual_len, expected_len); | 434 const int max_len = max(actual_len, expected_len); |
| 437 scoped_ptr<bool[]> marks(new bool[max_len]); | 435 scoped_ptr<bool[]> marks(new bool[max_len]); |
| 438 bool identical = (actual_len == expected_len); | 436 bool identical = (actual_len == expected_len); |
| 439 for (int i = 0; i < min_len; ++i) { | 437 for (int i = 0; i < min_len; ++i) { |
| 440 if (actual[i] != expected[i]) { | 438 if (actual[i] != expected[i]) { |
| 441 marks[i] = true; | 439 marks[i] = true; |
| 442 identical = false; | 440 identical = false; |
| 443 } else { | 441 } else { |
| 444 marks[i] = false; | 442 marks[i] = false; |
| 445 } | 443 } |
| 446 } | 444 } |
| 447 for (int i = min_len; i < max_len; ++i) { | 445 for (int i = min_len; i < max_len; ++i) { |
| 448 marks[i] = true; | 446 marks[i] = true; |
| 449 } | 447 } |
| 450 if (identical) return; | 448 if (identical) |
| 451 ADD_FAILURE() | 449 return; |
| 452 << "Description:\n" | 450 ADD_FAILURE() << "Description:\n" << description << "\n\nExpected:\n" |
| 453 << description | 451 << HexDumpWithMarks( |
| 454 << "\n\nExpected:\n" | 452 expected, expected_len, marks.get(), max_len) |
| 455 << HexDumpWithMarks(expected, expected_len, marks.get(), max_len) | 453 << "\nActual:\n" |
| 456 << "\nActual:\n" | 454 << HexDumpWithMarks(actual, actual_len, marks.get(), max_len); |
| 457 << HexDumpWithMarks(actual, actual_len, marks.get(), max_len); | |
| 458 } | 455 } |
| 459 | 456 |
| 460 bool DecodeHexString(const base::StringPiece& hex, std::string* bytes) { | 457 bool DecodeHexString(const base::StringPiece& hex, std::string* bytes) { |
| 461 bytes->clear(); | 458 bytes->clear(); |
| 462 if (hex.empty()) | 459 if (hex.empty()) |
| 463 return true; | 460 return true; |
| 464 std::vector<uint8> v; | 461 std::vector<uint8> v; |
| 465 if (!base::HexStringToBytes(hex.as_string(), &v)) | 462 if (!base::HexStringToBytes(hex.as_string(), &v)) |
| 466 return false; | 463 return false; |
| 467 if (!v.empty()) | 464 if (!v.empty()) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 480 QuicPacketHeader header; | 477 QuicPacketHeader header; |
| 481 header.public_header.connection_id = connection_id; | 478 header.public_header.connection_id = connection_id; |
| 482 header.public_header.reset_flag = false; | 479 header.public_header.reset_flag = false; |
| 483 header.public_header.version_flag = should_include_version; | 480 header.public_header.version_flag = should_include_version; |
| 484 header.packet_sequence_number = 1; | 481 header.packet_sequence_number = 1; |
| 485 header.entropy_flag = false; | 482 header.entropy_flag = false; |
| 486 header.entropy_hash = 0; | 483 header.entropy_hash = 0; |
| 487 header.fec_flag = false; | 484 header.fec_flag = false; |
| 488 header.fec_group = 0; | 485 header.fec_group = 0; |
| 489 | 486 |
| 490 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, | 487 QuicStreamFrame stream_frame( |
| 491 MakeIOVector(data->AsStringPiece())); | 488 kCryptoStreamId, false, 0, MakeIOVector(data->AsStringPiece())); |
| 492 | 489 |
| 493 QuicFrame frame(&stream_frame); | 490 QuicFrame frame(&stream_frame); |
| 494 QuicFrames frames; | 491 QuicFrames frames; |
| 495 frames.push_back(frame); | 492 frames.push_back(frame); |
| 496 return quic_framer.BuildUnsizedDataPacket(header, frames).packet; | 493 return quic_framer.BuildUnsizedDataPacket(header, frames).packet; |
| 497 } | 494 } |
| 498 | 495 |
| 499 QuicPacket* ConstructHandshakePacket(QuicConnectionId connection_id, | 496 QuicPacket* ConstructHandshakePacket(QuicConnectionId connection_id, |
| 500 QuicTag tag) { | 497 QuicTag tag) { |
| 501 CryptoHandshakeMessage message; | 498 CryptoHandshakeMessage message; |
| 502 message.set_tag(tag); | 499 message.set_tag(tag); |
| 503 return ConstructPacketFromHandshakeMessage(connection_id, message, false); | 500 return ConstructPacketFromHandshakeMessage(connection_id, message, false); |
| 504 } | 501 } |
| 505 | 502 |
| 506 size_t GetPacketLengthForOneStream( | 503 size_t GetPacketLengthForOneStream( |
| 507 QuicVersion version, | 504 QuicVersion version, |
| 508 bool include_version, | 505 bool include_version, |
| 509 QuicSequenceNumberLength sequence_number_length, | 506 QuicSequenceNumberLength sequence_number_length, |
| 510 InFecGroup is_in_fec_group, | 507 InFecGroup is_in_fec_group, |
| 511 size_t* payload_length) { | 508 size_t* payload_length) { |
| 512 *payload_length = 1; | 509 *payload_length = 1; |
| 513 const size_t stream_length = | 510 const size_t stream_length = |
| 514 NullEncrypter().GetCiphertextSize(*payload_length) + | 511 NullEncrypter().GetCiphertextSize(*payload_length) + |
| 515 QuicPacketCreator::StreamFramePacketOverhead( | 512 QuicPacketCreator::StreamFramePacketOverhead(version, |
| 516 version, PACKET_8BYTE_CONNECTION_ID, include_version, | 513 PACKET_8BYTE_CONNECTION_ID, |
| 517 sequence_number_length, is_in_fec_group); | 514 include_version, |
| 518 const size_t ack_length = NullEncrypter().GetCiphertextSize( | 515 sequence_number_length, |
| 519 QuicFramer::GetMinAckFrameSize( | 516 is_in_fec_group); |
| 517 const size_t ack_length = |
| 518 NullEncrypter().GetCiphertextSize(QuicFramer::GetMinAckFrameSize( |
| 520 version, sequence_number_length, PACKET_1BYTE_SEQUENCE_NUMBER)) + | 519 version, sequence_number_length, PACKET_1BYTE_SEQUENCE_NUMBER)) + |
| 521 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, include_version, | 520 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, |
| 522 sequence_number_length, is_in_fec_group); | 521 include_version, |
| 522 sequence_number_length, |
| 523 is_in_fec_group); |
| 523 if (stream_length < ack_length) { | 524 if (stream_length < ack_length) { |
| 524 *payload_length = 1 + ack_length - stream_length; | 525 *payload_length = 1 + ack_length - stream_length; |
| 525 } | 526 } |
| 526 | 527 |
| 527 return NullEncrypter().GetCiphertextSize(*payload_length) + | 528 return NullEncrypter().GetCiphertextSize(*payload_length) + |
| 528 QuicPacketCreator::StreamFramePacketOverhead( | 529 QuicPacketCreator::StreamFramePacketOverhead( |
| 529 version, PACKET_8BYTE_CONNECTION_ID, include_version, | 530 version, |
| 530 sequence_number_length, is_in_fec_group); | 531 PACKET_8BYTE_CONNECTION_ID, |
| 532 include_version, |
| 533 sequence_number_length, |
| 534 is_in_fec_group); |
| 531 } | 535 } |
| 532 | 536 |
| 533 TestEntropyCalculator::TestEntropyCalculator() { } | 537 TestEntropyCalculator::TestEntropyCalculator() { |
| 538 } |
| 534 | 539 |
| 535 TestEntropyCalculator::~TestEntropyCalculator() { } | 540 TestEntropyCalculator::~TestEntropyCalculator() { |
| 541 } |
| 536 | 542 |
| 537 QuicPacketEntropyHash TestEntropyCalculator::EntropyHash( | 543 QuicPacketEntropyHash TestEntropyCalculator::EntropyHash( |
| 538 QuicPacketSequenceNumber sequence_number) const { | 544 QuicPacketSequenceNumber sequence_number) const { |
| 539 return 1u; | 545 return 1u; |
| 540 } | 546 } |
| 541 | 547 |
| 542 MockEntropyCalculator::MockEntropyCalculator() { } | 548 MockEntropyCalculator::MockEntropyCalculator() { |
| 549 } |
| 543 | 550 |
| 544 MockEntropyCalculator::~MockEntropyCalculator() { } | 551 MockEntropyCalculator::~MockEntropyCalculator() { |
| 552 } |
| 545 | 553 |
| 546 QuicConfig DefaultQuicConfig() { | 554 QuicConfig DefaultQuicConfig() { |
| 547 QuicConfig config; | 555 QuicConfig config; |
| 548 config.SetDefaults(); | 556 config.SetDefaults(); |
| 549 return config; | 557 return config; |
| 550 } | 558 } |
| 551 | 559 |
| 552 QuicVersionVector SupportedVersions(QuicVersion version) { | 560 QuicVersionVector SupportedVersions(QuicVersion version) { |
| 553 QuicVersionVector versions; | 561 QuicVersionVector versions; |
| 554 versions.push_back(version); | 562 versions.push_back(version); |
| 555 return versions; | 563 return versions; |
| 556 } | 564 } |
| 557 | 565 |
| 558 } // namespace test | 566 } // namespace test |
| 559 } // namespace net | 567 } // namespace net |
| OLD | NEW |