quic_test_packet_maker.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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/quic_spdy_compressor.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, QuicGuid guid);
24  ~QuicTestPacketMaker();
25
26  scoped_ptr<QuicEncryptedPacket> MakeRstPacket(
27      QuicPacketSequenceNumber num,
28      bool include_version,
29      QuicStreamId stream_id,
30      QuicRstStreamErrorCode error_code);
31  scoped_ptr<QuicEncryptedPacket> MakeAckAndRstPacket(
32      QuicPacketSequenceNumber num,
33      bool include_version,
34      QuicStreamId stream_id,
35      QuicRstStreamErrorCode error_code,
36      QuicPacketSequenceNumber largest_received,
37      QuicPacketSequenceNumber least_unacked,
38      bool send_feedback);
39  scoped_ptr<QuicEncryptedPacket> MakeConnectionClosePacket(
40      QuicPacketSequenceNumber num);
41  scoped_ptr<QuicEncryptedPacket> MakeAckPacket(
42      QuicPacketSequenceNumber sequence_number,
43      QuicPacketSequenceNumber largest_received,
44      QuicPacketSequenceNumber least_unacked,
45      bool send_feedback);
46  scoped_ptr<QuicEncryptedPacket> MakeDataPacket(
47      QuicPacketSequenceNumber sequence_number,
48      QuicStreamId stream_id,
49      bool should_include_version,
50      bool fin,
51      QuicStreamOffset offset,
52      base::StringPiece data);
53  scoped_ptr<QuicEncryptedPacket> MakeRequestHeadersPacket(
54      QuicPacketSequenceNumber sequence_number,
55      QuicStreamId stream_id,
56      bool should_include_version,
57      bool fin,
58      const SpdyHeaderBlock& headers);
59  scoped_ptr<QuicEncryptedPacket> MakeResponseHeadersPacket(
60      QuicPacketSequenceNumber sequence_number,
61      QuicStreamId stream_id,
62      bool should_include_version,
63      bool fin,
64      const SpdyHeaderBlock& headers);
65
66  SpdyHeaderBlock GetRequestHeaders(const std::string& method,
67                                    const std::string& scheme,
68                                    const std::string& path);
69  std::string GetRequestString(const std::string& method,
70                               const std::string& scheme,
71                               const std::string& path);
72  SpdyHeaderBlock GetResponseHeaders(const std::string& status);
73  std::string GetResponseString(const std::string& status,
74                                const std::string& body);
75
76 private:
77  scoped_ptr<QuicEncryptedPacket> MakePacket(
78      const QuicPacketHeader& header,
79      const QuicFrame& frame);
80
81  void InitializeHeader(QuicPacketSequenceNumber sequence_number,
82                        bool should_include_version);
83
84  std::string SerializeHeaderBlock(const SpdyHeaderBlock& headers);
85
86  QuicVersion version_;
87  QuicGuid guid_;
88  SpdyFramer spdy_request_framer_;
89  SpdyFramer spdy_response_framer_;
90  MockRandom random_generator_;
91  QuicPacketHeader header_;
92  QuicSpdyCompressor compressor_;
93
94  DISALLOW_COPY_AND_ASSIGN(QuicTestPacketMaker);
95};
96
97}  // namespace test
98}  // namespace net
99
100#endif  // NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_
101