blob: d6eddb8c5a4e9d2472ab4994a899e030ccb5ad95 [file] [log] [blame]
// Copyright 2025 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_MOCK_MOQT_SESSION_H_
#define QUICHE_QUIC_MOQT_TEST_TOOLS_MOCK_MOQT_SESSION_H_
#include <cstdint>
#include <memory>
#include <optional>
#include "absl/container/flat_hash_map.h"
#include "absl/strings/string_view.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/quic/moqt/moqt_priority.h"
#include "quiche/quic/moqt/moqt_publisher.h"
#include "quiche/quic/moqt/moqt_session_callbacks.h"
#include "quiche/quic/moqt/moqt_session_interface.h"
#include "quiche/quic/moqt/moqt_subscribe_windows.h"
#include "quiche/quic/moqt/moqt_track.h"
#include "quiche/common/platform/api/quiche_logging.h"
#include "quiche/common/platform/api/quiche_test.h"
namespace moqt::test {
// Mock version of MoqtSession. If `publisher` is provided via constructor, all
// of the SUBSCRIBE and FETCH requests are routed towards it.
class MockMoqtSession : public MoqtSessionInterface {
public:
explicit MockMoqtSession(MoqtPublisher* publisher);
~MockMoqtSession() override;
MockMoqtSession(const MockMoqtSession&) = delete;
MockMoqtSession(MockMoqtSession&&) = delete;
MockMoqtSession& operator=(const MockMoqtSession&) = delete;
MockMoqtSession& operator=(MockMoqtSession&&) = delete;
MoqtSessionCallbacks& callbacks() override { return callbacks_; }
MOCK_METHOD(void, Error, (MoqtError code, absl::string_view error),
(override));
MOCK_METHOD(bool, SubscribeAbsolute,
(const FullTrackName& name, uint64_t start_group,
uint64_t start_object, SubscribeRemoteTrack::Visitor* visitor,
MoqtSubscribeParameters parameters),
(override));
MOCK_METHOD(bool, SubscribeAbsolute,
(const FullTrackName& name, uint64_t start_group,
uint64_t start_object, uint64_t end_group,
SubscribeRemoteTrack::Visitor* visitor,
MoqtSubscribeParameters parameters),
(override));
MOCK_METHOD(bool, SubscribeCurrentObject,
(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
MoqtSubscribeParameters parameters),
(override));
MOCK_METHOD(void, Unsubscribe, (const FullTrackName& name), (override));
MOCK_METHOD(bool, Fetch,
(const FullTrackName& name, FetchResponseCallback callback,
FullSequence start, uint64_t end_group,
std::optional<uint64_t> end_object, MoqtPriority priority,
std::optional<MoqtDeliveryOrder> delivery_order,
MoqtSubscribeParameters parameters),
(override));
MOCK_METHOD(bool, JoiningFetch,
(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
uint64_t num_previous_groups,
MoqtSubscribeParameters parameters),
(override));
MOCK_METHOD(bool, JoiningFetch,
(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
FetchResponseCallback callback, uint64_t num_previous_groups,
MoqtPriority priority,
std::optional<MoqtDeliveryOrder> delivery_order,
MoqtSubscribeParameters parameters),
(override));
[[deprecated]] bool SubscribeCurrentGroup(
const FullTrackName& name, SubscribeRemoteTrack::Visitor* visitor,
MoqtSubscribeParameters parameters) override {
QUICHE_LOG(FATAL) << "Don't call this";
}
private:
class LoopbackObjectListener;
bool Subscribe(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
SubscribeWindow window);
MoqtPublisher* const publisher_ = nullptr;
MoqtSessionCallbacks callbacks_;
absl::flat_hash_map<FullTrackName, std::unique_ptr<LoopbackObjectListener>>
receiving_subscriptions_;
};
} // namespace moqt::test
#endif // QUICHE_QUIC_MOQT_TEST_TOOLS_MOCK_MOQT_SESSION_H_