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