| // 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_ |