| Index: net/quic/quic_framer_test.cc
|
| diff --git a/net/quic/quic_framer_test.cc b/net/quic/quic_framer_test.cc
|
| index 0fa4ce97359dc1c30af30d57c7170881cf454690..69373e0590d98bc4c3d6e5c4fa103384372cd342 100644
|
| --- a/net/quic/quic_framer_test.cc
|
| +++ b/net/quic/quic_framer_test.cc
|
| @@ -113,13 +113,18 @@ class TestEncrypter : public QuicEncrypter {
|
| CHECK(false) << "Not implemented";
|
| return false;
|
| }
|
| - QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number,
|
| - StringPiece associated_data,
|
| - StringPiece plaintext) override {
|
| + bool EncryptPacket(QuicPacketSequenceNumber sequence_number,
|
| + StringPiece associated_data,
|
| + StringPiece plaintext,
|
| + char* output,
|
| + size_t* output_length,
|
| + size_t max_output_length) override {
|
| sequence_number_ = sequence_number;
|
| associated_data_ = associated_data.as_string();
|
| plaintext_ = plaintext.as_string();
|
| - return new QuicData(plaintext.data(), plaintext.length());
|
| + memcpy(output, plaintext.data(), plaintext.length());
|
| + *output_length = plaintext.length();
|
| + return true;
|
| }
|
| size_t GetKeySize() const override { return 0; }
|
| size_t GetNoncePrefixSize() const override { return 0; }
|
| @@ -141,13 +146,18 @@ class TestDecrypter : public QuicDecrypter {
|
| ~TestDecrypter() override {}
|
| bool SetKey(StringPiece key) override { return true; }
|
| bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; }
|
| - QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number,
|
| - StringPiece associated_data,
|
| - StringPiece ciphertext) override {
|
| + bool DecryptPacket(QuicPacketSequenceNumber sequence_number,
|
| + const StringPiece& associated_data,
|
| + const StringPiece& ciphertext,
|
| + char* output,
|
| + size_t* output_length,
|
| + size_t max_output_length) override {
|
| sequence_number_ = sequence_number;
|
| associated_data_ = associated_data.as_string();
|
| ciphertext_ = ciphertext.as_string();
|
| - return new QuicData(ciphertext.data(), ciphertext.length());
|
| + memcpy(output, ciphertext.data(), ciphertext.length());
|
| + *output_length = ciphertext.length();
|
| + return true;
|
| }
|
| StringPiece GetKey() const override { return StringPiece(); }
|
| StringPiece GetNoncePrefix() const override { return StringPiece(); }
|
| @@ -176,6 +186,8 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| STLDeleteElements(&stop_waiting_frames_);
|
| STLDeleteElements(&ping_frames_);
|
| STLDeleteElements(&fec_data_);
|
| + STLDeleteElements(&stream_data_);
|
| + STLDeleteElements(&fec_data_redundancy_);
|
| }
|
|
|
| void OnError(QuicFramer* f) override {
|
| @@ -223,7 +235,14 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
|
|
| bool OnStreamFrame(const QuicStreamFrame& frame) override {
|
| ++frame_count_;
|
| - stream_frames_.push_back(new QuicStreamFrame(frame));
|
| + // Save a copy of the data so it is valid after the packet is processed.
|
| + stream_data_.push_back(frame.GetDataAsString());
|
| + QuicStreamFrame* stream_frame = new QuicStreamFrame(frame);
|
| + // Make sure that the stream frame points to this data.
|
| + stream_frame->data.Clear();
|
| + stream_frame->data.Append(const_cast<char*>(stream_data_.back()->data()),
|
| + stream_data_.back()->size());
|
| + stream_frames_.push_back(stream_frame);
|
| return true;
|
| }
|
|
|
| @@ -251,7 +270,13 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
|
|
| void OnFecData(const QuicFecData& fec) override {
|
| ++fec_count_;
|
| - fec_data_.push_back(new QuicFecData(fec));
|
| + QuicFecData* fec_data = new QuicFecData();
|
| + fec_data->fec_group = fec.fec_group;
|
| + // Save a copy of the data so it is valid after the packet is processed.
|
| + string* redundancy = new string(fec.redundancy.as_string());
|
| + fec_data_redundancy_.push_back(redundancy);
|
| + fec_data->redundancy = StringPiece(*redundancy);
|
| + fec_data_.push_back(fec_data);
|
| }
|
|
|
| void OnPacketComplete() override { ++complete_packets_; }
|
| @@ -307,6 +332,8 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| QuicGoAwayFrame goaway_frame_;
|
| QuicWindowUpdateFrame window_update_frame_;
|
| QuicBlockedFrame blocked_frame_;
|
| + vector<string*> stream_data_;
|
| + vector<string*> fec_data_redundancy_;
|
| };
|
|
|
| class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
|
| @@ -449,7 +476,13 @@ class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
|
|
|
| QuicPacket* BuildDataPacket(const QuicPacketHeader& header,
|
| const QuicFrames& frames) {
|
| - return BuildUnsizedDataPacket(&framer_, header, frames).packet;
|
| + return BuildUnsizedDataPacket(&framer_, header, frames);
|
| + }
|
| +
|
| + QuicPacket* BuildDataPacket(const QuicPacketHeader& header,
|
| + const QuicFrames& frames,
|
| + size_t packet_size) {
|
| + return BuildUnsizedDataPacket(&framer_, header, frames, packet_size);
|
| }
|
|
|
| test::TestEncrypter* encrypter_;
|
| @@ -1312,8 +1345,7 @@ TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) {
|
|
|
| ASSERT_EQ(1u, visitor_.stream_frames_.size());
|
| EXPECT_EQ(0u, visitor_.ack_frames_.size());
|
| - EXPECT_EQ(GG_UINT64_C(0x00020304),
|
| - visitor_.stream_frames_[0]->stream_id);
|
| + EXPECT_EQ(GG_UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id);
|
| EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
|
| EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
|
| visitor_.stream_frames_[0]->offset);
|
| @@ -3367,8 +3399,7 @@ TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
|
| 0x00,
|
| };
|
|
|
| - scoped_ptr<QuicPacket> data(
|
| - framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
|
| + scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| test::CompareCharArraysWithHexError("constructed packet",
|
| @@ -3430,8 +3461,7 @@ TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
|
| 0x00,
|
| };
|
|
|
| - scoped_ptr<QuicPacket> data(
|
| - framer_.BuildDataPacket(header, frames, 37u).packet);
|
| + scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u));
|
| ASSERT_TRUE(data != nullptr);
|
| // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
|
| EXPECT_EQ(36u, data->length());
|
| @@ -3904,8 +3934,7 @@ TEST_P(QuicFramerTest, BuildFecPacket) {
|
| 'm', 'n', 'o', 'p',
|
| };
|
|
|
| - scoped_ptr<QuicPacket> data(
|
| - framer_.BuildFecPacket(header, fec_data).packet);
|
| + scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, fec_data));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| test::CompareCharArraysWithHexError("constructed packet",
|
| @@ -3936,10 +3965,9 @@ TEST_P(QuicFramerTest, EncryptPacket) {
|
| 'm', 'n', 'o', 'p',
|
| };
|
|
|
| - scoped_ptr<QuicPacket> raw(
|
| - QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
|
| - PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| - PACKET_6BYTE_SEQUENCE_NUMBER));
|
| + scoped_ptr<QuicPacket> raw(new QuicPacket(
|
| + AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID,
|
| + !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER));
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
|
|
|
| @@ -3972,10 +4000,9 @@ TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) {
|
| 'm', 'n', 'o', 'p',
|
| };
|
|
|
| - scoped_ptr<QuicPacket> raw(
|
| - QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
|
| - PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
|
| - PACKET_6BYTE_SEQUENCE_NUMBER));
|
| + scoped_ptr<QuicPacket> raw(new QuicPacket(
|
| + AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID,
|
| + kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER));
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
|
|
|
| @@ -4002,8 +4029,7 @@ TEST_P(QuicFramerTest, AckTruncationLargePacket) {
|
| frames.push_back(frame);
|
|
|
| // Build an ack packet with truncation due to limit in number of nack ranges.
|
| - scoped_ptr<QuicPacket> raw_ack_packet(
|
| - framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
|
| + scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(raw_ack_packet != nullptr);
|
| scoped_ptr<QuicEncryptedPacket> ack_packet(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
|
| @@ -4042,8 +4068,7 @@ TEST_P(QuicFramerTest, AckTruncationSmallPacket) {
|
| frames.push_back(frame);
|
|
|
| // Build an ack packet with truncation due to limit in number of nack ranges.
|
| - scoped_ptr<QuicPacket> raw_ack_packet(
|
| - framer_.BuildDataPacket(header, frames, 500).packet);
|
| + scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames, 500));
|
| ASSERT_TRUE(raw_ack_packet != nullptr);
|
| scoped_ptr<QuicEncryptedPacket> ack_packet(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
|
|
|