Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: net/tools/quic/quic_dispatcher_test.cc

Issue 1028633006: Low-impact. Dispatcher now uses QuicServerSession, not QuicSession. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Limit_send_algorithm_max_CWND_88747441
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/tools/quic/quic_dispatcher.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/tools/quic/quic_dispatcher.h" 5 #include "net/tools/quic/quic_dispatcher.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/strings/string_piece.h" 9 #include "base/strings/string_piece.h"
10 #include "net/quic/crypto/crypto_handshake.h" 10 #include "net/quic/crypto/crypto_handshake.h"
(...skipping 23 matching lines...) Expand all
34 using testing::InSequence; 34 using testing::InSequence;
35 using testing::Invoke; 35 using testing::Invoke;
36 using testing::WithoutArgs; 36 using testing::WithoutArgs;
37 using testing::_; 37 using testing::_;
38 38
39 namespace net { 39 namespace net {
40 namespace tools { 40 namespace tools {
41 namespace test { 41 namespace test {
42 namespace { 42 namespace {
43 43
44 class TestServerSession : public QuicServerSession {
45 public:
46 TestServerSession(const QuicConfig& config, QuicConnection* connection)
47 : QuicServerSession(config, connection, nullptr) {}
48 ~TestServerSession() override{};
49
50 MOCK_METHOD2(OnConnectionClosed, void(QuicErrorCode error, bool from_peer));
51 MOCK_METHOD1(CreateIncomingDataStream, QuicDataStream*(QuicStreamId id));
52 MOCK_METHOD0(CreateOutgoingDataStream, QuicDataStream*());
53
54 private:
55 DISALLOW_COPY_AND_ASSIGN(TestServerSession);
56 };
57
44 class TestDispatcher : public QuicDispatcher { 58 class TestDispatcher : public QuicDispatcher {
45 public: 59 public:
46 explicit TestDispatcher(const QuicConfig& config, 60 explicit TestDispatcher(const QuicConfig& config,
47 const QuicCryptoServerConfig& crypto_config, 61 const QuicCryptoServerConfig& crypto_config,
48 EpollServer* eps) 62 EpollServer* eps)
49 : QuicDispatcher(config, 63 : QuicDispatcher(config,
50 crypto_config, 64 crypto_config,
51 QuicSupportedVersions(), 65 QuicSupportedVersions(),
52 new QuicDispatcher::DefaultPacketWriterFactory(), 66 new QuicDispatcher::DefaultPacketWriterFactory(),
53 eps) { 67 eps) {
54 } 68 }
55 69
56 MOCK_METHOD3(CreateQuicSession, QuicSession*( 70 MOCK_METHOD3(CreateQuicSession,
57 QuicConnectionId connection_id, 71 QuicServerSession*(QuicConnectionId connection_id,
58 const IPEndPoint& server_address, 72 const IPEndPoint& server_address,
59 const IPEndPoint& client_address)); 73 const IPEndPoint& client_address));
60 74
61 using QuicDispatcher::current_server_address; 75 using QuicDispatcher::current_server_address;
62 using QuicDispatcher::current_client_address; 76 using QuicDispatcher::current_client_address;
63 }; 77 };
64 78
65 // A Connection class which unregisters the session from the dispatcher 79 // A Connection class which unregisters the session from the dispatcher
66 // when sending connection close. 80 // when sending connection close.
67 // It'd be slightly more realistic to do this from the Session but it would 81 // It'd be slightly more realistic to do this from the Session but it would
68 // involve a lot more mocking. 82 // involve a lot more mocking.
69 class MockServerConnection : public MockConnection { 83 class MockServerConnection : public MockConnection {
70 public: 84 public:
71 MockServerConnection(QuicConnectionId connection_id, 85 MockServerConnection(QuicConnectionId connection_id,
72 QuicDispatcher* dispatcher) 86 QuicDispatcher* dispatcher)
73 : MockConnection(connection_id, Perspective::IS_SERVER), 87 : MockConnection(connection_id, Perspective::IS_SERVER),
74 dispatcher_(dispatcher) {} 88 dispatcher_(dispatcher) {}
75 89
76 void UnregisterOnConnectionClosed() { 90 void UnregisterOnConnectionClosed() {
77 LOG(ERROR) << "Unregistering " << connection_id(); 91 LOG(ERROR) << "Unregistering " << connection_id();
78 dispatcher_->OnConnectionClosed(connection_id(), QUIC_NO_ERROR); 92 dispatcher_->OnConnectionClosed(connection_id(), QUIC_NO_ERROR);
79 } 93 }
94
80 private: 95 private:
81 QuicDispatcher* dispatcher_; 96 QuicDispatcher* dispatcher_;
82 }; 97 };
83 98
84 QuicSession* CreateSession(QuicDispatcher* dispatcher, 99 QuicServerSession* CreateSession(QuicDispatcher* dispatcher,
85 QuicConnectionId connection_id, 100 const QuicConfig& config,
86 const IPEndPoint& client_address, 101 QuicConnectionId connection_id,
87 MockSession** session) { 102 const IPEndPoint& client_address,
103 TestServerSession** session) {
88 MockServerConnection* connection = 104 MockServerConnection* connection =
89 new MockServerConnection(connection_id, dispatcher); 105 new MockServerConnection(connection_id, dispatcher);
90 *session = new MockSession(connection); 106 *session = new TestServerSession(config, connection);
107 connection->set_visitor(*session);
91 ON_CALL(*connection, SendConnectionClose(_)).WillByDefault( 108 ON_CALL(*connection, SendConnectionClose(_)).WillByDefault(
92 WithoutArgs(Invoke( 109 WithoutArgs(Invoke(
93 connection, &MockServerConnection::UnregisterOnConnectionClosed))); 110 connection, &MockServerConnection::UnregisterOnConnectionClosed)));
94 EXPECT_CALL(*reinterpret_cast<MockConnection*>((*session)->connection()), 111 EXPECT_CALL(*reinterpret_cast<MockConnection*>((*session)->connection()),
95 ProcessUdpPacket(_, client_address, _)); 112 ProcessUdpPacket(_, client_address, _));
96 113
97 return *session; 114 return *session;
98 } 115 }
99 116
100 class QuicDispatcherTest : public ::testing::Test { 117 class QuicDispatcherTest : public ::testing::Test {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_, 169 QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_,
153 time_wait_list_manager_); 170 time_wait_list_manager_);
154 } 171 }
155 172
156 EpollServer eps_; 173 EpollServer eps_;
157 QuicConfig config_; 174 QuicConfig config_;
158 QuicCryptoServerConfig crypto_config_; 175 QuicCryptoServerConfig crypto_config_;
159 IPEndPoint server_address_; 176 IPEndPoint server_address_;
160 TestDispatcher dispatcher_; 177 TestDispatcher dispatcher_;
161 MockTimeWaitListManager* time_wait_list_manager_; 178 MockTimeWaitListManager* time_wait_list_manager_;
162 MockSession* session1_; 179 TestServerSession* session1_;
163 MockSession* session2_; 180 TestServerSession* session2_;
164 string data_; 181 string data_;
165 }; 182 };
166 183
167 TEST_F(QuicDispatcherTest, ProcessPackets) { 184 TEST_F(QuicDispatcherTest, ProcessPackets) {
168 IPEndPoint client_address(net::test::Loopback4(), 1); 185 IPEndPoint client_address(net::test::Loopback4(), 1);
169 IPAddressNumber any4; 186 IPAddressNumber any4;
170 CHECK(net::ParseIPLiteralToNumber("0.0.0.0", &any4)); 187 CHECK(net::ParseIPLiteralToNumber("0.0.0.0", &any4));
171 server_address_ = IPEndPoint(any4, 5); 188 server_address_ = IPEndPoint(any4, 5);
172 189
173 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address)) 190 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address))
174 .WillOnce(testing::Return(CreateSession( 191 .WillOnce(testing::Return(
175 &dispatcher_, 1, client_address, &session1_))); 192 CreateSession(&dispatcher_, config_, 1, client_address, &session1_)));
176 ProcessPacket(client_address, 1, true, "foo"); 193 ProcessPacket(client_address, 1, true, "foo");
177 EXPECT_EQ(client_address, dispatcher_.current_client_address()); 194 EXPECT_EQ(client_address, dispatcher_.current_client_address());
178 EXPECT_EQ(server_address_, dispatcher_.current_server_address()); 195 EXPECT_EQ(server_address_, dispatcher_.current_server_address());
179 196
180 EXPECT_CALL(dispatcher_, CreateQuicSession(2, _, client_address)) 197 EXPECT_CALL(dispatcher_, CreateQuicSession(2, _, client_address))
181 .WillOnce(testing::Return( 198 .WillOnce(testing::Return(
182 CreateSession(&dispatcher_, 2, client_address, &session2_))); 199 CreateSession(&dispatcher_, config_, 2, client_address, &session2_)));
183 ProcessPacket(client_address, 2, true, "bar"); 200 ProcessPacket(client_address, 2, true, "bar");
184 201
185 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), 202 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()),
186 ProcessUdpPacket(_, _, _)).Times(1). 203 ProcessUdpPacket(_, _, _)).Times(1).
187 WillOnce(testing::WithArgs<2>(Invoke( 204 WillOnce(testing::WithArgs<2>(Invoke(
188 this, &QuicDispatcherTest::ValidatePacket))); 205 this, &QuicDispatcherTest::ValidatePacket)));
189 ProcessPacket(client_address, 1, false, "eep"); 206 ProcessPacket(client_address, 1, false, "eep");
190 } 207 }
191 208
192 TEST_F(QuicDispatcherTest, Shutdown) { 209 TEST_F(QuicDispatcherTest, Shutdown) {
193 IPEndPoint client_address(net::test::Loopback4(), 1); 210 IPEndPoint client_address(net::test::Loopback4(), 1);
194 211
195 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, client_address)) 212 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, client_address))
196 .WillOnce(testing::Return( 213 .WillOnce(testing::Return(
197 CreateSession(&dispatcher_, 1, client_address, &session1_))); 214 CreateSession(&dispatcher_, config_, 1, client_address, &session1_)));
198 215
199 ProcessPacket(client_address, 1, true, "foo"); 216 ProcessPacket(client_address, 1, true, "foo");
200 217
201 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), 218 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()),
202 SendConnectionClose(QUIC_PEER_GOING_AWAY)); 219 SendConnectionClose(QUIC_PEER_GOING_AWAY));
203 220
204 dispatcher_.Shutdown(); 221 dispatcher_.Shutdown();
205 } 222 }
206 223
207 TEST_F(QuicDispatcherTest, TimeWaitListManager) { 224 TEST_F(QuicDispatcherTest, TimeWaitListManager) {
208 CreateTimeWaitListManager(); 225 CreateTimeWaitListManager();
209 226
210 // Create a new session. 227 // Create a new session.
211 IPEndPoint client_address(net::test::Loopback4(), 1); 228 IPEndPoint client_address(net::test::Loopback4(), 1);
212 QuicConnectionId connection_id = 1; 229 QuicConnectionId connection_id = 1;
213 EXPECT_CALL(dispatcher_, CreateQuicSession(connection_id, _, client_address)) 230 EXPECT_CALL(dispatcher_, CreateQuicSession(connection_id, _, client_address))
214 .WillOnce(testing::Return(CreateSession(&dispatcher_, connection_id, 231 .WillOnce(testing::Return(CreateSession(
215 client_address, &session1_))); 232 &dispatcher_, config_, connection_id, client_address, &session1_)));
216 ProcessPacket(client_address, connection_id, true, "foo"); 233 ProcessPacket(client_address, connection_id, true, "foo");
217 234
218 // Close the connection by sending public reset packet. 235 // Close the connection by sending public reset packet.
219 QuicPublicResetPacket packet; 236 QuicPublicResetPacket packet;
220 packet.public_header.connection_id = connection_id; 237 packet.public_header.connection_id = connection_id;
221 packet.public_header.reset_flag = true; 238 packet.public_header.reset_flag = true;
222 packet.public_header.version_flag = false; 239 packet.public_header.version_flag = false;
223 packet.rejected_sequence_number = 19191; 240 packet.rejected_sequence_number = 19191;
224 packet.nonce_proof = 132232; 241 packet.nonce_proof = 132232;
225 scoped_ptr<QuicEncryptedPacket> encrypted( 242 scoped_ptr<QuicEncryptedPacket> encrypted(
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 public: 320 public:
304 void SetUp() override { 321 void SetUp() override {
305 writer_ = new BlockingWriter; 322 writer_ = new BlockingWriter;
306 QuicDispatcherPeer::SetPacketWriterFactory(&dispatcher_, 323 QuicDispatcherPeer::SetPacketWriterFactory(&dispatcher_,
307 new TestWriterFactory()); 324 new TestWriterFactory());
308 QuicDispatcherPeer::UseWriter(&dispatcher_, writer_); 325 QuicDispatcherPeer::UseWriter(&dispatcher_, writer_);
309 326
310 IPEndPoint client_address(net::test::Loopback4(), 1); 327 IPEndPoint client_address(net::test::Loopback4(), 1);
311 328
312 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, client_address)) 329 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, client_address))
313 .WillOnce(testing::Return( 330 .WillOnce(testing::Return(CreateSession(&dispatcher_, config_, 1,
314 CreateSession(&dispatcher_, 1, client_address, &session1_))); 331 client_address, &session1_)));
315 ProcessPacket(client_address, 1, true, "foo"); 332 ProcessPacket(client_address, 1, true, "foo");
316 333
317 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, client_address)) 334 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, client_address))
318 .WillOnce(testing::Return( 335 .WillOnce(testing::Return(CreateSession(&dispatcher_, config_, 2,
319 CreateSession(&dispatcher_, 2, client_address, &session2_))); 336 client_address, &session2_)));
320 ProcessPacket(client_address, 2, true, "bar"); 337 ProcessPacket(client_address, 2, true, "bar");
321 338
322 blocked_list_ = QuicDispatcherPeer::GetWriteBlockedList(&dispatcher_); 339 blocked_list_ = QuicDispatcherPeer::GetWriteBlockedList(&dispatcher_);
323 } 340 }
324 341
325 void TearDown() override { 342 void TearDown() override {
326 EXPECT_CALL(*connection1(), SendConnectionClose(QUIC_PEER_GOING_AWAY)); 343 EXPECT_CALL(*connection1(), SendConnectionClose(QUIC_PEER_GOING_AWAY));
327 EXPECT_CALL(*connection2(), SendConnectionClose(QUIC_PEER_GOING_AWAY)); 344 EXPECT_CALL(*connection2(), SendConnectionClose(QUIC_PEER_GOING_AWAY));
328 dispatcher_.Shutdown(); 345 dispatcher_.Shutdown();
329 } 346 }
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 // And we'll resume where we left off when we get another call. 486 // And we'll resume where we left off when we get another call.
470 EXPECT_CALL(*connection2(), OnCanWrite()); 487 EXPECT_CALL(*connection2(), OnCanWrite());
471 dispatcher_.OnCanWrite(); 488 dispatcher_.OnCanWrite();
472 EXPECT_FALSE(dispatcher_.HasPendingWrites()); 489 EXPECT_FALSE(dispatcher_.HasPendingWrites());
473 } 490 }
474 491
475 } // namespace 492 } // namespace
476 } // namespace test 493 } // namespace test
477 } // namespace tools 494 } // namespace tools
478 } // namespace net 495 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_dispatcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698