Index: net/quic/quic_stream_factory_test.cc |
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc |
index 9a351ec62f2ce79048ab1b6c6c7f9066c5d3cb52..4cdea8b18fbd937f52e3fd2c47890d9e9a8f1c80 100644 |
--- a/net/quic/quic_stream_factory_test.cc |
+++ b/net/quic/quic_stream_factory_test.cc |
@@ -18,6 +18,7 @@ |
#include "net/quic/test_tools/mock_clock.h" |
#include "net/quic/test_tools/mock_crypto_client_stream_factory.h" |
#include "net/quic/test_tools/mock_random.h" |
+#include "net/quic/test_tools/quic_test_packet_maker.h" |
#include "net/quic/test_tools/quic_test_utils.h" |
#include "net/socket/socket_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -66,15 +67,17 @@ class QuicStreamFactoryPeer { |
} |
}; |
-class QuicStreamFactoryTest : public ::testing::Test { |
+class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> { |
protected: |
QuicStreamFactoryTest() |
: random_generator_(0), |
+ maker_(GetParam(), 0), |
clock_(new MockClock()), |
factory_(&host_resolver_, &socket_factory_, |
base::WeakPtr<HttpServerProperties>(), |
&crypto_client_stream_factory_, |
- &random_generator_, clock_, kDefaultMaxPacketSize), |
+ &random_generator_, clock_, kDefaultMaxPacketSize, |
+ SupportedVersions(GetParam())), |
host_port_proxy_pair_(HostPortPair(kDefaultServerHostName, |
kDefaultServerPort), |
ProxyServer::Direct()), |
@@ -83,84 +86,6 @@ class QuicStreamFactoryTest : public ::testing::Test { |
factory_.set_require_confirmation(false); |
} |
- scoped_ptr<QuicEncryptedPacket> ConstructRstPacket( |
- QuicPacketSequenceNumber num, |
- QuicStreamId stream_id) { |
- QuicPacketHeader header; |
- header.public_header.guid = random_generator_.RandUint64(); |
- header.public_header.reset_flag = false; |
- header.public_header.version_flag = true; |
- header.packet_sequence_number = num; |
- header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
- header.entropy_flag = false; |
- header.fec_flag = false; |
- header.fec_group = 0; |
- |
- QuicRstStreamFrame rst(stream_id, QUIC_STREAM_CANCELLED); |
- return scoped_ptr<QuicEncryptedPacket>( |
- ConstructPacket(header, QuicFrame(&rst))); |
- } |
- |
- scoped_ptr<QuicEncryptedPacket> ConstructAckPacket( |
- QuicPacketSequenceNumber largest_received, |
- QuicPacketSequenceNumber least_unacked) { |
- QuicPacketHeader header; |
- header.public_header.guid = random_generator_.RandUint64(); |
- header.public_header.reset_flag = false; |
- header.public_header.version_flag = false; |
- header.packet_sequence_number = 2; |
- header.entropy_flag = false; |
- header.fec_flag = false; |
- header.fec_group = 0; |
- |
- QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked); |
- QuicCongestionFeedbackFrame feedback; |
- feedback.type = kTCP; |
- feedback.tcp.accumulated_number_of_lost_packets = 0; |
- feedback.tcp.receive_window = 16000; |
- |
- QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); |
- QuicFrames frames; |
- frames.push_back(QuicFrame(&ack)); |
- frames.push_back(QuicFrame(&feedback)); |
- scoped_ptr<QuicPacket> packet( |
- framer.BuildUnsizedDataPacket(header, frames).packet); |
- return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
- ENCRYPTION_NONE, header.packet_sequence_number, *packet)); |
- } |
- |
- // Returns a newly created packet to send congestion feedback data. |
- scoped_ptr<QuicEncryptedPacket> ConstructFeedbackPacket( |
- QuicPacketSequenceNumber sequence_number) { |
- QuicPacketHeader header; |
- header.public_header.guid = random_generator_.RandUint64(); |
- header.public_header.reset_flag = false; |
- header.public_header.version_flag = false; |
- header.packet_sequence_number = sequence_number; |
- header.entropy_flag = false; |
- header.fec_flag = false; |
- header.fec_group = 0; |
- |
- QuicCongestionFeedbackFrame frame; |
- frame.type = kTCP; |
- frame.tcp.accumulated_number_of_lost_packets = 0; |
- frame.tcp.receive_window = 16000; |
- |
- return scoped_ptr<QuicEncryptedPacket>( |
- ConstructPacket(header, QuicFrame(&frame))); |
- } |
- |
- scoped_ptr<QuicEncryptedPacket> ConstructPacket( |
- const QuicPacketHeader& header, |
- const QuicFrame& frame) { |
- QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); |
- QuicFrames frames; |
- frames.push_back(frame); |
- scoped_ptr<QuicPacket> packet( |
- framer.BuildUnsizedDataPacket(header, frames).packet); |
- return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
- ENCRYPTION_NONE, header.packet_sequence_number, *packet)); |
- } |
int GetSourcePortForNewSession(const HostPortProxyPair& destination) { |
// Should only be called if there is no active session for this destination. |
@@ -210,6 +135,7 @@ class QuicStreamFactoryTest : public ::testing::Test { |
DeterministicMockClientSocketFactory socket_factory_; |
MockCryptoClientStreamFactory crypto_client_stream_factory_; |
MockRandom random_generator_; |
+ QuicTestPacketMaker maker_; |
MockClock* clock_; // Owned by factory_. |
QuicStreamFactory factory_; |
HostPortProxyPair host_port_proxy_pair_; |
@@ -219,12 +145,15 @@ class QuicStreamFactoryTest : public ::testing::Test { |
TestCompletionCallback callback_; |
}; |
-TEST_F(QuicStreamFactoryTest, CreateIfSessionExists) { |
+INSTANTIATE_TEST_CASE_P(Version, QuicStreamFactoryTest, |
+ ::testing::ValuesIn(QuicSupportedVersions())); |
+ |
+TEST_P(QuicStreamFactoryTest, CreateIfSessionExists) { |
EXPECT_EQ(NULL, factory_.CreateIfSessionExists(host_port_proxy_pair_, |
net_log_).get()); |
} |
-TEST_F(QuicStreamFactoryTest, Create) { |
+TEST_P(QuicStreamFactoryTest, Create) { |
MockRead reads[] = { |
MockRead(ASYNC, OK, 0) // EOF |
}; |
@@ -258,7 +187,7 @@ TEST_F(QuicStreamFactoryTest, Create) { |
EXPECT_TRUE(socket_data.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, Goaway) { |
+TEST_P(QuicStreamFactoryTest, Goaway) { |
MockRead reads[] = { |
MockRead(ASYNC, OK, 0) // EOF |
}; |
@@ -315,11 +244,13 @@ TEST_F(QuicStreamFactoryTest, Goaway) { |
EXPECT_TRUE(socket_data2.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, MaxOpenStream) { |
+TEST_P(QuicStreamFactoryTest, MaxOpenStream) { |
MockRead reads[] = { |
MockRead(ASYNC, OK, 0) // EOF |
}; |
- scoped_ptr<QuicEncryptedPacket> rst(ConstructRstPacket(1, 3)); |
+ QuicStreamId stream_id = GetParam() > QUIC_VERSION_12 ? 5 : 3; |
+ scoped_ptr<QuicEncryptedPacket> rst( |
+ maker_.MakeRstPacket(1, true, stream_id, QUIC_STREAM_CANCELLED)); |
MockWrite writes[] = { |
MockWrite(ASYNC, rst->data(), rst->length(), 1), |
}; |
@@ -371,7 +302,7 @@ TEST_F(QuicStreamFactoryTest, MaxOpenStream) { |
STLDeleteElements(&streams); |
} |
-TEST_F(QuicStreamFactoryTest, ResolutionErrorInCreate) { |
+TEST_P(QuicStreamFactoryTest, ResolutionErrorInCreate) { |
DeterministicSocketData socket_data(NULL, 0, NULL, 0); |
socket_factory_.AddSocketDataProvider(&socket_data); |
@@ -388,7 +319,7 @@ TEST_F(QuicStreamFactoryTest, ResolutionErrorInCreate) { |
EXPECT_TRUE(socket_data.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, ConnectErrorInCreate) { |
+TEST_P(QuicStreamFactoryTest, ConnectErrorInCreate) { |
MockConnect connect(SYNCHRONOUS, ERR_ADDRESS_IN_USE); |
DeterministicSocketData socket_data(NULL, 0, NULL, 0); |
socket_data.set_connect_data(connect); |
@@ -406,7 +337,7 @@ TEST_F(QuicStreamFactoryTest, ConnectErrorInCreate) { |
EXPECT_TRUE(socket_data.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, CancelCreate) { |
+TEST_P(QuicStreamFactoryTest, CancelCreate) { |
MockRead reads[] = { |
MockRead(ASYNC, OK, 0) // EOF |
}; |
@@ -432,7 +363,7 @@ TEST_F(QuicStreamFactoryTest, CancelCreate) { |
EXPECT_TRUE(socket_data.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, CreateConsistentEphemeralPort) { |
+TEST_P(QuicStreamFactoryTest, CreateConsistentEphemeralPort) { |
// Sequentially connect to the default host, then another host, and then the |
// default host. Verify that the default host gets a consistent ephemeral |
// port, that is different from the other host's connection. |
@@ -448,7 +379,7 @@ TEST_F(QuicStreamFactoryTest, CreateConsistentEphemeralPort) { |
EXPECT_EQ(original_port, GetSourcePortForNewSession(host_port_proxy_pair_)); |
} |
-TEST_F(QuicStreamFactoryTest, CloseAllSessions) { |
+TEST_P(QuicStreamFactoryTest, CloseAllSessions) { |
MockRead reads[] = { |
MockRead(ASYNC, 0, 0) // EOF |
}; |
@@ -498,7 +429,7 @@ TEST_F(QuicStreamFactoryTest, CloseAllSessions) { |
EXPECT_TRUE(socket_data2.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, OnIPAddressChanged) { |
+TEST_P(QuicStreamFactoryTest, OnIPAddressChanged) { |
MockRead reads[] = { |
MockRead(ASYNC, 0, 0) // EOF |
}; |
@@ -549,7 +480,7 @@ TEST_F(QuicStreamFactoryTest, OnIPAddressChanged) { |
EXPECT_TRUE(socket_data2.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, OnCertAdded) { |
+TEST_P(QuicStreamFactoryTest, OnCertAdded) { |
MockRead reads[] = { |
MockRead(ASYNC, 0, 0) // EOF |
}; |
@@ -600,7 +531,7 @@ TEST_F(QuicStreamFactoryTest, OnCertAdded) { |
EXPECT_TRUE(socket_data2.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, OnCACertChanged) { |
+TEST_P(QuicStreamFactoryTest, OnCACertChanged) { |
MockRead reads[] = { |
MockRead(ASYNC, 0, 0) // EOF |
}; |
@@ -651,7 +582,7 @@ TEST_F(QuicStreamFactoryTest, OnCACertChanged) { |
EXPECT_TRUE(socket_data2.at_write_eof()); |
} |
-TEST_F(QuicStreamFactoryTest, SharedCryptoConfig) { |
+TEST_P(QuicStreamFactoryTest, SharedCryptoConfig) { |
vector<string> cannoncial_suffixes; |
cannoncial_suffixes.push_back(string(".c.youtube.com")); |
cannoncial_suffixes.push_back(string(".googlevideo.com")); |
@@ -692,7 +623,7 @@ TEST_F(QuicStreamFactoryTest, SharedCryptoConfig) { |
} |
} |
-TEST_F(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) { |
+TEST_P(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) { |
vector<string> cannoncial_suffixes; |
cannoncial_suffixes.push_back(string(".c.youtube.com")); |
cannoncial_suffixes.push_back(string(".googlevideo.com")); |