| 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 |