OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_packet_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/crypto/null_encrypter.h" | 8 #include "net/quic/crypto/null_encrypter.h" |
9 #include "net/quic/quic_utils.h" | 9 #include "net/quic/quic_utils.h" |
10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 : framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), | 25 : framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), |
26 id_(1), | 26 id_(1), |
27 sequence_number_(0), | 27 sequence_number_(0), |
28 guid_(2), | 28 guid_(2), |
29 data_("foo"), | 29 data_("foo"), |
30 utils_(guid_, &framer_) { | 30 utils_(guid_, &framer_) { |
31 framer_.set_visitor(&framer_visitor_); | 31 framer_.set_visitor(&framer_visitor_); |
32 } | 32 } |
33 ~QuicPacketCreatorTest() { | 33 ~QuicPacketCreatorTest() { |
34 STLDeleteValues(&packets_); | 34 STLDeleteValues(&packets_); |
| 35 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { |
| 36 QuicConnection::DeleteEnclosedFrame(&(*it)); |
| 37 } |
35 } | 38 } |
36 | 39 |
37 void ProcessPackets() { | 40 void ProcessPackets() { |
38 for (size_t i = 0; i < packets_.size(); ++i) { | 41 for (size_t i = 0; i < packets_.size(); ++i) { |
39 scoped_ptr<QuicEncryptedPacket> encrypted( | 42 scoped_ptr<QuicEncryptedPacket> encrypted( |
40 framer_.EncryptPacket(*packets_[i].second)); | 43 framer_.EncryptPacket(*packets_[i].second)); |
41 framer_.ProcessPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 44 framer_.ProcessPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
42 } | 45 } |
43 } | 46 } |
44 | 47 |
45 vector<QuicPacketCreator::PacketPair> packets_; | 48 vector<QuicPacketCreator::PacketPair> packets_; |
| 49 QuicFrames frames_; |
46 QuicFramer framer_; | 50 QuicFramer framer_; |
47 testing::StrictMock<MockFramerVisitor> framer_visitor_; | 51 testing::StrictMock<MockFramerVisitor> framer_visitor_; |
48 QuicStreamId id_; | 52 QuicStreamId id_; |
49 QuicPacketSequenceNumber sequence_number_; | 53 QuicPacketSequenceNumber sequence_number_; |
50 QuicGuid guid_; | 54 QuicGuid guid_; |
51 string data_; | 55 string data_; |
52 QuicPacketCreator utils_; | 56 QuicPacketCreator utils_; |
53 }; | 57 }; |
54 | 58 |
55 TEST_F(QuicPacketCreatorTest, DataToStreamBasic) { | 59 TEST_F(QuicPacketCreatorTest, DataToStreamBasic) { |
56 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 60 size_t bytes_consumed = utils_.DataToStream( |
| 61 id_, data_, 0, true, &packets_, &frames_); |
57 | 62 |
58 ASSERT_EQ(1u, packets_.size()); | 63 ASSERT_EQ(1u, packets_.size()); |
59 ASSERT_EQ(1u, utils_.sequence_number()); | 64 ASSERT_EQ(1u, utils_.sequence_number()); |
60 ASSERT_EQ(data_.size(), bytes_consumed); | 65 ASSERT_EQ(data_.size(), bytes_consumed); |
61 | 66 |
62 InSequence s; | 67 InSequence s; |
63 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 68 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
64 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 69 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
65 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 70 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
66 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 71 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
67 | 72 |
68 ProcessPackets(); | 73 ProcessPackets(); |
69 } | 74 } |
70 | 75 |
71 TEST_F(QuicPacketCreatorTest, DataToStreamFec) { | 76 TEST_F(QuicPacketCreatorTest, DataToStreamFec) { |
72 utils_.options()->use_fec = true; | 77 utils_.options()->use_fec = true; |
73 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 78 size_t bytes_consumed = utils_.DataToStream( |
| 79 id_, data_, 0, true, &packets_, &frames_); |
74 | 80 |
75 ASSERT_EQ(2u, packets_.size()); | 81 ASSERT_EQ(2u, packets_.size()); |
76 ASSERT_EQ(2u, utils_.sequence_number()); | 82 ASSERT_EQ(2u, utils_.sequence_number()); |
77 ASSERT_EQ(data_.size(), bytes_consumed); | 83 ASSERT_EQ(data_.size(), bytes_consumed); |
78 | 84 |
79 InSequence s; | 85 InSequence s; |
80 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 86 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
81 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 87 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
82 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); | 88 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
83 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 89 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
84 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 90 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
85 | 91 |
86 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 92 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
87 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 93 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
88 EXPECT_CALL(framer_visitor_, OnFecData(_)); | 94 EXPECT_CALL(framer_visitor_, OnFecData(_)); |
89 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 95 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
90 | 96 |
91 ProcessPackets(); | 97 ProcessPackets(); |
92 } | 98 } |
93 | 99 |
94 TEST_F(QuicPacketCreatorTest, DataToStreamFecHandled) { | 100 TEST_F(QuicPacketCreatorTest, DataToStreamFecHandled) { |
95 utils_.options()->use_fec = true; | 101 utils_.options()->use_fec = true; |
96 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 102 size_t bytes_consumed = utils_.DataToStream( |
| 103 id_, data_, 0, true, &packets_, &frames_); |
97 ASSERT_EQ(data_.size(), bytes_consumed); | 104 ASSERT_EQ(data_.size(), bytes_consumed); |
98 | 105 |
99 ASSERT_EQ(2u, packets_.size()); | 106 ASSERT_EQ(2u, packets_.size()); |
100 ASSERT_EQ(2u, utils_.sequence_number()); | 107 ASSERT_EQ(2u, utils_.sequence_number()); |
101 | 108 |
102 QuicFecData fec_data; | 109 QuicFecData fec_data; |
103 fec_data.fec_group = 1; | 110 fec_data.fec_group = 1; |
104 fec_data.min_protected_packet_sequence_number = 1; | 111 fec_data.min_protected_packet_sequence_number = 1; |
105 fec_data.redundancy = packets_[0].second->FecProtectedData(); | 112 fec_data.redundancy = packets_[0].second->FecProtectedData(); |
106 | 113 |
(...skipping 17 matching lines...) Expand all Loading... |
124 EXPECT_CALL(framer_visitor_, OnRevivedPacket()); | 131 EXPECT_CALL(framer_visitor_, OnRevivedPacket()); |
125 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 132 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
126 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 133 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
127 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 134 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
128 | 135 |
129 QuicPacketHeader header; | 136 QuicPacketHeader header; |
130 framer_.ProcessRevivedPacket(header, fec_data.redundancy); | 137 framer_.ProcessRevivedPacket(header, fec_data.redundancy); |
131 } | 138 } |
132 | 139 |
133 TEST_F(QuicPacketCreatorTest, DataToStreamSkipFin) { | 140 TEST_F(QuicPacketCreatorTest, DataToStreamSkipFin) { |
134 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, false, &packets_); | 141 size_t bytes_consumed = utils_.DataToStream( |
| 142 id_, data_, 0, false, &packets_, &frames_); |
135 ASSERT_EQ(data_.size(), bytes_consumed); | 143 ASSERT_EQ(data_.size(), bytes_consumed); |
136 | 144 |
137 ASSERT_EQ(1u, packets_.size()); | 145 ASSERT_EQ(1u, packets_.size()); |
138 ASSERT_EQ(1u, utils_.sequence_number()); | 146 ASSERT_EQ(1u, utils_.sequence_number()); |
139 | 147 |
140 InSequence s; | 148 InSequence s; |
141 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 149 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
142 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 150 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
143 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 151 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
144 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 152 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
145 | 153 |
146 ProcessPackets(); | 154 ProcessPackets(); |
147 } | 155 } |
148 | 156 |
149 TEST_F(QuicPacketCreatorTest, NoData) { | 157 TEST_F(QuicPacketCreatorTest, NoData) { |
150 data_ = ""; | 158 data_ = ""; |
151 | 159 |
152 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 160 size_t bytes_consumed = utils_.DataToStream( |
| 161 id_, data_, 0, true, &packets_, &frames_); |
153 ASSERT_EQ(data_.size(), bytes_consumed); | 162 ASSERT_EQ(data_.size(), bytes_consumed); |
154 | 163 |
155 ASSERT_EQ(1u, packets_.size()); | 164 ASSERT_EQ(1u, packets_.size()); |
156 ASSERT_EQ(1u, utils_.sequence_number()); | 165 ASSERT_EQ(1u, utils_.sequence_number()); |
157 | 166 |
158 InSequence s; | 167 InSequence s; |
159 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 168 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
160 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 169 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
161 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 170 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
162 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 171 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
163 | 172 |
164 ProcessPackets(); | 173 ProcessPackets(); |
165 } | 174 } |
166 | 175 |
167 TEST_F(QuicPacketCreatorTest, MultiplePackets) { | 176 TEST_F(QuicPacketCreatorTest, MultiplePackets) { |
168 size_t ciphertext_size = NullEncrypter().GetCiphertextSize(2); | 177 size_t ciphertext_size = NullEncrypter().GetCiphertextSize(2); |
169 utils_.options()->max_packet_length = | 178 utils_.options()->max_packet_length = |
170 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); | 179 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); |
171 | 180 |
172 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 181 size_t bytes_consumed = utils_.DataToStream( |
| 182 id_, data_, 0, true, &packets_, &frames_); |
173 ASSERT_EQ(data_.size(), bytes_consumed); | 183 ASSERT_EQ(data_.size(), bytes_consumed); |
174 | 184 |
175 ASSERT_EQ(2u, packets_.size()); | 185 ASSERT_EQ(2u, packets_.size()); |
176 ASSERT_EQ(2u, utils_.sequence_number()); | 186 ASSERT_EQ(2u, utils_.sequence_number()); |
177 | 187 |
178 InSequence s; | 188 InSequence s; |
179 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 189 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
180 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 190 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
181 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 191 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
182 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 192 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
183 | 193 |
184 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 194 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
185 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 195 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
186 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 196 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
187 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 197 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
188 | 198 |
189 ProcessPackets(); | 199 ProcessPackets(); |
190 } | 200 } |
191 | 201 |
192 TEST_F(QuicPacketCreatorTest, MultiplePacketsWithLimits) { | 202 TEST_F(QuicPacketCreatorTest, MultiplePacketsWithLimits) { |
193 const size_t kPayloadBytesPerPacket = 2; | 203 const size_t kPayloadBytesPerPacket = 2; |
194 | 204 |
195 size_t ciphertext_size = NullEncrypter().GetCiphertextSize( | 205 size_t ciphertext_size = NullEncrypter().GetCiphertextSize( |
196 kPayloadBytesPerPacket); | 206 kPayloadBytesPerPacket); |
197 utils_.options()->max_packet_length = | 207 utils_.options()->max_packet_length = |
198 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); | 208 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); |
199 utils_.options()->max_num_packets = 1; | 209 utils_.options()->max_num_packets = 1; |
200 | 210 |
201 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 211 size_t bytes_consumed = utils_.DataToStream( |
| 212 id_, data_, 0, true, &packets_, &frames_); |
202 ASSERT_EQ(kPayloadBytesPerPacket, bytes_consumed); | 213 ASSERT_EQ(kPayloadBytesPerPacket, bytes_consumed); |
203 | 214 |
204 ASSERT_EQ(1u, packets_.size()); | 215 ASSERT_EQ(1u, packets_.size()); |
205 ASSERT_EQ(1u, utils_.sequence_number()); | 216 ASSERT_EQ(1u, utils_.sequence_number()); |
206 | 217 |
207 InSequence s; | 218 InSequence s; |
208 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 219 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
209 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 220 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
210 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 221 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
211 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 222 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
212 | 223 |
213 ProcessPackets(); | 224 ProcessPackets(); |
214 } | 225 } |
215 | 226 |
216 } // namespace | 227 } // namespace |
217 } // namespace test | 228 } // namespace test |
218 } // namespace net | 229 } // namespace net |
OLD | NEW |