Refactor QuicConnectionAlarms to take a delegate instead of a QuicConnection.
This will allow QuicConnectionAlarms to be unit-tested by itself.
PiperOrigin-RevId: 639063824
diff --git a/build/source_list.bzl b/build/source_list.bzl
index b04eb4c..f8f6e7e 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -797,6 +797,7 @@
"quic/test_tools/mock_clock.h",
"quic/test_tools/mock_connection_id_generator.h",
"quic/test_tools/mock_load_balancer_encoder.h",
+ "quic/test_tools/mock_quic_connection_alarms.h",
"quic/test_tools/mock_quic_dispatcher.h",
"quic/test_tools/mock_quic_session_visitor.h",
"quic/test_tools/mock_quic_spdy_client_stream.h",
diff --git a/build/source_list.gni b/build/source_list.gni
index 9af07f6..f203a7a 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -797,6 +797,7 @@
"src/quiche/quic/test_tools/mock_clock.h",
"src/quiche/quic/test_tools/mock_connection_id_generator.h",
"src/quiche/quic/test_tools/mock_load_balancer_encoder.h",
+ "src/quiche/quic/test_tools/mock_quic_connection_alarms.h",
"src/quiche/quic/test_tools/mock_quic_dispatcher.h",
"src/quiche/quic/test_tools/mock_quic_session_visitor.h",
"src/quiche/quic/test_tools/mock_quic_spdy_client_stream.h",
diff --git a/build/source_list.json b/build/source_list.json
index 09f6d11..c5edd4d 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -796,6 +796,7 @@
"quiche/quic/test_tools/mock_clock.h",
"quiche/quic/test_tools/mock_connection_id_generator.h",
"quiche/quic/test_tools/mock_load_balancer_encoder.h",
+ "quiche/quic/test_tools/mock_quic_connection_alarms.h",
"quiche/quic/test_tools/mock_quic_dispatcher.h",
"quiche/quic/test_tools/mock_quic_session_visitor.h",
"quiche/quic/test_tools/mock_quic_spdy_client_stream.h",
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index 81cbbc4..a714349 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -183,8 +183,7 @@
pending_retransmission_alarm_(false),
defer_send_in_response_to_packets_(false),
arena_(),
- alarms_(this, &context_, &idle_network_detector_, &blackhole_detector_,
- &ping_manager_, *alarm_factory_, arena_),
+ alarms_(this, *alarm_factory_, arena_),
visitor_(nullptr),
debug_visitor_(nullptr),
packet_creator_(server_connection_id, &framer_, random_generator_, this),
@@ -835,6 +834,13 @@
}
}
+void QuicConnection::OnDiscardZeroRttDecryptionKeysAlarm() {
+ QUICHE_DCHECK(connected());
+ QUIC_DLOG(INFO) << "0-RTT discard alarm fired";
+ RemoveDecrypter(ENCRYPTION_ZERO_RTT);
+ RetireOriginalDestinationConnectionId();
+}
+
bool QuicConnection::ValidateServerConnectionId(
const QuicPacketHeader& header) const {
if (perspective_ == Perspective::IS_CLIENT &&
@@ -2697,7 +2703,10 @@
}
}
-void QuicConnection::OnSendAlarm() { WriteIfNotBlocked(); }
+void QuicConnection::OnSendAlarm() {
+ QUICHE_DCHECK(connected());
+ WriteIfNotBlocked();
+}
void QuicConnection::WriteIfNotBlocked() {
if (framer().is_processing_packet()) {
@@ -3984,6 +3993,17 @@
WritePacket(&packet);
}
+void QuicConnection::OnAckAlarm() {
+ QUICHE_DCHECK(ack_frame_updated());
+ QUICHE_DCHECK(connected());
+ QuicConnection::ScopedPacketFlusher flusher(this);
+ if (SupportsMultiplePacketNumberSpaces()) {
+ SendAllPendingAcks();
+ } else {
+ SendAck();
+ }
+}
+
void QuicConnection::SendAck() {
QUICHE_DCHECK(!SupportsMultiplePacketNumberSpaces());
QUIC_DVLOG(1) << ENDPOINT << "Sending an ACK proactively";
@@ -4057,7 +4077,8 @@
return result;
}
-void QuicConnection::OnRetransmissionTimeout() {
+void QuicConnection::OnRetransmissionAlarm() {
+ QUICHE_DCHECK(connected());
ScopedRetransmissionTimeoutIndicator indicator(this);
#ifndef NDEBUG
if (sent_packet_manager_.unacked_packets().empty()) {
@@ -4258,7 +4279,8 @@
framer_.RemoveDecrypter(level);
}
-void QuicConnection::DiscardPreviousOneRttKeys() {
+void QuicConnection::OnDiscardPreviousOneRttKeysAlarm() {
+ QUICHE_DCHECK(connected());
framer_.DiscardPreviousOneRttKeys();
}
@@ -4313,6 +4335,12 @@
}
}
+void QuicConnection::OnProcessUndecryptablePacketsAlarm() {
+ QUICHE_DCHECK(connected());
+ ScopedPacketFlusher flusher(this);
+ MaybeProcessUndecryptablePackets();
+}
+
void QuicConnection::MaybeProcessUndecryptablePackets() {
process_undecryptable_packets_alarm().Cancel();
@@ -5051,7 +5079,8 @@
mtu_discovery_alarm().Cancel();
}
-void QuicConnection::DiscoverMtu() {
+void QuicConnection::OnMtuDiscoveryAlarm() {
+ QUICHE_DCHECK(connected());
QUICHE_DCHECK(!mtu_discovery_alarm().IsSet());
const QuicPacketNumber largest_sent_packet =
@@ -7317,5 +7346,14 @@
return true;
}
+void QuicConnection::OnIdleDetectorAlarm() { idle_network_detector_.OnAlarm(); }
+
+void QuicConnection::OnPingAlarm() { ping_manager_.OnAlarm(); }
+
+void QuicConnection::OnNetworkBlackholeDetectorAlarm() {
+ blackhole_detector_.OnAlarm();
+}
+
#undef ENDPOINT // undef for jumbo builds
+
} // namespace quic
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index 0565b1a..91bc01d 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -493,7 +493,8 @@
public QuicIdleNetworkDetector::Delegate,
public QuicPathValidator::SendDelegate,
public QuicConnectionIdManagerVisitorInterface,
- public QuicPingManager::Delegate {
+ public QuicPingManager::Delegate,
+ public QuicConnectionAlarmsDelegate {
public:
// Constructs a new QuicConnection for |connection_id| and
// |initial_peer_address| using |writer| to write packets. |owns_writer|
@@ -638,7 +639,7 @@
bool IsMsgTooBig(const QuicPacketWriter* writer, const WriteResult& result);
// Called from the SendAlarmDelegate to initiate writing data.
- virtual void OnSendAlarm();
+ void OnSendAlarm() override;
// If the socket is not blocked, writes queued packets.
void WriteIfNotBlocked();
@@ -802,7 +803,7 @@
// Probe the existing alternative path. Does not create a new alternative
// path. This method is the callback for |multi_port_probing_alarm_|.
- virtual void MaybeProbeMultiPortPath();
+ void MaybeProbeMultiPortPath() override;
// Accessors
void set_visitor(QuicConnectionVisitorInterface* visitor) {
@@ -874,12 +875,14 @@
return multi_port_stats_.get();
}
+ void OnAckAlarm() override;
+
// Sets up a packet with an QuicAckFrame and sends it out.
void SendAck();
// Called when an RTO fires. Resets the retransmission alarm if there are
// remaining unacked packets.
- void OnRetransmissionTimeout();
+ void OnRetransmissionAlarm() override;
// Mark all sent 0-RTT encrypted packets for retransmission. Called when new
// 0-RTT or 1-RTT key is available in gQUIC, or when 0-RTT is rejected in IETF
@@ -929,7 +932,7 @@
void RemoveDecrypter(EncryptionLevel level);
// Discard keys for the previous key phase.
- void DiscardPreviousOneRttKeys();
+ void OnDiscardPreviousOneRttKeysAlarm() override;
// Returns true if it is currently allowed to initiate a key update.
bool IsKeyUpdateAllowed() const;
@@ -1023,7 +1026,7 @@
void DisableMtuDiscovery();
// Sends an MTU discovery packet and updates the MTU discovery alarm.
- void DiscoverMtu();
+ void OnMtuDiscoveryAlarm() override;
// Sets the session notifier on the SentPacketManager.
void SetSessionNotifier(SessionNotifierInterface* session_notifier);
@@ -1119,6 +1122,7 @@
// Attempts to process any queued undecryptable packets.
void MaybeProcessUndecryptablePackets();
+ void OnProcessUndecryptablePacketsAlarm() override;
// Queue a coalesced packet.
void QueueCoalescedPacket(const QuicEncryptedPacket& packet);
@@ -1285,7 +1289,7 @@
// Log QUIC_BUG if there is pending frames for the stream with |id|.
void QuicBugIfHasPendingFrames(QuicStreamId id) const;
- QuicConnectionContext* context() { return &context_; }
+ QuicConnectionContext* context() override { return &context_; }
const QuicConnectionContext* context() const { return &context_; }
void set_tracer(std::unique_ptr<QuicConnectionTracer> tracer) {
@@ -1363,6 +1367,11 @@
return quic_limit_new_streams_per_loop_2_;
}
+ void OnDiscardZeroRttDecryptionKeysAlarm() override;
+ void OnIdleDetectorAlarm() override;
+ void OnNetworkBlackholeDetectorAlarm() override;
+ void OnPingAlarm() override;
+
protected:
// Calls cancel() on all the alarms owned by this connection.
void CancelAllAlarms();
diff --git a/quiche/quic/core/quic_connection_alarms.cc b/quiche/quic/core/quic_connection_alarms.cc
index 64cd62f..347ede0 100644
--- a/quiche/quic/core/quic_connection_alarms.cc
+++ b/quiche/quic/core/quic_connection_alarms.cc
@@ -6,12 +6,8 @@
#include "quiche/quic/core/quic_alarm.h"
#include "quiche/quic/core/quic_alarm_factory.h"
-#include "quiche/quic/core/quic_connection.h"
#include "quiche/quic/core/quic_connection_context.h"
-#include "quiche/quic/core/quic_idle_network_detector.h"
-#include "quiche/quic/core/quic_network_blackhole_detector.h"
#include "quiche/quic/core/quic_one_block_arena.h"
-#include "quiche/quic/core/quic_ping_manager.h"
#include "quiche/common/platform/api/quiche_logging.h"
namespace quic {
@@ -21,7 +17,7 @@
// Base class of all alarms owned by a QuicConnection.
class QuicConnectionAlarmDelegate : public QuicAlarm::Delegate {
public:
- explicit QuicConnectionAlarmDelegate(QuicConnection* connection)
+ explicit QuicConnectionAlarmDelegate(QuicConnectionAlarmsDelegate* connection)
: connection_(connection) {}
QuicConnectionAlarmDelegate(const QuicConnectionAlarmDelegate&) = delete;
QuicConnectionAlarmDelegate& operator=(const QuicConnectionAlarmDelegate&) =
@@ -32,7 +28,7 @@
}
protected:
- QuicConnection* connection_;
+ QuicConnectionAlarmsDelegate* connection_;
};
// An alarm that is scheduled to send an ack if a timeout occurs.
@@ -40,16 +36,7 @@
public:
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
- void OnAlarm() override {
- QUICHE_DCHECK(connection_->ack_frame_updated());
- QUICHE_DCHECK(connection_->connected());
- QuicConnection::ScopedPacketFlusher flusher(connection_);
- if (connection_->SupportsMultiplePacketNumberSpaces()) {
- connection_->SendAllPendingAcks();
- } else {
- connection_->SendAck();
- }
- }
+ void OnAlarm() override { connection_->OnAckAlarm(); }
};
// This alarm will be scheduled any time a data-bearing packet is sent out.
@@ -59,10 +46,7 @@
public:
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
- void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
- connection_->OnRetransmissionTimeout();
- }
+ void OnAlarm() override { connection_->OnRetransmissionAlarm(); }
};
// An alarm that is scheduled when the SentPacketManager requires a delay
@@ -72,7 +56,6 @@
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
connection_->OnSendAlarm();
}
};
@@ -81,10 +64,7 @@
public:
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
- void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
- connection_->DiscoverMtu();
- }
+ void OnAlarm() override { connection_->OnMtuDiscoveryAlarm(); }
};
class ProcessUndecryptablePacketsAlarmDelegate
@@ -92,11 +72,7 @@
public:
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
- void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
- QuicConnection::ScopedPacketFlusher flusher(connection_);
- connection_->MaybeProcessUndecryptablePackets();
- }
+ void OnAlarm() override { connection_->OnProcessUndecryptablePacketsAlarm(); }
};
class DiscardPreviousOneRttKeysAlarmDelegate
@@ -104,10 +80,7 @@
public:
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
- void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
- connection_->DiscardPreviousOneRttKeys();
- }
+ void OnAlarm() override { connection_->OnDiscardPreviousOneRttKeysAlarm(); }
};
class DiscardZeroRttDecryptionKeysAlarmDelegate
@@ -116,10 +89,7 @@
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
- QUIC_DLOG(INFO) << "0-RTT discard alarm fired";
- connection_->RemoveDecrypter(ENCRYPTION_ZERO_RTT);
- connection_->RetireOriginalDestinationConnectionId();
+ connection_->OnDiscardZeroRttDecryptionKeysAlarm();
}
};
@@ -128,93 +98,73 @@
using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
void OnAlarm() override {
- QUICHE_DCHECK(connection_->connected());
QUIC_DLOG(INFO) << "Alternative path probing alarm fired";
connection_->MaybeProbeMultiPortPath();
}
};
-class IdleDetectorAlarmDelegate : public QuicAlarm::DelegateWithContext {
+class IdleDetectorAlarmDelegate : public QuicConnectionAlarmDelegate {
public:
- explicit IdleDetectorAlarmDelegate(QuicIdleNetworkDetector* detector,
- QuicConnectionContext* context)
- : QuicAlarm::DelegateWithContext(context), detector_(detector) {}
+ using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
+
IdleDetectorAlarmDelegate(const IdleDetectorAlarmDelegate&) = delete;
IdleDetectorAlarmDelegate& operator=(const IdleDetectorAlarmDelegate&) =
delete;
- void OnAlarm() override { detector_->OnAlarm(); }
-
- private:
- QuicIdleNetworkDetector* detector_;
+ void OnAlarm() override { connection_->OnIdleDetectorAlarm(); }
};
class NetworkBlackholeDetectorAlarmDelegate
- : public QuicAlarm::DelegateWithContext {
+ : public QuicConnectionAlarmDelegate {
public:
- explicit NetworkBlackholeDetectorAlarmDelegate(
- QuicNetworkBlackholeDetector* detector, QuicConnectionContext* context)
- : QuicAlarm::DelegateWithContext(context), detector_(detector) {}
+ using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
+
NetworkBlackholeDetectorAlarmDelegate(
const NetworkBlackholeDetectorAlarmDelegate&) = delete;
NetworkBlackholeDetectorAlarmDelegate& operator=(
const NetworkBlackholeDetectorAlarmDelegate&) = delete;
- void OnAlarm() override { detector_->OnAlarm(); }
-
- private:
- QuicNetworkBlackholeDetector* detector_;
+ void OnAlarm() override { connection_->OnNetworkBlackholeDetectorAlarm(); }
};
-class PingAlarmDelegate : public QuicAlarm::DelegateWithContext {
+class PingAlarmDelegate : public QuicConnectionAlarmDelegate {
public:
- explicit PingAlarmDelegate(QuicPingManager* ping_manager,
- QuicConnectionContext* context)
- : QuicAlarm::DelegateWithContext(context), ping_manager_(ping_manager) {}
+ using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
+
PingAlarmDelegate(const PingAlarmDelegate&) = delete;
PingAlarmDelegate& operator=(const PingAlarmDelegate&) = delete;
- void OnAlarm() override { ping_manager_->OnAlarm(); }
-
- private:
- QuicPingManager* ping_manager_;
+ void OnAlarm() override { connection_->OnPingAlarm(); }
};
} // namespace
QuicConnectionAlarms::QuicConnectionAlarms(
- QuicConnection* connection, QuicConnectionContext* context,
- QuicIdleNetworkDetector* idle_network_detector,
- QuicNetworkBlackholeDetector* network_blackhole_detector,
- QuicPingManager* ping_manager, QuicAlarmFactory& alarm_factory,
+ QuicConnectionAlarmsDelegate* delegate, QuicAlarmFactory& alarm_factory,
QuicConnectionArena& arena)
: ack_alarm_(alarm_factory.CreateAlarm(
- arena.New<AckAlarmDelegate>(connection), &arena)),
+ arena.New<AckAlarmDelegate>(delegate), &arena)),
retransmission_alarm_(alarm_factory.CreateAlarm(
- arena.New<RetransmissionAlarmDelegate>(connection), &arena)),
+ arena.New<RetransmissionAlarmDelegate>(delegate), &arena)),
send_alarm_(alarm_factory.CreateAlarm(
- arena.New<SendAlarmDelegate>(connection), &arena)),
+ arena.New<SendAlarmDelegate>(delegate), &arena)),
mtu_discovery_alarm_(alarm_factory.CreateAlarm(
- arena.New<MtuDiscoveryAlarmDelegate>(connection), &arena)),
+ arena.New<MtuDiscoveryAlarmDelegate>(delegate), &arena)),
process_undecryptable_packets_alarm_(alarm_factory.CreateAlarm(
- arena.New<ProcessUndecryptablePacketsAlarmDelegate>(connection),
+ arena.New<ProcessUndecryptablePacketsAlarmDelegate>(delegate),
&arena)),
discard_previous_one_rtt_keys_alarm_(alarm_factory.CreateAlarm(
- arena.New<DiscardPreviousOneRttKeysAlarmDelegate>(connection),
- &arena)),
+ arena.New<DiscardPreviousOneRttKeysAlarmDelegate>(delegate), &arena)),
discard_zero_rtt_decryption_keys_alarm_(alarm_factory.CreateAlarm(
- arena.New<DiscardZeroRttDecryptionKeysAlarmDelegate>(connection),
+ arena.New<DiscardZeroRttDecryptionKeysAlarmDelegate>(delegate),
&arena)),
multi_port_probing_alarm_(alarm_factory.CreateAlarm(
- arena.New<MultiPortProbingAlarmDelegate>(connection), &arena)),
+ arena.New<MultiPortProbingAlarmDelegate>(delegate), &arena)),
idle_network_detector_alarm_(alarm_factory.CreateAlarm(
- arena.New<IdleDetectorAlarmDelegate>(idle_network_detector, context),
- &arena)),
+ arena.New<IdleDetectorAlarmDelegate>(delegate), &arena)),
network_blackhole_detector_alarm_(alarm_factory.CreateAlarm(
- arena.New<NetworkBlackholeDetectorAlarmDelegate>(
- network_blackhole_detector, context),
- &arena)),
+ arena.New<NetworkBlackholeDetectorAlarmDelegate>(delegate), &arena)),
ping_alarm_(alarm_factory.CreateAlarm(
- arena.New<PingAlarmDelegate>(ping_manager, context), &arena)) {}
+ arena.New<PingAlarmDelegate>(delegate), &arena)) {}
} // namespace quic
diff --git a/quiche/quic/core/quic_connection_alarms.h b/quiche/quic/core/quic_connection_alarms.h
index 303da24..b265fa1 100644
--- a/quiche/quic/core/quic_connection_alarms.h
+++ b/quiche/quic/core/quic_connection_alarms.h
@@ -9,22 +9,33 @@
#include "quiche/quic/core/quic_alarm_factory.h"
#include "quiche/quic/core/quic_arena_scoped_ptr.h"
#include "quiche/quic/core/quic_connection_context.h"
-#include "quiche/quic/core/quic_idle_network_detector.h"
-#include "quiche/quic/core/quic_network_blackhole_detector.h"
#include "quiche/quic/core/quic_one_block_arena.h"
-#include "quiche/quic/core/quic_ping_manager.h"
+#include "quiche/common/platform/api/quiche_export.h"
namespace quic {
-class QuicConnection;
+class QUICHE_EXPORT QuicConnectionAlarmsDelegate {
+ public:
+ virtual ~QuicConnectionAlarmsDelegate() = default;
+
+ virtual void OnSendAlarm() = 0;
+ virtual void OnAckAlarm() = 0;
+ virtual void OnRetransmissionAlarm() = 0;
+ virtual void OnMtuDiscoveryAlarm() = 0;
+ virtual void OnProcessUndecryptablePacketsAlarm() = 0;
+ virtual void OnDiscardPreviousOneRttKeysAlarm() = 0;
+ virtual void OnDiscardZeroRttDecryptionKeysAlarm() = 0;
+ virtual void MaybeProbeMultiPortPath() = 0;
+ virtual void OnIdleDetectorAlarm() = 0;
+ virtual void OnNetworkBlackholeDetectorAlarm() = 0;
+ virtual void OnPingAlarm() = 0;
+
+ virtual QuicConnectionContext* context() = 0;
+};
class QUICHE_EXPORT QuicConnectionAlarms {
public:
- QuicConnectionAlarms(QuicConnection* connection,
- QuicConnectionContext* context,
- QuicIdleNetworkDetector* idle_network_detector,
- QuicNetworkBlackholeDetector* network_blackhole_detector,
- QuicPingManager* ping_manager,
+ QuicConnectionAlarms(QuicConnectionAlarmsDelegate* delegate,
QuicAlarmFactory& alarm_factory,
QuicConnectionArena& arena);
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index 22adb22..decb72d 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -17370,11 +17370,11 @@
QuicPacketCreatorPeer::SetPacketNumber(
QuicConnectionPeer::GetPacketCreator(&connection_), 1);
SendPing();
- connection_.OnRetransmissionTimeout();
+ connection_.OnRetransmissionAlarm();
EXPECT_EQ(writer_->last_ecn_sent(), ECN_NOT_ECT);
EXPECT_EQ(connection_.ecn_codepoint(), ECN_ECT1);
// On 2nd RTO, QUIC abandons ECN.
- connection_.OnRetransmissionTimeout();
+ connection_.OnRetransmissionAlarm();
EXPECT_EQ(writer_->last_ecn_sent(), ECN_NOT_ECT);
EXPECT_EQ(connection_.ecn_codepoint(), ECN_NOT_ECT);
}
@@ -17388,11 +17388,11 @@
connection_.OnInFlightEcnPacketAcked();
SendPing();
// Because an ECN packet was acked, PTOs have no effect on ECN settings.
- connection_.OnRetransmissionTimeout();
+ connection_.OnRetransmissionAlarm();
QuicEcnCodepoint expected_codepoint = ECN_ECT1;
EXPECT_EQ(writer_->last_ecn_sent(), expected_codepoint);
EXPECT_EQ(connection_.ecn_codepoint(), expected_codepoint);
- connection_.OnRetransmissionTimeout();
+ connection_.OnRetransmissionAlarm();
EXPECT_EQ(writer_->last_ecn_sent(), expected_codepoint);
EXPECT_EQ(connection_.ecn_codepoint(), expected_codepoint);
}
diff --git a/quiche/quic/core/quic_idle_network_detector_test.cc b/quiche/quic/core/quic_idle_network_detector_test.cc
index 6b5bfa8..d34d8cb 100644
--- a/quiche/quic/core/quic_idle_network_detector_test.cc
+++ b/quiche/quic/core/quic_idle_network_detector_test.cc
@@ -10,6 +10,7 @@
#include "quiche/quic/platform/api/quic_expect_bug.h"
#include "quiche/quic/platform/api/quic_flags.h"
#include "quiche/quic/platform/api/quic_test.h"
+#include "quiche/quic/test_tools/mock_quic_connection_alarms.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
namespace quic {
@@ -33,17 +34,19 @@
class QuicIdleNetworkDetectorTest : public QuicTest {
public:
QuicIdleNetworkDetectorTest()
- : alarms_(nullptr, nullptr, &detector_, nullptr, nullptr, alarm_factory_,
- arena_),
+ : alarms_(&connection_alarms_delegate_, alarm_factory_, arena_),
detector_(&delegate_, clock_.Now() + QuicTimeDelta::FromSeconds(1),
&alarms_.idle_network_detector_alarm()) {
clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
alarm_ = static_cast<MockAlarmFactory::TestAlarm*>(
&alarms_.idle_network_detector_alarm());
+ ON_CALL(connection_alarms_delegate_, OnIdleDetectorAlarm())
+ .WillByDefault([&] { detector_.OnAlarm(); });
}
protected:
testing::StrictMock<MockDelegate> delegate_;
+ MockConnectionAlarmsDelegate connection_alarms_delegate_;
QuicConnectionArena arena_;
MockAlarmFactory alarm_factory_;
QuicConnectionAlarms alarms_;
diff --git a/quiche/quic/core/quic_network_blackhole_detector_test.cc b/quiche/quic/core/quic_network_blackhole_detector_test.cc
index b43796c3..cad8534 100644
--- a/quiche/quic/core/quic_network_blackhole_detector_test.cc
+++ b/quiche/quic/core/quic_network_blackhole_detector_test.cc
@@ -7,6 +7,7 @@
#include "quiche/quic/core/quic_connection_alarms.h"
#include "quiche/quic/core/quic_one_block_arena.h"
#include "quiche/quic/platform/api/quic_test.h"
+#include "quiche/quic/test_tools/mock_quic_connection_alarms.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
namespace quic {
@@ -34,8 +35,7 @@
class QuicNetworkBlackholeDetectorTest : public QuicTest {
public:
QuicNetworkBlackholeDetectorTest()
- : alarms_(nullptr, nullptr, nullptr, &detector_, nullptr, alarm_factory_,
- arena_),
+ : alarms_(&connection_alarms_delegate_, alarm_factory_, arena_),
detector_(&delegate_, &alarms_.network_blackhole_detector_alarm()),
alarm_(static_cast<MockAlarmFactory::TestAlarm*>(
QuicNetworkBlackholeDetectorPeer::GetAlarm(&detector_))),
@@ -46,6 +46,8 @@
blackhole_delay_(
QuicTime::Delta::FromSeconds(kBlackholeDelayInSeconds)) {
clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ ON_CALL(connection_alarms_delegate_, OnNetworkBlackholeDetectorAlarm())
+ .WillByDefault([&] { detector_.OnAlarm(); });
}
protected:
@@ -56,6 +58,7 @@
}
testing::StrictMock<MockDelegate> delegate_;
+ MockConnectionAlarmsDelegate connection_alarms_delegate_;
QuicConnectionArena arena_;
MockAlarmFactory alarm_factory_;
QuicConnectionAlarms alarms_;
diff --git a/quiche/quic/core/quic_ping_manager_test.cc b/quiche/quic/core/quic_ping_manager_test.cc
index cc193b4..fa65054 100644
--- a/quiche/quic/core/quic_ping_manager_test.cc
+++ b/quiche/quic/core/quic_ping_manager_test.cc
@@ -7,6 +7,7 @@
#include "quiche/quic/core/quic_connection_alarms.h"
#include "quiche/quic/core/quic_one_block_arena.h"
#include "quiche/quic/platform/api/quic_test.h"
+#include "quiche/quic/test_tools/mock_quic_connection_alarms.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
namespace quic {
@@ -38,16 +39,19 @@
class QuicPingManagerTest : public QuicTest {
public:
QuicPingManagerTest()
- : alarms_(nullptr, nullptr, nullptr, nullptr, &manager_, alarm_factory_,
- arena_),
+ : alarms_(&connection_alarms_delegate_, alarm_factory_, arena_),
manager_(Perspective::IS_CLIENT, &delegate_, &alarms_.ping_alarm()),
alarm_(static_cast<MockAlarmFactory::TestAlarm*>(
QuicPingManagerPeer::GetAlarm(&manager_))) {
clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ ON_CALL(connection_alarms_delegate_, OnPingAlarm()).WillByDefault([&] {
+ manager_.OnAlarm();
+ });
}
protected:
testing::StrictMock<MockDelegate> delegate_;
+ MockConnectionAlarmsDelegate connection_alarms_delegate_;
MockClock clock_;
QuicConnectionArena arena_;
MockAlarmFactory alarm_factory_;
diff --git a/quiche/quic/test_tools/mock_quic_connection_alarms.h b/quiche/quic/test_tools/mock_quic_connection_alarms.h
new file mode 100644
index 0000000..702cb8e
--- /dev/null
+++ b/quiche/quic/test_tools/mock_quic_connection_alarms.h
@@ -0,0 +1,32 @@
+// Copyright 2024 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_TEST_TOOLS_MOCK_QUIC_CONNECTION_ALARMS_H_
+#define QUICHE_QUIC_TEST_TOOLS_MOCK_QUIC_CONNECTION_ALARMS_H_
+
+#include "quiche/quic/core/quic_connection_alarms.h"
+#include "quiche/quic/platform/api/quic_test.h"
+
+namespace quic::test {
+
+class MockConnectionAlarmsDelegate : public QuicConnectionAlarmsDelegate {
+ public:
+ MOCK_METHOD(void, OnSendAlarm, (), (override));
+ MOCK_METHOD(void, OnAckAlarm, (), (override));
+ MOCK_METHOD(void, OnRetransmissionAlarm, (), (override));
+ MOCK_METHOD(void, OnMtuDiscoveryAlarm, (), (override));
+ MOCK_METHOD(void, OnProcessUndecryptablePacketsAlarm, (), (override));
+ MOCK_METHOD(void, OnDiscardPreviousOneRttKeysAlarm, (), (override));
+ MOCK_METHOD(void, OnDiscardZeroRttDecryptionKeysAlarm, (), (override));
+ MOCK_METHOD(void, MaybeProbeMultiPortPath, (), (override));
+ MOCK_METHOD(void, OnIdleDetectorAlarm, (), (override));
+ MOCK_METHOD(void, OnNetworkBlackholeDetectorAlarm, (), (override));
+ MOCK_METHOD(void, OnPingAlarm, (), (override));
+
+ QuicConnectionContext* context() override { return nullptr; }
+};
+
+} // namespace quic::test
+
+#endif // QUICHE_QUIC_TEST_TOOLS_MOCK_QUIC_CONNECTION_ALARMS_H_