summaryrefslogtreecommitdiffstats
path: root/net/tools/quic
diff options
context:
space:
mode:
Diffstat (limited to 'net/tools/quic')
-rw-r--r--net/tools/quic/end_to_end_test.cc22
-rw-r--r--net/tools/quic/quic_client.cc5
-rw-r--r--net/tools/quic/quic_client.h3
-rw-r--r--net/tools/quic/quic_dispatcher.cc7
-rw-r--r--net/tools/quic/quic_dispatcher.h9
-rw-r--r--net/tools/quic/quic_dispatcher_test.cc10
-rw-r--r--net/tools/quic/quic_epoll_connection_helper_test.cc12
-rw-r--r--net/tools/quic/quic_server_session.cc7
-rw-r--r--net/tools/quic/quic_server_session.h4
-rw-r--r--net/tools/quic/test_tools/quic_dispatcher_peer.cc6
-rw-r--r--net/tools/quic/test_tools/quic_dispatcher_peer.h2
-rw-r--r--net/tools/quic/test_tools/quic_test_utils.cc6
-rw-r--r--net/tools/quic/test_tools/quic_test_utils.h3
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 {