blob: 3430d36840fa49f9916a52edecd66845c1559bb9 [file]
// 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 <optional>
#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/quic_generic_session.h"
#include "quiche/quic/core/quic_time.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,
absl::string_view 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,
absl::string_view 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_;
};
// Runs the handshake for MoQT, crashes if the handshake fails. Calls
// the pre-existing session_initialized_callback for 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_