1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4// 5// Provides a simple interface for QUIC tests to create a variety of packets. 6 7#ifndef NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_ 8#define NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_ 9 10#include "base/memory/scoped_ptr.h" 11#include "net/base/request_priority.h" 12#include "net/quic/quic_protocol.h" 13#include "net/quic/test_tools/mock_clock.h" 14#include "net/quic/test_tools/mock_random.h" 15#include "net/spdy/spdy_framer.h" 16#include "net/spdy/spdy_protocol.h" 17 18namespace net { 19namespace test { 20 21class QuicTestPacketMaker { 22 public: 23 QuicTestPacketMaker(QuicVersion version, 24 QuicConnectionId connection_id, 25 MockClock* clock); 26 ~QuicTestPacketMaker(); 27 28 scoped_ptr<QuicEncryptedPacket> MakeRstPacket( 29 QuicPacketSequenceNumber num, 30 bool include_version, 31 QuicStreamId stream_id, 32 QuicRstStreamErrorCode error_code); 33 scoped_ptr<QuicEncryptedPacket> MakeAckAndRstPacket( 34 QuicPacketSequenceNumber num, 35 bool include_version, 36 QuicStreamId stream_id, 37 QuicRstStreamErrorCode error_code, 38 QuicPacketSequenceNumber largest_received, 39 QuicPacketSequenceNumber least_unacked, 40 bool send_feedback); 41 scoped_ptr<QuicEncryptedPacket> MakeConnectionClosePacket( 42 QuicPacketSequenceNumber num); 43 scoped_ptr<QuicEncryptedPacket> MakeAckPacket( 44 QuicPacketSequenceNumber sequence_number, 45 QuicPacketSequenceNumber largest_received, 46 QuicPacketSequenceNumber least_unacked, 47 bool send_feedback); 48 scoped_ptr<QuicEncryptedPacket> MakeDataPacket( 49 QuicPacketSequenceNumber sequence_number, 50 QuicStreamId stream_id, 51 bool should_include_version, 52 bool fin, 53 QuicStreamOffset offset, 54 base::StringPiece data); 55 scoped_ptr<QuicEncryptedPacket> MakeRequestHeadersPacket( 56 QuicPacketSequenceNumber sequence_number, 57 QuicStreamId stream_id, 58 bool should_include_version, 59 bool fin, 60 const SpdyHeaderBlock& headers); 61 scoped_ptr<QuicEncryptedPacket> MakeResponseHeadersPacket( 62 QuicPacketSequenceNumber sequence_number, 63 QuicStreamId stream_id, 64 bool should_include_version, 65 bool fin, 66 const SpdyHeaderBlock& headers); 67 68 SpdyHeaderBlock GetRequestHeaders(const std::string& method, 69 const std::string& scheme, 70 const std::string& path); 71 SpdyHeaderBlock GetResponseHeaders(const std::string& status); 72 73 private: 74 scoped_ptr<QuicEncryptedPacket> MakePacket( 75 const QuicPacketHeader& header, 76 const QuicFrame& frame); 77 78 void InitializeHeader(QuicPacketSequenceNumber sequence_number, 79 bool should_include_version); 80 81 QuicVersion version_; 82 QuicConnectionId connection_id_; 83 MockClock* clock_; // Owned by QuicStreamFactory. 84 SpdyFramer spdy_request_framer_; 85 SpdyFramer spdy_response_framer_; 86 MockRandom random_generator_; 87 QuicPacketHeader header_; 88 89 DISALLOW_COPY_AND_ASSIGN(QuicTestPacketMaker); 90}; 91 92} // namespace test 93} // namespace net 94 95#endif // NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_ 96