blob: 1ad6d62049da00f41d8ea360bcda8e543489e216 [file] [log] [blame]
fayang94113fe2019-07-31 07:32:14 -07001// Copyright (c) 2019 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 "net/third_party/quiche/src/spdy/core/fifo_write_scheduler.h"
6
7#include "net/third_party/quiche/src/spdy/platform/api/spdy_test.h"
8#include "net/third_party/quiche/src/spdy/platform/api/spdy_test_helpers.h"
9
10namespace spdy {
11
12namespace test {
13
14TEST(FifoWriteSchedulerTest, BasicTest) {
15 FifoWriteScheduler<SpdyStreamId> fifo;
16 EXPECT_FALSE(fifo.HasReadyStreams());
17 EXPECT_SPDY_BUG(
fayang7e3c1a12019-08-02 08:07:13 -070018 EXPECT_EQ(0u, std::get<0>(fifo.PopNextReadyStreamAndPrecedence())),
fayang94113fe2019-07-31 07:32:14 -070019 "No ready streams available");
20 EXPECT_SPDY_BUG(fifo.MarkStreamReady(9, true), "Stream 9 is not registered");
21 EXPECT_SPDY_BUG(fifo.IsStreamReady(9), "Stream 9 is not registered");
22
23 SpdyStreamPrecedence precedence(1);
24 fifo.RegisterStream(3, precedence);
25 EXPECT_FALSE(fifo.IsStreamReady(3));
26 fifo.RegisterStream(9, precedence);
27 fifo.RegisterStream(7, precedence);
28 fifo.RegisterStream(11, precedence);
29 fifo.RegisterStream(13, precedence);
30 fifo.RegisterStream(15, precedence);
31 fifo.RegisterStream(17, precedence);
32 EXPECT_EQ(7u, fifo.NumRegisteredStreams());
33 EXPECT_FALSE(fifo.HasReadyStreams());
34
35 fifo.MarkStreamReady(9, true);
36 EXPECT_TRUE(fifo.IsStreamReady(9));
37 EXPECT_TRUE(fifo.HasReadyStreams());
38 fifo.MarkStreamReady(15, true);
39 fifo.MarkStreamReady(7, true);
40 fifo.MarkStreamReady(13, true);
41 fifo.MarkStreamReady(11, true);
42 fifo.MarkStreamReady(3, true);
43 fifo.MarkStreamReady(17, true);
44 EXPECT_EQ(7u, fifo.NumReadyStreams());
45
fayang7e3c1a12019-08-02 08:07:13 -070046 EXPECT_EQ(3u, fifo.PopNextReadyStream());
47 EXPECT_EQ(7u, std::get<0>(fifo.PopNextReadyStreamAndPrecedence()));
fayang94113fe2019-07-31 07:32:14 -070048 EXPECT_EQ(5u, fifo.NumReadyStreams());
49
50 EXPECT_FALSE(fifo.ShouldYield(3));
51 EXPECT_FALSE(fifo.ShouldYield(9));
52 EXPECT_TRUE(fifo.ShouldYield(13));
53 EXPECT_TRUE(fifo.ShouldYield(10));
54
55 fifo.MarkStreamNotReady(9);
56 EXPECT_EQ(4u, fifo.NumReadyStreams());
57 EXPECT_FALSE(fifo.ShouldYield(10));
58 EXPECT_TRUE(fifo.ShouldYield(12));
59}
60
61TEST(FifoWriteSchedulerTest, GetLatestEventTest) {
62 FifoWriteScheduler<SpdyStreamId> fifo;
63
64 SpdyStreamPrecedence precedence(1);
65 fifo.RegisterStream(1, precedence);
66 fifo.RegisterStream(3, precedence);
67 fifo.RegisterStream(5, precedence);
68 fifo.RegisterStream(7, precedence);
69 fifo.RegisterStream(9, precedence);
70 fifo.RecordStreamEventTime(1, 3);
71 fifo.RecordStreamEventTime(3, 2);
72 fifo.RecordStreamEventTime(5, 4);
73 fifo.RecordStreamEventTime(7, 8);
74 fifo.RecordStreamEventTime(9, 1);
75
76 EXPECT_EQ(8, fifo.GetLatestEventWithPrecedence(9));
77 EXPECT_EQ(4, fifo.GetLatestEventWithPrecedence(7));
78 EXPECT_EQ(3, fifo.GetLatestEventWithPrecedence(5));
79 EXPECT_EQ(3, fifo.GetLatestEventWithPrecedence(3));
80 EXPECT_EQ(0, fifo.GetLatestEventWithPrecedence(1));
81}
82
83} // namespace test
84
85} // namespace spdy