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 // Common utilities for Quic tests | 5 // Common utilities for Quic tests |
6 | 6 |
7 #ifndef NET_QUIC_TEST_TOOLS_QUIC_TEST_UTILS_H_ | 7 #ifndef NET_QUIC_TEST_TOOLS_QUIC_TEST_UTILS_H_ |
8 #define NET_QUIC_TEST_TOOLS_QUIC_TEST_UTILS_H_ | 8 #define NET_QUIC_TEST_TOOLS_QUIC_TEST_UTILS_H_ |
9 | 9 |
10 #include <vector> | 10 #include <vector> |
(...skipping 21 matching lines...) Expand all Loading... |
32 QuicData* expected); | 32 QuicData* expected); |
33 | 33 |
34 CryptoHandshakeMessage CreateChloMessage(const QuicClock* clock, | 34 CryptoHandshakeMessage CreateChloMessage(const QuicClock* clock, |
35 QuicRandom* random_generator, | 35 QuicRandom* random_generator, |
36 const string& server_hostname); | 36 const string& server_hostname); |
37 | 37 |
38 // Constructs a ClientHello crypto handshake message | 38 // Constructs a ClientHello crypto handshake message |
39 QuicPacket* ConstructClientHelloPacket(QuicGuid guid, | 39 QuicPacket* ConstructClientHelloPacket(QuicGuid guid, |
40 const QuicClock* clock, | 40 const QuicClock* clock, |
41 QuicRandom* random_generator, | 41 QuicRandom* random_generator, |
42 const std::string& server_hostname); | 42 const std::string& server_hostname, |
| 43 bool should_include_version); |
43 | 44 |
44 CryptoHandshakeMessage CreateShloMessage(const QuicClock* clock, | 45 CryptoHandshakeMessage CreateShloMessage(const QuicClock* clock, |
45 QuicRandom* random_generator, | 46 QuicRandom* random_generator, |
46 const string& server_hostname); | 47 const string& server_hostname); |
47 | 48 |
48 // Constructs a ClientHello crypto handshake message | 49 // Constructs a ClientHello crypto handshake message |
49 QuicPacket* ConstructServerHelloPacket(QuicGuid guid, | 50 QuicPacket* ConstructServerHelloPacket(QuicGuid guid, |
50 const QuicClock* clock, | 51 const QuicClock* clock, |
51 QuicRandom* random_generator, | 52 QuicRandom* random_generator, |
52 const std::string& server_hostname); | 53 const std::string& server_hostname); |
53 | 54 |
54 // Returns the length of the QuicPacket that will be created if it contains | 55 // Returns the length of the QuicPacket that will be created if it contains |
55 // a stream frame that has |payload| bytes. | 56 // a stream frame that has |payload| bytes. |
56 size_t GetPacketLengthForOneStream(bool include_version, size_t payload); | 57 size_t GetPacketLengthForOneStream(bool include_version, size_t payload); |
57 | 58 |
58 class MockFramerVisitor : public QuicFramerVisitorInterface { | 59 class MockFramerVisitor : public QuicFramerVisitorInterface { |
59 public: | 60 public: |
60 MockFramerVisitor(); | 61 MockFramerVisitor(); |
61 ~MockFramerVisitor(); | 62 ~MockFramerVisitor(); |
62 | 63 |
63 MOCK_METHOD1(OnError, void(QuicFramer* framer)); | 64 MOCK_METHOD1(OnError, void(QuicFramer* framer)); |
| 65 // The constructor sets this up to return false by default. |
| 66 MOCK_METHOD1(OnProtocolVersionMismatch, bool(QuicVersionTag version)); |
64 MOCK_METHOD0(OnPacket, void()); | 67 MOCK_METHOD0(OnPacket, void()); |
65 MOCK_METHOD1(OnPublicResetPacket, void(const QuicPublicResetPacket& header)); | 68 MOCK_METHOD1(OnPublicResetPacket, void(const QuicPublicResetPacket& header)); |
| 69 MOCK_METHOD1(OnVersionNegotiationPacket, |
| 70 void(const QuicVersionNegotiationPacket& packet)); |
66 MOCK_METHOD0(OnRevivedPacket, void()); | 71 MOCK_METHOD0(OnRevivedPacket, void()); |
67 // The constructor set this up to return true by default. | 72 // The constructor sets this up to return true by default. |
68 MOCK_METHOD1(OnPacketHeader, bool(const QuicPacketHeader& header)); | 73 MOCK_METHOD1(OnPacketHeader, bool(const QuicPacketHeader& header)); |
69 MOCK_METHOD1(OnFecProtectedPayload, void(base::StringPiece payload)); | 74 MOCK_METHOD1(OnFecProtectedPayload, void(base::StringPiece payload)); |
70 MOCK_METHOD1(OnStreamFrame, void(const QuicStreamFrame& frame)); | 75 MOCK_METHOD1(OnStreamFrame, void(const QuicStreamFrame& frame)); |
71 MOCK_METHOD1(OnAckFrame, void(const QuicAckFrame& frame)); | 76 MOCK_METHOD1(OnAckFrame, void(const QuicAckFrame& frame)); |
72 MOCK_METHOD1(OnCongestionFeedbackFrame, | 77 MOCK_METHOD1(OnCongestionFeedbackFrame, |
73 void(const QuicCongestionFeedbackFrame& frame)); | 78 void(const QuicCongestionFeedbackFrame& frame)); |
74 MOCK_METHOD1(OnFecData, void(const QuicFecData& fec)); | 79 MOCK_METHOD1(OnFecData, void(const QuicFecData& fec)); |
75 MOCK_METHOD1(OnRstStreamFrame, void(const QuicRstStreamFrame& frame)); | 80 MOCK_METHOD1(OnRstStreamFrame, void(const QuicRstStreamFrame& frame)); |
76 MOCK_METHOD1(OnConnectionCloseFrame, | 81 MOCK_METHOD1(OnConnectionCloseFrame, |
77 void(const QuicConnectionCloseFrame& frame)); | 82 void(const QuicConnectionCloseFrame& frame)); |
78 MOCK_METHOD1(OnGoAwayFrame, void(const QuicGoAwayFrame& frame)); | 83 MOCK_METHOD1(OnGoAwayFrame, void(const QuicGoAwayFrame& frame)); |
79 MOCK_METHOD0(OnPacketComplete, void()); | 84 MOCK_METHOD0(OnPacketComplete, void()); |
80 | 85 |
81 private: | 86 private: |
82 DISALLOW_COPY_AND_ASSIGN(MockFramerVisitor); | 87 DISALLOW_COPY_AND_ASSIGN(MockFramerVisitor); |
83 }; | 88 }; |
84 | 89 |
85 class NoOpFramerVisitor : public QuicFramerVisitorInterface { | 90 class NoOpFramerVisitor : public QuicFramerVisitorInterface { |
86 public: | 91 public: |
87 NoOpFramerVisitor() {} | 92 NoOpFramerVisitor() {} |
88 | 93 |
89 virtual void OnError(QuicFramer* framer) OVERRIDE {} | 94 virtual void OnError(QuicFramer* framer) OVERRIDE {} |
90 virtual void OnPacket() OVERRIDE {} | 95 virtual void OnPacket() OVERRIDE {} |
91 virtual void OnPublicResetPacket( | 96 virtual void OnPublicResetPacket( |
92 const QuicPublicResetPacket& packet) OVERRIDE {} | 97 const QuicPublicResetPacket& packet) OVERRIDE {} |
| 98 virtual void OnVersionNegotiationPacket( |
| 99 const QuicVersionNegotiationPacket& packet) OVERRIDE {} |
93 virtual void OnRevivedPacket() OVERRIDE {} | 100 virtual void OnRevivedPacket() OVERRIDE {} |
| 101 virtual bool OnProtocolVersionMismatch(QuicVersionTag version) OVERRIDE; |
94 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; | 102 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; |
95 virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE {} | 103 virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE {} |
96 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE {} | 104 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE {} |
97 virtual void OnAckFrame(const QuicAckFrame& frame) OVERRIDE {} | 105 virtual void OnAckFrame(const QuicAckFrame& frame) OVERRIDE {} |
98 virtual void OnCongestionFeedbackFrame( | 106 virtual void OnCongestionFeedbackFrame( |
99 const QuicCongestionFeedbackFrame& frame) OVERRIDE {} | 107 const QuicCongestionFeedbackFrame& frame) OVERRIDE {} |
100 virtual void OnFecData(const QuicFecData& fec) OVERRIDE {} | 108 virtual void OnFecData(const QuicFecData& fec) OVERRIDE {} |
101 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE {} | 109 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE {} |
102 virtual void OnConnectionCloseFrame( | 110 virtual void OnConnectionCloseFrame( |
103 const QuicConnectionCloseFrame& frame) OVERRIDE {} | 111 const QuicConnectionCloseFrame& frame) OVERRIDE {} |
(...skipping 19 matching lines...) Expand all Loading... |
123 private: | 131 private: |
124 QuicPublicResetPacket public_reset_packet_; | 132 QuicPublicResetPacket public_reset_packet_; |
125 }; | 133 }; |
126 | 134 |
127 class FramerVisitorCapturingFrames : public NoOpFramerVisitor { | 135 class FramerVisitorCapturingFrames : public NoOpFramerVisitor { |
128 public: | 136 public: |
129 FramerVisitorCapturingFrames(); | 137 FramerVisitorCapturingFrames(); |
130 virtual ~FramerVisitorCapturingFrames(); | 138 virtual ~FramerVisitorCapturingFrames(); |
131 | 139 |
132 // NoOpFramerVisitor | 140 // NoOpFramerVisitor |
133 | 141 virtual void OnVersionNegotiationPacket( |
| 142 const QuicVersionNegotiationPacket& packet) OVERRIDE; |
134 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; | 143 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; |
135 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; | 144 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; |
136 virtual void OnAckFrame(const QuicAckFrame& frame) OVERRIDE; | 145 virtual void OnAckFrame(const QuicAckFrame& frame) OVERRIDE; |
137 virtual void OnCongestionFeedbackFrame( | 146 virtual void OnCongestionFeedbackFrame( |
138 const QuicCongestionFeedbackFrame& frame) OVERRIDE; | 147 const QuicCongestionFeedbackFrame& frame) OVERRIDE; |
139 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE; | 148 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE; |
140 virtual void OnConnectionCloseFrame( | 149 virtual void OnConnectionCloseFrame( |
141 const QuicConnectionCloseFrame& frame) OVERRIDE; | 150 const QuicConnectionCloseFrame& frame) OVERRIDE; |
142 virtual void OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE; | 151 virtual void OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE; |
143 | 152 |
144 size_t frame_count() const { return frame_count_; } | 153 size_t frame_count() const { return frame_count_; } |
145 QuicPacketHeader* header() { return &header_; } | 154 QuicPacketHeader* header() { return &header_; } |
146 const std::vector<QuicStreamFrame>* stream_frames() const { | 155 const std::vector<QuicStreamFrame>* stream_frames() const { |
147 return &stream_frames_; | 156 return &stream_frames_; |
148 } | 157 } |
149 QuicAckFrame* ack() { return ack_.get(); } | 158 QuicAckFrame* ack() { return ack_.get(); } |
150 QuicCongestionFeedbackFrame* feedback() { return feedback_.get(); } | 159 QuicCongestionFeedbackFrame* feedback() { return feedback_.get(); } |
151 QuicRstStreamFrame* rst() { return rst_.get(); } | 160 QuicRstStreamFrame* rst() { return rst_.get(); } |
152 QuicConnectionCloseFrame* close() { return close_.get(); } | 161 QuicConnectionCloseFrame* close() { return close_.get(); } |
153 QuicGoAwayFrame* goaway() { return goaway_.get(); } | 162 QuicGoAwayFrame* goaway() { return goaway_.get(); } |
| 163 QuicVersionNegotiationPacket* version_negotiation_packet() { |
| 164 return version_negotiation_packet_.get(); |
| 165 } |
154 | 166 |
155 private: | 167 private: |
156 size_t frame_count_; | 168 size_t frame_count_; |
157 QuicPacketHeader header_; | 169 QuicPacketHeader header_; |
158 std::vector<QuicStreamFrame> stream_frames_; | 170 std::vector<QuicStreamFrame> stream_frames_; |
159 scoped_ptr<QuicAckFrame> ack_; | 171 scoped_ptr<QuicAckFrame> ack_; |
160 scoped_ptr<QuicCongestionFeedbackFrame> feedback_; | 172 scoped_ptr<QuicCongestionFeedbackFrame> feedback_; |
161 scoped_ptr<QuicRstStreamFrame> rst_; | 173 scoped_ptr<QuicRstStreamFrame> rst_; |
162 scoped_ptr<QuicConnectionCloseFrame> close_; | 174 scoped_ptr<QuicConnectionCloseFrame> close_; |
163 scoped_ptr<QuicGoAwayFrame> goaway_; | 175 scoped_ptr<QuicGoAwayFrame> goaway_; |
| 176 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; |
164 | 177 |
165 DISALLOW_COPY_AND_ASSIGN(FramerVisitorCapturingFrames); | 178 DISALLOW_COPY_AND_ASSIGN(FramerVisitorCapturingFrames); |
166 }; | 179 }; |
167 | 180 |
168 class MockConnectionVisitor : public QuicConnectionVisitorInterface { | 181 class MockConnectionVisitor : public QuicConnectionVisitorInterface { |
169 public: | 182 public: |
170 MockConnectionVisitor(); | 183 MockConnectionVisitor(); |
171 virtual ~MockConnectionVisitor(); | 184 virtual ~MockConnectionVisitor(); |
172 | 185 |
173 MOCK_METHOD4(OnPacket, bool(const IPEndPoint& self_address, | 186 MOCK_METHOD4(OnPacket, bool(const IPEndPoint& self_address, |
(...skipping 28 matching lines...) Expand all Loading... |
202 MOCK_METHOD0(UnregisterSendAlarmIfRegistered, void()); | 215 MOCK_METHOD0(UnregisterSendAlarmIfRegistered, void()); |
203 MOCK_METHOD0(ClearAckAlarm, void()); | 216 MOCK_METHOD0(ClearAckAlarm, void()); |
204 private: | 217 private: |
205 const MockClock clock_; | 218 const MockClock clock_; |
206 MockRandom random_generator_; | 219 MockRandom random_generator_; |
207 }; | 220 }; |
208 | 221 |
209 class MockConnection : public QuicConnection { | 222 class MockConnection : public QuicConnection { |
210 public: | 223 public: |
211 // Uses a MockHelper. | 224 // Uses a MockHelper. |
212 MockConnection(QuicGuid guid, IPEndPoint address); | 225 MockConnection(QuicGuid guid, IPEndPoint address, bool is_server); |
213 MockConnection(QuicGuid guid, | 226 MockConnection(QuicGuid guid, |
214 IPEndPoint address, | 227 IPEndPoint address, |
215 QuicConnectionHelperInterface* helper); | 228 QuicConnectionHelperInterface* helper, |
| 229 bool is_server); |
216 virtual ~MockConnection(); | 230 virtual ~MockConnection(); |
217 | 231 |
218 MOCK_METHOD3(ProcessUdpPacket, void(const IPEndPoint& self_address, | 232 MOCK_METHOD3(ProcessUdpPacket, void(const IPEndPoint& self_address, |
219 const IPEndPoint& peer_address, | 233 const IPEndPoint& peer_address, |
220 const QuicEncryptedPacket& packet)); | 234 const QuicEncryptedPacket& packet)); |
221 MOCK_METHOD1(SendConnectionClose, void(QuicErrorCode error)); | 235 MOCK_METHOD1(SendConnectionClose, void(QuicErrorCode error)); |
222 | 236 |
223 MOCK_METHOD2(SendRstStream, void(QuicStreamId id, | 237 MOCK_METHOD2(SendRstStream, void(QuicStreamId id, |
224 QuicErrorCode error)); | 238 QuicErrorCode error)); |
225 MOCK_METHOD3(SendGoAway, void(QuicErrorCode error, | 239 MOCK_METHOD3(SendGoAway, void(QuicErrorCode error, |
226 QuicStreamId last_good_stream_id, | 240 QuicStreamId last_good_stream_id, |
227 const string& reason)); | 241 const string& reason)); |
228 MOCK_METHOD0(OnCanWrite, bool()); | 242 MOCK_METHOD0(OnCanWrite, bool()); |
229 | 243 |
230 void ProcessUdpPacketInternal(const IPEndPoint& self_address, | 244 void ProcessUdpPacketInternal(const IPEndPoint& self_address, |
231 const IPEndPoint& peer_address, | 245 const IPEndPoint& peer_address, |
232 const QuicEncryptedPacket& packet) { | 246 const QuicEncryptedPacket& packet) { |
233 QuicConnection::ProcessUdpPacket(self_address, peer_address, packet); | 247 QuicConnection::ProcessUdpPacket(self_address, peer_address, packet); |
234 } | 248 } |
235 | 249 |
| 250 virtual bool OnProtocolVersionMismatch(QuicVersionTag version) OVERRIDE { |
| 251 return false; |
| 252 } |
| 253 |
236 private: | 254 private: |
237 scoped_ptr<QuicConnectionHelperInterface> helper_; | 255 scoped_ptr<QuicConnectionHelperInterface> helper_; |
238 DISALLOW_COPY_AND_ASSIGN(MockConnection); | 256 DISALLOW_COPY_AND_ASSIGN(MockConnection); |
239 }; | 257 }; |
240 | 258 |
241 class PacketSavingConnection : public MockConnection { | 259 class PacketSavingConnection : public MockConnection { |
242 public: | 260 public: |
243 PacketSavingConnection(QuicGuid guid, IPEndPoint address); | 261 PacketSavingConnection(QuicGuid guid, IPEndPoint address, bool is_server); |
244 virtual ~PacketSavingConnection(); | 262 virtual ~PacketSavingConnection(); |
245 | 263 |
246 virtual bool SendOrQueuePacket(QuicPacketSequenceNumber sequence_number, | 264 virtual bool SendOrQueuePacket(QuicPacketSequenceNumber sequence_number, |
247 QuicPacket* packet, | 265 QuicPacket* packet, |
248 QuicPacketEntropyHash entropy_hash, | 266 QuicPacketEntropyHash entropy_hash, |
249 bool has_retransmittable_data) OVERRIDE; | 267 bool has_retransmittable_data) OVERRIDE; |
250 | 268 |
251 std::vector<QuicPacket*> packets_; | 269 std::vector<QuicPacket*> packets_; |
252 | 270 |
253 private: | 271 private: |
(...skipping 30 matching lines...) Expand all Loading... |
284 virtual ~MockSendAlgorithm(); | 302 virtual ~MockSendAlgorithm(); |
285 | 303 |
286 MOCK_METHOD4(OnIncomingQuicCongestionFeedbackFrame, | 304 MOCK_METHOD4(OnIncomingQuicCongestionFeedbackFrame, |
287 void(const QuicCongestionFeedbackFrame&, | 305 void(const QuicCongestionFeedbackFrame&, |
288 QuicTime feedback_receive_time, | 306 QuicTime feedback_receive_time, |
289 QuicBandwidth sent_bandwidth, | 307 QuicBandwidth sent_bandwidth, |
290 const SentPacketsMap&)); | 308 const SentPacketsMap&)); |
291 MOCK_METHOD3(OnIncomingAck, | 309 MOCK_METHOD3(OnIncomingAck, |
292 void(QuicPacketSequenceNumber, QuicByteCount, QuicTime::Delta)); | 310 void(QuicPacketSequenceNumber, QuicByteCount, QuicTime::Delta)); |
293 MOCK_METHOD1(OnIncomingLoss, void(QuicTime)); | 311 MOCK_METHOD1(OnIncomingLoss, void(QuicTime)); |
294 MOCK_METHOD5(SentPacket, void(QuicTime sent_time, QuicPacketSequenceNumber, | 312 MOCK_METHOD4(SentPacket, void(QuicTime sent_time, QuicPacketSequenceNumber, |
295 QuicByteCount, bool, bool)); | 313 QuicByteCount, bool)); |
296 MOCK_METHOD2(TimeUntilSend, QuicTime::Delta(QuicTime now, bool)); | 314 MOCK_METHOD2(AbandoningPacket, void(QuicPacketSequenceNumber sequence_number, |
| 315 QuicByteCount abandoned_bytes)); |
| 316 MOCK_METHOD3(TimeUntilSend, QuicTime::Delta(QuicTime now, bool, bool)); |
297 MOCK_METHOD0(BandwidthEstimate, QuicBandwidth(void)); | 317 MOCK_METHOD0(BandwidthEstimate, QuicBandwidth(void)); |
| 318 MOCK_METHOD0(SmoothedRtt, QuicTime::Delta(void)); |
298 | 319 |
299 private: | 320 private: |
300 DISALLOW_COPY_AND_ASSIGN(MockSendAlgorithm); | 321 DISALLOW_COPY_AND_ASSIGN(MockSendAlgorithm); |
301 }; | 322 }; |
302 | 323 |
303 class TestEntropyCalculator : | 324 class TestEntropyCalculator : |
304 public QuicReceivedEntropyHashCalculatorInterface { | 325 public QuicReceivedEntropyHashCalculatorInterface { |
305 public: | 326 public: |
306 TestEntropyCalculator() { } | 327 TestEntropyCalculator() { } |
307 virtual ~TestEntropyCalculator() { } | 328 virtual ~TestEntropyCalculator() { } |
308 | 329 |
309 virtual QuicPacketEntropyHash ReceivedEntropyHash( | 330 virtual QuicPacketEntropyHash ReceivedEntropyHash( |
310 QuicPacketSequenceNumber sequence_number) const OVERRIDE; | 331 QuicPacketSequenceNumber sequence_number) const OVERRIDE; |
311 | 332 |
312 }; | 333 }; |
313 | 334 |
314 } // namespace test | 335 } // namespace test |
315 | 336 |
316 } // namespace net | 337 } // namespace net |
317 | 338 |
318 #endif // NET_QUIC_TEST_TOOLS_QUIC_TEST_UTILS_H_ | 339 #endif // NET_QUIC_TEST_TOOLS_QUIC_TEST_UTILS_H_ |
OLD | NEW |