Add connection option NSLC to always send connection close for idle timeout. Protected by gfe2_reloadable_flag_quic_no_silent_close_for_idle_timeout.
PiperOrigin-RevId: 325443767
Change-Id: I681597b69c8bc256a9167c5dc0169217f41373e8
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index b39f606..c547d19 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -11617,6 +11617,42 @@
}
}
+TEST_P(QuicConnectionTest, NoSilentClose) {
+ set_perspective(Perspective::IS_SERVER);
+ QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
+ if (version().SupportsAntiAmplificationLimit()) {
+ QuicConnectionPeer::SetAddressValidated(&connection_);
+ }
+
+ QuicConfig config;
+ QuicTagVector connection_options;
+ connection_options.push_back(kNSLC);
+ config.SetInitialReceivedConnectionOptions(connection_options);
+ QuicConfigPeer::SetNegotiated(&config, true);
+ if (connection_.version().AuthenticatesHandshakeConnectionIds()) {
+ QuicConfigPeer::SetReceivedOriginalConnectionId(
+ &config, connection_.connection_id());
+ QuicConfigPeer::SetReceivedInitialSourceConnectionId(&config,
+ QuicConnectionId());
+ }
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+
+ EXPECT_TRUE(connection_.connected());
+ EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
+
+ EXPECT_CALL(visitor_,
+ OnConnectionClosed(_, ConnectionCloseSource::FROM_SELF));
+ connection_.GetTimeoutAlarm()->Fire();
+ if (GetQuicReloadableFlag(quic_no_silent_close_for_idle_timeout)) {
+ TestConnectionCloseQuicErrorCode(QUIC_NETWORK_IDLE_TIMEOUT);
+ } else {
+ // Verify no connection close packet is serialized.
+ EXPECT_EQ(nullptr,
+ QuicConnectionPeer::GetConnectionClosePacket(&connection_));
+ }
+}
+
} // namespace
} // namespace test
} // namespace quic