| OLD | NEW |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/core/frames/quic_ack_frame.h" | 5 #include "net/quic/core/frames/quic_ack_frame.h" |
| 6 #include "net/quic/core/frames/quic_blocked_frame.h" | 6 #include "net/quic/core/frames/quic_blocked_frame.h" |
| 7 #include "net/quic/core/frames/quic_connection_close_frame.h" | 7 #include "net/quic/core/frames/quic_connection_close_frame.h" |
| 8 #include "net/quic/core/frames/quic_frame.h" | 8 #include "net/quic/core/frames/quic_frame.h" |
| 9 #include "net/quic/core/frames/quic_goaway_frame.h" | 9 #include "net/quic/core/frames/quic_goaway_frame.h" |
| 10 #include "net/quic/core/frames/quic_mtu_discovery_frame.h" | 10 #include "net/quic/core/frames/quic_mtu_discovery_frame.h" |
| 11 #include "net/quic/core/frames/quic_padding_frame.h" | 11 #include "net/quic/core/frames/quic_padding_frame.h" |
| 12 #include "net/quic/core/frames/quic_ping_frame.h" | 12 #include "net/quic/core/frames/quic_ping_frame.h" |
| 13 #include "net/quic/core/frames/quic_rst_stream_frame.h" | 13 #include "net/quic/core/frames/quic_rst_stream_frame.h" |
| 14 #include "net/quic/core/frames/quic_stop_waiting_frame.h" | 14 #include "net/quic/core/frames/quic_stop_waiting_frame.h" |
| 15 #include "net/quic/core/frames/quic_stream_frame.h" | 15 #include "net/quic/core/frames/quic_stream_frame.h" |
| 16 #include "net/quic/core/frames/quic_window_update_frame.h" | 16 #include "net/quic/core/frames/quic_window_update_frame.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "net/quic/platform/api/quic_test.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | |
| 19 | 18 |
| 20 namespace net { | 19 namespace net { |
| 21 namespace test { | 20 namespace test { |
| 22 namespace { | 21 namespace { |
| 23 | 22 |
| 24 using testing::_; | 23 using testing::_; |
| 25 | 24 |
| 26 TEST(QuicFramesTest, AckFrameToString) { | 25 class QuicFramesTest : public QuicTest {}; |
| 26 |
| 27 TEST_F(QuicFramesTest, AckFrameToString) { |
| 27 QuicAckFrame frame; | 28 QuicAckFrame frame; |
| 28 frame.largest_observed = 2; | 29 frame.largest_observed = 2; |
| 29 frame.ack_delay_time = QuicTime::Delta::FromMicroseconds(3); | 30 frame.ack_delay_time = QuicTime::Delta::FromMicroseconds(3); |
| 30 frame.packets.Add(4); | 31 frame.packets.Add(4); |
| 31 frame.packets.Add(5); | 32 frame.packets.Add(5); |
| 32 frame.received_packet_times = { | 33 frame.received_packet_times = { |
| 33 {6, QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(7)}}; | 34 {6, QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(7)}}; |
| 34 std::ostringstream stream; | 35 std::ostringstream stream; |
| 35 stream << frame; | 36 stream << frame; |
| 36 EXPECT_EQ( | 37 EXPECT_EQ( |
| 37 "{ largest_observed: 2, ack_delay_time: 3, " | 38 "{ largest_observed: 2, ack_delay_time: 3, " |
| 38 "packets: [ 4 5 ], received_packets: [ 6 at 7 ] }\n", | 39 "packets: [ 4 5 ], received_packets: [ 6 at 7 ] }\n", |
| 39 stream.str()); | 40 stream.str()); |
| 40 } | 41 } |
| 41 | 42 |
| 42 TEST(QuicFramesTest, PaddingFrameToString) { | 43 TEST_F(QuicFramesTest, PaddingFrameToString) { |
| 43 QuicPaddingFrame frame; | 44 QuicPaddingFrame frame; |
| 44 frame.num_padding_bytes = 1; | 45 frame.num_padding_bytes = 1; |
| 45 std::ostringstream stream; | 46 std::ostringstream stream; |
| 46 stream << frame; | 47 stream << frame; |
| 47 EXPECT_EQ("{ num_padding_bytes: 1 }\n", stream.str()); | 48 EXPECT_EQ("{ num_padding_bytes: 1 }\n", stream.str()); |
| 48 } | 49 } |
| 49 | 50 |
| 50 TEST(QuicFramesTest, RstStreamFrameToString) { | 51 TEST_F(QuicFramesTest, RstStreamFrameToString) { |
| 51 QuicRstStreamFrame frame; | 52 QuicRstStreamFrame frame; |
| 52 frame.stream_id = 1; | 53 frame.stream_id = 1; |
| 53 frame.error_code = QUIC_STREAM_CANCELLED; | 54 frame.error_code = QUIC_STREAM_CANCELLED; |
| 54 std::ostringstream stream; | 55 std::ostringstream stream; |
| 55 stream << frame; | 56 stream << frame; |
| 56 EXPECT_EQ("{ stream_id: 1, error_code: 6 }\n", stream.str()); | 57 EXPECT_EQ("{ stream_id: 1, error_code: 6 }\n", stream.str()); |
| 57 } | 58 } |
| 58 | 59 |
| 59 TEST(QuicFramesTest, ConnectionCloseFrameToString) { | 60 TEST_F(QuicFramesTest, ConnectionCloseFrameToString) { |
| 60 QuicConnectionCloseFrame frame; | 61 QuicConnectionCloseFrame frame; |
| 61 frame.error_code = QUIC_NETWORK_IDLE_TIMEOUT; | 62 frame.error_code = QUIC_NETWORK_IDLE_TIMEOUT; |
| 62 frame.error_details = "No recent network activity."; | 63 frame.error_details = "No recent network activity."; |
| 63 std::ostringstream stream; | 64 std::ostringstream stream; |
| 64 stream << frame; | 65 stream << frame; |
| 65 EXPECT_EQ( | 66 EXPECT_EQ( |
| 66 "{ error_code: 25, error_details: 'No recent network activity.' }\n", | 67 "{ error_code: 25, error_details: 'No recent network activity.' }\n", |
| 67 stream.str()); | 68 stream.str()); |
| 68 } | 69 } |
| 69 | 70 |
| 70 TEST(QuicFramesTest, GoAwayFrameToString) { | 71 TEST_F(QuicFramesTest, GoAwayFrameToString) { |
| 71 QuicGoAwayFrame frame; | 72 QuicGoAwayFrame frame; |
| 72 frame.error_code = QUIC_NETWORK_IDLE_TIMEOUT; | 73 frame.error_code = QUIC_NETWORK_IDLE_TIMEOUT; |
| 73 frame.last_good_stream_id = 2; | 74 frame.last_good_stream_id = 2; |
| 74 frame.reason_phrase = "Reason"; | 75 frame.reason_phrase = "Reason"; |
| 75 std::ostringstream stream; | 76 std::ostringstream stream; |
| 76 stream << frame; | 77 stream << frame; |
| 77 EXPECT_EQ( | 78 EXPECT_EQ( |
| 78 "{ error_code: 25, last_good_stream_id: 2, reason_phrase: 'Reason' }\n", | 79 "{ error_code: 25, last_good_stream_id: 2, reason_phrase: 'Reason' }\n", |
| 79 stream.str()); | 80 stream.str()); |
| 80 } | 81 } |
| 81 | 82 |
| 82 TEST(QuicFramesTest, WindowUpdateFrameToString) { | 83 TEST_F(QuicFramesTest, WindowUpdateFrameToString) { |
| 83 QuicWindowUpdateFrame frame; | 84 QuicWindowUpdateFrame frame; |
| 84 std::ostringstream stream; | 85 std::ostringstream stream; |
| 85 frame.stream_id = 1; | 86 frame.stream_id = 1; |
| 86 frame.byte_offset = 2; | 87 frame.byte_offset = 2; |
| 87 stream << frame; | 88 stream << frame; |
| 88 EXPECT_EQ("{ stream_id: 1, byte_offset: 2 }\n", stream.str()); | 89 EXPECT_EQ("{ stream_id: 1, byte_offset: 2 }\n", stream.str()); |
| 89 } | 90 } |
| 90 | 91 |
| 91 TEST(QuicFramesTest, BlockedFrameToString) { | 92 TEST_F(QuicFramesTest, BlockedFrameToString) { |
| 92 QuicBlockedFrame frame; | 93 QuicBlockedFrame frame; |
| 93 frame.stream_id = 1; | 94 frame.stream_id = 1; |
| 94 std::ostringstream stream; | 95 std::ostringstream stream; |
| 95 stream << frame; | 96 stream << frame; |
| 96 EXPECT_EQ("{ stream_id: 1 }\n", stream.str()); | 97 EXPECT_EQ("{ stream_id: 1 }\n", stream.str()); |
| 97 } | 98 } |
| 98 | 99 |
| 99 TEST(QuicFramesTest, StreamFrameToString) { | 100 TEST_F(QuicFramesTest, StreamFrameToString) { |
| 100 QuicStreamFrame frame; | 101 QuicStreamFrame frame; |
| 101 frame.stream_id = 1; | 102 frame.stream_id = 1; |
| 102 frame.fin = false; | 103 frame.fin = false; |
| 103 frame.offset = 2; | 104 frame.offset = 2; |
| 104 frame.data_length = 3; | 105 frame.data_length = 3; |
| 105 std::ostringstream stream; | 106 std::ostringstream stream; |
| 106 stream << frame; | 107 stream << frame; |
| 107 EXPECT_EQ("{ stream_id: 1, fin: 0, offset: 2, length: 3 }\n", stream.str()); | 108 EXPECT_EQ("{ stream_id: 1, fin: 0, offset: 2, length: 3 }\n", stream.str()); |
| 108 } | 109 } |
| 109 | 110 |
| 110 TEST(QuicFramesTest, StopWaitingFrameToString) { | 111 TEST_F(QuicFramesTest, StopWaitingFrameToString) { |
| 111 QuicStopWaitingFrame frame; | 112 QuicStopWaitingFrame frame; |
| 112 frame.least_unacked = 2; | 113 frame.least_unacked = 2; |
| 113 std::ostringstream stream; | 114 std::ostringstream stream; |
| 114 stream << frame; | 115 stream << frame; |
| 115 EXPECT_EQ("{ least_unacked: 2 }\n", stream.str()); | 116 EXPECT_EQ("{ least_unacked: 2 }\n", stream.str()); |
| 116 } | 117 } |
| 117 | 118 |
| 118 TEST(QuicFramesTest, IsAwaitingPacket) { | 119 TEST_F(QuicFramesTest, IsAwaitingPacket) { |
| 119 QuicAckFrame ack_frame1; | 120 QuicAckFrame ack_frame1; |
| 120 ack_frame1.largest_observed = 10u; | 121 ack_frame1.largest_observed = 10u; |
| 121 ack_frame1.packets.Add(1, 11); | 122 ack_frame1.packets.Add(1, 11); |
| 122 EXPECT_TRUE(IsAwaitingPacket(ack_frame1, 11u, 0u)); | 123 EXPECT_TRUE(IsAwaitingPacket(ack_frame1, 11u, 0u)); |
| 123 EXPECT_FALSE(IsAwaitingPacket(ack_frame1, 1u, 0u)); | 124 EXPECT_FALSE(IsAwaitingPacket(ack_frame1, 1u, 0u)); |
| 124 | 125 |
| 125 ack_frame1.packets.Remove(10); | 126 ack_frame1.packets.Remove(10); |
| 126 EXPECT_TRUE(IsAwaitingPacket(ack_frame1, 10u, 0u)); | 127 EXPECT_TRUE(IsAwaitingPacket(ack_frame1, 10u, 0u)); |
| 127 | 128 |
| 128 QuicAckFrame ack_frame2; | 129 QuicAckFrame ack_frame2; |
| 129 ack_frame2.largest_observed = 100u; | 130 ack_frame2.largest_observed = 100u; |
| 130 ack_frame2.packets.Add(21, 100); | 131 ack_frame2.packets.Add(21, 100); |
| 131 EXPECT_FALSE(IsAwaitingPacket(ack_frame2, 11u, 20u)); | 132 EXPECT_FALSE(IsAwaitingPacket(ack_frame2, 11u, 20u)); |
| 132 EXPECT_FALSE(IsAwaitingPacket(ack_frame2, 80u, 20u)); | 133 EXPECT_FALSE(IsAwaitingPacket(ack_frame2, 80u, 20u)); |
| 133 EXPECT_TRUE(IsAwaitingPacket(ack_frame2, 101u, 20u)); | 134 EXPECT_TRUE(IsAwaitingPacket(ack_frame2, 101u, 20u)); |
| 134 | 135 |
| 135 ack_frame2.packets.Remove(50); | 136 ack_frame2.packets.Remove(50); |
| 136 EXPECT_TRUE(IsAwaitingPacket(ack_frame2, 50u, 20u)); | 137 EXPECT_TRUE(IsAwaitingPacket(ack_frame2, 50u, 20u)); |
| 137 } | 138 } |
| 138 | 139 |
| 139 TEST(QuicFramesTest, RemoveSmallestInterval) { | 140 TEST_F(QuicFramesTest, RemoveSmallestInterval) { |
| 140 QuicAckFrame ack_frame1; | 141 QuicAckFrame ack_frame1; |
| 141 ack_frame1.largest_observed = 100u; | 142 ack_frame1.largest_observed = 100u; |
| 142 ack_frame1.packets.Add(51, 60); | 143 ack_frame1.packets.Add(51, 60); |
| 143 ack_frame1.packets.Add(71, 80); | 144 ack_frame1.packets.Add(71, 80); |
| 144 ack_frame1.packets.Add(91, 100); | 145 ack_frame1.packets.Add(91, 100); |
| 145 ack_frame1.packets.RemoveSmallestInterval(); | 146 ack_frame1.packets.RemoveSmallestInterval(); |
| 146 EXPECT_EQ(2u, ack_frame1.packets.NumIntervals()); | 147 EXPECT_EQ(2u, ack_frame1.packets.NumIntervals()); |
| 147 EXPECT_EQ(71u, ack_frame1.packets.Min()); | 148 EXPECT_EQ(71u, ack_frame1.packets.Min()); |
| 148 EXPECT_EQ(99u, ack_frame1.packets.Max()); | 149 EXPECT_EQ(99u, ack_frame1.packets.Max()); |
| 149 | 150 |
| 150 ack_frame1.packets.RemoveSmallestInterval(); | 151 ack_frame1.packets.RemoveSmallestInterval(); |
| 151 EXPECT_EQ(1u, ack_frame1.packets.NumIntervals()); | 152 EXPECT_EQ(1u, ack_frame1.packets.NumIntervals()); |
| 152 EXPECT_EQ(91u, ack_frame1.packets.Min()); | 153 EXPECT_EQ(91u, ack_frame1.packets.Min()); |
| 153 EXPECT_EQ(99u, ack_frame1.packets.Max()); | 154 EXPECT_EQ(99u, ack_frame1.packets.Max()); |
| 154 } | 155 } |
| 155 | 156 |
| 157 class PacketNumberQueueTest : public QuicTest {}; |
| 158 |
| 156 // Tests that a queue contains the expected data after calls to Add(). | 159 // Tests that a queue contains the expected data after calls to Add(). |
| 157 TEST(PacketNumberQueueTest, AddRange) { | 160 TEST_F(PacketNumberQueueTest, AddRange) { |
| 158 PacketNumberQueue queue; | 161 PacketNumberQueue queue; |
| 159 queue.Add(1, 51); | 162 queue.Add(1, 51); |
| 160 queue.Add(53); | 163 queue.Add(53); |
| 161 | 164 |
| 162 EXPECT_FALSE(queue.Contains(0)); | 165 EXPECT_FALSE(queue.Contains(0)); |
| 163 for (int i = 1; i < 51; ++i) { | 166 for (int i = 1; i < 51; ++i) { |
| 164 EXPECT_TRUE(queue.Contains(i)); | 167 EXPECT_TRUE(queue.Contains(i)); |
| 165 } | 168 } |
| 166 EXPECT_FALSE(queue.Contains(51)); | 169 EXPECT_FALSE(queue.Contains(51)); |
| 167 EXPECT_FALSE(queue.Contains(52)); | 170 EXPECT_FALSE(queue.Contains(52)); |
| 168 EXPECT_TRUE(queue.Contains(53)); | 171 EXPECT_TRUE(queue.Contains(53)); |
| 169 EXPECT_FALSE(queue.Contains(54)); | 172 EXPECT_FALSE(queue.Contains(54)); |
| 170 EXPECT_EQ(51u, queue.NumPacketsSlow()); | 173 EXPECT_EQ(51u, queue.NumPacketsSlow()); |
| 171 EXPECT_EQ(1u, queue.Min()); | 174 EXPECT_EQ(1u, queue.Min()); |
| 172 EXPECT_EQ(53u, queue.Max()); | 175 EXPECT_EQ(53u, queue.Max()); |
| 173 | 176 |
| 174 queue.Add(70); | 177 queue.Add(70); |
| 175 EXPECT_EQ(70u, queue.Max()); | 178 EXPECT_EQ(70u, queue.Max()); |
| 176 } | 179 } |
| 177 | 180 |
| 178 // Tests that a queue contains the expected data after calls to Remove(). | 181 // Tests that a queue contains the expected data after calls to Remove(). |
| 179 TEST(PacketNumberQueueTest, Removal) { | 182 TEST_F(PacketNumberQueueTest, Removal) { |
| 180 PacketNumberQueue queue; | 183 PacketNumberQueue queue; |
| 181 queue.Add(0, 100); | 184 queue.Add(0, 100); |
| 182 | 185 |
| 183 EXPECT_TRUE(queue.RemoveUpTo(51)); | 186 EXPECT_TRUE(queue.RemoveUpTo(51)); |
| 184 EXPECT_FALSE(queue.RemoveUpTo(51)); | 187 EXPECT_FALSE(queue.RemoveUpTo(51)); |
| 185 queue.Remove(53); | 188 queue.Remove(53); |
| 186 | 189 |
| 187 EXPECT_FALSE(queue.Contains(0)); | 190 EXPECT_FALSE(queue.Contains(0)); |
| 188 for (int i = 1; i < 51; ++i) { | 191 for (int i = 1; i < 51; ++i) { |
| 189 EXPECT_FALSE(queue.Contains(i)); | 192 EXPECT_FALSE(queue.Contains(i)); |
| 190 } | 193 } |
| 191 EXPECT_TRUE(queue.Contains(51)); | 194 EXPECT_TRUE(queue.Contains(51)); |
| 192 EXPECT_TRUE(queue.Contains(52)); | 195 EXPECT_TRUE(queue.Contains(52)); |
| 193 EXPECT_FALSE(queue.Contains(53)); | 196 EXPECT_FALSE(queue.Contains(53)); |
| 194 EXPECT_TRUE(queue.Contains(54)); | 197 EXPECT_TRUE(queue.Contains(54)); |
| 195 EXPECT_EQ(48u, queue.NumPacketsSlow()); | 198 EXPECT_EQ(48u, queue.NumPacketsSlow()); |
| 196 EXPECT_EQ(51u, queue.Min()); | 199 EXPECT_EQ(51u, queue.Min()); |
| 197 EXPECT_EQ(99u, queue.Max()); | 200 EXPECT_EQ(99u, queue.Max()); |
| 198 | 201 |
| 199 queue.Remove(51); | 202 queue.Remove(51); |
| 200 EXPECT_EQ(52u, queue.Min()); | 203 EXPECT_EQ(52u, queue.Min()); |
| 201 queue.Remove(99); | 204 queue.Remove(99); |
| 202 EXPECT_EQ(98u, queue.Max()); | 205 EXPECT_EQ(98u, queue.Max()); |
| 203 } | 206 } |
| 204 | 207 |
| 205 // Tests that a queue is empty when all of its elements are removed. | 208 // Tests that a queue is empty when all of its elements are removed. |
| 206 TEST(PacketNumberQueueTest, Empty) { | 209 TEST_F(PacketNumberQueueTest, Empty) { |
| 207 PacketNumberQueue queue; | 210 PacketNumberQueue queue; |
| 208 EXPECT_TRUE(queue.Empty()); | 211 EXPECT_TRUE(queue.Empty()); |
| 209 EXPECT_EQ(0u, queue.NumPacketsSlow()); | 212 EXPECT_EQ(0u, queue.NumPacketsSlow()); |
| 210 | 213 |
| 211 queue.Add(1, 100); | 214 queue.Add(1, 100); |
| 212 EXPECT_TRUE(queue.RemoveUpTo(100)); | 215 EXPECT_TRUE(queue.RemoveUpTo(100)); |
| 213 EXPECT_TRUE(queue.Empty()); | 216 EXPECT_TRUE(queue.Empty()); |
| 214 EXPECT_EQ(0u, queue.NumPacketsSlow()); | 217 EXPECT_EQ(0u, queue.NumPacketsSlow()); |
| 215 } | 218 } |
| 216 | 219 |
| 217 // Tests that logging the state of a PacketNumberQueue does not crash. | 220 // Tests that logging the state of a PacketNumberQueue does not crash. |
| 218 TEST(PacketNumberQueueTest, LogDoesNotCrash) { | 221 TEST_F(PacketNumberQueueTest, LogDoesNotCrash) { |
| 219 std::ostringstream oss; | 222 std::ostringstream oss; |
| 220 PacketNumberQueue queue; | 223 PacketNumberQueue queue; |
| 221 oss << queue; | 224 oss << queue; |
| 222 | 225 |
| 223 queue.Add(1); | 226 queue.Add(1); |
| 224 queue.Add(50, 100); | 227 queue.Add(50, 100); |
| 225 oss << queue; | 228 oss << queue; |
| 226 } | 229 } |
| 227 | 230 |
| 228 // Tests that the iterators returned from a packet queue iterate over the queue. | 231 // Tests that the iterators returned from a packet queue iterate over the queue. |
| 229 TEST(PacketNumberQueueTest, Iterators) { | 232 TEST_F(PacketNumberQueueTest, Iterators) { |
| 230 PacketNumberQueue queue; | 233 PacketNumberQueue queue; |
| 231 queue.Add(1, 100); | 234 queue.Add(1, 100); |
| 232 | 235 |
| 233 const std::vector<Interval<QuicPacketNumber>> actual_intervals(queue.begin(), | 236 const std::vector<Interval<QuicPacketNumber>> actual_intervals(queue.begin(), |
| 234 queue.end()); | 237 queue.end()); |
| 235 | 238 |
| 236 std::vector<Interval<QuicPacketNumber>> expected_intervals; | 239 std::vector<Interval<QuicPacketNumber>> expected_intervals; |
| 237 expected_intervals.push_back(Interval<QuicPacketNumber>(1, 100)); | 240 expected_intervals.push_back(Interval<QuicPacketNumber>(1, 100)); |
| 238 | 241 |
| 239 EXPECT_EQ(expected_intervals, actual_intervals); | 242 EXPECT_EQ(expected_intervals, actual_intervals); |
| 240 } | 243 } |
| 241 | 244 |
| 242 TEST(PacketNumberQueueTest, LowerBoundEquals) { | 245 TEST_F(PacketNumberQueueTest, LowerBoundEquals) { |
| 243 PacketNumberQueue queue; | 246 PacketNumberQueue queue; |
| 244 queue.Add(1, 100); | 247 queue.Add(1, 100); |
| 245 | 248 |
| 246 PacketNumberQueue::const_iterator it = queue.lower_bound(10); | 249 PacketNumberQueue::const_iterator it = queue.lower_bound(10); |
| 247 ASSERT_NE(queue.end(), it); | 250 ASSERT_NE(queue.end(), it); |
| 248 EXPECT_TRUE(it->Contains(10u)); | 251 EXPECT_TRUE(it->Contains(10u)); |
| 249 | 252 |
| 250 it = queue.lower_bound(101); | 253 it = queue.lower_bound(101); |
| 251 EXPECT_TRUE(queue.end() == it); | 254 EXPECT_TRUE(queue.end() == it); |
| 252 } | 255 } |
| 253 | 256 |
| 254 TEST(PacketNumberQueueTest, LowerBoundGreater) { | 257 TEST_F(PacketNumberQueueTest, LowerBoundGreater) { |
| 255 PacketNumberQueue queue; | 258 PacketNumberQueue queue; |
| 256 queue.Add(15, 25); | 259 queue.Add(15, 25); |
| 257 queue.Add(50, 100); | 260 queue.Add(50, 100); |
| 258 | 261 |
| 259 PacketNumberQueue::const_iterator it = queue.lower_bound(10); | 262 PacketNumberQueue::const_iterator it = queue.lower_bound(10); |
| 260 ASSERT_NE(queue.end(), it); | 263 ASSERT_NE(queue.end(), it); |
| 261 EXPECT_EQ(15u, it->min()); | 264 EXPECT_EQ(15u, it->min()); |
| 262 EXPECT_EQ(25u, it->max()); | 265 EXPECT_EQ(25u, it->max()); |
| 263 } | 266 } |
| 264 | 267 |
| 265 TEST(PacketNumberQueueTest, IntervalLengthAndRemoveInterval) { | 268 TEST_F(PacketNumberQueueTest, IntervalLengthAndRemoveInterval) { |
| 266 PacketNumberQueue queue; | 269 PacketNumberQueue queue; |
| 267 queue.Add(1, 10); | 270 queue.Add(1, 10); |
| 268 queue.Add(20, 30); | 271 queue.Add(20, 30); |
| 269 queue.Add(40, 50); | 272 queue.Add(40, 50); |
| 270 EXPECT_EQ(3u, queue.NumIntervals()); | 273 EXPECT_EQ(3u, queue.NumIntervals()); |
| 271 EXPECT_EQ(10u, queue.LastIntervalLength()); | 274 EXPECT_EQ(10u, queue.LastIntervalLength()); |
| 272 queue.Remove(9, 21); | 275 queue.Remove(9, 21); |
| 273 EXPECT_EQ(3u, queue.NumIntervals()); | 276 EXPECT_EQ(3u, queue.NumIntervals()); |
| 274 EXPECT_FALSE(queue.Contains(9)); | 277 EXPECT_FALSE(queue.Contains(9)); |
| 275 EXPECT_FALSE(queue.Contains(20)); | 278 EXPECT_FALSE(queue.Contains(20)); |
| 276 } | 279 } |
| 277 | 280 |
| 278 TEST(PacketNumberQueueTest, Complement) { | 281 TEST_F(PacketNumberQueueTest, Complement) { |
| 279 PacketNumberQueue queue; | 282 PacketNumberQueue queue; |
| 280 queue.Add(1, 10); | 283 queue.Add(1, 10); |
| 281 queue.Add(12, 20); | 284 queue.Add(12, 20); |
| 282 queue.Add(22, 30); | 285 queue.Add(22, 30); |
| 283 queue.Complement(); | 286 queue.Complement(); |
| 284 EXPECT_EQ(2u, queue.NumIntervals()); | 287 EXPECT_EQ(2u, queue.NumIntervals()); |
| 285 EXPECT_TRUE(queue.Contains(10)); | 288 EXPECT_TRUE(queue.Contains(10)); |
| 286 EXPECT_TRUE(queue.Contains(11)); | 289 EXPECT_TRUE(queue.Contains(11)); |
| 287 EXPECT_TRUE(queue.Contains(20)); | 290 EXPECT_TRUE(queue.Contains(20)); |
| 288 EXPECT_TRUE(queue.Contains(21)); | 291 EXPECT_TRUE(queue.Contains(21)); |
| 289 } | 292 } |
| 290 | 293 |
| 291 } // namespace | 294 } // namespace |
| 292 } // namespace test | 295 } // namespace test |
| 293 } // namespace net | 296 } // namespace net |
| OLD | NEW |