Index: net/quic/core/quic_sent_packet_manager_test.cc |
diff --git a/net/quic/core/quic_sent_packet_manager_test.cc b/net/quic/core/quic_sent_packet_manager_test.cc |
index 6d5e6b8af35a5770c2015bf9168b1890957ab16a..d6fa1fd35fde92e79e41a410c9b3b6ca2eff302f 100644 |
--- a/net/quic/core/quic_sent_packet_manager_test.cc |
+++ b/net/quic/core/quic_sent_packet_manager_test.cc |
@@ -1430,6 +1430,60 @@ TEST_F(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { |
->GetCongestionControlType()); |
} |
+TEST_F(QuicSentPacketManagerTest, NegotiateClientCongestionControlFromOptions) { |
+ FLAGS_quic_allow_new_bbr = true; |
+ FLAGS_quic_client_connection_options = true; |
+ QuicConfig config; |
+ QuicTagVector options; |
+ |
+ // No change if the server receives client options. |
+ const SendAlgorithmInterface* mock_sender = |
+ QuicSentPacketManagerPeer::GetSendAlgorithm(manager_); |
+ options.push_back(kRENO); |
+ config.SetClientConnectionOptions(options); |
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
+ EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
+ manager_.SetFromConfig(config); |
+ EXPECT_EQ(mock_sender, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_)); |
+ |
+ // Change the congestion control on the client with client options. |
+ QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
+ EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
+ manager_.SetFromConfig(config); |
+ EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
+ ->GetCongestionControlType()); |
+ |
+ options.clear(); |
+ options.push_back(kTBBR); |
+ config.SetClientConnectionOptions(options); |
+ EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
+ manager_.SetFromConfig(config); |
+ EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
+ ->GetCongestionControlType()); |
+ |
+ options.clear(); |
+ options.push_back(kBYTE); |
+ config.SetClientConnectionOptions(options); |
+ EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
+ manager_.SetFromConfig(config); |
+ if (FLAGS_quic_default_enable_cubic_bytes) { |
+ EXPECT_EQ(kCubic, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
+ ->GetCongestionControlType()); |
+ } else { |
+ EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
+ ->GetCongestionControlType()); |
+ } |
+ |
+ options.clear(); |
+ options.push_back(kRENO); |
+ options.push_back(kBYTE); |
+ config.SetClientConnectionOptions(options); |
+ EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
+ manager_.SetFromConfig(config); |
+ EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) |
+ ->GetCongestionControlType()); |
+} |
+ |
TEST_F(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { |
QuicConfig config; |
QuicTagVector options; |