Move the logic to run MoQT handshake into a separate helper function.
PiperOrigin-RevId: 741327934
diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc
index e4e973b..72b7ca4 100644
--- a/quiche/quic/moqt/moqt_integration_test.cc
+++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -61,16 +61,7 @@
test_harness_.WireUpEndpointsWithLoss(lose_every_n);
}
void ConnectEndpoints() {
- client_->quic_session()->CryptoConnect();
- bool client_established = false;
- bool server_established = false;
- EXPECT_CALL(client_callbacks_.session_established_callback, Call())
- .WillOnce(Assign(&client_established, true));
- EXPECT_CALL(server_callbacks_.session_established_callback, Call())
- .WillOnce(Assign(&server_established, true));
- bool success = test_harness_.RunUntilWithDefaultTimeout(
- [&]() { return client_established && server_established; });
- QUICHE_CHECK(success);
+ RunHandshakeOrDie(test_harness_.simulator(), *client_, *server_);
}
void EstablishSession() {
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc b/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
index 26eb0c2..3bf5e85 100644
--- a/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
+++ b/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
@@ -5,6 +5,7 @@
#include "quiche/quic/moqt/test_tools/moqt_simulator_harness.h"
#include <memory>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
@@ -13,12 +14,15 @@
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/quic_alarm_factory_proxy.h"
#include "quiche/quic/core/quic_generic_session.h"
+#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/quic/moqt/moqt_session.h"
+#include "quiche/quic/moqt/moqt_session_callbacks.h"
#include "quiche/quic/test_tools/crypto_test_utils.h"
#include "quiche/quic/test_tools/simulator/simulator.h"
#include "quiche/quic/test_tools/simulator/test_harness.h"
+#include "quiche/common/platform/api/quiche_logging.h"
namespace moqt::test {
@@ -83,4 +87,28 @@
quic_session_.Initialize();
}
+void RunHandshakeOrDie(quic::simulator::Simulator& simulator,
+ MoqtClientEndpoint& client, MoqtServerEndpoint& server,
+ std::optional<quic::QuicTimeDelta> timeout) {
+ constexpr quic::QuicTimeDelta kDefaultTimeout =
+ quic::QuicTimeDelta::FromSeconds(3);
+ bool client_established = false;
+ bool server_established = false;
+
+ // Retaining pointers to local variables is safe here, since if the handshake
+ // succeeds, both callbacks are executed and deleted, and if either fails, the
+ // program crashes.
+ client.session()->callbacks().session_established_callback =
+ [&client_established] { client_established = true; };
+ server.session()->callbacks().session_established_callback =
+ [&server_established] { server_established = true; };
+
+ client.quic_session()->CryptoConnect();
+ simulator.RunUntilOrTimeout(
+ [&]() { return client_established && server_established; },
+ timeout.value_or(kDefaultTimeout));
+ QUICHE_CHECK(client_established) << "Client failed to establish session";
+ QUICHE_CHECK(server_established) << "Server failed to establish session";
+}
+
} // namespace moqt::test
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator_harness.h b/quiche/quic/moqt/test_tools/moqt_simulator_harness.h
index 9b84bb8..a75498f 100644
--- a/quiche/quic/moqt/test_tools/moqt_simulator_harness.h
+++ b/quiche/quic/moqt/test_tools/moqt_simulator_harness.h
@@ -5,12 +5,14 @@
#ifndef QUICHE_QUIC_MOQT_TEST_TOOLS_MOQT_SIMULATOR_HARNESS_H_
#define QUICHE_QUIC_MOQT_TEST_TOOLS_MOQT_SIMULATOR_HARNESS_H_
+#include <optional>
#include <string>
#include "quiche/quic/core/crypto/quic_compressed_certs_cache.h"
#include "quiche/quic/core/crypto/quic_crypto_client_config.h"
#include "quiche/quic/core/crypto/quic_crypto_server_config.h"
#include "quiche/quic/core/quic_generic_session.h"
+#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/quic/moqt/moqt_session.h"
#include "quiche/quic/test_tools/simulator/simulator.h"
@@ -51,6 +53,13 @@
MoqtSession session_;
};
+// Runs the handshake for MoQT, crashes if the handshake fails. Overrides
+// the pre-existing session_initalized_callback of both sessions.
+void RunHandshakeOrDie(
+ quic::simulator::Simulator& simulator, MoqtClientEndpoint& client,
+ MoqtServerEndpoint& server,
+ std::optional<quic::QuicTimeDelta> timeout = std::nullopt);
+
} // namespace moqt::test
#endif // QUICHE_QUIC_MOQT_TEST_TOOLS_MOQT_SIMULATOR_HARNESS_H_
diff --git a/quiche/quic/moqt/tools/moqt_simulator_bin.cc b/quiche/quic/moqt/tools/moqt_simulator_bin.cc
index 257c4a5..523cc65 100644
--- a/quiche/quic/moqt/tools/moqt_simulator_bin.cc
+++ b/quiche/quic/moqt/tools/moqt_simulator_bin.cc
@@ -421,24 +421,10 @@
// Runs the simulation and outputs the results to stdout.
void Run() {
- // Timeout for establishing the connection.
- constexpr QuicTimeDelta kConnectionTimeout = QuicTimeDelta::FromSeconds(1);
-
// Perform the QUIC and the MoQT handshake.
client_session()->set_support_object_acks(true);
- client_session()->callbacks().session_established_callback = [this] {
- client_established_ = true;
- };
server_session()->set_support_object_acks(true);
- server_session()->callbacks().session_established_callback = [this] {
- server_established_ = true;
- };
- client_endpoint_.quic_session()->CryptoConnect();
- simulator_.RunUntilOrTimeout(
- [&]() { return client_established_ && server_established_; },
- kConnectionTimeout);
- QUICHE_CHECK(client_established_) << "Client failed to establish session";
- QUICHE_CHECK(server_established_) << "Server failed to establish session";
+ RunHandshakeOrDie(simulator_, client_endpoint_, server_endpoint_);
generator_.queue()->SetDeliveryOrder(parameters_.delivery_order);
client_session()->set_publisher(&publisher_);
@@ -531,8 +517,6 @@
MoqtBitrateAdjuster adjuster_;
SimulationParameters parameters_;
- bool client_established_ = false;
- bool server_established_ = false;
absl::Duration wait_at_the_end_;
};