blob: b80ed7bdf11e14ddd515d61f33cc6f065a06f5dc [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,
VersionSpecificParameters parameters),
(override));
MOCK_METHOD(bool, SubscribeAbsolute,
(const FullTrackName& name, uint64_t start_group,
uint64_t start_object, uint64_t end_group,
SubscribeRemoteTrack::Visitor* visitor,
VersionSpecificParameters parameters),
(override));
MOCK_METHOD(bool, SubscribeCurrentObject,
(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
VersionSpecificParameters parameters),
(override));
MOCK_METHOD(bool, SubscribeNextGroup,
(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
VersionSpecificParameters parameters),
(override));
MOCK_METHOD(bool, SubscribeUpdate,
(const FullTrackName& name, std::optional<Location> start,
std::optional<uint64_t> end_group,
std::optional<MoqtPriority> subscriber_priority,
std::optional<bool> forward,
VersionSpecificParameters parameters),
(override));
MOCK_METHOD(void, Unsubscribe, (const FullTrackName& name), (override));
MOCK_METHOD(bool, Fetch,
(const FullTrackName& name, FetchResponseCallback callback,
Location start, uint64_t end_group,
std::optional<uint64_t> end_object, MoqtPriority priority,
std::optional<MoqtDeliveryOrder> delivery_order,
VersionSpecificParameters parameters),
(override));
MOCK_METHOD(bool, JoiningFetch,
(const FullTrackName& name,
SubscribeRemoteTrack::Visitor* visitor,
uint64_t num_previous_groups,
VersionSpecificParameters 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,
VersionSpecificParameters parameters),
(override));
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_