| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "remoting/signaling/xmpp_signal_strategy.h" | 5 #include "remoting/signaling/xmpp_signal_strategy.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 const int kDefaultPort = 443; | 113 const int kDefaultPort = 443; |
| 114 | 114 |
| 115 class XmppSignalStrategyTest : public testing::Test, | 115 class XmppSignalStrategyTest : public testing::Test, |
| 116 public SignalStrategy::Listener { | 116 public SignalStrategy::Listener { |
| 117 public: | 117 public: |
| 118 XmppSignalStrategyTest() : message_loop_(base::MessageLoop::TYPE_IO) {} | 118 XmppSignalStrategyTest() : message_loop_(base::MessageLoop::TYPE_IO) {} |
| 119 | 119 |
| 120 void SetUp() override { | 120 void SetUp() override { |
| 121 request_context_getter_ = new net::TestURLRequestContextGetter( | 121 request_context_getter_ = new net::TestURLRequestContextGetter( |
| 122 message_loop_.task_runner(), | 122 message_loop_.task_runner(), |
| 123 base::WrapUnique(new net::TestURLRequestContext())); | 123 base::MakeUnique<net::TestURLRequestContext>()); |
| 124 } | 124 } |
| 125 | 125 |
| 126 void CreateSignalStrategy(int port) { | 126 void CreateSignalStrategy(int port) { |
| 127 XmppSignalStrategy::XmppServerConfig config; | 127 XmppSignalStrategy::XmppServerConfig config; |
| 128 config.host = "talk.google.com"; | 128 config.host = "talk.google.com"; |
| 129 config.port = port; | 129 config.port = port; |
| 130 config.username = kTestUsername; | 130 config.username = kTestUsername; |
| 131 config.auth_token = kTestAuthToken; | 131 config.auth_token = kTestAuthToken; |
| 132 signal_strategy_.reset(new XmppSignalStrategy( | 132 signal_strategy_.reset(new XmppSignalStrategy( |
| 133 &client_socket_factory_, request_context_getter_, config)); | 133 &client_socket_factory_, request_context_getter_, config)); |
| 134 signal_strategy_->AddListener(this); | 134 signal_strategy_->AddListener(this); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void TearDown() override { | 137 void TearDown() override { |
| 138 signal_strategy_->RemoveListener(this); | 138 signal_strategy_->RemoveListener(this); |
| 139 signal_strategy_.reset(); | 139 signal_strategy_.reset(); |
| 140 base::RunLoop().RunUntilIdle(); | 140 base::RunLoop().RunUntilIdle(); |
| 141 } | 141 } |
| 142 | 142 |
| 143 void OnSignalStrategyStateChange(SignalStrategy::State state) override { | 143 void OnSignalStrategyStateChange(SignalStrategy::State state) override { |
| 144 state_history_.push_back(state); | 144 state_history_.push_back(state); |
| 145 } | 145 } |
| 146 | 146 |
| 147 bool OnSignalStrategyIncomingStanza(const buzz::XmlElement* stanza) override { | 147 bool OnSignalStrategyIncomingStanza(const buzz::XmlElement* stanza) override { |
| 148 received_messages_.push_back( | 148 received_messages_.push_back(base::MakeUnique<buzz::XmlElement>(*stanza)); |
| 149 base::WrapUnique(new buzz::XmlElement(*stanza))); | |
| 150 return true; | 149 return true; |
| 151 } | 150 } |
| 152 | 151 |
| 153 void Connect(bool success); | 152 void Connect(bool success); |
| 154 | 153 |
| 155 protected: | 154 protected: |
| 156 base::MessageLoop message_loop_; | 155 base::MessageLoop message_loop_; |
| 157 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; | 156 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; |
| 158 MockClientSocketFactory client_socket_factory_; | 157 MockClientSocketFactory client_socket_factory_; |
| 159 std::unique_ptr<XmppSocketDataProvider> socket_data_provider_; | 158 std::unique_ptr<XmppSocketDataProvider> socket_data_provider_; |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 "<iq type=\"result\" id=\"1\"/>"); | 265 "<iq type=\"result\" id=\"1\"/>"); |
| 267 | 266 |
| 268 EXPECT_EQ(2U, state_history_.size()); | 267 EXPECT_EQ(2U, state_history_.size()); |
| 269 EXPECT_EQ(SignalStrategy::CONNECTED, state_history_[1]); | 268 EXPECT_EQ(SignalStrategy::CONNECTED, state_history_[1]); |
| 270 } | 269 } |
| 271 | 270 |
| 272 TEST_F(XmppSignalStrategyTest, SendAndReceive) { | 271 TEST_F(XmppSignalStrategyTest, SendAndReceive) { |
| 273 CreateSignalStrategy(kDefaultPort); | 272 CreateSignalStrategy(kDefaultPort); |
| 274 Connect(true); | 273 Connect(true); |
| 275 | 274 |
| 276 EXPECT_TRUE(signal_strategy_->SendStanza(base::WrapUnique( | 275 EXPECT_TRUE(signal_strategy_->SendStanza( |
| 277 new buzz::XmlElement(buzz::QName(std::string(), "hello"))))); | 276 base::MakeUnique<buzz::XmlElement>(buzz::QName(std::string(), "hello")))); |
| 278 EXPECT_EQ("<hello/>", socket_data_provider_->GetAndClearWrittenData()); | 277 EXPECT_EQ("<hello/>", socket_data_provider_->GetAndClearWrittenData()); |
| 279 | 278 |
| 280 socket_data_provider_->ReceiveData("<hi xmlns=\"hello\"/>"); | 279 socket_data_provider_->ReceiveData("<hi xmlns=\"hello\"/>"); |
| 281 EXPECT_EQ(1U, received_messages_.size()); | 280 EXPECT_EQ(1U, received_messages_.size()); |
| 282 EXPECT_EQ("<hi xmlns=\"hello\"/>", received_messages_[0]->Str()); | 281 EXPECT_EQ("<hi xmlns=\"hello\"/>", received_messages_[0]->Str()); |
| 283 } | 282 } |
| 284 | 283 |
| 285 TEST_F(XmppSignalStrategyTest, AuthError) { | 284 TEST_F(XmppSignalStrategyTest, AuthError) { |
| 286 CreateSignalStrategy(kDefaultPort); | 285 CreateSignalStrategy(kDefaultPort); |
| 287 Connect(false); | 286 Connect(false); |
| 288 } | 287 } |
| 289 | 288 |
| 290 TEST_F(XmppSignalStrategyTest, ConnectionClosed) { | 289 TEST_F(XmppSignalStrategyTest, ConnectionClosed) { |
| 291 CreateSignalStrategy(kDefaultPort); | 290 CreateSignalStrategy(kDefaultPort); |
| 292 Connect(true); | 291 Connect(true); |
| 293 | 292 |
| 294 socket_data_provider_->Close(); | 293 socket_data_provider_->Close(); |
| 295 | 294 |
| 296 EXPECT_EQ(3U, state_history_.size()); | 295 EXPECT_EQ(3U, state_history_.size()); |
| 297 EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); | 296 EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); |
| 298 EXPECT_EQ(SignalStrategy::DISCONNECTED, signal_strategy_->GetState()); | 297 EXPECT_EQ(SignalStrategy::DISCONNECTED, signal_strategy_->GetState()); |
| 299 EXPECT_EQ(SignalStrategy::OK, signal_strategy_->GetError()); | 298 EXPECT_EQ(SignalStrategy::OK, signal_strategy_->GetError()); |
| 300 | 299 |
| 301 // Can't send messages anymore. | 300 // Can't send messages anymore. |
| 302 EXPECT_FALSE(signal_strategy_->SendStanza(base::WrapUnique( | 301 EXPECT_FALSE(signal_strategy_->SendStanza( |
| 303 new buzz::XmlElement(buzz::QName(std::string(), "hello"))))); | 302 base::MakeUnique<buzz::XmlElement>(buzz::QName(std::string(), "hello")))); |
| 304 | 303 |
| 305 // Try connecting again. | 304 // Try connecting again. |
| 306 Connect(true); | 305 Connect(true); |
| 307 } | 306 } |
| 308 | 307 |
| 309 TEST_F(XmppSignalStrategyTest, NetworkReadError) { | 308 TEST_F(XmppSignalStrategyTest, NetworkReadError) { |
| 310 CreateSignalStrategy(kDefaultPort); | 309 CreateSignalStrategy(kDefaultPort); |
| 311 Connect(true); | 310 Connect(true); |
| 312 | 311 |
| 313 socket_data_provider_->SimulateAsyncReadError(); | 312 socket_data_provider_->SimulateAsyncReadError(); |
| 314 | 313 |
| 315 EXPECT_EQ(3U, state_history_.size()); | 314 EXPECT_EQ(3U, state_history_.size()); |
| 316 EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); | 315 EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); |
| 317 EXPECT_EQ(SignalStrategy::NETWORK_ERROR, signal_strategy_->GetError()); | 316 EXPECT_EQ(SignalStrategy::NETWORK_ERROR, signal_strategy_->GetError()); |
| 318 | 317 |
| 319 // Can't send messages anymore. | 318 // Can't send messages anymore. |
| 320 EXPECT_FALSE(signal_strategy_->SendStanza(base::WrapUnique( | 319 EXPECT_FALSE(signal_strategy_->SendStanza( |
| 321 new buzz::XmlElement(buzz::QName(std::string(), "hello"))))); | 320 base::MakeUnique<buzz::XmlElement>(buzz::QName(std::string(), "hello")))); |
| 322 | 321 |
| 323 // Try connecting again. | 322 // Try connecting again. |
| 324 Connect(true); | 323 Connect(true); |
| 325 } | 324 } |
| 326 | 325 |
| 327 TEST_F(XmppSignalStrategyTest, NetworkWriteError) { | 326 TEST_F(XmppSignalStrategyTest, NetworkWriteError) { |
| 328 CreateSignalStrategy(kDefaultPort); | 327 CreateSignalStrategy(kDefaultPort); |
| 329 Connect(true); | 328 Connect(true); |
| 330 | 329 |
| 331 socket_data_provider_->set_write_error(net::ERR_FAILED); | 330 socket_data_provider_->set_write_error(net::ERR_FAILED); |
| 332 | 331 |
| 333 // Next SendMessage() will call Write() which will fail. | 332 // Next SendMessage() will call Write() which will fail. |
| 334 EXPECT_FALSE(signal_strategy_->SendStanza(base::WrapUnique( | 333 EXPECT_FALSE(signal_strategy_->SendStanza( |
| 335 new buzz::XmlElement(buzz::QName(std::string(), "hello"))))); | 334 base::MakeUnique<buzz::XmlElement>(buzz::QName(std::string(), "hello")))); |
| 336 | 335 |
| 337 EXPECT_EQ(3U, state_history_.size()); | 336 EXPECT_EQ(3U, state_history_.size()); |
| 338 EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); | 337 EXPECT_EQ(SignalStrategy::DISCONNECTED, state_history_[2]); |
| 339 EXPECT_EQ(SignalStrategy::NETWORK_ERROR, signal_strategy_->GetError()); | 338 EXPECT_EQ(SignalStrategy::NETWORK_ERROR, signal_strategy_->GetError()); |
| 340 | 339 |
| 341 // Try connecting again. | 340 // Try connecting again. |
| 342 Connect(true); | 341 Connect(true); |
| 343 } | 342 } |
| 344 | 343 |
| 345 TEST_F(XmppSignalStrategyTest, StartTlsWithPendingWrite) { | 344 TEST_F(XmppSignalStrategyTest, StartTlsWithPendingWrite) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 374 "<proceed xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>"); | 373 "<proceed xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>"); |
| 375 | 374 |
| 376 // Verify that SSL is connected only after write is finished. | 375 // Verify that SSL is connected only after write is finished. |
| 377 EXPECT_FALSE(client_socket_factory_.ssl_socket_created()); | 376 EXPECT_FALSE(client_socket_factory_.ssl_socket_created()); |
| 378 socket_data_provider_->CompletePendingWrite(); | 377 socket_data_provider_->CompletePendingWrite(); |
| 379 EXPECT_TRUE(client_socket_factory_.ssl_socket_created()); | 378 EXPECT_TRUE(client_socket_factory_.ssl_socket_created()); |
| 380 } | 379 } |
| 381 | 380 |
| 382 | 381 |
| 383 } // namespace remoting | 382 } // namespace remoting |
| OLD | NEW |