Split MoQT simulated endpoints into a separate header file.
PiperOrigin-RevId: 642327076
diff --git a/build/source_list.bzl b/build/source_list.bzl
index f8f6e7e..e4bfad3 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1508,6 +1508,7 @@
"quic/moqt/moqt_session.h",
"quic/moqt/moqt_subscribe_windows.h",
"quic/moqt/moqt_track.h",
+ "quic/moqt/test_tools/moqt_simulator_harness.h",
"quic/moqt/test_tools/moqt_test_message.h",
"quic/moqt/tools/moqt_client.h",
"quic/moqt/tools/moqt_mock_visitor.h",
@@ -1527,6 +1528,7 @@
"quic/moqt/moqt_subscribe_windows.cc",
"quic/moqt/moqt_subscribe_windows_test.cc",
"quic/moqt/moqt_track_test.cc",
+ "quic/moqt/test_tools/moqt_simulator_harness.cc",
"quic/moqt/tools/chat_client_bin.cc",
"quic/moqt/tools/moqt_client.cc",
"quic/moqt/tools/moqt_end_to_end_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index f203a7a..60c5103 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1512,6 +1512,7 @@
"src/quiche/quic/moqt/moqt_session.h",
"src/quiche/quic/moqt/moqt_subscribe_windows.h",
"src/quiche/quic/moqt/moqt_track.h",
+ "src/quiche/quic/moqt/test_tools/moqt_simulator_harness.h",
"src/quiche/quic/moqt/test_tools/moqt_test_message.h",
"src/quiche/quic/moqt/tools/moqt_client.h",
"src/quiche/quic/moqt/tools/moqt_mock_visitor.h",
@@ -1531,6 +1532,7 @@
"src/quiche/quic/moqt/moqt_subscribe_windows.cc",
"src/quiche/quic/moqt/moqt_subscribe_windows_test.cc",
"src/quiche/quic/moqt/moqt_track_test.cc",
+ "src/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc",
"src/quiche/quic/moqt/tools/chat_client_bin.cc",
"src/quiche/quic/moqt/tools/moqt_client.cc",
"src/quiche/quic/moqt/tools/moqt_end_to_end_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index c5edd4d..b34b8f9 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1511,6 +1511,7 @@
"quiche/quic/moqt/moqt_session.h",
"quiche/quic/moqt/moqt_subscribe_windows.h",
"quiche/quic/moqt/moqt_track.h",
+ "quiche/quic/moqt/test_tools/moqt_simulator_harness.h",
"quiche/quic/moqt/test_tools/moqt_test_message.h",
"quiche/quic/moqt/tools/moqt_client.h",
"quiche/quic/moqt/tools/moqt_mock_visitor.h",
@@ -1530,6 +1531,7 @@
"quiche/quic/moqt/moqt_subscribe_windows.cc",
"quiche/quic/moqt/moqt_subscribe_windows_test.cc",
"quiche/quic/moqt/moqt_track_test.cc",
+ "quiche/quic/moqt/test_tools/moqt_simulator_harness.cc",
"quiche/quic/moqt/tools/chat_client_bin.cc",
"quiche/quic/moqt/tools/moqt_client.cc",
"quiche/quic/moqt/tools/moqt_end_to_end_test.cc",
diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc
index 3f71bb4..1e2de16 100644
--- a/quiche/quic/moqt/moqt_integration_test.cc
+++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -8,18 +8,12 @@
#include <string>
#include "absl/strings/string_view.h"
-#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/crypto/quic_random.h"
-#include "quiche/quic/core/quic_config.h"
#include "quiche/quic/core/quic_generic_session.h"
-#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/quic/moqt/moqt_outgoing_queue.h"
#include "quiche/quic/moqt/moqt_session.h"
+#include "quiche/quic/moqt/test_tools/moqt_simulator_harness.h"
#include "quiche/quic/moqt/tools/moqt_mock_visitor.h"
-#include "quiche/quic/test_tools/crypto_test_utils.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
#include "quiche/quic/test_tools/simulator/simulator.h"
#include "quiche/quic/test_tools/simulator/test_harness.h"
@@ -35,87 +29,29 @@
using ::testing::Assign;
using ::testing::Return;
-class ClientEndpoint : public quic::simulator::QuicEndpointWithConnection {
+class ClientEndpoint : public MoqtClientEndpoint {
public:
ClientEndpoint(Simulator* simulator, const std::string& name,
const std::string& peer_name, MoqtVersion version)
- : QuicEndpointWithConnection(simulator, name, peer_name,
- quic::Perspective::IS_CLIENT,
- quic::GetQuicVersionsForGenericSession()),
- crypto_config_(
- quic::test::crypto_test_utils::ProofVerifierForTesting()),
- quic_session_(connection_.get(), false, nullptr, quic::QuicConfig(),
- "test.example.com", 443, "moqt", &session_,
- /*visitor_owned=*/false, nullptr, &crypto_config_),
- session_(
- &quic_session_,
- MoqtSessionParameters{.version = version,
- .perspective = quic::Perspective::IS_CLIENT,
- .using_webtrans = false,
- .deliver_partial_objects = false},
- callbacks_.AsSessionCallbacks()) {
- quic_session_.Initialize();
- }
-
- MoqtSession* session() { return &session_; }
- quic::QuicGenericClientSession* quic_session() { return &quic_session_; }
- testing::MockFunction<void()>& established_callback() {
- return callbacks_.session_established_callback;
- }
- testing::MockFunction<void(absl::string_view)>& terminated_callback() {
- return callbacks_.session_terminated_callback;
+ : MoqtClientEndpoint(simulator, name, peer_name, version) {
+ session()->callbacks() = callbacks_.AsSessionCallbacks();
}
MockSessionCallbacks& callbacks() { return callbacks_; }
private:
MockSessionCallbacks callbacks_;
- quic::QuicCryptoClientConfig crypto_config_;
- quic::QuicGenericClientSession quic_session_;
- MoqtSession session_;
};
-
-class ServerEndpoint : public quic::simulator::QuicEndpointWithConnection {
+class ServerEndpoint : public MoqtServerEndpoint {
public:
ServerEndpoint(Simulator* simulator, const std::string& name,
const std::string& peer_name, MoqtVersion version)
- : QuicEndpointWithConnection(simulator, name, peer_name,
- quic::Perspective::IS_SERVER,
- quic::GetQuicVersionsForGenericSession()),
- compressed_certs_cache_(
- quic::QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
- crypto_config_(quic::QuicCryptoServerConfig::TESTING,
- quic::QuicRandom::GetInstance(),
- quic::test::crypto_test_utils::ProofSourceForTesting(),
- quic::KeyExchangeSource::Default()),
- quic_session_(connection_.get(), false, nullptr, quic::QuicConfig(),
- "moqt", &session_,
- /*visitor_owned=*/false, nullptr, &crypto_config_,
- &compressed_certs_cache_),
- session_(
- &quic_session_,
- MoqtSessionParameters{.version = version,
- .perspective = quic::Perspective::IS_SERVER,
- .using_webtrans = false,
- .deliver_partial_objects = false},
- callbacks_.AsSessionCallbacks()) {
- quic_session_.Initialize();
- }
-
- MoqtSession* session() { return &session_; }
- testing::MockFunction<void()>& established_callback() {
- return callbacks_.session_established_callback;
- }
- testing::MockFunction<void(absl::string_view)>& terminated_callback() {
- return callbacks_.session_terminated_callback;
+ : MoqtServerEndpoint(simulator, name, peer_name, version) {
+ session()->callbacks() = callbacks_.AsSessionCallbacks();
}
MockSessionCallbacks& callbacks() { return callbacks_; }
private:
MockSessionCallbacks callbacks_;
- quic::QuicCompressedCertsCache compressed_certs_cache_;
- quic::QuicCryptoServerConfig crypto_config_;
- quic::QuicGenericServerSession quic_session_;
- MoqtSession session_;
};
class MoqtIntegrationTest : public quiche::test::QuicheTest {
@@ -138,9 +74,9 @@
client_->quic_session()->CryptoConnect();
bool client_established = false;
bool server_established = false;
- EXPECT_CALL(client_->established_callback(), Call())
+ EXPECT_CALL(client_->callbacks().session_established_callback, Call())
.WillOnce(Assign(&client_established, true));
- EXPECT_CALL(server_->established_callback(), Call())
+ EXPECT_CALL(server_->callbacks().session_established_callback, Call())
.WillOnce(Assign(&server_established, true));
bool success = test_harness_.RunUntilWithDefaultTimeout(
[&]() { return client_established && server_established; });
@@ -161,9 +97,9 @@
client_->quic_session()->CryptoConnect();
bool client_established = false;
bool server_established = false;
- EXPECT_CALL(client_->established_callback(), Call())
+ EXPECT_CALL(client_->callbacks().session_established_callback, Call())
.WillOnce(Assign(&client_established, true));
- EXPECT_CALL(server_->established_callback(), Call())
+ EXPECT_CALL(server_->callbacks().session_established_callback, Call())
.WillOnce(Assign(&server_established, true));
bool success = test_harness_.RunUntilWithDefaultTimeout(
[&]() { return client_established && server_established; });
@@ -183,11 +119,13 @@
client_->quic_session()->CryptoConnect();
bool client_terminated = false;
bool server_terminated = false;
- EXPECT_CALL(client_->established_callback(), Call()).Times(0);
- EXPECT_CALL(server_->established_callback(), Call()).Times(0);
- EXPECT_CALL(client_->terminated_callback(), Call(_))
+ EXPECT_CALL(client_->callbacks().session_established_callback, Call())
+ .Times(0);
+ EXPECT_CALL(server_->callbacks().session_established_callback, Call())
+ .Times(0);
+ EXPECT_CALL(client_->callbacks().session_terminated_callback, Call(_))
.WillOnce(Assign(&client_terminated, true));
- EXPECT_CALL(server_->terminated_callback(), Call(_))
+ EXPECT_CALL(server_->callbacks().session_terminated_callback, Call(_))
.WillOnce(Assign(&server_terminated, true));
bool success = test_harness_.RunUntilWithDefaultTimeout(
[&]() { return client_terminated && server_terminated; });
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc b/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
new file mode 100644
index 0000000..20b42ee
--- /dev/null
+++ b/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
@@ -0,0 +1,73 @@
+// 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.
+
+#include "quiche/quic/moqt/test_tools/moqt_simulator_harness.h"
+
+#include <string>
+#include <utility>
+
+#include "quiche/quic/core/crypto/quic_compressed_certs_cache.h"
+#include "quiche/quic/core/crypto/quic_crypto_server_config.h"
+#include "quiche/quic/core/crypto/quic_random.h"
+#include "quiche/quic/core/quic_generic_session.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/test_tools/crypto_test_utils.h"
+#include "quiche/quic/test_tools/simulator/simulator.h"
+#include "quiche/quic/test_tools/simulator/test_harness.h"
+
+namespace moqt::test {
+
+MoqtClientEndpoint::MoqtClientEndpoint(quic::simulator::Simulator* simulator,
+ const std::string& name,
+ const std::string& peer_name,
+ MoqtVersion version)
+ : QuicEndpointWithConnection(simulator, name, peer_name,
+ quic::Perspective::IS_CLIENT,
+ quic::GetQuicVersionsForGenericSession()),
+ crypto_config_(quic::test::crypto_test_utils::ProofVerifierForTesting()),
+ quic_session_(connection_.get(), false, nullptr, quic::QuicConfig(),
+ "test.example.com", 443, "moqt", &session_,
+ /*visitor_owned=*/false, nullptr, &crypto_config_),
+ session_(
+ &quic_session_,
+ MoqtSessionParameters{.version = version,
+ .perspective = quic::Perspective::IS_CLIENT,
+ .using_webtrans = false,
+ .path = "",
+ .deliver_partial_objects = false},
+ MoqtSessionCallbacks()) {
+ quic_session_.Initialize();
+}
+
+MoqtServerEndpoint::MoqtServerEndpoint(quic::simulator::Simulator* simulator,
+ const std::string& name,
+ const std::string& peer_name,
+ MoqtVersion version)
+ : QuicEndpointWithConnection(simulator, name, peer_name,
+ quic::Perspective::IS_SERVER,
+ quic::GetQuicVersionsForGenericSession()),
+ compressed_certs_cache_(
+ quic::QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
+ crypto_config_(quic::QuicCryptoServerConfig::TESTING,
+ quic::QuicRandom::GetInstance(),
+ quic::test::crypto_test_utils::ProofSourceForTesting(),
+ quic::KeyExchangeSource::Default()),
+ quic_session_(connection_.get(), false, nullptr, quic::QuicConfig(),
+ "moqt", &session_,
+ /*visitor_owned=*/false, nullptr, &crypto_config_,
+ &compressed_certs_cache_),
+ session_(
+ &quic_session_,
+ MoqtSessionParameters{.version = version,
+ .perspective = quic::Perspective::IS_SERVER,
+ .using_webtrans = false,
+ .path = "",
+ .deliver_partial_objects = false},
+ MoqtSessionCallbacks()) {
+ quic_session_.Initialize();
+}
+
+} // 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
new file mode 100644
index 0000000..9b84bb8
--- /dev/null
+++ b/quiche/quic/moqt/test_tools/moqt_simulator_harness.h
@@ -0,0 +1,56 @@
+// 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_MOQT_TEST_TOOLS_MOQT_SIMULATOR_HARNESS_H_
+#define QUICHE_QUIC_MOQT_TEST_TOOLS_MOQT_SIMULATOR_HARNESS_H_
+
+#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/moqt/moqt_messages.h"
+#include "quiche/quic/moqt/moqt_session.h"
+#include "quiche/quic/test_tools/simulator/simulator.h"
+#include "quiche/quic/test_tools/simulator/test_harness.h"
+
+namespace moqt::test {
+
+// Places a MoQT-over-raw-QUIC client within a network simulation.
+class MoqtClientEndpoint : public quic::simulator::QuicEndpointWithConnection {
+ public:
+ MoqtClientEndpoint(quic::simulator::Simulator* simulator,
+ const std::string& name, const std::string& peer_name,
+ MoqtVersion version);
+
+ MoqtSession* session() { return &session_; }
+ quic::QuicGenericClientSession* quic_session() { return &quic_session_; }
+
+ private:
+ quic::QuicCryptoClientConfig crypto_config_;
+ quic::QuicGenericClientSession quic_session_;
+ MoqtSession session_;
+};
+
+// Places a MoQT-over-raw-QUIC server within a network simulation.
+class MoqtServerEndpoint : public quic::simulator::QuicEndpointWithConnection {
+ public:
+ MoqtServerEndpoint(quic::simulator::Simulator* simulator,
+ const std::string& name, const std::string& peer_name,
+ MoqtVersion version);
+
+ MoqtSession* session() { return &session_; }
+ quic::QuicGenericServerSession* quic_session() { return &quic_session_; }
+
+ private:
+ quic::QuicCompressedCertsCache compressed_certs_cache_;
+ quic::QuicCryptoServerConfig crypto_config_;
+ quic::QuicGenericServerSession quic_session_;
+ MoqtSession session_;
+};
+
+} // namespace moqt::test
+
+#endif // QUICHE_QUIC_MOQT_TEST_TOOLS_MOQT_SIMULATOR_HARNESS_H_