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/buffered_spdy_framer.h" | 5 #include "net/spdy/buffered_spdy_framer.h" |
6 | 6 |
7 #include "net/spdy/spdy_test_util_spdy2.h" | 7 #include "net/spdy/spdy_test_util_spdy2.h" |
8 #include "testing/platform_test.h" | 8 #include "testing/platform_test.h" |
9 | 9 |
10 using namespace net::test_spdy2; | 10 using namespace net::test_spdy2; |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 SpdyStreamId header_stream_id_; | 136 SpdyStreamId header_stream_id_; |
137 | 137 |
138 // Headers from OnSyn, OnSynReply and OnHeaders for verification. | 138 // Headers from OnSyn, OnSynReply and OnHeaders for verification. |
139 SpdyHeaderBlock headers_; | 139 SpdyHeaderBlock headers_; |
140 }; | 140 }; |
141 | 141 |
142 } // namespace | 142 } // namespace |
143 | 143 |
144 class BufferedSpdyFramerSpdy2Test : public PlatformTest { | 144 class BufferedSpdyFramerSpdy2Test : public PlatformTest { |
145 protected: | 145 protected: |
146 void EnableCompression(bool enabled) { | |
147 SpdyFramer::set_enable_compression_default(enabled); | |
148 } | |
149 | |
150 // Returns true if the two header blocks have equivalent content. | 146 // Returns true if the two header blocks have equivalent content. |
151 bool CompareHeaderBlocks(const SpdyHeaderBlock* expected, | 147 bool CompareHeaderBlocks(const SpdyHeaderBlock* expected, |
152 const SpdyHeaderBlock* actual) { | 148 const SpdyHeaderBlock* actual) { |
153 if (expected->size() != actual->size()) { | 149 if (expected->size() != actual->size()) { |
154 LOG(ERROR) << "Expected " << expected->size() << " headers; actually got " | 150 LOG(ERROR) << "Expected " << expected->size() << " headers; actually got " |
155 << actual->size() << "."; | 151 << actual->size() << "."; |
156 return false; | 152 return false; |
157 } | 153 } |
158 for (SpdyHeaderBlock::const_iterator it = expected->begin(); | 154 for (SpdyHeaderBlock::const_iterator it = expected->begin(); |
159 it != expected->end(); | 155 it != expected->end(); |
160 ++it) { | 156 ++it) { |
161 SpdyHeaderBlock::const_iterator it2 = actual->find(it->first); | 157 SpdyHeaderBlock::const_iterator it2 = actual->find(it->first); |
162 if (it2 == actual->end()) { | 158 if (it2 == actual->end()) { |
163 LOG(ERROR) << "Expected header name '" << it->first << "'."; | 159 LOG(ERROR) << "Expected header name '" << it->first << "'."; |
164 return false; | 160 return false; |
165 } | 161 } |
166 if (it->second.compare(it2->second) != 0) { | 162 if (it->second.compare(it2->second) != 0) { |
167 LOG(ERROR) << "Expected header named '" << it->first | 163 LOG(ERROR) << "Expected header named '" << it->first |
168 << "' to have a value of '" << it->second | 164 << "' to have a value of '" << it->second |
169 << "'. The actual value received was '" << it2->second | 165 << "'. The actual value received was '" << it2->second |
170 << "'."; | 166 << "'."; |
171 return false; | 167 return false; |
172 } | 168 } |
173 } | 169 } |
174 return true; | 170 return true; |
175 } | 171 } |
| 172 |
| 173 private: |
| 174 SpdyTestStateHelper spdy_state_; |
176 }; | 175 }; |
177 | 176 |
178 TEST_F(BufferedSpdyFramerSpdy2Test, OnSetting) { | 177 TEST_F(BufferedSpdyFramerSpdy2Test, OnSetting) { |
179 EnableCompression(false); | |
180 | |
181 SpdyFramer framer(2); | 178 SpdyFramer framer(2); |
182 SpdySettings settings; | 179 SpdySettings settings; |
183 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002)); | 180 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002)); |
184 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003)); | 181 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003)); |
185 | 182 |
186 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); | 183 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); |
187 TestBufferedSpdyVisitor visitor; | 184 TestBufferedSpdyVisitor visitor; |
188 | 185 |
189 visitor.SimulateInFramer( | 186 visitor.SimulateInFramer( |
190 reinterpret_cast<unsigned char*>(control_frame->data()), | 187 reinterpret_cast<unsigned char*>(control_frame->data()), |
191 control_frame->length() + SpdyControlFrame::kHeaderSize); | 188 control_frame->length() + SpdyControlFrame::kHeaderSize); |
192 EXPECT_EQ(1, visitor.error_count_); | 189 EXPECT_EQ(1, visitor.error_count_); |
193 EXPECT_EQ(1, visitor.setting_count_); | 190 EXPECT_EQ(1, visitor.setting_count_); |
194 } | 191 } |
195 | 192 |
196 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynStreamHeaderBlock) { | 193 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynStreamHeaderBlock) { |
197 EnableCompression(false); | |
198 | |
199 SpdyHeaderBlock headers; | 194 SpdyHeaderBlock headers; |
200 headers["aa"] = "vv"; | 195 headers["aa"] = "vv"; |
201 headers["bb"] = "ww"; | 196 headers["bb"] = "ww"; |
202 BufferedSpdyFramer framer(2); | 197 BufferedSpdyFramer framer(2); |
203 scoped_ptr<SpdySynStreamControlFrame> control_frame( | 198 scoped_ptr<SpdySynStreamControlFrame> control_frame( |
204 framer.CreateSynStream(1, // stream_id | 199 framer.CreateSynStream(1, // stream_id |
205 0, // associated_stream_id | 200 0, // associated_stream_id |
206 1, // priority | 201 1, // priority |
207 CONTROL_FLAG_NONE, | 202 CONTROL_FLAG_NONE, |
208 true, // compress | 203 true, // compress |
209 &headers)); | 204 &headers)); |
210 EXPECT_TRUE(control_frame.get() != NULL); | 205 EXPECT_TRUE(control_frame.get() != NULL); |
211 | 206 |
212 TestBufferedSpdyVisitor visitor; | 207 TestBufferedSpdyVisitor visitor; |
213 visitor.SimulateInFramer( | 208 visitor.SimulateInFramer( |
214 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 209 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
215 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 210 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
216 EXPECT_EQ(0, visitor.error_count_); | 211 EXPECT_EQ(0, visitor.error_count_); |
217 EXPECT_EQ(1, visitor.syn_frame_count_); | 212 EXPECT_EQ(1, visitor.syn_frame_count_); |
218 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 213 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
219 EXPECT_EQ(0, visitor.headers_frame_count_); | 214 EXPECT_EQ(0, visitor.headers_frame_count_); |
220 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 215 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
221 } | 216 } |
222 | 217 |
223 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynReplyHeaderBlock) { | 218 TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynReplyHeaderBlock) { |
224 EnableCompression(false); | |
225 | |
226 SpdyHeaderBlock headers; | 219 SpdyHeaderBlock headers; |
227 headers["alpha"] = "beta"; | 220 headers["alpha"] = "beta"; |
228 headers["gamma"] = "delta"; | 221 headers["gamma"] = "delta"; |
229 BufferedSpdyFramer framer(2); | 222 BufferedSpdyFramer framer(2); |
230 scoped_ptr<SpdySynReplyControlFrame> control_frame( | 223 scoped_ptr<SpdySynReplyControlFrame> control_frame( |
231 framer.CreateSynReply(1, // stream_id | 224 framer.CreateSynReply(1, // stream_id |
232 CONTROL_FLAG_NONE, | 225 CONTROL_FLAG_NONE, |
233 true, // compress | 226 true, // compress |
234 &headers)); | 227 &headers)); |
235 EXPECT_TRUE(control_frame.get() != NULL); | 228 EXPECT_TRUE(control_frame.get() != NULL); |
236 | 229 |
237 TestBufferedSpdyVisitor visitor; | 230 TestBufferedSpdyVisitor visitor; |
238 visitor.SimulateInFramer( | 231 visitor.SimulateInFramer( |
239 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 232 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
240 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 233 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
241 EXPECT_EQ(0, visitor.error_count_); | 234 EXPECT_EQ(0, visitor.error_count_); |
242 EXPECT_EQ(0, visitor.syn_frame_count_); | 235 EXPECT_EQ(0, visitor.syn_frame_count_); |
243 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 236 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
244 EXPECT_EQ(0, visitor.headers_frame_count_); | 237 EXPECT_EQ(0, visitor.headers_frame_count_); |
245 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 238 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
246 } | 239 } |
247 | 240 |
248 TEST_F(BufferedSpdyFramerSpdy2Test, ReadHeadersHeaderBlock) { | 241 TEST_F(BufferedSpdyFramerSpdy2Test, ReadHeadersHeaderBlock) { |
249 EnableCompression(false); | |
250 | |
251 SpdyHeaderBlock headers; | 242 SpdyHeaderBlock headers; |
252 headers["alpha"] = "beta"; | 243 headers["alpha"] = "beta"; |
253 headers["gamma"] = "delta"; | 244 headers["gamma"] = "delta"; |
254 BufferedSpdyFramer framer(2); | 245 BufferedSpdyFramer framer(2); |
255 scoped_ptr<SpdyHeadersControlFrame> control_frame( | 246 scoped_ptr<SpdyHeadersControlFrame> control_frame( |
256 framer.CreateHeaders(1, // stream_id | 247 framer.CreateHeaders(1, // stream_id |
257 CONTROL_FLAG_NONE, | 248 CONTROL_FLAG_NONE, |
258 true, // compress | 249 true, // compress |
259 &headers)); | 250 &headers)); |
260 EXPECT_TRUE(control_frame.get() != NULL); | 251 EXPECT_TRUE(control_frame.get() != NULL); |
261 | 252 |
262 TestBufferedSpdyVisitor visitor; | 253 TestBufferedSpdyVisitor visitor; |
263 visitor.SimulateInFramer( | 254 visitor.SimulateInFramer( |
264 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 255 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
265 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); | 256 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); |
266 EXPECT_EQ(0, visitor.error_count_); | 257 EXPECT_EQ(0, visitor.error_count_); |
267 EXPECT_EQ(0, visitor.syn_frame_count_); | 258 EXPECT_EQ(0, visitor.syn_frame_count_); |
268 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 259 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
269 EXPECT_EQ(1, visitor.headers_frame_count_); | 260 EXPECT_EQ(1, visitor.headers_frame_count_); |
270 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); | 261 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); |
271 } | 262 } |
272 } // namespace spdy | 263 } // namespace spdy |
OLD | NEW |