| 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/sha1.h" | 7 #include "base/sha1.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "net/quic/crypto/crypto_framer.h" | 10 #include "net/quic/crypto/crypto_framer.h" |
| 11 #include "net/quic/crypto/crypto_handshake.h" | 11 #include "net/quic/crypto/crypto_handshake.h" |
| 12 #include "net/quic/crypto/crypto_utils.h" | 12 #include "net/quic/crypto/crypto_utils.h" |
| 13 #include "net/quic/crypto/null_encrypter.h" | 13 #include "net/quic/crypto/null_encrypter.h" |
| 14 #include "net/quic/crypto/quic_decrypter.h" | 14 #include "net/quic/crypto/quic_decrypter.h" |
| 15 #include "net/quic/crypto/quic_encrypter.h" | 15 #include "net/quic/crypto/quic_encrypter.h" |
| 16 #include "net/quic/quic_data_writer.h" |
| 16 #include "net/quic/quic_framer.h" | 17 #include "net/quic/quic_framer.h" |
| 17 #include "net/quic/quic_packet_creator.h" | 18 #include "net/quic/quic_packet_creator.h" |
| 18 #include "net/quic/quic_utils.h" | 19 #include "net/quic/quic_utils.h" |
| 19 #include "net/quic/test_tools/quic_connection_peer.h" | 20 #include "net/quic/test_tools/quic_connection_peer.h" |
| 20 #include "net/spdy/spdy_frame_builder.h" | 21 #include "net/spdy/spdy_frame_builder.h" |
| 21 | 22 |
| 22 using base::StringPiece; | 23 using base::StringPiece; |
| 23 using std::max; | 24 using std::max; |
| 24 using std::min; | 25 using std::min; |
| 25 using std::string; | 26 using std::string; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 53 QuicAckFrame MakeAckFrameWithNackRanges( | 54 QuicAckFrame MakeAckFrameWithNackRanges( |
| 54 size_t num_nack_ranges, QuicPacketSequenceNumber least_unacked) { | 55 size_t num_nack_ranges, QuicPacketSequenceNumber least_unacked) { |
| 55 QuicAckFrame ack = MakeAckFrame(2 * num_nack_ranges + least_unacked); | 56 QuicAckFrame ack = MakeAckFrame(2 * num_nack_ranges + least_unacked); |
| 56 // Add enough missing packets to get num_nack_ranges nack ranges. | 57 // Add enough missing packets to get num_nack_ranges nack ranges. |
| 57 for (QuicPacketSequenceNumber i = 1; i < 2 * num_nack_ranges; i += 2) { | 58 for (QuicPacketSequenceNumber i = 1; i < 2 * num_nack_ranges; i += 2) { |
| 58 ack.missing_packets.insert(least_unacked + i); | 59 ack.missing_packets.insert(least_unacked + i); |
| 59 } | 60 } |
| 60 return ack; | 61 return ack; |
| 61 } | 62 } |
| 62 | 63 |
| 63 SerializedPacket BuildUnsizedDataPacket(QuicFramer* framer, | 64 QuicPacket* BuildUnsizedDataPacket(QuicFramer* framer, |
| 64 const QuicPacketHeader& header, | 65 const QuicPacketHeader& header, |
| 65 const QuicFrames& frames) { | 66 const QuicFrames& frames) { |
| 66 const size_t max_plaintext_size = framer->GetMaxPlaintextSize(kMaxPacketSize); | 67 const size_t max_plaintext_size = framer->GetMaxPlaintextSize(kMaxPacketSize); |
| 67 size_t packet_size = GetPacketHeaderSize(header); | 68 size_t packet_size = GetPacketHeaderSize(header); |
| 68 for (size_t i = 0; i < frames.size(); ++i) { | 69 for (size_t i = 0; i < frames.size(); ++i) { |
| 69 DCHECK_LE(packet_size, max_plaintext_size); | 70 DCHECK_LE(packet_size, max_plaintext_size); |
| 70 bool first_frame = i == 0; | 71 bool first_frame = i == 0; |
| 71 bool last_frame = i == frames.size() - 1; | 72 bool last_frame = i == frames.size() - 1; |
| 72 const size_t frame_size = framer->GetSerializedFrameLength( | 73 const size_t frame_size = framer->GetSerializedFrameLength( |
| 73 frames[i], max_plaintext_size - packet_size, first_frame, last_frame, | 74 frames[i], max_plaintext_size - packet_size, first_frame, last_frame, |
| 74 header.is_in_fec_group, | 75 header.is_in_fec_group, |
| 75 header.public_header.sequence_number_length); | 76 header.public_header.sequence_number_length); |
| 76 DCHECK(frame_size); | 77 DCHECK(frame_size); |
| 77 packet_size += frame_size; | 78 packet_size += frame_size; |
| 78 } | 79 } |
| 79 return framer->BuildDataPacket(header, frames, packet_size); | 80 return BuildUnsizedDataPacket(framer, header, frames, packet_size); |
| 81 } |
| 82 |
| 83 QuicPacket* BuildUnsizedDataPacket(QuicFramer* framer, |
| 84 const QuicPacketHeader& header, |
| 85 const QuicFrames& frames, |
| 86 size_t packet_size) { |
| 87 char* buffer = new char[packet_size]; |
| 88 scoped_ptr<QuicPacket> packet( |
| 89 framer->BuildDataPacket(header, frames, buffer, packet_size)); |
| 90 DCHECK(packet.get() != nullptr); |
| 91 // Now I have to re-construct the data packet with data ownership. |
| 92 return new QuicPacket(buffer, packet->length(), true, |
| 93 header.public_header.connection_id_length, |
| 94 header.public_header.version_flag, |
| 95 header.public_header.sequence_number_length); |
| 80 } | 96 } |
| 81 | 97 |
| 82 uint64 SimpleRandom::RandUint64() { | 98 uint64 SimpleRandom::RandUint64() { |
| 83 unsigned char hash[base::kSHA1Length]; | 99 unsigned char hash[base::kSHA1Length]; |
| 84 base::SHA1HashBytes(reinterpret_cast<unsigned char*>(&seed_), sizeof(seed_), | 100 base::SHA1HashBytes(reinterpret_cast<unsigned char*>(&seed_), sizeof(seed_), |
| 85 hash); | 101 hash); |
| 86 memcpy(&seed_, hash, sizeof(seed_)); | 102 memcpy(&seed_, hash, sizeof(seed_)); |
| 87 return seed_; | 103 return seed_; |
| 88 } | 104 } |
| 89 | 105 |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 : MockConnection(is_server) { | 307 : MockConnection(is_server) { |
| 292 } | 308 } |
| 293 | 309 |
| 294 PacketSavingConnection::PacketSavingConnection( | 310 PacketSavingConnection::PacketSavingConnection( |
| 295 bool is_server, | 311 bool is_server, |
| 296 const QuicVersionVector& supported_versions) | 312 const QuicVersionVector& supported_versions) |
| 297 : MockConnection(is_server, supported_versions) { | 313 : MockConnection(is_server, supported_versions) { |
| 298 } | 314 } |
| 299 | 315 |
| 300 PacketSavingConnection::~PacketSavingConnection() { | 316 PacketSavingConnection::~PacketSavingConnection() { |
| 301 STLDeleteElements(&packets_); | |
| 302 STLDeleteElements(&encrypted_packets_); | 317 STLDeleteElements(&encrypted_packets_); |
| 303 } | 318 } |
| 304 | 319 |
| 305 void PacketSavingConnection::SendOrQueuePacket(QueuedPacket packet) { | 320 void PacketSavingConnection::SendOrQueuePacket(QueuedPacket packet) { |
| 306 packets_.push_back(packet.serialized_packet.packet); | 321 encrypted_packets_.push_back(packet.serialized_packet.packet); |
| 307 QuicEncryptedPacket* encrypted = QuicConnectionPeer::GetFramer(this)-> | |
| 308 EncryptPacket(packet.encryption_level, | |
| 309 packet.serialized_packet.sequence_number, | |
| 310 *packet.serialized_packet.packet); | |
| 311 encrypted_packets_.push_back(encrypted); | |
| 312 // Transfer ownership of the packet to the SentPacketManager and the | 322 // Transfer ownership of the packet to the SentPacketManager and the |
| 313 // ack notifier to the AckNotifierManager. | 323 // ack notifier to the AckNotifierManager. |
| 314 sent_packet_manager_.OnPacketSent( | 324 sent_packet_manager_.OnPacketSent( |
| 315 &packet.serialized_packet, 0, QuicTime::Zero(), 1000, | 325 &packet.serialized_packet, 0, QuicTime::Zero(), 1000, |
| 316 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 326 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 317 } | 327 } |
| 318 | 328 |
| 319 MockSession::MockSession(QuicConnection* connection) | 329 MockSession::MockSession(QuicConnection* connection) |
| 320 : QuicSession(connection, DefaultQuicConfig()) { | 330 : QuicSession(connection, DefaultQuicConfig()) { |
| 321 InitializeSession(); | 331 InitializeSession(); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 header.entropy_hash = 0; | 484 header.entropy_hash = 0; |
| 475 header.fec_flag = false; | 485 header.fec_flag = false; |
| 476 header.is_in_fec_group = NOT_IN_FEC_GROUP; | 486 header.is_in_fec_group = NOT_IN_FEC_GROUP; |
| 477 header.fec_group = 0; | 487 header.fec_group = 0; |
| 478 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data)); | 488 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data)); |
| 479 QuicFrame frame(&stream_frame); | 489 QuicFrame frame(&stream_frame); |
| 480 QuicFrames frames; | 490 QuicFrames frames; |
| 481 frames.push_back(frame); | 491 frames.push_back(frame); |
| 482 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); | 492 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); |
| 483 scoped_ptr<QuicPacket> packet( | 493 scoped_ptr<QuicPacket> packet( |
| 484 BuildUnsizedDataPacket(&framer, header, frames).packet); | 494 BuildUnsizedDataPacket(&framer, header, frames)); |
| 485 EXPECT_TRUE(packet != nullptr); | 495 EXPECT_TRUE(packet != nullptr); |
| 486 QuicEncryptedPacket* encrypted = framer.EncryptPacket(ENCRYPTION_NONE, | 496 QuicEncryptedPacket* encrypted = framer.EncryptPacket(ENCRYPTION_NONE, |
| 487 sequence_number, | 497 sequence_number, |
| 488 *packet); | 498 *packet); |
| 489 EXPECT_TRUE(encrypted != nullptr); | 499 EXPECT_TRUE(encrypted != nullptr); |
| 490 return encrypted; | 500 return encrypted; |
| 491 } | 501 } |
| 492 | 502 |
| 493 void CompareCharArraysWithHexError( | 503 void CompareCharArraysWithHexError( |
| 494 const string& description, | 504 const string& description, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 header.entropy_hash = 0; | 561 header.entropy_hash = 0; |
| 552 header.fec_flag = false; | 562 header.fec_flag = false; |
| 553 header.fec_group = 0; | 563 header.fec_group = 0; |
| 554 | 564 |
| 555 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, | 565 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, |
| 556 MakeIOVector(data->AsStringPiece())); | 566 MakeIOVector(data->AsStringPiece())); |
| 557 | 567 |
| 558 QuicFrame frame(&stream_frame); | 568 QuicFrame frame(&stream_frame); |
| 559 QuicFrames frames; | 569 QuicFrames frames; |
| 560 frames.push_back(frame); | 570 frames.push_back(frame); |
| 561 return BuildUnsizedDataPacket(&quic_framer, header, frames).packet; | 571 return BuildUnsizedDataPacket(&quic_framer, header, frames); |
| 562 } | 572 } |
| 563 | 573 |
| 564 QuicPacket* ConstructHandshakePacket(QuicConnectionId connection_id, | 574 QuicPacket* ConstructHandshakePacket(QuicConnectionId connection_id, |
| 565 QuicTag tag) { | 575 QuicTag tag) { |
| 566 CryptoHandshakeMessage message; | 576 CryptoHandshakeMessage message; |
| 567 message.set_tag(tag); | 577 message.set_tag(tag); |
| 568 return ConstructPacketFromHandshakeMessage(connection_id, message, false); | 578 return ConstructPacketFromHandshakeMessage(connection_id, message, false); |
| 569 } | 579 } |
| 570 | 580 |
| 571 size_t GetPacketLengthForOneStream( | 581 size_t GetPacketLengthForOneStream( |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 // called. | 678 // called. |
| 669 factory_->current_writer_ = this; | 679 factory_->current_writer_ = this; |
| 670 return QuicPerConnectionPacketWriter::WritePacket(buffer, | 680 return QuicPerConnectionPacketWriter::WritePacket(buffer, |
| 671 buf_len, | 681 buf_len, |
| 672 self_address, | 682 self_address, |
| 673 peer_address); | 683 peer_address); |
| 674 } | 684 } |
| 675 | 685 |
| 676 } // namespace test | 686 } // namespace test |
| 677 } // namespace net | 687 } // namespace net |
| OLD | NEW |