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
3 // found in the LICENSE file.
5 #include "net/tools/quic/test_tools/quic_test_utils.h"
7 #include "net/quic/quic_connection.h"
8 #include "net/quic/test_tools/quic_connection_peer.h"
9 #include "net/quic/test_tools/quic_test_utils.h"
10 #include "net/tools/quic/quic_epoll_connection_helper.h"
12 using base::StringPiece
;
13 using net::test::MakeAckFrame
;
14 using net::test::MockHelper
;
15 using net::test::QuicConnectionPeer
;
21 QuicPacketWriter
* NiceMockPacketWriterFactory::Create(
22 QuicConnection
* /*connection*/) const {
23 return new testing::NiceMock
<MockPacketWriter
>();
26 MockConnection::MockConnection(bool is_server
)
27 : QuicConnection(kTestConnectionId
,
28 IPEndPoint(net::test::Loopback4(), kTestPort
),
29 new testing::NiceMock
<MockHelper
>(),
30 NiceMockPacketWriterFactory(),
31 /* owns_writer= */ true,
33 /* is_secure= */ false,
34 QuicSupportedVersions()),
38 MockConnection::MockConnection(bool is_server
, bool is_secure
)
39 : QuicConnection(kTestConnectionId
,
40 IPEndPoint(net::test::Loopback4(), kTestPort
),
41 new testing::NiceMock
<MockHelper
>(),
42 NiceMockPacketWriterFactory(),
43 /* owns_writer= */ true,
46 QuicSupportedVersions()),
50 MockConnection::MockConnection(IPEndPoint address
,
52 : QuicConnection(kTestConnectionId
, address
,
53 new testing::NiceMock
<MockHelper
>(),
54 NiceMockPacketWriterFactory(),
55 /* owns_writer= */ true,
57 /* is_secure= */ false,
58 QuicSupportedVersions()),
62 MockConnection::MockConnection(QuicConnectionId connection_id
,
64 : QuicConnection(connection_id
,
65 IPEndPoint(net::test::Loopback4(), kTestPort
),
66 new testing::NiceMock
<MockHelper
>(),
67 NiceMockPacketWriterFactory(),
68 /* owns_writer= */ true,
70 /* is_secure= */ false,
71 QuicSupportedVersions()),
75 MockConnection::MockConnection(bool is_server
,
76 const QuicVersionVector
& supported_versions
)
77 : QuicConnection(kTestConnectionId
,
78 IPEndPoint(net::test::Loopback4(), kTestPort
),
79 new testing::NiceMock
<MockHelper
>(),
80 NiceMockPacketWriterFactory(),
81 /* owns_writer= */ true,
83 /* is_secure= */ false,
88 MockConnection::~MockConnection() {
91 void MockConnection::AdvanceTime(QuicTime::Delta delta
) {
92 static_cast<MockHelper
*>(helper())->AdvanceTime(delta
);
95 QuicAckFrame
MakeAckFrameWithNackRanges(
96 size_t num_nack_ranges
, QuicPacketSequenceNumber least_unacked
) {
97 QuicAckFrame ack
= MakeAckFrame(2 * num_nack_ranges
+ least_unacked
);
98 // Add enough missing packets to get num_nack_ranges nack ranges.
99 for (QuicPacketSequenceNumber i
= 1; i
< 2 * num_nack_ranges
; i
+= 2) {
100 ack
.missing_packets
.insert(least_unacked
+ i
);
105 TestSession::TestSession(QuicConnection
* connection
, const QuicConfig
& config
)
106 : QuicSession(connection
, config
),
107 crypto_stream_(nullptr) {
111 TestSession::~TestSession() {}
113 void TestSession::SetCryptoStream(QuicCryptoStream
* stream
) {
114 crypto_stream_
= stream
;
117 QuicCryptoStream
* TestSession::GetCryptoStream() {
118 return crypto_stream_
;
121 MockPacketWriter::MockPacketWriter() {
124 MockPacketWriter::~MockPacketWriter() {
127 MockQuicServerSessionVisitor::MockQuicServerSessionVisitor() {
130 MockQuicServerSessionVisitor::~MockQuicServerSessionVisitor() {
133 MockAckNotifierDelegate::MockAckNotifierDelegate() {
136 MockAckNotifierDelegate::~MockAckNotifierDelegate() {
139 TestWriterFactory::TestWriterFactory() : current_writer_(nullptr) {}
140 TestWriterFactory::~TestWriterFactory() {}
142 QuicPacketWriter
* TestWriterFactory::Create(QuicPacketWriter
* writer
,
143 QuicConnection
* connection
) {
144 return new PerConnectionPacketWriter(this, writer
, connection
);
147 void TestWriterFactory::OnPacketSent(WriteResult result
) {
148 if (current_writer_
!= nullptr && result
.status
== WRITE_STATUS_ERROR
) {
149 current_writer_
->connection()->OnWriteError(result
.error_code
);
150 current_writer_
= nullptr;
154 void TestWriterFactory::Unregister(PerConnectionPacketWriter
* writer
) {
155 if (current_writer_
== writer
) {
156 current_writer_
= nullptr;
160 TestWriterFactory::PerConnectionPacketWriter::PerConnectionPacketWriter(
161 TestWriterFactory
* factory
,
162 QuicPacketWriter
* writer
,
163 QuicConnection
* connection
)
164 : QuicPerConnectionPacketWriter(writer
, connection
),
168 TestWriterFactory::PerConnectionPacketWriter::~PerConnectionPacketWriter() {
169 factory_
->Unregister(this);
172 WriteResult
TestWriterFactory::PerConnectionPacketWriter::WritePacket(
175 const IPAddressNumber
& self_address
,
176 const IPEndPoint
& peer_address
) {
177 // A DCHECK(factory_current_writer_ == nullptr) would be wrong here -- this
178 // class may be used in a setting where connection()->OnPacketSent() is called
179 // in a different way, so TestWriterFactory::OnPacketSent might never be
181 factory_
->current_writer_
= this;
182 return QuicPerConnectionPacketWriter::WritePacket(buffer
,