| Index: net/tools/quic/quic_dispatcher_test.cc
|
| diff --git a/net/tools/quic/quic_dispatcher_test.cc b/net/tools/quic/quic_dispatcher_test.cc
|
| index fc1e10d59e7c9a02df9ac02d094bff0e9d74ce82..6ef1b16723745d611bbd75394584d07ffccc3f34 100644
|
| --- a/net/tools/quic/quic_dispatcher_test.cc
|
| +++ b/net/tools/quic/quic_dispatcher_test.cc
|
| @@ -97,12 +97,29 @@ QuicSession* CreateSession(QuicDispatcher* dispatcher,
|
| return *session;
|
| }
|
|
|
| +class MockTimeWaitListManager : public QuicTimeWaitListManager {
|
| + public:
|
| + MockTimeWaitListManager(QuicPacketWriter* writer,
|
| + QuicServerSessionVisitor* visitor,
|
| + EpollServer* eps)
|
| + : QuicTimeWaitListManager(writer, visitor, eps, QuicSupportedVersions()) {
|
| + }
|
| +
|
| + MOCK_METHOD5(ProcessPacket,
|
| + void(const IPEndPoint& server_address,
|
| + const IPEndPoint& client_address,
|
| + QuicConnectionId connection_id,
|
| + QuicPacketSequenceNumber sequence_number,
|
| + const QuicEncryptedPacket& packet));
|
| +};
|
| +
|
| class QuicDispatcherTest : public ::testing::Test {
|
| public:
|
| QuicDispatcherTest()
|
| : crypto_config_(QuicCryptoServerConfig::TESTING,
|
| QuicRandom::GetInstance()),
|
| dispatcher_(config_, crypto_config_, &eps_),
|
| + time_wait_list_manager_(nullptr),
|
| session1_(nullptr),
|
| session2_(nullptr) {
|
| dispatcher_.Initialize(1);
|
| @@ -133,11 +150,20 @@ class QuicDispatcherTest : public ::testing::Test {
|
| EXPECT_EQ(data_, packet.AsStringPiece());
|
| }
|
|
|
| + void CreateTimeWaitListManager() {
|
| + time_wait_list_manager_ = new MockTimeWaitListManager(
|
| + QuicDispatcherPeer::GetWriter(&dispatcher_), &dispatcher_, &eps_);
|
| + // dispatcher takes the ownership of time_wait_list_manager.
|
| + QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_,
|
| + time_wait_list_manager_);
|
| + }
|
| +
|
| EpollServer eps_;
|
| QuicConfig config_;
|
| QuicCryptoServerConfig crypto_config_;
|
| IPEndPoint server_address_;
|
| TestDispatcher dispatcher_;
|
| + MockTimeWaitListManager* time_wait_list_manager_;
|
| MockSession* session1_;
|
| MockSession* session2_;
|
| string data_;
|
| @@ -184,28 +210,9 @@ TEST_F(QuicDispatcherTest, Shutdown) {
|
| dispatcher_.Shutdown();
|
| }
|
|
|
| -class MockTimeWaitListManager : public QuicTimeWaitListManager {
|
| - public:
|
| - MockTimeWaitListManager(QuicPacketWriter* writer,
|
| - QuicServerSessionVisitor* visitor,
|
| - EpollServer* eps)
|
| - : QuicTimeWaitListManager(writer, visitor, eps, QuicSupportedVersions()) {
|
| - }
|
| -
|
| - MOCK_METHOD5(ProcessPacket, void(const IPEndPoint& server_address,
|
| - const IPEndPoint& client_address,
|
| - QuicConnectionId connection_id,
|
| - QuicPacketSequenceNumber sequence_number,
|
| - const QuicEncryptedPacket& packet));
|
| -};
|
| -
|
| TEST_F(QuicDispatcherTest, TimeWaitListManager) {
|
| - MockTimeWaitListManager* time_wait_list_manager =
|
| - new MockTimeWaitListManager(
|
| - QuicDispatcherPeer::GetWriter(&dispatcher_), &dispatcher_, &eps_);
|
| - // dispatcher takes the ownership of time_wait_list_manager.
|
| - QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_,
|
| - time_wait_list_manager);
|
| + CreateTimeWaitListManager();
|
| +
|
| // Create a new session.
|
| IPEndPoint client_address(net::test::Loopback4(), 1);
|
| QuicConnectionId connection_id = 1;
|
| @@ -233,34 +240,44 @@ TEST_F(QuicDispatcherTest, TimeWaitListManager) {
|
| reinterpret_cast<MockConnection*>(session1_->connection()),
|
| &MockConnection::ReallyProcessUdpPacket));
|
| dispatcher_.ProcessPacket(IPEndPoint(), client_address, *encrypted);
|
| - EXPECT_TRUE(time_wait_list_manager->IsConnectionIdInTimeWait(connection_id));
|
| + EXPECT_TRUE(time_wait_list_manager_->IsConnectionIdInTimeWait(connection_id));
|
|
|
| // Dispatcher forwards subsequent packets for this connection_id to the time
|
| // wait list manager.
|
| - EXPECT_CALL(*time_wait_list_manager,
|
| + EXPECT_CALL(*time_wait_list_manager_,
|
| ProcessPacket(_, _, connection_id, _, _)).Times(1);
|
| ProcessPacket(client_address, connection_id, true, "foo");
|
| }
|
|
|
| TEST_F(QuicDispatcherTest, StrayPacketToTimeWaitListManager) {
|
| - MockTimeWaitListManager* time_wait_list_manager =
|
| - new MockTimeWaitListManager(
|
| - QuicDispatcherPeer::GetWriter(&dispatcher_), &dispatcher_, &eps_);
|
| - // dispatcher takes the ownership of time_wait_list_manager.
|
| - QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_,
|
| - time_wait_list_manager);
|
| + CreateTimeWaitListManager();
|
|
|
| IPEndPoint client_address(net::test::Loopback4(), 1);
|
| QuicConnectionId connection_id = 1;
|
| // Dispatcher forwards all packets for this connection_id to the time wait
|
| // list manager.
|
| EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0);
|
| - EXPECT_CALL(*time_wait_list_manager,
|
| + EXPECT_CALL(*time_wait_list_manager_,
|
| ProcessPacket(_, _, connection_id, _, _)).Times(1);
|
| string data = "foo";
|
| ProcessPacket(client_address, connection_id, false, "foo");
|
| }
|
|
|
| +TEST_F(QuicDispatcherTest, ProcessPacketWithBogusPort) {
|
| + CreateTimeWaitListManager();
|
| +
|
| + IPEndPoint client_address(net::test::Loopback4(), 0);
|
| + IPAddressNumber any4;
|
| + CHECK(net::ParseIPLiteralToNumber("0.0.0.0", &any4));
|
| + server_address_ = IPEndPoint(any4, 5);
|
| +
|
| + EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address)).Times(0);
|
| + EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, _, _, _)).Times(0);
|
| + ProcessPacket(client_address, 1, true, "foo");
|
| + EXPECT_EQ(client_address, dispatcher_.current_client_address());
|
| + EXPECT_EQ(server_address_, dispatcher_.current_server_address());
|
| +}
|
| +
|
| class BlockingWriter : public QuicPacketWriterWrapper {
|
| public:
|
| BlockingWriter() : write_blocked_(false) {}
|
|
|