Index: remoting/signaling/xmpp_signal_strategy_unittest.cc |
diff --git a/remoting/signaling/xmpp_signal_strategy_unittest.cc b/remoting/signaling/xmpp_signal_strategy_unittest.cc |
index f4a6d0b5160131482d7f606da5c07a5ec39d750a..82a2ed8fa1a901cc576d13edf36b925cc67dcfcf 100644 |
--- a/remoting/signaling/xmpp_signal_strategy_unittest.cc |
+++ b/remoting/signaling/xmpp_signal_strategy_unittest.cc |
@@ -16,13 +16,16 @@ namespace remoting { |
namespace { |
-class XmppSocketDataProvider: public net::SocketDataProvider { |
+class XmppSocketDataProvider : public net::SocketDataProvider { |
public: |
net::MockRead OnRead() override { |
return net::MockRead(net::ASYNC, net::ERR_IO_PENDING); |
} |
net::MockWriteResult OnWrite(const std::string& data) override { |
+ if (write_error_ != net::OK) |
+ return net::MockWriteResult(net::SYNCHRONOUS, write_error_); |
+ |
written_data_.append(data); |
if (use_async_write_) { |
@@ -52,7 +55,7 @@ class XmppSocketDataProvider: public net::SocketDataProvider { |
ReceiveData(std::string()); |
} |
- void SimulateNetworkError() { |
+ void SimulateAsyncReadError() { |
socket()->OnReadComplete( |
net::MockRead(net::ASYNC, net::ERR_CONNECTION_RESET)); |
} |
@@ -67,6 +70,10 @@ class XmppSocketDataProvider: public net::SocketDataProvider { |
use_async_write_ = use_async_write; |
} |
+ void set_write_error(net::Error error) { |
+ write_error_ = error; |
+ } |
+ |
void CompletePendingWrite() { |
socket()->OnWriteComplete(pending_write_size_); |
} |
@@ -75,6 +82,7 @@ class XmppSocketDataProvider: public net::SocketDataProvider { |
std::string written_data_; |
bool use_async_write_ = false; |
int pending_write_size_ = 0; |
+ net::Error write_error_ = net::OK; |
}; |
class MockClientSocketFactory : public net::MockClientSocketFactory { |
@@ -296,11 +304,11 @@ TEST_F(XmppSignalStrategyTest, ConnectionClosed) { |
Connect(true); |
} |
-TEST_F(XmppSignalStrategyTest, NetworkError) { |
+TEST_F(XmppSignalStrategyTest, NetworkReadError) { |
CreateSignalStrategy(kDefaultPort); |
Connect(true); |
- socket_data_provider_->SimulateNetworkError(); |
+ socket_data_provider_->SimulateAsyncReadError(); |
EXPECT_EQ(3U, state_history_.size()); |
EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); |
@@ -314,6 +322,24 @@ TEST_F(XmppSignalStrategyTest, NetworkError) { |
Connect(true); |
} |
+TEST_F(XmppSignalStrategyTest, NetworkWriteError) { |
+ CreateSignalStrategy(kDefaultPort); |
+ Connect(true); |
+ |
+ socket_data_provider_->set_write_error(net::ERR_FAILED); |
+ |
+ // Next SendMessage() will call Write() which will fail. |
+ EXPECT_FALSE(signal_strategy_->SendStanza(make_scoped_ptr( |
+ new buzz::XmlElement(buzz::QName(std::string(), "hello"))))); |
+ |
+ EXPECT_EQ(3U, state_history_.size()); |
+ EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); |
+ EXPECT_EQ(SignalStrategy::NETWORK_ERROR, signal_strategy_->GetError()); |
+ |
+ // Try connecting again. |
+ Connect(true); |
+} |
+ |
TEST_F(XmppSignalStrategyTest, StartTlsWithPendingWrite) { |
// Use port 5222 so that XmppLoginHandler uses starttls/proceed handshake |
// before starting TLS. |