| 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/core/quic_packet_generator.h" | 5 #include "net/quic/core/quic_packet_generator.h" |
| 6 | 6 |
| 7 #include <cstdint> | 7 #include <cstdint> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "net/quic/core/crypto/crypto_protocol.h" | 12 #include "net/quic/core/crypto/crypto_protocol.h" |
| 13 #include "net/quic/core/crypto/null_encrypter.h" | 13 #include "net/quic/core/crypto/null_encrypter.h" |
| 14 #include "net/quic/core/crypto/quic_decrypter.h" | 14 #include "net/quic/core/crypto/quic_decrypter.h" |
| 15 #include "net/quic/core/crypto/quic_encrypter.h" | 15 #include "net/quic/core/crypto/quic_encrypter.h" |
| 16 #include "net/quic/core/quic_simple_buffer_allocator.h" | 16 #include "net/quic/core/quic_simple_buffer_allocator.h" |
| 17 #include "net/quic/core/quic_utils.h" | 17 #include "net/quic/core/quic_utils.h" |
| 18 #include "net/quic/platform/api/quic_socket_address.h" | 18 #include "net/quic/platform/api/quic_socket_address.h" |
| 19 #include "net/quic/platform/api/quic_string_piece.h" | 19 #include "net/quic/platform/api/quic_string_piece.h" |
| 20 #include "net/quic/platform/api/quic_test.h" | 20 #include "net/quic/platform/api/quic_test.h" |
| 21 #include "net/quic/test_tools/mock_random.h" | 21 #include "net/quic/test_tools/mock_random.h" |
| 22 #include "net/quic/test_tools/quic_packet_creator_peer.h" | 22 #include "net/quic/test_tools/quic_packet_creator_peer.h" |
| 23 #include "net/quic/test_tools/quic_packet_generator_peer.h" | 23 #include "net/quic/test_tools/quic_packet_generator_peer.h" |
| 24 #include "net/quic/test_tools/quic_test_utils.h" | 24 #include "net/quic/test_tools/quic_test_utils.h" |
| 25 #include "net/quic/test_tools/simple_data_producer.h" |
| 25 #include "net/quic/test_tools/simple_quic_framer.h" | 26 #include "net/quic/test_tools/simple_quic_framer.h" |
| 26 | 27 |
| 27 using std::string; | 28 using std::string; |
| 28 using testing::InSequence; | 29 using testing::InSequence; |
| 29 using testing::Return; | 30 using testing::Return; |
| 30 using testing::StrictMock; | 31 using testing::StrictMock; |
| 31 using testing::_; | 32 using testing::_; |
| 32 | 33 |
| 33 namespace net { | 34 namespace net { |
| 34 namespace test { | 35 namespace test { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 62 } | 63 } |
| 63 | 64 |
| 64 // Use this when only ack frames should be allowed to be written. | 65 // Use this when only ack frames should be allowed to be written. |
| 65 void SetCanWriteOnlyNonRetransmittable() { | 66 void SetCanWriteOnlyNonRetransmittable() { |
| 66 EXPECT_CALL(*this, ShouldGeneratePacket(_, _)) | 67 EXPECT_CALL(*this, ShouldGeneratePacket(_, _)) |
| 67 .WillRepeatedly(Return(false)); | 68 .WillRepeatedly(Return(false)); |
| 68 EXPECT_CALL(*this, ShouldGeneratePacket(NO_RETRANSMITTABLE_DATA, _)) | 69 EXPECT_CALL(*this, ShouldGeneratePacket(NO_RETRANSMITTABLE_DATA, _)) |
| 69 .WillRepeatedly(Return(true)); | 70 .WillRepeatedly(Return(true)); |
| 70 } | 71 } |
| 71 | 72 |
| 73 void SaveStreamData(QuicStreamId id, |
| 74 QuicIOVector iov, |
| 75 size_t iov_offset, |
| 76 QuicStreamOffset offset, |
| 77 QuicByteCount data_length) override { |
| 78 producer_.SaveStreamData(id, iov, iov_offset, offset, data_length); |
| 79 } |
| 80 bool WriteStreamData(QuicStreamId id, |
| 81 QuicStreamOffset offset, |
| 82 QuicByteCount data_length, |
| 83 QuicDataWriter* writer) override { |
| 84 return producer_.WriteStreamData(id, offset, data_length, writer); |
| 85 } |
| 86 |
| 72 private: | 87 private: |
| 88 SimpleDataProducer producer_; |
| 89 |
| 73 DISALLOW_COPY_AND_ASSIGN(MockDelegate); | 90 DISALLOW_COPY_AND_ASSIGN(MockDelegate); |
| 74 }; | 91 }; |
| 75 | 92 |
| 76 // Simple struct for describing the contents of a packet. | 93 // Simple struct for describing the contents of a packet. |
| 77 // Useful in conjunction with a SimpleQuicFrame for validating that a packet | 94 // Useful in conjunction with a SimpleQuicFrame for validating that a packet |
| 78 // contains the expected frames. | 95 // contains the expected frames. |
| 79 struct PacketContents { | 96 struct PacketContents { |
| 80 PacketContents() | 97 PacketContents() |
| 81 : num_ack_frames(0), | 98 : num_ack_frames(0), |
| 82 num_connection_close_frames(0), | 99 num_connection_close_frames(0), |
| (...skipping 26 matching lines...) Expand all Loading... |
| 109 Perspective::IS_CLIENT), | 126 Perspective::IS_CLIENT), |
| 110 generator_(42, | 127 generator_(42, |
| 111 &framer_, | 128 &framer_, |
| 112 &random_generator_, | 129 &random_generator_, |
| 113 &buffer_allocator_, | 130 &buffer_allocator_, |
| 114 &delegate_), | 131 &delegate_), |
| 115 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)) { | 132 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)) { |
| 116 creator_->SetEncrypter(ENCRYPTION_FORWARD_SECURE, | 133 creator_->SetEncrypter(ENCRYPTION_FORWARD_SECURE, |
| 117 new NullEncrypter(Perspective::IS_CLIENT)); | 134 new NullEncrypter(Perspective::IS_CLIENT)); |
| 118 creator_->set_encryption_level(ENCRYPTION_FORWARD_SECURE); | 135 creator_->set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 136 generator_.SetDelegateSavesData( |
| 137 FLAGS_quic_reloadable_flag_quic_stream_owns_data); |
| 119 } | 138 } |
| 120 | 139 |
| 121 ~QuicPacketGeneratorTest() override { | 140 ~QuicPacketGeneratorTest() override { |
| 122 for (SerializedPacket& packet : packets_) { | 141 for (SerializedPacket& packet : packets_) { |
| 123 delete[] packet.encrypted_buffer; | 142 delete[] packet.encrypted_buffer; |
| 124 ClearSerializedPacket(&packet); | 143 ClearSerializedPacket(&packet); |
| 125 } | 144 } |
| 126 } | 145 } |
| 127 | 146 |
| 128 void SavePacket(SerializedPacket* packet) { | 147 void SavePacket(SerializedPacket* packet) { |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 StrictMock<MockDelegate> delegate_; | 240 StrictMock<MockDelegate> delegate_; |
| 222 QuicPacketGenerator generator_; | 241 QuicPacketGenerator generator_; |
| 223 QuicPacketCreator* creator_; | 242 QuicPacketCreator* creator_; |
| 224 SimpleQuicFramer simple_framer_; | 243 SimpleQuicFramer simple_framer_; |
| 225 std::vector<SerializedPacket> packets_; | 244 std::vector<SerializedPacket> packets_; |
| 226 QuicAckFrame ack_frame_; | 245 QuicAckFrame ack_frame_; |
| 227 | 246 |
| 228 private: | 247 private: |
| 229 std::unique_ptr<char[]> data_array_; | 248 std::unique_ptr<char[]> data_array_; |
| 230 struct iovec iov_; | 249 struct iovec iov_; |
| 250 SimpleDataProducer producer_; |
| 231 }; | 251 }; |
| 232 | 252 |
| 233 class MockDebugDelegate : public QuicPacketCreator::DebugDelegate { | 253 class MockDebugDelegate : public QuicPacketCreator::DebugDelegate { |
| 234 public: | 254 public: |
| 235 MOCK_METHOD1(OnFrameAddedToPacket, void(const QuicFrame&)); | 255 MOCK_METHOD1(OnFrameAddedToPacket, void(const QuicFrame&)); |
| 236 }; | 256 }; |
| 237 | 257 |
| 238 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { | 258 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { |
| 239 delegate_.SetCanNotWrite(); | 259 delegate_.SetCanNotWrite(); |
| 240 | 260 |
| (...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 for (size_t i = 2; i < packets_.size(); ++i) { | 1060 for (size_t i = 2; i < packets_.size(); ++i) { |
| 1041 // Following packets only have paddings. | 1061 // Following packets only have paddings. |
| 1042 contents.num_stream_frames = 0; | 1062 contents.num_stream_frames = 0; |
| 1043 contents.num_padding_frames = 1; | 1063 contents.num_padding_frames = 1; |
| 1044 CheckPacketContains(contents, i); | 1064 CheckPacketContains(contents, i); |
| 1045 } | 1065 } |
| 1046 } | 1066 } |
| 1047 | 1067 |
| 1048 } // namespace test | 1068 } // namespace test |
| 1049 } // namespace net | 1069 } // namespace net |
| OLD | NEW |