OLD | NEW |
| (Empty) |
1 // Copyright (c) 2017 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/spdy/lifo_write_scheduler.h" | |
6 | |
7 #include "net/spdy/spdy_protocol.h" | |
8 #include "net/spdy/spdy_test_utils.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 | |
11 namespace net { | |
12 | |
13 namespace test { | |
14 | |
15 template <typename StreamIdType> | |
16 class LifoWriteSchedulerPeer { | |
17 public: | |
18 explicit LifoWriteSchedulerPeer(LifoWriteScheduler<StreamIdType>* scheduler) | |
19 : scheduler_(scheduler) {} | |
20 | |
21 size_t NumRegisteredListStreams() const { | |
22 return scheduler_->registered_streams_.size(); | |
23 } | |
24 | |
25 std::set<StreamIdType>* GetReadyList() const { | |
26 return &scheduler_->ready_streams_; | |
27 } | |
28 | |
29 private: | |
30 LifoWriteScheduler<StreamIdType>* scheduler_; | |
31 }; | |
32 | |
33 // Test add and remove from ready list. | |
34 TEST(LifoWriteSchedulerTest, ReadyListTest) { | |
35 LifoWriteScheduler<SpdyStreamId> lifo; | |
36 LifoWriteSchedulerPeer<SpdyStreamId> peer(&lifo); | |
37 | |
38 EXPECT_SPDY_BUG( | |
39 EXPECT_EQ((uint32_t)0, | |
40 std::get<0>(lifo.PopNextReadyStreamAndPrecedence())), | |
41 "No ready streams available"); | |
42 EXPECT_SPDY_BUG(EXPECT_EQ((uint32_t)0, lifo.PopNextReadyStream()), | |
43 "No ready streams available"); | |
44 EXPECT_FALSE(lifo.HasReadyStreams()); | |
45 EXPECT_SPDY_BUG(lifo.MarkStreamReady(9, true), "Stream 9 is not registered"); | |
46 SpdyStreamPrecedence precedence(1); | |
47 lifo.RegisterStream(3, precedence); | |
48 lifo.RegisterStream(7, precedence); | |
49 lifo.RegisterStream(9, precedence); | |
50 lifo.RegisterStream(11, precedence); | |
51 lifo.RegisterStream(13, precedence); | |
52 lifo.RegisterStream(15, precedence); | |
53 lifo.RegisterStream(17, precedence); | |
54 lifo.MarkStreamReady(9, true); | |
55 lifo.MarkStreamReady(15, true); | |
56 lifo.MarkStreamReady(7, true); | |
57 lifo.MarkStreamReady(13, true); | |
58 lifo.MarkStreamReady(11, true); | |
59 lifo.MarkStreamReady(3, true); | |
60 lifo.MarkStreamReady(17, true); | |
61 EXPECT_TRUE(lifo.HasReadyStreams()); | |
62 EXPECT_EQ((uint32_t)7, lifo.NumReadyStreams()); | |
63 | |
64 EXPECT_SPDY_BUG(lifo.MarkStreamReady(11, true), | |
65 "Stream already exists in the list"); | |
66 EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(5), | |
67 "Try to remove a stream that is not on list"); | |
68 EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(21), | |
69 "Try to remove a stream that is not on list"); | |
70 | |
71 EXPECT_EQ((uint32_t)17, lifo.PopNextReadyStream()); | |
72 EXPECT_EQ((uint32_t)15, std::get<0>(lifo.PopNextReadyStreamAndPrecedence())); | |
73 EXPECT_TRUE(lifo.ShouldYield(9)); | |
74 EXPECT_FALSE(lifo.ShouldYield(13)); | |
75 EXPECT_FALSE(lifo.ShouldYield(15)); | |
76 | |
77 lifo.MarkStreamNotReady(3); | |
78 EXPECT_TRUE(peer.GetReadyList()->find(3) == peer.GetReadyList()->end()); | |
79 lifo.MarkStreamNotReady(13); | |
80 EXPECT_TRUE(peer.GetReadyList()->find(13) == peer.GetReadyList()->end()); | |
81 lifo.MarkStreamNotReady(7); | |
82 EXPECT_TRUE(peer.GetReadyList()->find(7) == peer.GetReadyList()->end()); | |
83 EXPECT_EQ((uint32_t)2, lifo.NumReadyStreams()); | |
84 } | |
85 | |
86 // Test add and remove from registered list. | |
87 TEST(LifoWriteSchedulerTest, RegisterListTest) { | |
88 LifoWriteScheduler<SpdyStreamId> lifo; | |
89 LifoWriteSchedulerPeer<SpdyStreamId> peer(&lifo); | |
90 SpdyStreamPrecedence precedence(1); | |
91 lifo.RegisterStream(3, precedence); | |
92 lifo.RegisterStream(5, precedence); | |
93 lifo.RegisterStream(7, precedence); | |
94 lifo.RegisterStream(9, precedence); | |
95 lifo.RegisterStream(11, precedence); | |
96 | |
97 EXPECT_TRUE(lifo.StreamRegistered(3)); | |
98 EXPECT_TRUE(lifo.StreamRegistered(5)); | |
99 EXPECT_TRUE(lifo.StreamRegistered(7)); | |
100 EXPECT_TRUE(lifo.StreamRegistered(9)); | |
101 EXPECT_TRUE(lifo.StreamRegistered(11)); | |
102 EXPECT_SPDY_BUG(lifo.RegisterStream(11, precedence), | |
103 "Stream 11 already registered"); | |
104 EXPECT_EQ((uint32_t)5, peer.NumRegisteredListStreams()); | |
105 | |
106 lifo.UnregisterStream(3); | |
107 EXPECT_FALSE(lifo.StreamRegistered(3)); | |
108 EXPECT_SPDY_BUG(lifo.UnregisterStream(3), "Stream 3 is not registered"); | |
109 EXPECT_SPDY_BUG(lifo.UnregisterStream(13), "Stream 13 is not registered"); | |
110 lifo.UnregisterStream(11); | |
111 EXPECT_FALSE(lifo.StreamRegistered(11)); | |
112 lifo.UnregisterStream(7); | |
113 EXPECT_FALSE(lifo.StreamRegistered(7)); | |
114 EXPECT_TRUE(lifo.StreamRegistered(5)); | |
115 EXPECT_TRUE(lifo.StreamRegistered(9)); | |
116 } | |
117 | |
118 // Test mark latest event time. | |
119 TEST(LifoWriteSchedulerTest, GetLatestEventTest) { | |
120 LifoWriteScheduler<SpdyStreamId> lifo; | |
121 LifoWriteSchedulerPeer<SpdyStreamId> peer(&lifo); | |
122 SpdyStreamPrecedence precedence(1); | |
123 lifo.RegisterStream(1, precedence); | |
124 lifo.RegisterStream(3, precedence); | |
125 lifo.RegisterStream(5, precedence); | |
126 lifo.RegisterStream(7, precedence); | |
127 lifo.RegisterStream(9, precedence); | |
128 lifo.RecordStreamEventTime(1, 1); | |
129 lifo.RecordStreamEventTime(3, 8); | |
130 lifo.RecordStreamEventTime(5, 4); | |
131 lifo.RecordStreamEventTime(7, 2); | |
132 lifo.RecordStreamEventTime(9, 3); | |
133 EXPECT_SPDY_BUG(lifo.RecordStreamEventTime(11, 1), | |
134 "Stream 11 is not registered"); | |
135 EXPECT_EQ(0, lifo.GetLatestEventWithPrecedence(9)); | |
136 EXPECT_EQ(3, lifo.GetLatestEventWithPrecedence(7)); | |
137 EXPECT_EQ(3, lifo.GetLatestEventWithPrecedence(5)); | |
138 EXPECT_EQ(4, lifo.GetLatestEventWithPrecedence(3)); | |
139 EXPECT_EQ(8, lifo.GetLatestEventWithPrecedence(1)); | |
140 EXPECT_SPDY_BUG(lifo.GetLatestEventWithPrecedence(11), | |
141 "Stream 11 is not registered"); | |
142 } | |
143 | |
144 } // namespace test | |
145 | |
146 } // namespace net | |
OLD | NEW |