blob: 2f2ed7a84e69b23cc46714eb46f89cfdfc083984 [file] [log] [blame]
// 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