1 // Copyright 2015 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/quic/mock_quic_data.h"
6
7 #include "net/base/hex_utils.h"
8 #include "net/socket/socket_test_util.h"
9
10 namespace net::test {
11
MockQuicData(quic::ParsedQuicVersion version)12 MockQuicData::MockQuicData(quic::ParsedQuicVersion version)
13 : printer_(version) {}
14
15 MockQuicData::~MockQuicData() = default;
16
AddConnect(IoMode mode,int rv)17 void MockQuicData::AddConnect(IoMode mode, int rv) {
18 connect_ = std::make_unique<MockConnect>(mode, rv);
19 }
20
AddConnect(MockConnectCompleter * completer)21 void MockQuicData::AddConnect(MockConnectCompleter* completer) {
22 connect_ = std::make_unique<MockConnect>(completer);
23 }
24
AddRead(IoMode mode,std::unique_ptr<quic::QuicReceivedPacket> packet)25 void MockQuicData::AddRead(IoMode mode,
26 std::unique_ptr<quic::QuicReceivedPacket> packet) {
27 reads_.emplace_back(mode, packet->data(), packet->length(),
28 sequence_number_++,
29 static_cast<uint8_t>(packet->ecn_codepoint()));
30 packets_.push_back(std::move(packet));
31 }
AddRead(IoMode mode,std::unique_ptr<quic::QuicEncryptedPacket> packet)32 void MockQuicData::AddRead(IoMode mode,
33 std::unique_ptr<quic::QuicEncryptedPacket> packet) {
34 reads_.emplace_back(mode, packet->data(), packet->length(),
35 sequence_number_++, /*tos=*/0);
36 packets_.push_back(std::move(packet));
37 }
AddRead(IoMode mode,int rv)38 void MockQuicData::AddRead(IoMode mode, int rv) {
39 reads_.emplace_back(mode, rv, sequence_number_++);
40 }
41
AddReadPause()42 void MockQuicData::AddReadPause() {
43 // Add a sentinel value that indicates a read pause.
44 AddRead(ASYNC, ERR_IO_PENDING);
45 }
46
AddReadPauseForever()47 void MockQuicData::AddReadPauseForever() {
48 // Add a sentinel value that indicates a read pause forever.
49 AddRead(SYNCHRONOUS, ERR_IO_PENDING);
50 }
51
AddWrite(IoMode mode,std::unique_ptr<quic::QuicEncryptedPacket> packet)52 void MockQuicData::AddWrite(IoMode mode,
53 std::unique_ptr<quic::QuicEncryptedPacket> packet) {
54 writes_.emplace_back(mode, packet->data(), packet->length(),
55 sequence_number_++);
56 packets_.push_back(std::move(packet));
57 }
58
AddWrite(IoMode mode,int rv)59 void MockQuicData::AddWrite(IoMode mode, int rv) {
60 writes_.emplace_back(mode, rv, sequence_number_++);
61 }
62
AddWrite(IoMode mode,int rv,std::unique_ptr<quic::QuicEncryptedPacket> packet)63 void MockQuicData::AddWrite(IoMode mode,
64 int rv,
65 std::unique_ptr<quic::QuicEncryptedPacket> packet) {
66 writes_.emplace_back(mode, rv, sequence_number_++);
67 packets_.push_back(std::move(packet));
68 }
69
AddWritePause()70 void MockQuicData::AddWritePause() {
71 // Add a sentinel value that indicates a write pause.
72 AddWrite(ASYNC, ERR_IO_PENDING);
73 }
74
AddSocketDataToFactory(MockClientSocketFactory * factory)75 void MockQuicData::AddSocketDataToFactory(MockClientSocketFactory* factory) {
76 factory->AddSocketDataProvider(InitializeAndGetSequencedSocketData());
77 }
78
AllReadDataConsumed()79 bool MockQuicData::AllReadDataConsumed() {
80 return socket_data_->AllReadDataConsumed();
81 }
82
AllWriteDataConsumed()83 bool MockQuicData::AllWriteDataConsumed() {
84 return socket_data_->AllWriteDataConsumed();
85 }
86
ExpectAllReadDataConsumed()87 void MockQuicData::ExpectAllReadDataConsumed() {
88 socket_data_->ExpectAllReadDataConsumed();
89 }
90
ExpectAllWriteDataConsumed()91 void MockQuicData::ExpectAllWriteDataConsumed() {
92 socket_data_->ExpectAllWriteDataConsumed();
93 }
94
Resume()95 void MockQuicData::Resume() {
96 socket_data_->Resume();
97 }
98
InitializeAndGetSequencedSocketData()99 SequencedSocketData* MockQuicData::InitializeAndGetSequencedSocketData() {
100 socket_data_ = std::make_unique<SequencedSocketData>(reads_, writes_);
101 socket_data_->set_printer(&printer_);
102 if (connect_ != nullptr)
103 socket_data_->set_connect_data(*connect_);
104
105 return socket_data_.get();
106 }
107
GetSequencedSocketData()108 SequencedSocketData* MockQuicData::GetSequencedSocketData() {
109 return socket_data_.get();
110 }
111
112 } // namespace net::test
113