| Index: net/socket_stream/socket_stream_unittest.cc
|
| diff --git a/net/socket_stream/socket_stream_unittest.cc b/net/socket_stream/socket_stream_unittest.cc
|
| index a1ea8acfcbaae6bda9c4e9b25376330e45e39f49..090ecff3a9402fc2c4403f708e99007363d1f500 100644
|
| --- a/net/socket_stream/socket_stream_unittest.cc
|
| +++ b/net/socket_stream/socket_stream_unittest.cc
|
| @@ -24,7 +24,7 @@
|
| struct SocketStreamEvent {
|
| enum EventType {
|
| EVENT_START_OPEN_CONNECTION, EVENT_CONNECTED, EVENT_SENT_DATA,
|
| - EVENT_RECEIVED_DATA, EVENT_CLOSE, EVENT_AUTH_REQUIRED,
|
| + EVENT_RECEIVED_DATA, EVENT_CLOSE, EVENT_AUTH_REQUIRED, EVENT_ERROR,
|
| };
|
|
|
| SocketStreamEvent(EventType type,
|
| @@ -32,15 +32,17 @@ struct SocketStreamEvent {
|
| int num,
|
| const std::string& str,
|
| net::AuthChallengeInfo* auth_challenge_info,
|
| - net::CompletionCallback* callback)
|
| + net::CompletionCallback* callback,
|
| + int error)
|
| : event_type(type), socket(socket_stream), number(num), data(str),
|
| - auth_info(auth_challenge_info) {}
|
| + auth_info(auth_challenge_info), error_code(error) {}
|
|
|
| EventType event_type;
|
| net::SocketStream* socket;
|
| int number;
|
| std::string data;
|
| scoped_refptr<net::AuthChallengeInfo> auth_info;
|
| + int error_code;
|
| };
|
|
|
| class SocketStreamEventRecorder : public net::SocketStream::Delegate {
|
| @@ -72,13 +74,16 @@ class SocketStreamEventRecorder : public net::SocketStream::Delegate {
|
| const base::Callback<void(SocketStreamEvent*)>& callback) {
|
| on_auth_required_ = callback;
|
| }
|
| + void SetOnError(const base::Callback<void(SocketStreamEvent*)>& callback) {
|
| + on_error_ = callback;
|
| + }
|
|
|
| virtual int OnStartOpenConnection(net::SocketStream* socket,
|
| net::CompletionCallback* callback) {
|
| connection_callback_ = callback;
|
| events_.push_back(
|
| SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
|
| - socket, 0, std::string(), NULL, callback));
|
| + socket, 0, std::string(), NULL, callback, net::OK));
|
| if (!on_start_open_connection_.is_null())
|
| return on_start_open_connection_.Run(&events_.back());
|
| return net::OK;
|
| @@ -88,30 +93,30 @@ class SocketStreamEventRecorder : public net::SocketStream::Delegate {
|
| events_.push_back(
|
| SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED,
|
| socket, num_pending_send_allowed, std::string(),
|
| - NULL, NULL));
|
| + NULL, NULL, net::OK));
|
| if (!on_connected_.is_null())
|
| on_connected_.Run(&events_.back());
|
| }
|
| virtual void OnSentData(net::SocketStream* socket,
|
| int amount_sent) {
|
| events_.push_back(
|
| - SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA,
|
| - socket, amount_sent, std::string(), NULL, NULL));
|
| + SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA, socket,
|
| + amount_sent, std::string(), NULL, NULL, net::OK));
|
| if (!on_sent_data_.is_null())
|
| on_sent_data_.Run(&events_.back());
|
| }
|
| virtual void OnReceivedData(net::SocketStream* socket,
|
| const char* data, int len) {
|
| events_.push_back(
|
| - SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA,
|
| - socket, len, std::string(data, len), NULL, NULL));
|
| + SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA, socket, len,
|
| + std::string(data, len), NULL, NULL, net::OK));
|
| if (!on_received_data_.is_null())
|
| on_received_data_.Run(&events_.back());
|
| }
|
| virtual void OnClose(net::SocketStream* socket) {
|
| events_.push_back(
|
| - SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE,
|
| - socket, 0, std::string(), NULL, NULL));
|
| + SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE, socket, 0,
|
| + std::string(), NULL, NULL, net::OK));
|
| if (!on_close_.is_null())
|
| on_close_.Run(&events_.back());
|
| if (callback_)
|
| @@ -120,11 +125,20 @@ class SocketStreamEventRecorder : public net::SocketStream::Delegate {
|
| virtual void OnAuthRequired(net::SocketStream* socket,
|
| net::AuthChallengeInfo* auth_info) {
|
| events_.push_back(
|
| - SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED,
|
| - socket, 0, std::string(), auth_info, NULL));
|
| + SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED, socket, 0,
|
| + std::string(), auth_info, NULL, net::OK));
|
| if (!on_auth_required_.is_null())
|
| on_auth_required_.Run(&events_.back());
|
| }
|
| + virtual void OnError(const net::SocketStream* socket, int error) {
|
| + events_.push_back(
|
| + SocketStreamEvent(SocketStreamEvent::EVENT_ERROR, NULL, 0,
|
| + std::string(), NULL, NULL, error));
|
| + if (!on_error_.is_null())
|
| + on_error_.Run(&events_.back());
|
| + if (callback_)
|
| + callback_->Run(error);
|
| + }
|
|
|
| void DoClose(SocketStreamEvent* event) {
|
| event->socket->Close();
|
| @@ -155,6 +169,7 @@ class SocketStreamEventRecorder : public net::SocketStream::Delegate {
|
| base::Callback<void(SocketStreamEvent*)> on_received_data_;
|
| base::Callback<void(SocketStreamEvent*)> on_close_;
|
| base::Callback<void(SocketStreamEvent*)> on_auth_required_;
|
| + base::Callback<void(SocketStreamEvent*)> on_error_;
|
| net::CompletionCallback* callback_;
|
| net::CompletionCallback* connection_callback_;
|
|
|
| @@ -304,7 +319,7 @@ TEST_F(SocketStreamTest, CloseFlushPendingWrite) {
|
| callback.WaitForResult();
|
|
|
| const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
|
| - ASSERT_EQ(7U, events.size());
|
| + ASSERT_EQ(8U, events.size());
|
|
|
| EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
|
| events[0].event_type);
|
| @@ -313,7 +328,9 @@ TEST_F(SocketStreamTest, CloseFlushPendingWrite) {
|
| EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type);
|
| EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[4].event_type);
|
| EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type);
|
| - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[6].event_type);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[6].event_type);
|
| + EXPECT_EQ(net::ERR_CONNECTION_CLOSED, events[6].error_code);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[7].event_type);
|
| }
|
|
|
| TEST_F(SocketStreamTest, BasicAuthProxy) {
|
| @@ -375,13 +392,15 @@ TEST_F(SocketStreamTest, BasicAuthProxy) {
|
| callback.WaitForResult();
|
|
|
| const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
|
| - ASSERT_EQ(4U, events.size());
|
| + ASSERT_EQ(5U, events.size());
|
|
|
| EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
|
| events[0].event_type);
|
| EXPECT_EQ(SocketStreamEvent::EVENT_AUTH_REQUIRED, events[1].event_type);
|
| EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[2].event_type);
|
| - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[3].event_type);
|
| + EXPECT_EQ(net::ERR_ABORTED, events[3].error_code);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type);
|
|
|
| // TODO(eroman): Add back NetLogTest here...
|
| }
|
| @@ -440,7 +459,7 @@ TEST_F(SocketStreamTest, IOPending) {
|
| EXPECT_EQ(net::OK, callback.WaitForResult());
|
|
|
| const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
|
| - ASSERT_EQ(7U, events.size());
|
| + ASSERT_EQ(8U, events.size());
|
|
|
| EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
|
| events[0].event_type);
|
| @@ -449,7 +468,9 @@ TEST_F(SocketStreamTest, IOPending) {
|
| EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type);
|
| EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[4].event_type);
|
| EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type);
|
| - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[6].event_type);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[6].event_type);
|
| + EXPECT_EQ(net::ERR_CONNECTION_CLOSED, events[6].error_code);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[7].event_type);
|
| }
|
|
|
| TEST_F(SocketStreamTest, SwitchToSpdy) {
|
| @@ -470,14 +491,15 @@ TEST_F(SocketStreamTest, SwitchToSpdy) {
|
|
|
| socket_stream->Connect();
|
|
|
| - EXPECT_EQ(net::OK, callback.WaitForResult());
|
| + EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, callback.WaitForResult());
|
|
|
| const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
|
| ASSERT_EQ(2U, events.size());
|
|
|
| EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
|
| events[0].event_type);
|
| - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
|
| + EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code);
|
| }
|
|
|
| TEST_F(SocketStreamTest, SwitchAfterPending) {
|
| @@ -502,15 +524,15 @@ TEST_F(SocketStreamTest, SwitchAfterPending) {
|
| socket_stream->next_state_);
|
| delegate->CompleteConnection(net::ERR_PROTOCOL_SWITCHED);
|
|
|
| - int result = callback.WaitForResult();
|
| + EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, callback.WaitForResult());
|
|
|
| const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
|
| ASSERT_EQ(2U, events.size());
|
|
|
| EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
|
| events[0].event_type);
|
| - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type);
|
| - EXPECT_EQ(net::OK, result);
|
| + EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
|
| + EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code);
|
| }
|
|
|
| } // namespace net
|
|
|