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

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

Issue 123303003: Move all the packet parsing logic into QuicDispatcher from the (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « net/tools/quic/quic_dispatcher.cc ('k') | net/tools/quic/quic_server.h » ('j') | 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 virtual ~QuicDispatcherTest() {} 98 virtual ~QuicDispatcherTest() {}
99 99
100 MockConnection* connection1() { 100 MockConnection* connection1() {
101 return reinterpret_cast<MockConnection*>(session1_->connection()); 101 return reinterpret_cast<MockConnection*>(session1_->connection());
102 } 102 }
103 103
104 MockConnection* connection2() { 104 MockConnection* connection2() {
105 return reinterpret_cast<MockConnection*>(session2_->connection()); 105 return reinterpret_cast<MockConnection*>(session2_->connection());
106 } 106 }
107 107
108 QuicEncryptedPacket* ConstructEncryptedPacket(
109 QuicGuid guid,
110 bool version_flag,
111 bool reset_flag,
112 QuicPacketSequenceNumber sequence_number,
113 const string& data) {
114 QuicPacketHeader header;
115 header.public_header.guid = guid;
116 header.public_header.guid_length = PACKET_8BYTE_GUID;
117 header.public_header.version_flag = version_flag;
118 header.public_header.reset_flag = reset_flag;
119 header.public_header.sequence_number_length = PACKET_6BYTE_SEQUENCE_NUMBER;
120 header.packet_sequence_number = sequence_number;
121 header.entropy_flag = false;
122 header.entropy_hash = 0;
123 header.fec_flag = false;
124 header.is_in_fec_group = NOT_IN_FEC_GROUP;
125 header.fec_group = 0;
126 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data));
127 QuicFrame frame(&stream_frame);
128 QuicFrames frames;
129 frames.push_back(frame);
130 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false);
131 scoped_ptr<QuicPacket> packet(
132 framer.BuildUnsizedDataPacket(header, frames).packet);
133 EXPECT_TRUE(packet != NULL);
134 QuicEncryptedPacket* encrypted = framer.EncryptPacket(ENCRYPTION_NONE,
135 sequence_number,
136 *packet);
137 EXPECT_TRUE(encrypted != NULL);
138 data_ = string(encrypted->data(), encrypted->length());
139 return encrypted;
140 }
141
108 void ProcessPacket(IPEndPoint addr, 142 void ProcessPacket(IPEndPoint addr,
109 QuicGuid guid, 143 QuicGuid guid,
110 bool has_version_flag, 144 bool has_version_flag,
111 const string& data) { 145 const string& data) {
112 dispatcher_.ProcessPacket( 146 scoped_ptr<QuicEncryptedPacket> packet(
113 IPEndPoint(), addr, guid, has_version_flag, 147 ConstructEncryptedPacket(guid, has_version_flag, false, 1, data));
114 QuicEncryptedPacket(data.data(), data.length())); 148 dispatcher_.ProcessPacket(IPEndPoint(), addr, *packet.get());
115 } 149 }
116 150
117 void ValidatePacket(const QuicEncryptedPacket& packet) { 151 void ValidatePacket(const QuicEncryptedPacket& packet) {
118 EXPECT_TRUE(packet.AsStringPiece().find(data_) != StringPiece::npos); 152 EXPECT_EQ(data_.length(), packet.AsStringPiece().length());
153 EXPECT_EQ(data_, packet.AsStringPiece());
119 } 154 }
120 155
121 EpollServer eps_; 156 EpollServer eps_;
122 QuicConfig config_; 157 QuicConfig config_;
123 QuicCryptoServerConfig crypto_config_; 158 QuicCryptoServerConfig crypto_config_;
124 TestDispatcher dispatcher_; 159 TestDispatcher dispatcher_;
125 MockSession* session1_; 160 MockSession* session1_;
126 MockSession* session2_; 161 MockSession* session2_;
127 string data_; 162 string data_;
128 }; 163 };
129 164
130 TEST_F(QuicDispatcherTest, ProcessPackets) { 165 TEST_F(QuicDispatcherTest, ProcessPackets) {
131 IPEndPoint addr(net::test::Loopback4(), 1); 166 IPEndPoint addr(net::test::Loopback4(), 1);
132 167
133 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, addr)) 168 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, addr))
134 .WillOnce(testing::Return(CreateSession( 169 .WillOnce(testing::Return(CreateSession(
135 &dispatcher_, 1, addr, &session1_))); 170 &dispatcher_, 1, addr, &session1_)));
136 ProcessPacket(addr, 1, true, "foo"); 171 ProcessPacket(addr, 1, true, "foo");
137 172
138 EXPECT_CALL(dispatcher_, CreateQuicSession(2, _, addr)) 173 EXPECT_CALL(dispatcher_, CreateQuicSession(2, _, addr))
139 .WillOnce(testing::Return(CreateSession( 174 .WillOnce(testing::Return(CreateSession(
140 &dispatcher_, 2, addr, &session2_))); 175 &dispatcher_, 2, addr, &session2_)));
141 ProcessPacket(addr, 2, true, "bar"); 176 ProcessPacket(addr, 2, true, "bar");
142 177
143 data_ = "eep";
144 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), 178 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()),
145 ProcessUdpPacket(_, _, _)).Times(1). 179 ProcessUdpPacket(_, _, _)).Times(1).
146 WillOnce(testing::WithArgs<2>(Invoke( 180 WillOnce(testing::WithArgs<2>(Invoke(
147 this, &QuicDispatcherTest::ValidatePacket))); 181 this, &QuicDispatcherTest::ValidatePacket)));
148 ProcessPacket(addr, 1, false, "eep"); 182 ProcessPacket(addr, 1, false, "eep");
149 } 183 }
150 184
151 TEST_F(QuicDispatcherTest, Shutdown) { 185 TEST_F(QuicDispatcherTest, Shutdown) {
152 IPEndPoint addr(net::test::Loopback4(), 1); 186 IPEndPoint addr(net::test::Loopback4(), 1);
153 187
(...skipping 12 matching lines...) Expand all
166 class MockTimeWaitListManager : public QuicTimeWaitListManager { 200 class MockTimeWaitListManager : public QuicTimeWaitListManager {
167 public: 201 public:
168 MockTimeWaitListManager(QuicPacketWriter* writer, 202 MockTimeWaitListManager(QuicPacketWriter* writer,
169 EpollServer* eps) 203 EpollServer* eps)
170 : QuicTimeWaitListManager(writer, eps, QuicSupportedVersions()) { 204 : QuicTimeWaitListManager(writer, eps, QuicSupportedVersions()) {
171 } 205 }
172 206
173 MOCK_METHOD4(ProcessPacket, void(const IPEndPoint& server_address, 207 MOCK_METHOD4(ProcessPacket, void(const IPEndPoint& server_address,
174 const IPEndPoint& client_address, 208 const IPEndPoint& client_address,
175 QuicGuid guid, 209 QuicGuid guid,
176 const QuicEncryptedPacket& packet)); 210 QuicPacketSequenceNumber sequence_number));
177 }; 211 };
178 212
179 TEST_F(QuicDispatcherTest, TimeWaitListManager) { 213 TEST_F(QuicDispatcherTest, TimeWaitListManager) {
180 MockTimeWaitListManager* time_wait_list_manager = 214 MockTimeWaitListManager* time_wait_list_manager =
181 new MockTimeWaitListManager( 215 new MockTimeWaitListManager(
182 QuicDispatcherPeer::GetWriter(&dispatcher_), &eps_); 216 QuicDispatcherPeer::GetWriter(&dispatcher_), &eps_);
183 // dispatcher takes the ownership of time_wait_list_manager. 217 // dispatcher takes the ownership of time_wait_list_manager.
184 QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_, 218 QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_,
185 time_wait_list_manager); 219 time_wait_list_manager);
186 // Create a new session. 220 // Create a new session.
(...skipping 15 matching lines...) Expand all
202 QuicFramer::BuildPublicResetPacket(packet)); 236 QuicFramer::BuildPublicResetPacket(packet));
203 EXPECT_CALL(*session1_, OnConnectionClosed(QUIC_PUBLIC_RESET, true)).Times(1) 237 EXPECT_CALL(*session1_, OnConnectionClosed(QUIC_PUBLIC_RESET, true)).Times(1)
204 .WillOnce(WithoutArgs(Invoke( 238 .WillOnce(WithoutArgs(Invoke(
205 reinterpret_cast<MockServerConnection*>(session1_->connection()), 239 reinterpret_cast<MockServerConnection*>(session1_->connection()),
206 &MockServerConnection::UnregisterOnConnectionClosed))); 240 &MockServerConnection::UnregisterOnConnectionClosed)));
207 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), 241 EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()),
208 ProcessUdpPacket(_, _, _)) 242 ProcessUdpPacket(_, _, _))
209 .WillOnce(Invoke( 243 .WillOnce(Invoke(
210 reinterpret_cast<MockConnection*>(session1_->connection()), 244 reinterpret_cast<MockConnection*>(session1_->connection()),
211 &MockConnection::ReallyProcessUdpPacket)); 245 &MockConnection::ReallyProcessUdpPacket));
212 dispatcher_.ProcessPacket(IPEndPoint(), addr, guid, true, *encrypted); 246 dispatcher_.ProcessPacket(IPEndPoint(), addr, *encrypted);
213 EXPECT_TRUE(time_wait_list_manager->IsGuidInTimeWait(guid)); 247 EXPECT_TRUE(time_wait_list_manager->IsGuidInTimeWait(guid));
214 248
215 // Dispatcher forwards subsequent packets for this guid to the time wait list 249 // Dispatcher forwards subsequent packets for this guid to the time wait list
216 // manager. 250 // manager.
217 EXPECT_CALL(*time_wait_list_manager, ProcessPacket(_, _, guid, _)).Times(1); 251 EXPECT_CALL(*time_wait_list_manager, ProcessPacket(_, _, guid, _)).Times(1);
218 ProcessPacket(addr, guid, true, "foo"); 252 ProcessPacket(addr, guid, true, "foo");
219 } 253 }
220 254
221 TEST_F(QuicDispatcherTest, StrayPacketToTimeWaitListManager) { 255 TEST_F(QuicDispatcherTest, StrayPacketToTimeWaitListManager) {
222 MockTimeWaitListManager* time_wait_list_manager = 256 MockTimeWaitListManager* time_wait_list_manager =
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 413
380 // And we'll resume where we left off when we get another call. 414 // And we'll resume where we left off when we get another call.
381 EXPECT_CALL(*connection2(), OnCanWrite()); 415 EXPECT_CALL(*connection2(), OnCanWrite());
382 dispatcher_.OnCanWrite(); 416 dispatcher_.OnCanWrite();
383 } 417 }
384 418
385 } // namespace 419 } // namespace
386 } // namespace test 420 } // namespace test
387 } // namespace tools 421 } // namespace tools
388 } // namespace net 422 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_dispatcher.cc ('k') | net/tools/quic/quic_server.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698