| 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) {}
 | 
| 
 |