Index: net/tools/quic/quic_client_session_test.cc |
diff --git a/net/tools/quic/quic_client_session_test.cc b/net/tools/quic/quic_client_session_test.cc |
index 6f8136f3aed9cf9be917df15fc7120996c1a57dc..96460d42c4517fffb941d8b8fa047937eb015549 100644 |
--- a/net/tools/quic/quic_client_session_test.cc |
+++ b/net/tools/quic/quic_client_session_test.cc |
@@ -13,6 +13,7 @@ |
#include "net/quic/test_tools/quic_session_peer.h" |
#include "net/quic/test_tools/quic_test_utils.h" |
#include "net/tools/quic/quic_spdy_client_stream.h" |
+#include "net/tools/quic/test_tools/quic_test_utils.h" |
#include "testing/gtest/include/gtest/gtest.h" |
using net::test::CryptoTestUtils; |
@@ -20,7 +21,11 @@ using net::test::DefaultQuicConfig; |
using net::test::PacketSavingConnection; |
using net::test::QuicSessionPeer; |
using net::test::SupportedVersions; |
+using net::test::TestPeerIPAddress; |
using net::test::ValueRestore; |
+using net::test::kTestPort; |
+using net::tools::test::MockConnection; |
+using testing::Invoke; |
using testing::_; |
namespace net { |
@@ -109,6 +114,39 @@ TEST_P(ToolsQuicClientSessionTest, SetFecProtectionFromConfig) { |
EXPECT_EQ(FEC_PROTECT_OPTIONAL, stream->fec_policy()); |
} |
+TEST_P(ToolsQuicClientSessionTest, EmptyPacketReceived) { |
+ // This test covers broken behavior that empty packets cause QUIC connection |
+ // broken. |
+ |
+ // Create Packet with 0 length. |
+ QuicEncryptedPacket invalid_packet(nullptr, 0, false); |
+ IPEndPoint server_address(TestPeerIPAddress(), kTestPort); |
+ IPEndPoint client_address(TestPeerIPAddress(), kTestPort); |
+ |
+ EXPECT_CALL(*reinterpret_cast<MockConnection*>(session_->connection()), |
+ ProcessUdpPacket(server_address, client_address, _)) |
+ .WillRepeatedly( |
+ Invoke(reinterpret_cast<MockConnection*>(session_->connection()), |
+ &MockConnection::ReallyProcessUdpPacket)); |
+ |
+ // Expect call to close connection with error QUIC_INVALID_PACKET_HEADER. |
+ // TODO(b/17206611): Correct behavior: packet should get dropped and |
+ // connection should remain open. |
+ EXPECT_CALL(*connection_, SendConnectionCloseWithDetails( |
+ QUIC_INVALID_PACKET_HEADER, _)).Times(1); |
+ session_->connection()->ProcessUdpPacket(client_address, server_address, |
+ invalid_packet); |
+ |
+ // Create a packet that causes DecryptPacket failed. The packet will get |
+ // dropped without closing connection. This is a correct behavior. |
+ char buf[2] = {0x00, 0x01}; |
+ QuicEncryptedPacket valid_packet(buf, 2, false); |
+ // Close connection shouldn't be called. |
+ EXPECT_CALL(*connection_, SendConnectionCloseWithDetails(_, _)).Times(0); |
+ session_->connection()->ProcessUdpPacket(client_address, server_address, |
+ valid_packet); |
+} |
+ |
} // namespace |
} // namespace test |
} // namespace tools |