diff options
Diffstat (limited to 'net/tools/quic')
-rw-r--r-- | net/tools/quic/end_to_end_test.cc | 22 | ||||
-rw-r--r-- | net/tools/quic/quic_client.cc | 5 | ||||
-rw-r--r-- | net/tools/quic/quic_client.h | 3 | ||||
-rw-r--r-- | net/tools/quic/quic_dispatcher.cc | 7 | ||||
-rw-r--r-- | net/tools/quic/quic_dispatcher.h | 9 | ||||
-rw-r--r-- | net/tools/quic/quic_dispatcher_test.cc | 10 | ||||
-rw-r--r-- | net/tools/quic/quic_epoll_connection_helper_test.cc | 12 | ||||
-rw-r--r-- | net/tools/quic/quic_server_session.cc | 7 | ||||
-rw-r--r-- | net/tools/quic/quic_server_session.h | 4 | ||||
-rw-r--r-- | net/tools/quic/test_tools/quic_dispatcher_peer.cc | 6 | ||||
-rw-r--r-- | net/tools/quic/test_tools/quic_dispatcher_peer.h | 2 | ||||
-rw-r--r-- | net/tools/quic/test_tools/quic_test_utils.cc | 6 | ||||
-rw-r--r-- | net/tools/quic/test_tools/quic_test_utils.h | 3 |
13 files changed, 60 insertions, 36 deletions
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc index 96ea50b..8b798b4 100644 --- a/net/tools/quic/end_to_end_test.cc +++ b/net/tools/quic/end_to_end_test.cc @@ -133,8 +133,10 @@ class EndToEndTest : public ::testing::TestWithParam<QuicVersion> { server_thread_->listening()->Wait(); server_address_ = IPEndPoint(server_address_.address(), server_thread_->GetPort()); - QuicDispatcher* dispatcher = QuicServerPeer::GetDispatcher( - server_thread_->server()); + QuicDispatcher* dispatcher = + QuicServerPeer::GetDispatcher(server_thread_->server()); + server_writer_->SetConnectionHelper( + QuicDispatcherPeer::GetHelper(dispatcher)); QuicDispatcherPeer::UseWriter(dispatcher, server_writer_); server_started_ = true; } @@ -165,21 +167,18 @@ class EndToEndTest : public ::testing::TestWithParam<QuicVersion> { // server_writer_->set_fake_packet_loss_percentage(loss); } - void SetRTT(QuicTime::Delta rtt) { - // TODO(ianswett): For now, the RTT is entirely simulated on the client - // side, because the server's writer does not have a ConnectionHelper. + void SetPacketSendDelay(QuicTime::Delta delay) { // TODO(rtenneti): enable when we can do random packet loss tests in // chrome's tree. - // client_writer_->set_fake_packet_delay(rtt); + // client_writer_->set_fake_packet_delay(delay); + // server_writer_->set_fake_packet_delay(delay); } void SetReorderPercentage(int32 reorder) { - // TODO(ianswett): For now, the reordering is entirely simulated on the - // client side, because the server's writer does not have a - // ConnectionHelper. // TODO(rtenneti): enable when we can do random packet loss tests in // chrome's tree. // client_writer_->set_fake_reorder_percentage(reorder); + // server_writer_->set_fake_reorder_percentage(reorder); } IPEndPoint server_address_; @@ -391,10 +390,11 @@ TEST_P(EndToEndTest, LargePostWithPacketLoss) { TEST_P(EndToEndTest, LargePostNoPacketLossWithDelayAndReordering) { ASSERT_TRUE(Initialize()); - SetRTT(QuicTime::Delta::FromMilliseconds(2)); - SetReorderPercentage(30); client_->client()->WaitForCryptoHandshakeConfirmed(); + // Both of these must be called when the writer is not actively used. + SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2)); + SetReorderPercentage(30); // 1 Mb body. string body; diff --git a/net/tools/quic/quic_client.cc b/net/tools/quic/quic_client.cc index a01e3c7..b8cf6e9 100644 --- a/net/tools/quic/quic_client.cc +++ b/net/tools/quic/quic_client.cc @@ -38,6 +38,7 @@ QuicClient::QuicClient(IPEndPoint server_address, server_hostname_(server_hostname), local_port_(0), fd_(-1), + helper_(CreateQuicConnectionHelper()), initialized_(false), packets_dropped_(0), overflow_supported_(false), @@ -55,6 +56,7 @@ QuicClient::QuicClient(IPEndPoint server_address, config_(config), local_port_(0), fd_(-1), + helper_(CreateQuicConnectionHelper()), initialized_(false), packets_dropped_(0), overflow_supported_(false), @@ -159,8 +161,7 @@ bool QuicClient::StartConnect() { session_.reset(new QuicClientSession( server_hostname_, config_, - new QuicConnection(GenerateGuid(), server_address_, - CreateQuicConnectionHelper(), + new QuicConnection(GenerateGuid(), server_address_, helper_.get(), writer_.get(), false, version_), &crypto_config_)); return session_->CryptoConnect(); diff --git a/net/tools/quic/quic_client.h b/net/tools/quic/quic_client.h index 5637736..c8e65a1 100644 --- a/net/tools/quic/quic_client.h +++ b/net/tools/quic/quic_client.h @@ -183,6 +183,9 @@ class QuicClient : public EpollCallbackInterface, // UDP socket. int fd_; + // Helper to be used by created connections. + scoped_ptr<QuicEpollConnectionHelper> helper_; + // Writer used to actually send packets to the wire. scoped_ptr<QuicPacketWriter> writer_; diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc index 72b14de..0ec5470 100644 --- a/net/tools/quic/quic_dispatcher.cc +++ b/net/tools/quic/quic_dispatcher.cc @@ -47,6 +47,7 @@ QuicDispatcher::QuicDispatcher(const QuicConfig& config, epoll_server_(epoll_server), fd_(fd), write_blocked_(false), + helper_(new QuicEpollConnectionHelper(epoll_server_)), writer_(new QuicDefaultPacketWriter(fd)) { } @@ -176,7 +177,7 @@ void QuicDispatcher::Shutdown() { DeleteSessions(); } -void QuicDispatcher::OnConnectionClose(QuicGuid guid, QuicErrorCode error) { +void QuicDispatcher::OnConnectionClosed(QuicGuid guid, QuicErrorCode error) { SessionMap::iterator it = session_map_.find(guid); if (it == session_map_.end()) { LOG(DFATAL) << "GUID " << guid << " does not exist in the session map. " @@ -199,10 +200,8 @@ void QuicDispatcher::OnConnectionClose(QuicGuid guid, QuicErrorCode error) { QuicSession* QuicDispatcher::CreateQuicSession( QuicGuid guid, const IPEndPoint& client_address) { - QuicConnectionHelperInterface* helper = - new QuicEpollConnectionHelper(epoll_server_); QuicServerSession* session = new QuicServerSession( - config_, new QuicConnection(guid, client_address, helper, this, + config_, new QuicConnection(guid, client_address, helper_.get(), this, true, QuicVersionMax()), this); session->InitializeSession(crypto_config_); return session; diff --git a/net/tools/quic/quic_dispatcher.h b/net/tools/quic/quic_dispatcher.h index ddc98df..c20c356 100644 --- a/net/tools/quic/quic_dispatcher.h +++ b/net/tools/quic/quic_dispatcher.h @@ -11,6 +11,7 @@ #include <list> #include "base/containers/hash_tables.h" +#include "base/memory/scoped_ptr.h" #include "net/base/ip_endpoint.h" #include "net/base/linked_hash_map.h" #include "net/quic/quic_blocked_writer_interface.h" @@ -46,6 +47,8 @@ class QuicDispatcherPeer; } // namespace test class DeleteSessionsAlarm; +class QuicEpollConnectionHelper; + class QuicDispatcher : public QuicPacketWriter, public QuicSessionOwner { public: // Ideally we'd have a linked_hash_set: the boolean is unused. @@ -82,7 +85,7 @@ class QuicDispatcher : public QuicPacketWriter, public QuicSessionOwner { void Shutdown(); // Ensure that the closed connection is cleaned up asynchronously. - virtual void OnConnectionClose(QuicGuid guid, QuicErrorCode error) OVERRIDE; + virtual void OnConnectionClosed(QuicGuid guid, QuicErrorCode error) OVERRIDE; // Sets the fd and creates a default packet writer with that fd. void set_fd(int fd); @@ -112,6 +115,7 @@ class QuicDispatcher : public QuicPacketWriter, public QuicSessionOwner { return time_wait_list_manager_.get(); } + QuicEpollConnectionHelper* helper() { return helper_.get(); } EpollServer* epoll_server() { return epoll_server_; } private: @@ -144,6 +148,9 @@ class QuicDispatcher : public QuicPacketWriter, public QuicSessionOwner { // False if we have gotten a call to OnCanWrite after the last failed write. bool write_blocked_; + // The helper used for all connections. + scoped_ptr<QuicEpollConnectionHelper> helper_; + // The writer to write to the socket with. scoped_ptr<QuicPacketWriter> writer_; diff --git a/net/tools/quic/quic_dispatcher_test.cc b/net/tools/quic/quic_dispatcher_test.cc index 651f224..a3e6885 100644 --- a/net/tools/quic/quic_dispatcher_test.cc +++ b/net/tools/quic/quic_dispatcher_test.cc @@ -63,9 +63,9 @@ class MockServerConnection : public MockConnection { : MockConnection(guid, address, fd, eps, 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_; @@ -81,7 +81,7 @@ QuicSession* CreateSession(QuicDispatcher* dispatcher, *session = new MockSession(connection, true); ON_CALL(*connection, SendConnectionClose(_)).WillByDefault( WithoutArgs(Invoke( - connection, &MockServerConnection::UnregisterOnConnectionClose))); + connection, &MockServerConnection::UnregisterOnConnectionClosed))); EXPECT_CALL(*reinterpret_cast<MockConnection*>((*session)->connection()), ProcessUdpPacket(_, addr, _)); @@ -207,10 +207,10 @@ 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( diff --git a/net/tools/quic/quic_epoll_connection_helper_test.cc b/net/tools/quic/quic_epoll_connection_helper_test.cc index e572259..df34743 100644 --- a/net/tools/quic/quic_epoll_connection_helper_test.cc +++ b/net/tools/quic/quic_epoll_connection_helper_test.cc @@ -85,8 +85,8 @@ class QuicEpollConnectionHelperTest : public ::testing::Test { : guid_(42), framer_(QuicVersionMax(), QuicTime::Zero(), false), send_algorithm_(new testing::StrictMock<MockSendAlgorithm>), - helper_(new QuicEpollConnectionHelper(&epoll_server_)), - connection_(guid_, IPEndPoint(), helper_, &writer_), + helper_(&epoll_server_), + connection_(guid_, IPEndPoint(), &helper_, &writer_), frame_(3, false, 0, kData) { connection_.set_visitor(&visitor_); connection_.SetSendAlgorithm(send_algorithm_); @@ -122,7 +122,7 @@ class QuicEpollConnectionHelperTest : public ::testing::Test { MockEpollServer epoll_server_; testing::StrictMock<MockSendAlgorithm>* send_algorithm_; - QuicEpollConnectionHelper* helper_; + QuicEpollConnectionHelper helper_; TestWriter writer_; TestConnection connection_; testing::StrictMock<MockConnectionVisitor> visitor_; @@ -165,7 +165,8 @@ TEST_F(QuicEpollConnectionHelperTest, InitialTimeout) { HAS_RETRANSMITTABLE_DATA)); EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillOnce( Return(QuicTime::Delta::FromMicroseconds(1))); - EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, !kFromPeer)); + EXPECT_CALL(visitor_, + OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, !kFromPeer)); epoll_server_.WaitForEventsAndExecuteCallbacks(); EXPECT_FALSE(connection_.connected()); EXPECT_EQ(kDefaultInitialTimeoutSecs * 1000000, epoll_server_.NowInUsec()); @@ -191,7 +192,8 @@ TEST_F(QuicEpollConnectionHelperTest, TimeoutAfterSend) { EXPECT_EQ(kDefaultInitialTimeoutSecs * 1000000, epoll_server_.NowInUsec()); // This time, we should time out. - EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, !kFromPeer)); + EXPECT_CALL(visitor_, + OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, !kFromPeer)); EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillOnce( diff --git a/net/tools/quic/quic_server_session.cc b/net/tools/quic/quic_server_session.cc index 7ec991c..bea957c 100644 --- a/net/tools/quic/quic_server_session.cc +++ b/net/tools/quic/quic_server_session.cc @@ -32,9 +32,10 @@ QuicCryptoServerStream* QuicServerSession::CreateQuicCryptoServerStream( return new QuicCryptoServerStream(crypto_config, this); } -void QuicServerSession::ConnectionClose(QuicErrorCode error, bool from_peer) { - QuicSession::ConnectionClose(error, from_peer); - owner_->OnConnectionClose(connection()->guid(), error); +void QuicServerSession::OnConnectionClosed(QuicErrorCode error, + bool from_peer) { + QuicSession::OnConnectionClosed(error, from_peer); + owner_->OnConnectionClosed(connection()->guid(), error); } bool QuicServerSession::ShouldCreateIncomingReliableStream(QuicStreamId id) { diff --git a/net/tools/quic/quic_server_session.h b/net/tools/quic/quic_server_session.h index 2f03137..1a5bfa3 100644 --- a/net/tools/quic/quic_server_session.h +++ b/net/tools/quic/quic_server_session.h @@ -36,7 +36,7 @@ class QuicSessionOwner { public: virtual ~QuicSessionOwner() {} - virtual void OnConnectionClose(QuicGuid guid, QuicErrorCode error) = 0; + virtual void OnConnectionClosed(QuicGuid guid, QuicErrorCode error) = 0; }; class QuicServerSession : public QuicSession { @@ -46,7 +46,7 @@ class QuicServerSession : public QuicSession { QuicSessionOwner* owner); // Override the base class to notify the owner of the connection close. - virtual void ConnectionClose(QuicErrorCode error, bool from_peer) OVERRIDE; + virtual void OnConnectionClosed(QuicErrorCode error, bool from_peer) OVERRIDE; virtual ~QuicServerSession(); diff --git a/net/tools/quic/test_tools/quic_dispatcher_peer.cc b/net/tools/quic/test_tools/quic_dispatcher_peer.cc index 344784b..c96eafd 100644 --- a/net/tools/quic/test_tools/quic_dispatcher_peer.cc +++ b/net/tools/quic/test_tools/quic_dispatcher_peer.cc @@ -36,6 +36,12 @@ QuicPacketWriter* QuicDispatcherPeer::GetWriter(QuicDispatcher* dispatcher) { return dispatcher->writer_.get(); } +// static +QuicEpollConnectionHelper* QuicDispatcherPeer::GetHelper( + QuicDispatcher* dispatcher) { + return dispatcher->helper_.get(); +} + } // namespace test } // namespace tools } // namespace net diff --git a/net/tools/quic/test_tools/quic_dispatcher_peer.h b/net/tools/quic/test_tools/quic_dispatcher_peer.h index 1e38bbe..f463453 100644 --- a/net/tools/quic/test_tools/quic_dispatcher_peer.h +++ b/net/tools/quic/test_tools/quic_dispatcher_peer.h @@ -24,6 +24,8 @@ class QuicDispatcherPeer { net::test::QuicTestWriter* writer); static QuicPacketWriter* GetWriter(QuicDispatcher* dispatcher); + + static QuicEpollConnectionHelper* GetHelper(QuicDispatcher* dispatcher); }; } // namespace test diff --git a/net/tools/quic/test_tools/quic_test_utils.cc b/net/tools/quic/test_tools/quic_test_utils.cc index 01e5bb7..7222e1e 100644 --- a/net/tools/quic/test_tools/quic_test_utils.cc +++ b/net/tools/quic/test_tools/quic_test_utils.cc @@ -27,7 +27,8 @@ MockConnection::MockConnection(QuicGuid guid, new QuicDefaultPacketWriter(fd), is_server, QuicVersionMax()), has_mock_helper_(false), - writer_(net::test::QuicConnectionPeer::GetWriter(this)) { + writer_(net::test::QuicConnectionPeer::GetWriter(this)), + helper_(helper()) { } MockConnection::MockConnection(QuicGuid guid, @@ -37,7 +38,8 @@ MockConnection::MockConnection(QuicGuid guid, new testing::NiceMock<MockPacketWriter>(), is_server, QuicVersionMax()), has_mock_helper_(true), - writer_(net::test::QuicConnectionPeer::GetWriter(this)) { + writer_(net::test::QuicConnectionPeer::GetWriter(this)), + helper_(helper()) { } MockConnection::MockConnection(QuicGuid guid, diff --git a/net/tools/quic/test_tools/quic_test_utils.h b/net/tools/quic/test_tools/quic_test_utils.h index c3f5e4e..3ea1283 100644 --- a/net/tools/quic/test_tools/quic_test_utils.h +++ b/net/tools/quic/test_tools/quic_test_utils.h @@ -87,6 +87,7 @@ class MockConnection : public QuicConnection { private: const bool has_mock_helper_; scoped_ptr<QuicPacketWriter> writer_; + scoped_ptr<QuicConnectionHelperInterface> helper_; DISALLOW_COPY_AND_ASSIGN(MockConnection); }; @@ -129,7 +130,7 @@ class MockQuicSessionOwner : public QuicSessionOwner { public: MockQuicSessionOwner(); ~MockQuicSessionOwner(); - MOCK_METHOD2(OnConnectionClose, void(QuicGuid guid, QuicErrorCode error)); + MOCK_METHOD2(OnConnectionClosed, void(QuicGuid guid, QuicErrorCode error)); }; class TestDecompressorVisitor : public QuicSpdyDecompressor::Visitor { |