OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include "net/base/host_cache.h" | 7 #include "net/base/host_cache.h" |
8 #include "net/base/ip_endpoint.h" | 8 #include "net/base/ip_endpoint.h" |
9 #include "net/base/net_log_unittest.h" | 9 #include "net/base/net_log_unittest.h" |
10 #include "net/spdy/spdy_io_buffer.h" | 10 #include "net/spdy/spdy_io_buffer.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 | 67 |
68 private: | 68 private: |
69 CompletionCallback callback_; | 69 CompletionCallback callback_; |
70 }; | 70 }; |
71 | 71 |
72 // Test the SpdyIOBuffer class. | 72 // Test the SpdyIOBuffer class. |
73 TEST_F(SpdySessionSpdy2Test, SpdyIOBuffer) { | 73 TEST_F(SpdySessionSpdy2Test, SpdyIOBuffer) { |
74 std::priority_queue<SpdyIOBuffer> queue_; | 74 std::priority_queue<SpdyIOBuffer> queue_; |
75 const size_t kQueueSize = 100; | 75 const size_t kQueueSize = 100; |
76 | 76 |
77 // Insert 100 items; pri 100 to 1. | 77 // Insert items with random priority and increasing buffer size. |
78 for (size_t index = 0; index < kQueueSize; ++index) { | 78 for (size_t index = 0; index < kQueueSize; ++index) { |
79 SpdyIOBuffer buffer(new IOBuffer(), 0, kQueueSize - index, NULL); | 79 queue_.push(SpdyIOBuffer( |
80 queue_.push(buffer); | 80 new IOBufferWithSize(index + 1), |
| 81 index + 1, |
| 82 static_cast<RequestPriority>(rand() % NUM_PRIORITIES), |
| 83 NULL)); |
81 } | 84 } |
82 | 85 |
83 // Insert several priority 0 items last. | 86 EXPECT_EQ(kQueueSize, queue_.size()); |
84 const size_t kNumDuplicates = 12; | |
85 IOBufferWithSize* buffers[kNumDuplicates]; | |
86 for (size_t index = 0; index < kNumDuplicates; ++index) { | |
87 buffers[index] = new IOBufferWithSize(index+1); | |
88 queue_.push(SpdyIOBuffer(buffers[index], buffers[index]->size(), 0, NULL)); | |
89 } | |
90 | 87 |
91 EXPECT_EQ(kQueueSize + kNumDuplicates, queue_.size()); | 88 // Verify items come out with decreasing priority or FIFO order. |
92 | 89 RequestPriority last_priority = NUM_PRIORITIES; |
93 // Verify the P0 items come out in FIFO order. | 90 size_t last_size = 0; |
94 for (size_t index = 0; index < kNumDuplicates; ++index) { | 91 for (size_t index = 0; index < kQueueSize; ++index) { |
95 SpdyIOBuffer buffer = queue_.top(); | 92 SpdyIOBuffer buffer = queue_.top(); |
96 EXPECT_EQ(0, buffer.priority()); | 93 EXPECT_LE(buffer.priority(), last_priority); |
97 EXPECT_EQ(index + 1, buffer.size()); | 94 if (buffer.priority() < last_priority) |
| 95 last_size = 0; |
| 96 EXPECT_LT(last_size, buffer.size()); |
| 97 last_priority = buffer.priority(); |
| 98 last_size = buffer.size(); |
98 queue_.pop(); | 99 queue_.pop(); |
99 } | 100 } |
100 | 101 |
101 int priority = 1; | 102 EXPECT_EQ(0u, queue_.size()); |
102 while (queue_.size()) { | |
103 SpdyIOBuffer buffer = queue_.top(); | |
104 EXPECT_EQ(priority++, buffer.priority()); | |
105 queue_.pop(); | |
106 } | |
107 } | 103 } |
108 | 104 |
109 TEST_F(SpdySessionSpdy2Test, GoAway) { | 105 TEST_F(SpdySessionSpdy2Test, GoAway) { |
110 SpdySessionDependencies session_deps; | 106 SpdySessionDependencies session_deps; |
111 session_deps.host_resolver->set_synchronous_mode(true); | 107 session_deps.host_resolver->set_synchronous_mode(true); |
112 | 108 |
113 MockConnect connect_data(SYNCHRONOUS, OK); | 109 MockConnect connect_data(SYNCHRONOUS, OK); |
114 scoped_ptr<SpdyFrame> goaway(ConstructSpdyGoAway()); | 110 scoped_ptr<SpdyFrame> goaway(ConstructSpdyGoAway()); |
115 MockRead reads[] = { | 111 MockRead reads[] = { |
116 CreateMockRead(*goaway), | 112 CreateMockRead(*goaway), |
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 net::NetLog::PHASE_NONE); | 1037 net::NetLog::PHASE_NONE); |
1042 | 1038 |
1043 CapturingNetLog::Entry entry = entries[pos]; | 1039 CapturingNetLog::Entry entry = entries[pos]; |
1044 NetLogSpdySessionCloseParameter* request_params = | 1040 NetLogSpdySessionCloseParameter* request_params = |
1045 static_cast<NetLogSpdySessionCloseParameter*>( | 1041 static_cast<NetLogSpdySessionCloseParameter*>( |
1046 entry.extra_parameters.get()); | 1042 entry.extra_parameters.get()); |
1047 EXPECT_EQ(ERR_CONNECTION_CLOSED, request_params->status()); | 1043 EXPECT_EQ(ERR_CONNECTION_CLOSED, request_params->status()); |
1048 } | 1044 } |
1049 | 1045 |
1050 } // namespace net | 1046 } // namespace net |
OLD | NEW |