| // Copyright 2023 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/moqt_subscribe_windows.h" |
| |
| #include <cstdint> |
| #include <optional> |
| |
| #include "quiche/quic/moqt/moqt_messages.h" |
| #include "quiche/quic/platform/api/quic_expect_bug.h" |
| #include "quiche/quic/platform/api/quic_test.h" |
| #include "quiche/common/platform/api/quiche_export.h" |
| |
| namespace moqt { |
| |
| namespace test { |
| |
| class QUICHE_EXPORT SubscribeWindowTest : public quic::test::QuicTest { |
| public: |
| SubscribeWindowTest() {} |
| |
| const uint64_t subscribe_id_ = 2; |
| const Location start_{4, 0}; |
| const uint64_t end_ = 5; |
| }; |
| |
| TEST_F(SubscribeWindowTest, Queries) { |
| SubscribeWindow window(start_, end_); |
| EXPECT_TRUE(window.InWindow(Location(4, 0))); |
| EXPECT_TRUE(window.InWindow(Location(5, UINT64_MAX))); |
| EXPECT_FALSE(window.InWindow(Location(6, 0))); |
| EXPECT_FALSE(window.InWindow(Location(3, 12))); |
| } |
| |
| TEST_F(SubscribeWindowTest, AddQueryRemoveStreamIdSubgroup) { |
| SendStreamMap stream_map(MoqtForwardingPreference::kSubgroup); |
| stream_map.AddStream(Location{4, 0}, 2); |
| EXPECT_EQ(stream_map.GetStreamForSequence(Location(5, 0)), std::nullopt); |
| stream_map.AddStream(Location{5, 2}, 6); |
| EXPECT_QUIC_BUG(stream_map.AddStream(Location{5, 3}, 6), |
| "Stream already added"); |
| EXPECT_EQ(stream_map.GetStreamForSequence(Location(4, 1)), 2); |
| EXPECT_EQ(stream_map.GetStreamForSequence(Location(5, 0)), 6); |
| stream_map.RemoveStream(Location{5, 1}, 6); |
| EXPECT_EQ(stream_map.GetStreamForSequence(Location(5, 2)), std::nullopt); |
| } |
| |
| TEST_F(SubscribeWindowTest, UpdateStartEnd) { |
| SubscribeWindow window(start_, end_); |
| EXPECT_TRUE(window.TruncateStart(start_.next())); |
| EXPECT_TRUE(window.TruncateEnd(end_ - 1)); |
| EXPECT_FALSE(window.InWindow(start_)); |
| EXPECT_FALSE(window.InWindow(Location(end_, 0))); |
| // Widens start_ again. |
| EXPECT_FALSE(window.TruncateStart(start_)); |
| // Widens end_ again. |
| EXPECT_FALSE(window.TruncateEnd(end_)); |
| EXPECT_TRUE(window.TruncateEnd(Location(end_ - 1, 10))); |
| EXPECT_TRUE(window.InWindow(Location(end_ - 1, 10))); |
| EXPECT_FALSE(window.InWindow(Location(end_ - 1, 11))); |
| } |
| |
| } // namespace test |
| |
| } // namespace moqt |