diff options
Diffstat (limited to 'chromium/net/tools/quic/quic_dispatcher_test.cc')
-rw-r--r-- | chromium/net/tools/quic/quic_dispatcher_test.cc | 137 |
1 files changed, 67 insertions, 70 deletions
diff --git a/chromium/net/tools/quic/quic_dispatcher_test.cc b/chromium/net/tools/quic/quic_dispatcher_test.cc index 2e2c3097802..74cab69e6a7 100644 --- a/chromium/net/tools/quic/quic_dispatcher_test.cc +++ b/chromium/net/tools/quic/quic_dispatcher_test.cc @@ -8,12 +8,13 @@ #include "base/strings/string_piece.h" #include "net/quic/crypto/crypto_handshake.h" -#include "net/quic/crypto/crypto_server_config.h" +#include "net/quic/crypto/quic_crypto_server_config.h" #include "net/quic/crypto/quic_random.h" #include "net/quic/quic_crypto_stream.h" #include "net/quic/test_tools/quic_test_utils.h" -#include "net/tools/flip_server/epoll_server.h" +#include "net/tools/epoll_server/epoll_server.h" #include "net/tools/quic/quic_time_wait_list_manager.h" +#include "net/tools/quic/test_tools/quic_dispatcher_peer.h" #include "net/tools/quic/test_tools/quic_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -33,19 +34,6 @@ using testing::WithoutArgs; namespace net { namespace tools { namespace test { -class QuicDispatcherPeer { - public: - static void SetTimeWaitListManager( - QuicDispatcher* dispatcher, - QuicTimeWaitListManager* time_wait_list_manager) { - dispatcher->time_wait_list_manager_.reset(time_wait_list_manager); - } - - static void SetWriteBlocked(QuicDispatcher* dispatcher) { - dispatcher->write_blocked_ = true; - } -}; - namespace { class TestDispatcher : public QuicDispatcher { @@ -53,13 +41,13 @@ class TestDispatcher : public QuicDispatcher { explicit TestDispatcher(const QuicConfig& config, const QuicCryptoServerConfig& crypto_config, EpollServer* eps) - : QuicDispatcher(config, crypto_config, 1, eps) {} + : QuicDispatcher(config, crypto_config, QuicSupportedVersions(), 1, eps) { + } - MOCK_METHOD4(CreateQuicSession, QuicSession*( + MOCK_METHOD3(CreateQuicSession, QuicSession*( QuicGuid guid, - const IPEndPoint& client_address, - int fd, - EpollServer* eps)); + const IPEndPoint& server_address, + const IPEndPoint& client_address)); using QuicDispatcher::write_blocked_list; }; @@ -70,16 +58,13 @@ class TestDispatcher : public QuicDispatcher { class MockServerConnection : public MockConnection { public: MockServerConnection(QuicGuid guid, - IPEndPoint address, - int fd, - EpollServer* eps, QuicDispatcher* dispatcher) - : MockConnection(guid, address, fd, eps, true), + : MockConnection(guid, true), dispatcher_(dispatcher) { } - void UnregisterOnConnectionClose() { + void UnregisterOnConnectionClosed() { LOG(ERROR) << "Unregistering " << guid(); - dispatcher_->OnConnectionClose(guid(), QUIC_NO_ERROR); + dispatcher_->OnConnectionClosed(guid(), QUIC_NO_ERROR); } private: QuicDispatcher* dispatcher_; @@ -88,14 +73,12 @@ class MockServerConnection : public MockConnection { QuicSession* CreateSession(QuicDispatcher* dispatcher, QuicGuid guid, const IPEndPoint& addr, - MockSession** session, - EpollServer* eps) { - MockServerConnection* connection = - new MockServerConnection(guid, addr, 0, eps, dispatcher); - *session = new MockSession(connection, true); + MockSession** session) { + MockServerConnection* connection = new MockServerConnection(guid, dispatcher); + *session = new MockSession(connection); ON_CALL(*connection, SendConnectionClose(_)).WillByDefault( WithoutArgs(Invoke( - connection, &MockServerConnection::UnregisterOnConnectionClose))); + connection, &MockServerConnection::UnregisterOnConnectionClosed))); EXPECT_CALL(*reinterpret_cast<MockConnection*>((*session)->connection()), ProcessUdpPacket(_, addr, _)); @@ -124,21 +107,17 @@ class QuicDispatcherTest : public ::testing::Test { void ProcessPacket(IPEndPoint addr, QuicGuid guid, + bool has_version_flag, const string& data) { - QuicEncryptedPacket packet(data.data(), data.length()); - dispatcher_.ProcessPacket(IPEndPoint(), addr, guid, packet); + dispatcher_.ProcessPacket( + IPEndPoint(), addr, guid, has_version_flag, + QuicEncryptedPacket(data.data(), data.length())); } void ValidatePacket(const QuicEncryptedPacket& packet) { EXPECT_TRUE(packet.AsStringPiece().find(data_) != StringPiece::npos); } - IPAddressNumber Loopback4() { - net::IPAddressNumber addr; - CHECK(net::ParseIPLiteralToNumber("127.0.0.1", &addr)); - return addr; - } - EpollServer eps_; QuicConfig config_; QuicCryptoServerConfig crypto_config_; @@ -149,34 +128,34 @@ class QuicDispatcherTest : public ::testing::Test { }; TEST_F(QuicDispatcherTest, ProcessPackets) { - IPEndPoint addr(Loopback4(), 1); + IPEndPoint addr(net::test::Loopback4(), 1); - EXPECT_CALL(dispatcher_, CreateQuicSession(1, addr, _, &eps_)) + EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, addr)) .WillOnce(testing::Return(CreateSession( - &dispatcher_, 1, addr, &session1_, &eps_))); - ProcessPacket(addr, 1, "foo"); + &dispatcher_, 1, addr, &session1_))); + ProcessPacket(addr, 1, true, "foo"); - EXPECT_CALL(dispatcher_, CreateQuicSession(2, addr, _, &eps_)) + EXPECT_CALL(dispatcher_, CreateQuicSession(2, _, addr)) .WillOnce(testing::Return(CreateSession( - &dispatcher_, 2, addr, &session2_, &eps_))); - ProcessPacket(addr, 2, "bar"); + &dispatcher_, 2, addr, &session2_))); + ProcessPacket(addr, 2, true, "bar"); data_ = "eep"; EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), ProcessUdpPacket(_, _, _)).Times(1). WillOnce(testing::WithArgs<2>(Invoke( this, &QuicDispatcherTest::ValidatePacket))); - ProcessPacket(addr, 1, "eep"); + ProcessPacket(addr, 1, false, "eep"); } TEST_F(QuicDispatcherTest, Shutdown) { - IPEndPoint addr(Loopback4(), 1); + IPEndPoint addr(net::test::Loopback4(), 1); - EXPECT_CALL(dispatcher_, CreateQuicSession(_, addr, _, &eps_)) + EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, addr)) .WillOnce(testing::Return(CreateSession( - &dispatcher_, 1, addr, &session1_, &eps_))); + &dispatcher_, 1, addr, &session1_))); - ProcessPacket(addr, 1, "foo"); + ProcessPacket(addr, 1, true, "foo"); EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), SendConnectionClose(QUIC_PEER_GOING_AWAY)); @@ -188,7 +167,7 @@ class MockTimeWaitListManager : public QuicTimeWaitListManager { public: MockTimeWaitListManager(QuicPacketWriter* writer, EpollServer* eps) - : QuicTimeWaitListManager(writer, eps) { + : QuicTimeWaitListManager(writer, eps, QuicSupportedVersions()) { } MOCK_METHOD4(ProcessPacket, void(const IPEndPoint& server_address, @@ -199,17 +178,18 @@ class MockTimeWaitListManager : public QuicTimeWaitListManager { TEST_F(QuicDispatcherTest, TimeWaitListManager) { MockTimeWaitListManager* time_wait_list_manager = - new MockTimeWaitListManager(&dispatcher_, &eps_); + new MockTimeWaitListManager( + QuicDispatcherPeer::GetWriter(&dispatcher_), &eps_); // dispatcher takes the ownership of time_wait_list_manager. QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_, time_wait_list_manager); // Create a new session. - IPEndPoint addr(Loopback4(), 1); + IPEndPoint addr(net::test::Loopback4(), 1); QuicGuid guid = 1; - EXPECT_CALL(dispatcher_, CreateQuicSession(guid, addr, _, &eps_)) + EXPECT_CALL(dispatcher_, CreateQuicSession(guid, _, addr)) .WillOnce(testing::Return(CreateSession( - &dispatcher_, guid, addr, &session1_, &eps_))); - ProcessPacket(addr, guid, "foo"); + &dispatcher_, guid, addr, &session1_))); + ProcessPacket(addr, guid, true, "foo"); // Close the connection by sending public reset packet. QuicPublicResetPacket packet; @@ -220,38 +200,56 @@ TEST_F(QuicDispatcherTest, TimeWaitListManager) { packet.nonce_proof = 132232; scoped_ptr<QuicEncryptedPacket> encrypted( QuicFramer::BuildPublicResetPacket(packet)); - EXPECT_CALL(*session1_, ConnectionClose(QUIC_PUBLIC_RESET, true)).Times(1) + EXPECT_CALL(*session1_, OnConnectionClosed(QUIC_PUBLIC_RESET, true)).Times(1) .WillOnce(WithoutArgs(Invoke( reinterpret_cast<MockServerConnection*>(session1_->connection()), - &MockServerConnection::UnregisterOnConnectionClose))); + &MockServerConnection::UnregisterOnConnectionClosed))); EXPECT_CALL(*reinterpret_cast<MockConnection*>(session1_->connection()), ProcessUdpPacket(_, _, _)) .WillOnce(Invoke( reinterpret_cast<MockConnection*>(session1_->connection()), &MockConnection::ReallyProcessUdpPacket)); - dispatcher_.ProcessPacket(IPEndPoint(), addr, guid, *encrypted); + dispatcher_.ProcessPacket(IPEndPoint(), addr, guid, true, *encrypted); EXPECT_TRUE(time_wait_list_manager->IsGuidInTimeWait(guid)); // Dispatcher forwards subsequent packets for this guid to the time wait list // manager. EXPECT_CALL(*time_wait_list_manager, ProcessPacket(_, _, guid, _)).Times(1); - ProcessPacket(addr, guid, "foo"); + ProcessPacket(addr, guid, true, "foo"); +} + +TEST_F(QuicDispatcherTest, StrayPacketToTimeWaitListManager) { + MockTimeWaitListManager* time_wait_list_manager = + new MockTimeWaitListManager( + QuicDispatcherPeer::GetWriter(&dispatcher_), &eps_); + // dispatcher takes the ownership of time_wait_list_manager. + QuicDispatcherPeer::SetTimeWaitListManager(&dispatcher_, + time_wait_list_manager); + + IPEndPoint addr(net::test::Loopback4(), 1); + QuicGuid guid = 1; + // Dispatcher forwards all packets for this guid to the time wait list + // manager. + EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); + EXPECT_CALL(*time_wait_list_manager, ProcessPacket(_, _, guid, _)).Times(1); + string data = "foo"; + ProcessPacket(addr, guid, false, "foo"); } class QuicWriteBlockedListTest : public QuicDispatcherTest { public: virtual void SetUp() { - IPEndPoint addr(Loopback4(), 1); + IPEndPoint addr(net::test::Loopback4(), 1); - EXPECT_CALL(dispatcher_, CreateQuicSession(_, addr, _, &eps_)) + EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, addr)) .WillOnce(testing::Return(CreateSession( - &dispatcher_, 1, addr, &session1_, &eps_))); - ProcessPacket(addr, 1, "foo"); + &dispatcher_, 1, addr, &session1_))); + ProcessPacket(addr, 1, true, "foo"); - EXPECT_CALL(dispatcher_, CreateQuicSession(_, addr, _, &eps_)) + EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, addr)) .WillOnce(testing::Return(CreateSession( - &dispatcher_, 2, addr, &session2_, &eps_))); - ProcessPacket(addr, 2, "bar"); + &dispatcher_, 2, addr, &session2_))); + ProcessPacket(addr, 2, true, "bar"); blocked_list_ = dispatcher_.write_blocked_list(); } @@ -384,7 +382,6 @@ TEST_F(QuicWriteBlockedListTest, TestWriteLimits) { dispatcher_.OnCanWrite(); } - } // namespace } // namespace test } // namespace tools |