xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/moqt/moqt_track_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2023 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/quic/moqt/moqt_track.h"
6 
7 #include <optional>
8 
9 #include "absl/strings/string_view.h"
10 #include "quiche/quic/moqt/moqt_messages.h"
11 #include "quiche/quic/moqt/moqt_subscribe_windows.h"
12 #include "quiche/quic/moqt/tools/moqt_mock_visitor.h"
13 #include "quiche/quic/platform/api/quic_test.h"
14 
15 namespace moqt {
16 
17 namespace test {
18 
19 class LocalTrackTest : public quic::test::QuicTest {
20  public:
LocalTrackTest()21   LocalTrackTest()
22       : track_(FullTrackName("foo", "bar"), MoqtForwardingPreference::kTrack,
23                &visitor_, FullSequence(4, 1)) {}
24   LocalTrack track_;
25   MockLocalTrackVisitor visitor_;
26 };
27 
TEST_F(LocalTrackTest,Queries)28 TEST_F(LocalTrackTest, Queries) {
29   EXPECT_EQ(track_.full_track_name(), FullTrackName("foo", "bar"));
30   EXPECT_EQ(track_.track_alias(), std::nullopt);
31   EXPECT_EQ(track_.visitor(), &visitor_);
32   EXPECT_EQ(track_.next_sequence(), FullSequence(4, 1));
33   track_.SentSequence(FullSequence(4, 0));
34   EXPECT_EQ(track_.next_sequence(), FullSequence(4, 1));  // no change
35   track_.SentSequence(FullSequence(4, 1));
36   EXPECT_EQ(track_.next_sequence(), FullSequence(4, 2));
37   EXPECT_FALSE(track_.HasSubscriber());
38   EXPECT_EQ(track_.forwarding_preference(), MoqtForwardingPreference::kTrack);
39 }
40 
TEST_F(LocalTrackTest,SetTrackAlias)41 TEST_F(LocalTrackTest, SetTrackAlias) {
42   EXPECT_EQ(track_.track_alias(), std::nullopt);
43   track_.set_track_alias(6);
44   EXPECT_EQ(track_.track_alias(), 6);
45 }
46 
TEST_F(LocalTrackTest,AddGetDeleteWindow)47 TEST_F(LocalTrackTest, AddGetDeleteWindow) {
48   track_.AddWindow(0, 4, 1);
49   EXPECT_EQ(track_.GetWindow(0)->subscribe_id(), 0);
50   EXPECT_EQ(track_.GetWindow(1), nullptr);
51   track_.DeleteWindow(0);
52   EXPECT_EQ(track_.GetWindow(0), nullptr);
53 }
54 
TEST_F(LocalTrackTest,ShouldSend)55 TEST_F(LocalTrackTest, ShouldSend) {
56   track_.AddWindow(0, 4, 1);
57   EXPECT_TRUE(track_.HasSubscriber());
58   EXPECT_TRUE(track_.ShouldSend(FullSequence(3, 12)).empty());
59   EXPECT_TRUE(track_.ShouldSend(FullSequence(4, 0)).empty());
60   EXPECT_EQ(track_.ShouldSend(FullSequence(4, 1)).size(), 1);
61   EXPECT_EQ(track_.ShouldSend(FullSequence(12, 0)).size(), 1);
62 }
63 
64 class RemoteTrackTest : public quic::test::QuicTest {
65  public:
RemoteTrackTest()66   RemoteTrackTest()
67       : track_(FullTrackName("foo", "bar"), /*track_alias=*/5, &visitor_) {}
68   RemoteTrack track_;
69   MockRemoteTrackVisitor visitor_;
70 };
71 
TEST_F(RemoteTrackTest,Queries)72 TEST_F(RemoteTrackTest, Queries) {
73   EXPECT_EQ(track_.full_track_name(), FullTrackName("foo", "bar"));
74   EXPECT_EQ(track_.track_alias(), 5);
75   EXPECT_EQ(track_.visitor(), &visitor_);
76 }
77 
TEST_F(RemoteTrackTest,UpdateForwardingPreference)78 TEST_F(RemoteTrackTest, UpdateForwardingPreference) {
79   EXPECT_TRUE(
80       track_.CheckForwardingPreference(MoqtForwardingPreference::kObject));
81   EXPECT_TRUE(
82       track_.CheckForwardingPreference(MoqtForwardingPreference::kObject));
83   EXPECT_FALSE(
84       track_.CheckForwardingPreference(MoqtForwardingPreference::kDatagram));
85 }
86 
87 // TODO: Write test for GetStreamForSequence.
88 
89 }  // namespace test
90 
91 }  // namespace moqt
92