| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/cast_channel/cast_socket.h" | 5 #include "extensions/browser/api/cast_channel/cast_socket.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 TCPClientSocket(net::AddressList(), NULL, net::NetLog::Source()), | 90 TCPClientSocket(net::AddressList(), NULL, net::NetLog::Source()), |
| 91 connect_data_(connect_data), | 91 connect_data_(connect_data), |
| 92 do_nothing_(false) { } | 92 do_nothing_(false) { } |
| 93 | 93 |
| 94 explicit MockTCPSocket(bool do_nothing) : | 94 explicit MockTCPSocket(bool do_nothing) : |
| 95 TCPClientSocket(net::AddressList(), NULL, net::NetLog::Source()) { | 95 TCPClientSocket(net::AddressList(), NULL, net::NetLog::Source()) { |
| 96 CHECK(do_nothing); | 96 CHECK(do_nothing); |
| 97 do_nothing_ = do_nothing; | 97 do_nothing_ = do_nothing; |
| 98 } | 98 } |
| 99 | 99 |
| 100 virtual int Connect(const net::CompletionCallback& callback) OVERRIDE { | 100 virtual int Connect(const net::CompletionCallback& callback) override { |
| 101 if (do_nothing_) { | 101 if (do_nothing_) { |
| 102 // Stall the I/O event loop. | 102 // Stall the I/O event loop. |
| 103 return net::ERR_IO_PENDING; | 103 return net::ERR_IO_PENDING; |
| 104 } | 104 } |
| 105 | 105 |
| 106 if (connect_data_.mode == net::ASYNC) { | 106 if (connect_data_.mode == net::ASYNC) { |
| 107 CHECK_NE(connect_data_.result, net::ERR_IO_PENDING); | 107 CHECK_NE(connect_data_.result, net::ERR_IO_PENDING); |
| 108 base::MessageLoop::current()->PostTask( | 108 base::MessageLoop::current()->PostTask( |
| 109 FROM_HERE, | 109 FROM_HERE, |
| 110 base::Bind(callback, connect_data_.result)); | 110 base::Bind(callback, connect_data_.result)); |
| 111 return net::ERR_IO_PENDING; | 111 return net::ERR_IO_PENDING; |
| 112 } else { | 112 } else { |
| 113 return connect_data_.result; | 113 return connect_data_.result; |
| 114 } | 114 } |
| 115 } | 115 } |
| 116 | 116 |
| 117 virtual bool SetKeepAlive(bool enable, int delay) OVERRIDE { | 117 virtual bool SetKeepAlive(bool enable, int delay) override { |
| 118 // Always return true in tests | 118 // Always return true in tests |
| 119 return true; | 119 return true; |
| 120 } | 120 } |
| 121 | 121 |
| 122 virtual bool SetNoDelay(bool no_delay) OVERRIDE { | 122 virtual bool SetNoDelay(bool no_delay) override { |
| 123 // Always return true in tests | 123 // Always return true in tests |
| 124 return true; | 124 return true; |
| 125 } | 125 } |
| 126 | 126 |
| 127 MOCK_METHOD3(Read, | 127 MOCK_METHOD3(Read, |
| 128 int(net::IOBuffer*, int, const net::CompletionCallback&)); | 128 int(net::IOBuffer*, int, const net::CompletionCallback&)); |
| 129 MOCK_METHOD3(Write, | 129 MOCK_METHOD3(Write, |
| 130 int(net::IOBuffer*, int, const net::CompletionCallback&)); | 130 int(net::IOBuffer*, int, const net::CompletionCallback&)); |
| 131 | 131 |
| 132 virtual void Disconnect() OVERRIDE { | 132 virtual void Disconnect() override { |
| 133 // Do nothing in tests | 133 // Do nothing in tests |
| 134 } | 134 } |
| 135 | 135 |
| 136 private: | 136 private: |
| 137 net::MockConnect connect_data_; | 137 net::MockConnect connect_data_; |
| 138 bool do_nothing_; | 138 bool do_nothing_; |
| 139 }; | 139 }; |
| 140 | 140 |
| 141 class CompleteHandler { | 141 class CompleteHandler { |
| 142 public: | 142 public: |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 verify_challenge_result_ = value; | 277 verify_challenge_result_ = value; |
| 278 } | 278 } |
| 279 | 279 |
| 280 void TriggerTimeout() { | 280 void TriggerTimeout() { |
| 281 mock_timer_->Fire(); | 281 mock_timer_->Fire(); |
| 282 } | 282 } |
| 283 | 283 |
| 284 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; } | 284 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; } |
| 285 | 285 |
| 286 private: | 286 private: |
| 287 virtual scoped_ptr<net::TCPClientSocket> CreateTcpSocket() OVERRIDE { | 287 virtual scoped_ptr<net::TCPClientSocket> CreateTcpSocket() override { |
| 288 if (tcp_unresponsive_) { | 288 if (tcp_unresponsive_) { |
| 289 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); | 289 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); |
| 290 } else { | 290 } else { |
| 291 net::MockConnect* connect_data = tcp_connect_data_[connect_index_].get(); | 291 net::MockConnect* connect_data = tcp_connect_data_[connect_index_].get(); |
| 292 connect_data->peer_addr = ip_; | 292 connect_data->peer_addr = ip_; |
| 293 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(*connect_data)); | 293 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(*connect_data)); |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 virtual scoped_ptr<net::SSLClientSocket> CreateSslSocket( | 297 virtual scoped_ptr<net::SSLClientSocket> CreateSslSocket( |
| 298 scoped_ptr<net::StreamSocket> socket) OVERRIDE { | 298 scoped_ptr<net::StreamSocket> socket) override { |
| 299 net::MockConnect* connect_data = ssl_connect_data_[connect_index_].get(); | 299 net::MockConnect* connect_data = ssl_connect_data_[connect_index_].get(); |
| 300 connect_data->peer_addr = ip_; | 300 connect_data->peer_addr = ip_; |
| 301 ++connect_index_; | 301 ++connect_index_; |
| 302 | 302 |
| 303 ssl_data_.reset(new net::StaticSocketDataProvider( | 303 ssl_data_.reset(new net::StaticSocketDataProvider( |
| 304 reads_.data(), reads_.size(), writes_.data(), writes_.size())); | 304 reads_.data(), reads_.size(), writes_.data(), writes_.size())); |
| 305 ssl_data_->set_connect_data(*connect_data); | 305 ssl_data_->set_connect_data(*connect_data); |
| 306 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! | 306 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! |
| 307 return scoped_ptr<net::SSLClientSocket>( | 307 return scoped_ptr<net::SSLClientSocket>( |
| 308 new net::MockTCPClientSocket( | 308 new net::MockTCPClientSocket( |
| 309 net::AddressList(), &capturing_net_log_, ssl_data_.get())); | 309 net::AddressList(), &capturing_net_log_, ssl_data_.get())); |
| 310 } | 310 } |
| 311 | 311 |
| 312 virtual bool ExtractPeerCert(std::string* cert) OVERRIDE { | 312 virtual bool ExtractPeerCert(std::string* cert) override { |
| 313 if (extract_cert_result_) | 313 if (extract_cert_result_) |
| 314 cert->assign("dummy_test_cert"); | 314 cert->assign("dummy_test_cert"); |
| 315 return extract_cert_result_; | 315 return extract_cert_result_; |
| 316 } | 316 } |
| 317 | 317 |
| 318 virtual bool VerifyChallengeReply() OVERRIDE { | 318 virtual bool VerifyChallengeReply() override { |
| 319 EXPECT_FALSE(verify_challenge_disallow_); | 319 EXPECT_FALSE(verify_challenge_disallow_); |
| 320 return verify_challenge_result_; | 320 return verify_challenge_result_; |
| 321 } | 321 } |
| 322 | 322 |
| 323 virtual base::Timer* GetTimer() OVERRIDE { | 323 virtual base::Timer* GetTimer() override { |
| 324 return mock_timer_.get(); | 324 return mock_timer_.get(); |
| 325 } | 325 } |
| 326 | 326 |
| 327 net::CapturingNetLog capturing_net_log_; | 327 net::CapturingNetLog capturing_net_log_; |
| 328 net::IPEndPoint ip_; | 328 net::IPEndPoint ip_; |
| 329 // Simulated connect data | 329 // Simulated connect data |
| 330 scoped_ptr<net::MockConnect> tcp_connect_data_[2]; | 330 scoped_ptr<net::MockConnect> tcp_connect_data_[2]; |
| 331 scoped_ptr<net::MockConnect> ssl_connect_data_[2]; | 331 scoped_ptr<net::MockConnect> ssl_connect_data_[2]; |
| 332 // Simulated read / write data | 332 // Simulated read / write data |
| 333 std::vector<net::MockWrite> writes_; | 333 std::vector<net::MockWrite> writes_; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 346 }; | 346 }; |
| 347 | 347 |
| 348 class CastSocketTest : public testing::Test { | 348 class CastSocketTest : public testing::Test { |
| 349 public: | 349 public: |
| 350 CastSocketTest() | 350 CastSocketTest() |
| 351 : logger_(new Logger( | 351 : logger_(new Logger( |
| 352 scoped_ptr<base::TickClock>(new base::SimpleTestTickClock), | 352 scoped_ptr<base::TickClock>(new base::SimpleTestTickClock), |
| 353 base::TimeTicks())) {} | 353 base::TimeTicks())) {} |
| 354 virtual ~CastSocketTest() {} | 354 virtual ~CastSocketTest() {} |
| 355 | 355 |
| 356 virtual void SetUp() OVERRIDE { | 356 virtual void SetUp() override { |
| 357 // Create a few test messages | 357 // Create a few test messages |
| 358 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 358 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 359 CreateStringMessage("urn:cast", "1", "2", kTestData[i], | 359 CreateStringMessage("urn:cast", "1", "2", kTestData[i], |
| 360 &test_messages_[i]); | 360 &test_messages_[i]); |
| 361 ASSERT_TRUE(MessageInfoToCastMessage( | 361 ASSERT_TRUE(MessageInfoToCastMessage( |
| 362 test_messages_[i], &test_protos_[i])); | 362 test_messages_[i], &test_protos_[i])); |
| 363 ASSERT_TRUE( | 363 ASSERT_TRUE( |
| 364 MessageFramer::Serialize(test_protos_[i], &test_proto_strs_[i])); | 364 MessageFramer::Serialize(test_protos_[i], &test_proto_strs_[i])); |
| 365 } | 365 } |
| 366 } | 366 } |
| 367 | 367 |
| 368 virtual void TearDown() OVERRIDE { | 368 virtual void TearDown() override { |
| 369 if (socket_.get()) { | 369 if (socket_.get()) { |
| 370 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); | 370 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); |
| 371 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, | 371 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, |
| 372 base::Unretained(&handler_))); | 372 base::Unretained(&handler_))); |
| 373 } | 373 } |
| 374 } | 374 } |
| 375 | 375 |
| 376 // The caller can specify non-standard namespaces by setting "auth_namespace" | 376 // The caller can specify non-standard namespaces by setting "auth_namespace" |
| 377 // (useful for negative test cases.) | 377 // (useful for negative test cases.) |
| 378 void SetupAuthMessage( | 378 void SetupAuthMessage( |
| (...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1203 A<const LastErrors&>())); | 1203 A<const LastErrors&>())); |
| 1204 ConnectHelper(); | 1204 ConnectHelper(); |
| 1205 | 1205 |
| 1206 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1206 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1207 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1207 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1208 socket_->error_state()); | 1208 socket_->error_state()); |
| 1209 } | 1209 } |
| 1210 } // namespace cast_channel | 1210 } // namespace cast_channel |
| 1211 } // namespace core_api | 1211 } // namespace core_api |
| 1212 } // namespace extensions | 1212 } // namespace extensions |
| OLD | NEW |