blob: e4f3ec0330056b765070bce122d64f43b1aa4cd6 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Provides a simple interface for QUIC tests to create a variety of packets.
#ifndef NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_
#define NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_
#include "base/memory/scoped_ptr.h"
#include "net/base/request_priority.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/test_tools/mock_random.h"
#include "net/spdy/spdy_framer.h"
#include "net/spdy/spdy_protocol.h"
namespace net {
namespace test {
class QuicTestPacketMaker {
public:
QuicTestPacketMaker(QuicVersion version, QuicConnectionId connection_id);
~QuicTestPacketMaker();
scoped_ptr<QuicEncryptedPacket> MakeRstPacket(
QuicPacketSequenceNumber num,
bool include_version,
QuicStreamId stream_id,
QuicRstStreamErrorCode error_code);
scoped_ptr<QuicEncryptedPacket> MakeAckAndRstPacket(
QuicPacketSequenceNumber num,
bool include_version,
QuicStreamId stream_id,
QuicRstStreamErrorCode error_code,
QuicPacketSequenceNumber largest_received,
QuicPacketSequenceNumber least_unacked,
bool send_feedback);
scoped_ptr<QuicEncryptedPacket> MakeConnectionClosePacket(
QuicPacketSequenceNumber num);
scoped_ptr<QuicEncryptedPacket> MakeAckPacket(
QuicPacketSequenceNumber sequence_number,
QuicPacketSequenceNumber largest_received,
QuicPacketSequenceNumber least_unacked,
bool send_feedback);
scoped_ptr<QuicEncryptedPacket> MakeDataPacket(
QuicPacketSequenceNumber sequence_number,
QuicStreamId stream_id,
bool should_include_version,
bool fin,
QuicStreamOffset offset,
base::StringPiece data);
scoped_ptr<QuicEncryptedPacket> MakeRequestHeadersPacket(
QuicPacketSequenceNumber sequence_number,
QuicStreamId stream_id,
bool should_include_version,
bool fin,
const SpdyHeaderBlock& headers);
scoped_ptr<QuicEncryptedPacket> MakeResponseHeadersPacket(
QuicPacketSequenceNumber sequence_number,
QuicStreamId stream_id,
bool should_include_version,
bool fin,
const SpdyHeaderBlock& headers);
SpdyHeaderBlock GetRequestHeaders(const std::string& method,
const std::string& scheme,
const std::string& path);
SpdyHeaderBlock GetResponseHeaders(const std::string& status);
private:
scoped_ptr<QuicEncryptedPacket> MakePacket(
const QuicPacketHeader& header,
const QuicFrame& frame);
void InitializeHeader(QuicPacketSequenceNumber sequence_number,
bool should_include_version);
QuicVersion version_;
QuicConnectionId connection_id_;
SpdyFramer spdy_request_framer_;
SpdyFramer spdy_response_framer_;
MockRandom random_generator_;
QuicPacketHeader header_;
DISALLOW_COPY_AND_ASSIGN(QuicTestPacketMaker);
};
} // namespace test
} // namespace net
#endif // NET_QUIC_TEST_TOOLS_QUIC_TEST_PACKET_MAKER_H_