Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(648)

Side by Side Diff: net/spdy/spdy_websocket_stream_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_websocket_stream.h" 5 #include "net/spdy/spdy_websocket_stream.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 18 matching lines...) Expand all
29 EVENT_SENT_HEADERS, 29 EVENT_SENT_HEADERS,
30 EVENT_RECEIVED_HEADER, 30 EVENT_RECEIVED_HEADER,
31 EVENT_SENT_DATA, 31 EVENT_SENT_DATA,
32 EVENT_RECEIVED_DATA, 32 EVENT_RECEIVED_DATA,
33 EVENT_CLOSE, 33 EVENT_CLOSE,
34 }; 34 };
35 SpdyWebSocketStreamEvent(EventType type, 35 SpdyWebSocketStreamEvent(EventType type,
36 const SpdyHeaderBlock& headers, 36 const SpdyHeaderBlock& headers,
37 int result, 37 int result,
38 const std::string& data) 38 const std::string& data)
39 : event_type(type), 39 : event_type(type), headers(headers), result(result), data(data) {}
40 headers(headers),
41 result(result),
42 data(data) {}
43 40
44 EventType event_type; 41 EventType event_type;
45 SpdyHeaderBlock headers; 42 SpdyHeaderBlock headers;
46 int result; 43 int result;
47 std::string data; 44 std::string data;
48 }; 45 };
49 46
50 class SpdyWebSocketStreamEventRecorder : public SpdyWebSocketStream::Delegate { 47 class SpdyWebSocketStreamEventRecorder : public SpdyWebSocketStream::Delegate {
51 public: 48 public:
52 explicit SpdyWebSocketStreamEventRecorder(const CompletionCallback& callback) 49 explicit SpdyWebSocketStreamEventRecorder(const CompletionCallback& callback)
(...skipping 10 matching lines...) Expand all
63 } 60 }
64 void SetOnReceivedHeader(const StreamEventCallback& callback) { 61 void SetOnReceivedHeader(const StreamEventCallback& callback) {
65 on_received_header_ = callback; 62 on_received_header_ = callback;
66 } 63 }
67 void SetOnSentData(const StreamEventCallback& callback) { 64 void SetOnSentData(const StreamEventCallback& callback) {
68 on_sent_data_ = callback; 65 on_sent_data_ = callback;
69 } 66 }
70 void SetOnReceivedData(const StreamEventCallback& callback) { 67 void SetOnReceivedData(const StreamEventCallback& callback) {
71 on_received_data_ = callback; 68 on_received_data_ = callback;
72 } 69 }
73 void SetOnClose(const StreamEventCallback& callback) { 70 void SetOnClose(const StreamEventCallback& callback) { on_close_ = callback; }
74 on_close_ = callback;
75 }
76 71
77 virtual void OnCreatedSpdyStream(int result) OVERRIDE { 72 virtual void OnCreatedSpdyStream(int result) OVERRIDE {
78 events_.push_back( 73 events_.push_back(
79 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_CREATED, 74 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_CREATED,
80 SpdyHeaderBlock(), 75 SpdyHeaderBlock(),
81 result, 76 result,
82 std::string())); 77 std::string()));
83 if (!on_created_.is_null()) 78 if (!on_created_.is_null())
84 on_created_.Run(&events_.back()); 79 on_created_.Run(&events_.back());
85 } 80 }
86 virtual void OnSentSpdyHeaders() OVERRIDE { 81 virtual void OnSentSpdyHeaders() OVERRIDE {
87 events_.push_back( 82 events_.push_back(
88 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, 83 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS,
89 SpdyHeaderBlock(), 84 SpdyHeaderBlock(),
90 OK, 85 OK,
91 std::string())); 86 std::string()));
92 if (!on_sent_data_.is_null()) 87 if (!on_sent_data_.is_null())
93 on_sent_data_.Run(&events_.back()); 88 on_sent_data_.Run(&events_.back());
94 } 89 }
95 virtual void OnSpdyResponseHeadersUpdated( 90 virtual void OnSpdyResponseHeadersUpdated(
96 const SpdyHeaderBlock& response_headers) OVERRIDE { 91 const SpdyHeaderBlock& response_headers) OVERRIDE {
97 events_.push_back( 92 events_.push_back(SpdyWebSocketStreamEvent(
98 SpdyWebSocketStreamEvent( 93 SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER,
99 SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, 94 response_headers,
100 response_headers, 95 OK,
101 OK, 96 std::string()));
102 std::string()));
103 if (!on_received_header_.is_null()) 97 if (!on_received_header_.is_null())
104 on_received_header_.Run(&events_.back()); 98 on_received_header_.Run(&events_.back());
105 } 99 }
106 virtual void OnSentSpdyData(size_t bytes_sent) OVERRIDE { 100 virtual void OnSentSpdyData(size_t bytes_sent) OVERRIDE {
107 events_.push_back( 101 events_.push_back(
108 SpdyWebSocketStreamEvent( 102 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_SENT_DATA,
109 SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 103 SpdyHeaderBlock(),
110 SpdyHeaderBlock(), 104 static_cast<int>(bytes_sent),
111 static_cast<int>(bytes_sent), 105 std::string()));
112 std::string()));
113 if (!on_sent_data_.is_null()) 106 if (!on_sent_data_.is_null())
114 on_sent_data_.Run(&events_.back()); 107 on_sent_data_.Run(&events_.back());
115 } 108 }
116 virtual void OnReceivedSpdyData(scoped_ptr<SpdyBuffer> buffer) OVERRIDE { 109 virtual void OnReceivedSpdyData(scoped_ptr<SpdyBuffer> buffer) OVERRIDE {
117 std::string buffer_data; 110 std::string buffer_data;
118 size_t buffer_len = 0; 111 size_t buffer_len = 0;
119 if (buffer) { 112 if (buffer) {
120 buffer_len = buffer->GetRemainingSize(); 113 buffer_len = buffer->GetRemainingSize();
121 buffer_data.append(buffer->GetRemainingData(), buffer_len); 114 buffer_data.append(buffer->GetRemainingData(), buffer_len);
122 } 115 }
123 events_.push_back( 116 events_.push_back(
124 SpdyWebSocketStreamEvent( 117 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
125 SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 118 SpdyHeaderBlock(),
126 SpdyHeaderBlock(), 119 buffer_len,
127 buffer_len, 120 buffer_data));
128 buffer_data));
129 if (!on_received_data_.is_null()) 121 if (!on_received_data_.is_null())
130 on_received_data_.Run(&events_.back()); 122 on_received_data_.Run(&events_.back());
131 } 123 }
132 virtual void OnCloseSpdyStream() OVERRIDE { 124 virtual void OnCloseSpdyStream() OVERRIDE {
133 events_.push_back( 125 events_.push_back(
134 SpdyWebSocketStreamEvent( 126 SpdyWebSocketStreamEvent(SpdyWebSocketStreamEvent::EVENT_CLOSE,
135 SpdyWebSocketStreamEvent::EVENT_CLOSE, 127 SpdyHeaderBlock(),
136 SpdyHeaderBlock(), 128 OK,
137 OK, 129 std::string()));
138 std::string()));
139 if (!on_close_.is_null()) 130 if (!on_close_.is_null())
140 on_close_.Run(&events_.back()); 131 on_close_.Run(&events_.back());
141 if (!callback_.is_null()) 132 if (!callback_.is_null())
142 callback_.Run(OK); 133 callback_.Run(OK);
143 } 134 }
144 135
145 const std::vector<SpdyWebSocketStreamEvent>& GetSeenEvents() const { 136 const std::vector<SpdyWebSocketStreamEvent>& GetSeenEvents() const {
146 return events_; 137 return events_;
147 } 138 }
148 139
(...skipping 21 matching lines...) Expand all
170 void DoSendHelloFrame(SpdyWebSocketStreamEvent* event) { 161 void DoSendHelloFrame(SpdyWebSocketStreamEvent* event) {
171 // Record the actual stream_id. 162 // Record the actual stream_id.
172 created_stream_id_ = websocket_stream_->stream_->stream_id(); 163 created_stream_id_ = websocket_stream_->stream_->stream_id();
173 websocket_stream_->SendData(kMessageFrame, kMessageFrameLength); 164 websocket_stream_->SendData(kMessageFrame, kMessageFrameLength);
174 } 165 }
175 166
176 void DoSendClosingFrame(SpdyWebSocketStreamEvent* event) { 167 void DoSendClosingFrame(SpdyWebSocketStreamEvent* event) {
177 websocket_stream_->SendData(kClosingFrame, kClosingFrameLength); 168 websocket_stream_->SendData(kClosingFrame, kClosingFrameLength);
178 } 169 }
179 170
180 void DoClose(SpdyWebSocketStreamEvent* event) { 171 void DoClose(SpdyWebSocketStreamEvent* event) { websocket_stream_->Close(); }
181 websocket_stream_->Close();
182 }
183 172
184 void DoSync(SpdyWebSocketStreamEvent* event) { 173 void DoSync(SpdyWebSocketStreamEvent* event) {
185 sync_callback_.callback().Run(OK); 174 sync_callback_.callback().Run(OK);
186 } 175 }
187 176
188 protected: 177 protected:
189 SpdyWebSocketStreamTest() 178 SpdyWebSocketStreamTest()
190 : spdy_util_(GetParam()), 179 : spdy_util_(GetParam()),
191 spdy_settings_id_to_set_(SETTINGS_MAX_CONCURRENT_STREAMS), 180 spdy_settings_id_to_set_(SETTINGS_MAX_CONCURRENT_STREAMS),
192 spdy_settings_flags_to_set_(SETTINGS_FLAG_PLEASE_PERSIST), 181 spdy_settings_flags_to_set_(SETTINGS_FLAG_PLEASE_PERSIST),
193 spdy_settings_value_to_set_(1), 182 spdy_settings_value_to_set_(1),
194 session_deps_(GetParam()), 183 session_deps_(GetParam()),
195 stream_id_(0), 184 stream_id_(0),
196 created_stream_id_(0) {} 185 created_stream_id_(0) {}
197 virtual ~SpdyWebSocketStreamTest() {} 186 virtual ~SpdyWebSocketStreamTest() {}
198 187
199 virtual void SetUp() { 188 virtual void SetUp() {
200 host_port_pair_.set_host("example.com"); 189 host_port_pair_.set_host("example.com");
201 host_port_pair_.set_port(80); 190 host_port_pair_.set_port(80);
202 spdy_session_key_ = SpdySessionKey(host_port_pair_, 191 spdy_session_key_ = SpdySessionKey(
203 ProxyServer::Direct(), 192 host_port_pair_, ProxyServer::Direct(), PRIVACY_MODE_DISABLED);
204 PRIVACY_MODE_DISABLED);
205 193
206 spdy_settings_to_send_[spdy_settings_id_to_set_] = 194 spdy_settings_to_send_[spdy_settings_id_to_set_] = SettingsFlagsAndValue(
207 SettingsFlagsAndValue( 195 SETTINGS_FLAG_PERSISTED, spdy_settings_value_to_set_);
208 SETTINGS_FLAG_PERSISTED, spdy_settings_value_to_set_);
209 } 196 }
210 197
211 virtual void TearDown() { 198 virtual void TearDown() { base::MessageLoop::current()->RunUntilIdle(); }
212 base::MessageLoop::current()->RunUntilIdle();
213 }
214 199
215 void Prepare(SpdyStreamId stream_id) { 200 void Prepare(SpdyStreamId stream_id) {
216 stream_id_ = stream_id; 201 stream_id_ = stream_id;
217 202
218 request_frame_.reset(spdy_util_.ConstructSpdyWebSocketSynStream( 203 request_frame_.reset(spdy_util_.ConstructSpdyWebSocketSynStream(
219 stream_id_, 204 stream_id_, "/echo", "example.com", "http://example.com/wsdemo"));
220 "/echo",
221 "example.com",
222 "http://example.com/wsdemo"));
223 205
224 response_frame_.reset( 206 response_frame_.reset(
225 spdy_util_.ConstructSpdyWebSocketSynReply(stream_id_)); 207 spdy_util_.ConstructSpdyWebSocketSynReply(stream_id_));
226 208
227 message_frame_.reset(spdy_util_.ConstructSpdyWebSocketDataFrame( 209 message_frame_.reset(spdy_util_.ConstructSpdyWebSocketDataFrame(
228 kMessageFrame, 210 kMessageFrame, kMessageFrameLength, stream_id_, false));
229 kMessageFrameLength,
230 stream_id_,
231 false));
232 211
233 closing_frame_.reset(spdy_util_.ConstructSpdyWebSocketDataFrame( 212 closing_frame_.reset(spdy_util_.ConstructSpdyWebSocketDataFrame(
234 kClosingFrame, 213 kClosingFrame, kClosingFrameLength, stream_id_, false));
235 kClosingFrameLength,
236 stream_id_,
237 false));
238 214
239 closing_frame_fin_.reset(spdy_util_.ConstructSpdyWebSocketDataFrame( 215 closing_frame_fin_.reset(spdy_util_.ConstructSpdyWebSocketDataFrame(
240 kClosingFrame, 216 kClosingFrame, kClosingFrameLength, stream_id_, true));
241 kClosingFrameLength,
242 stream_id_,
243 true));
244 } 217 }
245 218
246 void InitSession(MockRead* reads, size_t reads_count, 219 void InitSession(MockRead* reads,
247 MockWrite* writes, size_t writes_count) { 220 size_t reads_count,
248 data_.reset(new OrderedSocketData(reads, reads_count, 221 MockWrite* writes,
249 writes, writes_count)); 222 size_t writes_count) {
223 data_.reset(
224 new OrderedSocketData(reads, reads_count, writes, writes_count));
250 session_deps_.socket_factory->AddSocketDataProvider(data_.get()); 225 session_deps_.socket_factory->AddSocketDataProvider(data_.get());
251 http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 226 http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
252 session_ = CreateInsecureSpdySession( 227 session_ = CreateInsecureSpdySession(
253 http_session_, spdy_session_key_, BoundNetLog()); 228 http_session_, spdy_session_key_, BoundNetLog());
254 } 229 }
255 230
256 void SendRequest() { 231 void SendRequest() {
257 scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock); 232 scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock);
258 spdy_util_.SetHeader("path", "/echo", headers.get()); 233 spdy_util_.SetHeader("path", "/echo", headers.get());
259 spdy_util_.SetHeader("host", "example.com", headers.get()); 234 spdy_util_.SetHeader("host", "example.com", headers.get());
(...skipping 24 matching lines...) Expand all
284 SpdySessionKey spdy_session_key_; 259 SpdySessionKey spdy_session_key_;
285 TestCompletionCallback completion_callback_; 260 TestCompletionCallback completion_callback_;
286 TestCompletionCallback sync_callback_; 261 TestCompletionCallback sync_callback_;
287 262
288 static const char kMessageFrame[]; 263 static const char kMessageFrame[];
289 static const char kClosingFrame[]; 264 static const char kClosingFrame[];
290 static const size_t kMessageFrameLength; 265 static const size_t kMessageFrameLength;
291 static const size_t kClosingFrameLength; 266 static const size_t kClosingFrameLength;
292 }; 267 };
293 268
294 INSTANTIATE_TEST_CASE_P( 269 INSTANTIATE_TEST_CASE_P(NextProto,
295 NextProto, 270 SpdyWebSocketStreamTest,
296 SpdyWebSocketStreamTest, 271 testing::Values(kProtoDeprecatedSPDY2,
297 testing::Values(kProtoDeprecatedSPDY2, 272 kProtoSPDY3,
298 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); 273 kProtoSPDY31,
274 kProtoSPDY4));
299 275
300 // TODO(toyoshim): Replace old framing data to new one, then use HEADERS and 276 // TODO(toyoshim): Replace old framing data to new one, then use HEADERS and
301 // data frames. 277 // data frames.
302 const char SpdyWebSocketStreamTest::kMessageFrame[] = "\x81\x05hello"; 278 const char SpdyWebSocketStreamTest::kMessageFrame[] = "\x81\x05hello";
303 const char SpdyWebSocketStreamTest::kClosingFrame[] = "\x88\0"; 279 const char SpdyWebSocketStreamTest::kClosingFrame[] = "\x88\0";
304 const size_t SpdyWebSocketStreamTest::kMessageFrameLength = 280 const size_t SpdyWebSocketStreamTest::kMessageFrameLength =
305 arraysize(SpdyWebSocketStreamTest::kMessageFrame) - 1; 281 arraysize(SpdyWebSocketStreamTest::kMessageFrame) - 1;
306 const size_t SpdyWebSocketStreamTest::kClosingFrameLength = 282 const size_t SpdyWebSocketStreamTest::kClosingFrameLength =
307 arraysize(SpdyWebSocketStreamTest::kClosingFrame) - 1; 283 arraysize(SpdyWebSocketStreamTest::kClosingFrame) - 1;
308 284
309 TEST_P(SpdyWebSocketStreamTest, Basic) { 285 TEST_P(SpdyWebSocketStreamTest, Basic) {
310 Prepare(1); 286 Prepare(1);
311 MockWrite writes[] = { 287 MockWrite writes[] = {CreateMockWrite(*request_frame_.get(), 1),
312 CreateMockWrite(*request_frame_.get(), 1), 288 CreateMockWrite(*message_frame_.get(), 3),
313 CreateMockWrite(*message_frame_.get(), 3), 289 CreateMockWrite(*closing_frame_.get(), 5)};
314 CreateMockWrite(*closing_frame_.get(), 5)
315 };
316 290
317 MockRead reads[] = { 291 MockRead reads[] = {
318 CreateMockRead(*response_frame_.get(), 2), 292 CreateMockRead(*response_frame_.get(), 2),
319 CreateMockRead(*message_frame_.get(), 4), 293 CreateMockRead(*message_frame_.get(), 4),
320 // Skip sequence 6 to notify closing has been sent. 294 // Skip sequence 6 to notify closing has been sent.
321 CreateMockRead(*closing_frame_.get(), 7), 295 CreateMockRead(*closing_frame_.get(), 7),
322 MockRead(SYNCHRONOUS, 0, 8) // EOF cause OnCloseSpdyStream event. 296 MockRead(SYNCHRONOUS, 0, 8) // EOF cause OnCloseSpdyStream event.
323 }; 297 };
324 298
325 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 299 InitSession(reads, arraysize(reads), writes, arraysize(writes));
326 300
327 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback()); 301 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback());
328 delegate.SetOnReceivedHeader( 302 delegate.SetOnReceivedHeader(base::Bind(
329 base::Bind(&SpdyWebSocketStreamTest::DoSendHelloFrame, 303 &SpdyWebSocketStreamTest::DoSendHelloFrame, base::Unretained(this)));
330 base::Unretained(this))); 304 delegate.SetOnReceivedData(base::Bind(
331 delegate.SetOnReceivedData( 305 &SpdyWebSocketStreamTest::DoSendClosingFrame, base::Unretained(this)));
332 base::Bind(&SpdyWebSocketStreamTest::DoSendClosingFrame,
333 base::Unretained(this)));
334 306
335 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); 307 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate));
336 308
337 BoundNetLog net_log; 309 BoundNetLog net_log;
338 GURL url("ws://example.com/echo"); 310 GURL url("ws://example.com/echo");
339 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); 311 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log));
340 312
341 ASSERT_TRUE(websocket_stream_->stream_.get()); 313 ASSERT_TRUE(websocket_stream_->stream_.get());
342 314
343 SendRequest(); 315 SendRequest();
344 316
345 completion_callback_.WaitForResult(); 317 completion_callback_.WaitForResult();
346 318
347 EXPECT_EQ(stream_id_, created_stream_id_); 319 EXPECT_EQ(stream_id_, created_stream_id_);
348 320
349 websocket_stream_.reset(); 321 websocket_stream_.reset();
350 322
351 const std::vector<SpdyWebSocketStreamEvent>& events = 323 const std::vector<SpdyWebSocketStreamEvent>& events =
352 delegate.GetSeenEvents(); 324 delegate.GetSeenEvents();
353 ASSERT_EQ(7U, events.size()); 325 ASSERT_EQ(7U, events.size());
354 326
355 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, 327 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, events[0].event_type);
356 events[0].event_type);
357 EXPECT_EQ(OK, events[0].result); 328 EXPECT_EQ(OK, events[0].result);
358 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, 329 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER,
359 events[1].event_type); 330 events[1].event_type);
360 EXPECT_EQ(OK, events[1].result); 331 EXPECT_EQ(OK, events[1].result);
361 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 332 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[2].event_type);
362 events[2].event_type);
363 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[2].result); 333 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[2].result);
364 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 334 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
365 events[3].event_type); 335 events[3].event_type);
366 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); 336 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result);
367 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 337 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[4].event_type);
368 events[4].event_type);
369 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[4].result); 338 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[4].result);
370 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 339 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
371 events[5].event_type); 340 events[5].event_type);
372 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[5].result); 341 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[5].result);
373 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, 342 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[6].event_type);
374 events[6].event_type);
375 EXPECT_EQ(OK, events[6].result); 343 EXPECT_EQ(OK, events[6].result);
376 344
377 // EOF close SPDY session. 345 // EOF close SPDY session.
378 EXPECT_FALSE( 346 EXPECT_FALSE(
379 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_)); 347 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_));
380 EXPECT_TRUE(data()->at_read_eof()); 348 EXPECT_TRUE(data()->at_read_eof());
381 EXPECT_TRUE(data()->at_write_eof()); 349 EXPECT_TRUE(data()->at_write_eof());
382 } 350 }
383 351
384 // A SPDY websocket may still send it's close frame after 352 // A SPDY websocket may still send it's close frame after
385 // recieving a close with SPDY stream FIN. 353 // recieving a close with SPDY stream FIN.
386 TEST_P(SpdyWebSocketStreamTest, RemoteCloseWithFin) { 354 TEST_P(SpdyWebSocketStreamTest, RemoteCloseWithFin) {
387 Prepare(1); 355 Prepare(1);
388 MockWrite writes[] = { 356 MockWrite writes[] = {
389 CreateMockWrite(*request_frame_.get(), 1), 357 CreateMockWrite(*request_frame_.get(), 1),
390 CreateMockWrite(*closing_frame_.get(), 4), 358 CreateMockWrite(*closing_frame_.get(), 4),
391 }; 359 };
392 MockRead reads[] = { 360 MockRead reads[] = {
393 CreateMockRead(*response_frame_.get(), 2), 361 CreateMockRead(*response_frame_.get(), 2),
394 CreateMockRead(*closing_frame_fin_.get(), 3), 362 CreateMockRead(*closing_frame_fin_.get(), 3),
395 MockRead(SYNCHRONOUS, 0, 5) // EOF cause OnCloseSpdyStream event. 363 MockRead(SYNCHRONOUS, 0, 5) // EOF cause OnCloseSpdyStream event.
396 }; 364 };
397 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 365 InitSession(reads, arraysize(reads), writes, arraysize(writes));
398 366
399 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback()); 367 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback());
400 delegate.SetOnReceivedData( 368 delegate.SetOnReceivedData(base::Bind(
401 base::Bind(&SpdyWebSocketStreamTest::DoSendClosingFrame, 369 &SpdyWebSocketStreamTest::DoSendClosingFrame, base::Unretained(this)));
402 base::Unretained(this)));
403 370
404 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); 371 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate));
405 BoundNetLog net_log; 372 BoundNetLog net_log;
406 GURL url("ws://example.com/echo"); 373 GURL url("ws://example.com/echo");
407 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); 374 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log));
408 375
409 SendRequest(); 376 SendRequest();
410 completion_callback_.WaitForResult(); 377 completion_callback_.WaitForResult();
411 websocket_stream_.reset(); 378 websocket_stream_.reset();
412 379
413 const std::vector<SpdyWebSocketStreamEvent>& events = 380 const std::vector<SpdyWebSocketStreamEvent>& events =
414 delegate.GetSeenEvents(); 381 delegate.GetSeenEvents();
415 EXPECT_EQ(5U, events.size()); 382 EXPECT_EQ(5U, events.size());
416 383
417 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, 384 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, events[0].event_type);
418 events[0].event_type);
419 EXPECT_EQ(OK, events[0].result); 385 EXPECT_EQ(OK, events[0].result);
420 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, 386 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER,
421 events[1].event_type); 387 events[1].event_type);
422 EXPECT_EQ(OK, events[1].result); 388 EXPECT_EQ(OK, events[1].result);
423 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 389 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
424 events[2].event_type); 390 events[2].event_type);
425 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[2].result); 391 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[2].result);
426 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 392 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[3].event_type);
427 events[3].event_type);
428 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[3].result); 393 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[3].result);
429 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, 394 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type);
430 events[4].event_type);
431 EXPECT_EQ(OK, events[4].result); 395 EXPECT_EQ(OK, events[4].result);
432 396
433 // EOF closes SPDY session. 397 // EOF closes SPDY session.
434 EXPECT_FALSE( 398 EXPECT_FALSE(
435 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_)); 399 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_));
436 EXPECT_TRUE(data()->at_read_eof()); 400 EXPECT_TRUE(data()->at_read_eof());
437 EXPECT_TRUE(data()->at_write_eof()); 401 EXPECT_TRUE(data()->at_write_eof());
438 } 402 }
439 403
440 TEST_P(SpdyWebSocketStreamTest, DestructionBeforeClose) { 404 TEST_P(SpdyWebSocketStreamTest, DestructionBeforeClose) {
441 Prepare(1); 405 Prepare(1);
442 MockWrite writes[] = { 406 MockWrite writes[] = {CreateMockWrite(*request_frame_.get(), 1),
443 CreateMockWrite(*request_frame_.get(), 1), 407 CreateMockWrite(*message_frame_.get(), 3)};
444 CreateMockWrite(*message_frame_.get(), 3)
445 };
446 408
447 MockRead reads[] = { 409 MockRead reads[] = {CreateMockRead(*response_frame_.get(), 2),
448 CreateMockRead(*response_frame_.get(), 2), 410 CreateMockRead(*message_frame_.get(), 4),
449 CreateMockRead(*message_frame_.get(), 4), 411 MockRead(ASYNC, ERR_IO_PENDING, 5)};
450 MockRead(ASYNC, ERR_IO_PENDING, 5)
451 };
452 412
453 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 413 InitSession(reads, arraysize(reads), writes, arraysize(writes));
454 414
455 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback()); 415 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback());
456 delegate.SetOnReceivedHeader( 416 delegate.SetOnReceivedHeader(base::Bind(
457 base::Bind(&SpdyWebSocketStreamTest::DoSendHelloFrame, 417 &SpdyWebSocketStreamTest::DoSendHelloFrame, base::Unretained(this)));
458 base::Unretained(this)));
459 delegate.SetOnReceivedData( 418 delegate.SetOnReceivedData(
460 base::Bind(&SpdyWebSocketStreamTest::DoSync, 419 base::Bind(&SpdyWebSocketStreamTest::DoSync, base::Unretained(this)));
461 base::Unretained(this)));
462 420
463 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); 421 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate));
464 422
465 BoundNetLog net_log; 423 BoundNetLog net_log;
466 GURL url("ws://example.com/echo"); 424 GURL url("ws://example.com/echo");
467 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); 425 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log));
468 426
469 SendRequest(); 427 SendRequest();
470 428
471 sync_callback_.WaitForResult(); 429 sync_callback_.WaitForResult();
472 430
473 // WebSocketStream destruction remove its SPDY stream from the session. 431 // WebSocketStream destruction remove its SPDY stream from the session.
474 EXPECT_TRUE(session_->IsStreamActive(stream_id_)); 432 EXPECT_TRUE(session_->IsStreamActive(stream_id_));
475 websocket_stream_.reset(); 433 websocket_stream_.reset();
476 EXPECT_FALSE(session_->IsStreamActive(stream_id_)); 434 EXPECT_FALSE(session_->IsStreamActive(stream_id_));
477 435
478 const std::vector<SpdyWebSocketStreamEvent>& events = 436 const std::vector<SpdyWebSocketStreamEvent>& events =
479 delegate.GetSeenEvents(); 437 delegate.GetSeenEvents();
480 ASSERT_GE(4U, events.size()); 438 ASSERT_GE(4U, events.size());
481 439
482 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, 440 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, events[0].event_type);
483 events[0].event_type);
484 EXPECT_EQ(OK, events[0].result); 441 EXPECT_EQ(OK, events[0].result);
485 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, 442 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER,
486 events[1].event_type); 443 events[1].event_type);
487 EXPECT_EQ(OK, events[1].result); 444 EXPECT_EQ(OK, events[1].result);
488 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 445 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[2].event_type);
489 events[2].event_type);
490 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[2].result); 446 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[2].result);
491 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 447 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
492 events[3].event_type); 448 events[3].event_type);
493 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); 449 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result);
494 450
495 EXPECT_TRUE( 451 EXPECT_TRUE(
496 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_)); 452 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_));
497 EXPECT_TRUE(data()->at_read_eof()); 453 EXPECT_TRUE(data()->at_read_eof());
498 EXPECT_TRUE(data()->at_write_eof()); 454 EXPECT_TRUE(data()->at_write_eof());
499 } 455 }
500 456
501 TEST_P(SpdyWebSocketStreamTest, DestructionAfterExplicitClose) { 457 TEST_P(SpdyWebSocketStreamTest, DestructionAfterExplicitClose) {
502 Prepare(1); 458 Prepare(1);
503 MockWrite writes[] = { 459 MockWrite writes[] = {CreateMockWrite(*request_frame_.get(), 1),
504 CreateMockWrite(*request_frame_.get(), 1), 460 CreateMockWrite(*message_frame_.get(), 3),
505 CreateMockWrite(*message_frame_.get(), 3), 461 CreateMockWrite(*closing_frame_.get(), 5)};
506 CreateMockWrite(*closing_frame_.get(), 5)
507 };
508 462
509 MockRead reads[] = { 463 MockRead reads[] = {CreateMockRead(*response_frame_.get(), 2),
510 CreateMockRead(*response_frame_.get(), 2), 464 CreateMockRead(*message_frame_.get(), 4),
511 CreateMockRead(*message_frame_.get(), 4), 465 MockRead(ASYNC, ERR_IO_PENDING, 6)};
512 MockRead(ASYNC, ERR_IO_PENDING, 6)
513 };
514 466
515 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 467 InitSession(reads, arraysize(reads), writes, arraysize(writes));
516 468
517 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback()); 469 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback());
518 delegate.SetOnReceivedHeader( 470 delegate.SetOnReceivedHeader(base::Bind(
519 base::Bind(&SpdyWebSocketStreamTest::DoSendHelloFrame, 471 &SpdyWebSocketStreamTest::DoSendHelloFrame, base::Unretained(this)));
520 base::Unretained(this)));
521 delegate.SetOnReceivedData( 472 delegate.SetOnReceivedData(
522 base::Bind(&SpdyWebSocketStreamTest::DoClose, 473 base::Bind(&SpdyWebSocketStreamTest::DoClose, base::Unretained(this)));
523 base::Unretained(this)));
524 474
525 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); 475 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate));
526 476
527 BoundNetLog net_log; 477 BoundNetLog net_log;
528 GURL url("ws://example.com/echo"); 478 GURL url("ws://example.com/echo");
529 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); 479 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log));
530 480
531 SendRequest(); 481 SendRequest();
532 482
533 completion_callback_.WaitForResult(); 483 completion_callback_.WaitForResult();
534 484
535 // SPDY stream has already been removed from the session by Close(). 485 // SPDY stream has already been removed from the session by Close().
536 EXPECT_FALSE(session_->IsStreamActive(stream_id_)); 486 EXPECT_FALSE(session_->IsStreamActive(stream_id_));
537 websocket_stream_.reset(); 487 websocket_stream_.reset();
538 488
539 const std::vector<SpdyWebSocketStreamEvent>& events = 489 const std::vector<SpdyWebSocketStreamEvent>& events =
540 delegate.GetSeenEvents(); 490 delegate.GetSeenEvents();
541 ASSERT_EQ(5U, events.size()); 491 ASSERT_EQ(5U, events.size());
542 492
543 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, 493 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, events[0].event_type);
544 events[0].event_type);
545 EXPECT_EQ(OK, events[0].result); 494 EXPECT_EQ(OK, events[0].result);
546 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, 495 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER,
547 events[1].event_type); 496 events[1].event_type);
548 EXPECT_EQ(OK, events[1].result); 497 EXPECT_EQ(OK, events[1].result);
549 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 498 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[2].event_type);
550 events[2].event_type);
551 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[2].result); 499 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[2].result);
552 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 500 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
553 events[3].event_type); 501 events[3].event_type);
554 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); 502 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result);
555 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type); 503 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type);
556 504
557 EXPECT_TRUE( 505 EXPECT_TRUE(
558 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_)); 506 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_));
559 } 507 }
560 508
561 TEST_P(SpdyWebSocketStreamTest, IOPending) { 509 TEST_P(SpdyWebSocketStreamTest, IOPending) {
562 Prepare(1); 510 Prepare(1);
563 scoped_ptr<SpdyFrame> settings_frame( 511 scoped_ptr<SpdyFrame> settings_frame(
564 spdy_util_.ConstructSpdySettings(spdy_settings_to_send_)); 512 spdy_util_.ConstructSpdySettings(spdy_settings_to_send_));
565 MockWrite writes[] = { 513 MockWrite writes[] = {CreateMockWrite(*request_frame_.get(), 1),
566 CreateMockWrite(*request_frame_.get(), 1), 514 CreateMockWrite(*message_frame_.get(), 3),
567 CreateMockWrite(*message_frame_.get(), 3), 515 CreateMockWrite(*closing_frame_.get(), 5)};
568 CreateMockWrite(*closing_frame_.get(), 5) 516
517 MockRead reads[] = {
518 CreateMockRead(*settings_frame.get(), 0),
519 CreateMockRead(*response_frame_.get(), 2),
520 CreateMockRead(*message_frame_.get(), 4),
521 CreateMockRead(*closing_frame_.get(), 6),
522 MockRead(SYNCHRONOUS, 0, 7) // EOF cause OnCloseSpdyStream event.
569 }; 523 };
570 524
571 MockRead reads[] = { 525 DeterministicSocketData data(
572 CreateMockRead(*settings_frame.get(), 0), 526 reads, arraysize(reads), writes, arraysize(writes));
573 CreateMockRead(*response_frame_.get(), 2),
574 CreateMockRead(*message_frame_.get(), 4),
575 CreateMockRead(*closing_frame_.get(), 6),
576 MockRead(SYNCHRONOUS, 0, 7) // EOF cause OnCloseSpdyStream event.
577 };
578
579 DeterministicSocketData data(reads, arraysize(reads),
580 writes, arraysize(writes));
581 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 527 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
582 http_session_ = 528 http_session_ =
583 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 529 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
584 530
585 session_ = CreateInsecureSpdySession( 531 session_ = CreateInsecureSpdySession(
586 http_session_, spdy_session_key_, BoundNetLog()); 532 http_session_, spdy_session_key_, BoundNetLog());
587 533
588 // Create a dummy WebSocketStream which cause ERR_IO_PENDING to another 534 // Create a dummy WebSocketStream which cause ERR_IO_PENDING to another
589 // WebSocketStream under test. 535 // WebSocketStream under test.
590 SpdyWebSocketStreamEventRecorder block_delegate((CompletionCallback())); 536 SpdyWebSocketStreamEventRecorder block_delegate((CompletionCallback()));
591 537
592 scoped_ptr<SpdyWebSocketStream> block_stream( 538 scoped_ptr<SpdyWebSocketStream> block_stream(
593 new SpdyWebSocketStream(session_, &block_delegate)); 539 new SpdyWebSocketStream(session_, &block_delegate));
594 BoundNetLog block_net_log; 540 BoundNetLog block_net_log;
595 GURL block_url("ws://example.com/block"); 541 GURL block_url("ws://example.com/block");
596 ASSERT_EQ(OK, 542 ASSERT_EQ(OK,
597 block_stream->InitializeStream(block_url, HIGHEST, block_net_log)); 543 block_stream->InitializeStream(block_url, HIGHEST, block_net_log));
598 544
599 data.RunFor(1); 545 data.RunFor(1);
600 546
601 // Create a WebSocketStream under test. 547 // Create a WebSocketStream under test.
602 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback()); 548 SpdyWebSocketStreamEventRecorder delegate(completion_callback_.callback());
603 delegate.SetOnCreated( 549 delegate.SetOnCreated(
604 base::Bind(&SpdyWebSocketStreamTest::DoSync, 550 base::Bind(&SpdyWebSocketStreamTest::DoSync, base::Unretained(this)));
605 base::Unretained(this))); 551 delegate.SetOnReceivedHeader(base::Bind(
606 delegate.SetOnReceivedHeader( 552 &SpdyWebSocketStreamTest::DoSendHelloFrame, base::Unretained(this)));
607 base::Bind(&SpdyWebSocketStreamTest::DoSendHelloFrame, 553 delegate.SetOnReceivedData(base::Bind(
608 base::Unretained(this))); 554 &SpdyWebSocketStreamTest::DoSendClosingFrame, base::Unretained(this)));
609 delegate.SetOnReceivedData(
610 base::Bind(&SpdyWebSocketStreamTest::DoSendClosingFrame,
611 base::Unretained(this)));
612 555
613 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); 556 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate));
614 BoundNetLog net_log; 557 BoundNetLog net_log;
615 GURL url("ws://example.com/echo"); 558 GURL url("ws://example.com/echo");
616 ASSERT_EQ(ERR_IO_PENDING, websocket_stream_->InitializeStream( 559 ASSERT_EQ(ERR_IO_PENDING,
617 url, HIGHEST, net_log)); 560 websocket_stream_->InitializeStream(url, HIGHEST, net_log));
618 561
619 // Delete the fist stream to allow create the second stream. 562 // Delete the fist stream to allow create the second stream.
620 block_stream.reset(); 563 block_stream.reset();
621 ASSERT_EQ(OK, sync_callback_.WaitForResult()); 564 ASSERT_EQ(OK, sync_callback_.WaitForResult());
622 565
623 SendRequest(); 566 SendRequest();
624 567
625 data.RunFor(7); 568 data.RunFor(7);
626 completion_callback_.WaitForResult(); 569 completion_callback_.WaitForResult();
627 570
628 websocket_stream_.reset(); 571 websocket_stream_.reset();
629 572
630 const std::vector<SpdyWebSocketStreamEvent>& block_events = 573 const std::vector<SpdyWebSocketStreamEvent>& block_events =
631 block_delegate.GetSeenEvents(); 574 block_delegate.GetSeenEvents();
632 ASSERT_EQ(0U, block_events.size()); 575 ASSERT_EQ(0U, block_events.size());
633 576
634 const std::vector<SpdyWebSocketStreamEvent>& events = 577 const std::vector<SpdyWebSocketStreamEvent>& events =
635 delegate.GetSeenEvents(); 578 delegate.GetSeenEvents();
636 ASSERT_EQ(8U, events.size()); 579 ASSERT_EQ(8U, events.size());
637 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CREATED, 580 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CREATED, events[0].event_type);
638 events[0].event_type);
639 EXPECT_EQ(0, events[0].result); 581 EXPECT_EQ(0, events[0].result);
640 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, 582 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, events[1].event_type);
641 events[1].event_type);
642 EXPECT_EQ(OK, events[1].result); 583 EXPECT_EQ(OK, events[1].result);
643 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, 584 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER,
644 events[2].event_type); 585 events[2].event_type);
645 EXPECT_EQ(OK, events[2].result); 586 EXPECT_EQ(OK, events[2].result);
646 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 587 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[3].event_type);
647 events[3].event_type);
648 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); 588 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result);
649 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 589 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
650 events[4].event_type); 590 events[4].event_type);
651 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[4].result); 591 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[4].result);
652 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, 592 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_DATA, events[5].event_type);
653 events[5].event_type);
654 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[5].result); 593 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[5].result);
655 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, 594 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA,
656 events[6].event_type); 595 events[6].event_type);
657 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[6].result); 596 EXPECT_EQ(static_cast<int>(kClosingFrameLength), events[6].result);
658 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, 597 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[7].event_type);
659 events[7].event_type);
660 EXPECT_EQ(OK, events[7].result); 598 EXPECT_EQ(OK, events[7].result);
661 599
662 // EOF close SPDY session. 600 // EOF close SPDY session.
663 EXPECT_FALSE( 601 EXPECT_FALSE(
664 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_)); 602 HasSpdySession(http_session_->spdy_session_pool(), spdy_session_key_));
665 EXPECT_TRUE(data.at_read_eof()); 603 EXPECT_TRUE(data.at_read_eof());
666 EXPECT_TRUE(data.at_write_eof()); 604 EXPECT_TRUE(data.at_write_eof());
667 } 605 }
668 606
669 } // namespace net 607 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698