| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/protocol/jingle_session.h" | 5 #include "remoting/protocol/jingle_session.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "base/test/test_timeouts.h" | 10 #include "base/test/test_timeouts.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 // Send 100 messages 1024 bytes each. UDP messages are sent with 10ms delay | 45 // Send 100 messages 1024 bytes each. UDP messages are sent with 10ms delay |
| 46 // between messages (about 1 second for 100 messages). | 46 // between messages (about 1 second for 100 messages). |
| 47 const int kMessageSize = 1024; | 47 const int kMessageSize = 1024; |
| 48 const int kMessages = 100; | 48 const int kMessages = 100; |
| 49 const char kChannelName[] = "test_channel"; | 49 const char kChannelName[] = "test_channel"; |
| 50 | 50 |
| 51 void QuitCurrentThread() { | 51 void QuitCurrentThread() { |
| 52 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 52 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
| 53 } | 53 } |
| 54 | 54 |
| 55 ACTION(QuitThread) { |
| 56 QuitCurrentThread(); |
| 57 } |
| 58 |
| 55 ACTION_P(QuitThreadOnCounter, counter) { | 59 ACTION_P(QuitThreadOnCounter, counter) { |
| 56 --(*counter); | 60 --(*counter); |
| 57 EXPECT_GE(*counter, 0); | 61 EXPECT_GE(*counter, 0); |
| 58 if (*counter == 0) | 62 if (*counter == 0) |
| 59 QuitCurrentThread(); | 63 QuitCurrentThread(); |
| 60 } | 64 } |
| 61 | 65 |
| 62 class MockSessionManagerListener : public SessionManager::Listener { | 66 class MockSessionManagerListener : public SessionManager::Listener { |
| 63 public: | 67 public: |
| 64 MOCK_METHOD0(OnSessionManagerReady, void()); | 68 MOCK_METHOD0(OnSessionManagerReady, void()); |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 | 227 |
| 224 client_session_ = client_server_->Connect( | 228 client_session_ = client_server_->Connect( |
| 225 kHostJid, authenticator.Pass(), | 229 kHostJid, authenticator.Pass(), |
| 226 CandidateSessionConfig::CreateDefault(), | 230 CandidateSessionConfig::CreateDefault(), |
| 227 base::Bind(&MockSessionCallback::OnStateChange, | 231 base::Bind(&MockSessionCallback::OnStateChange, |
| 228 base::Unretained(&client_connection_callback_))); | 232 base::Unretained(&client_connection_callback_))); |
| 229 | 233 |
| 230 message_loop_->RunAllPending(); | 234 message_loop_->RunAllPending(); |
| 231 } | 235 } |
| 232 | 236 |
| 233 void CreateChannel(bool expect_fail) { | 237 void CreateChannel() { |
| 234 client_session_->CreateStreamChannel(kChannelName, base::Bind( | 238 client_session_->CreateStreamChannel(kChannelName, base::Bind( |
| 235 &JingleSessionTest::OnClientChannelCreated, base::Unretained(this))); | 239 &JingleSessionTest::OnClientChannelCreated, base::Unretained(this))); |
| 236 host_session_->CreateStreamChannel(kChannelName, base::Bind( | 240 host_session_->CreateStreamChannel(kChannelName, base::Bind( |
| 237 &JingleSessionTest::OnHostChannelCreated, base::Unretained(this))); | 241 &JingleSessionTest::OnHostChannelCreated, base::Unretained(this))); |
| 238 | 242 |
| 239 int counter = 2; | 243 int counter = 2; |
| 240 EXPECT_CALL(client_channel_callback_, OnDone(_)) | 244 EXPECT_CALL(client_channel_callback_, OnDone(_)) |
| 241 .WillOnce(QuitThreadOnCounter(&counter)); | 245 .WillOnce(QuitThreadOnCounter(&counter)); |
| 242 EXPECT_CALL(host_channel_callback_, OnDone(_)) | 246 EXPECT_CALL(host_channel_callback_, OnDone(_)) |
| 243 .WillOnce(QuitThreadOnCounter(&counter)); | 247 .WillOnce(QuitThreadOnCounter(&counter)); |
| 244 message_loop_->Run(); | 248 message_loop_->Run(); |
| 245 | 249 |
| 246 if (expect_fail) { | 250 EXPECT_TRUE(client_socket_.get()); |
| 247 // At least one socket should fail to connect. | 251 EXPECT_TRUE(host_socket_.get()); |
| 248 EXPECT_TRUE((!client_socket_.get()) || (!host_socket_.get())); | |
| 249 } else { | |
| 250 EXPECT_TRUE(client_socket_.get()); | |
| 251 EXPECT_TRUE(host_socket_.get()); | |
| 252 } | |
| 253 } | 252 } |
| 254 | 253 |
| 255 scoped_ptr<JingleThreadMessageLoop> message_loop_; | 254 scoped_ptr<JingleThreadMessageLoop> message_loop_; |
| 256 | 255 |
| 257 scoped_ptr<FakeSignalStrategy> host_signal_strategy_; | 256 scoped_ptr<FakeSignalStrategy> host_signal_strategy_; |
| 258 scoped_ptr<FakeSignalStrategy> client_signal_strategy_; | 257 scoped_ptr<FakeSignalStrategy> client_signal_strategy_; |
| 259 | 258 |
| 260 scoped_ptr<JingleSessionManager> host_server_; | 259 scoped_ptr<JingleSessionManager> host_server_; |
| 261 MockSessionManagerListener host_server_listener_; | 260 MockSessionManagerListener host_server_listener_; |
| 262 scoped_ptr<JingleSessionManager> client_server_; | 261 scoped_ptr<JingleSessionManager> client_server_; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 CreateSessionManagers(3, FakeAuthenticator::REJECT); | 343 CreateSessionManagers(3, FakeAuthenticator::REJECT); |
| 345 InitiateConnection(3, FakeAuthenticator::ACCEPT, true); | 344 InitiateConnection(3, FakeAuthenticator::ACCEPT, true); |
| 346 } | 345 } |
| 347 | 346 |
| 348 // Verify that data can be sent over stream channel. | 347 // Verify that data can be sent over stream channel. |
| 349 TEST_F(JingleSessionTest, TestStreamChannel) { | 348 TEST_F(JingleSessionTest, TestStreamChannel) { |
| 350 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); | 349 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); |
| 351 ASSERT_NO_FATAL_FAILURE( | 350 ASSERT_NO_FATAL_FAILURE( |
| 352 InitiateConnection(1, FakeAuthenticator::ACCEPT, false)); | 351 InitiateConnection(1, FakeAuthenticator::ACCEPT, false)); |
| 353 | 352 |
| 354 ASSERT_NO_FATAL_FAILURE(CreateChannel(false)); | 353 ASSERT_NO_FATAL_FAILURE(CreateChannel()); |
| 355 | 354 |
| 356 StreamConnectionTester tester(host_socket_.get(), client_socket_.get(), | 355 StreamConnectionTester tester(host_socket_.get(), client_socket_.get(), |
| 357 kMessageSize, kMessages); | 356 kMessageSize, kMessages); |
| 358 tester.Start(); | 357 tester.Start(); |
| 359 message_loop_->Run(); | 358 message_loop_->Run(); |
| 360 tester.CheckResults(); | 359 tester.CheckResults(); |
| 361 } | 360 } |
| 362 | 361 |
| 363 // Verify that we can connect channels with multistep auth. | 362 // Verify that we can connect channels with multistep auth. |
| 364 TEST_F(JingleSessionTest, TestMultistepAuthStreamChannel) { | 363 TEST_F(JingleSessionTest, TestMultistepAuthStreamChannel) { |
| 365 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); | 364 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); |
| 366 ASSERT_NO_FATAL_FAILURE( | 365 ASSERT_NO_FATAL_FAILURE( |
| 367 InitiateConnection(3, FakeAuthenticator::ACCEPT, false)); | 366 InitiateConnection(3, FakeAuthenticator::ACCEPT, false)); |
| 368 | 367 |
| 369 ASSERT_NO_FATAL_FAILURE(CreateChannel(false)); | 368 ASSERT_NO_FATAL_FAILURE(CreateChannel()); |
| 370 | 369 |
| 371 StreamConnectionTester tester(host_socket_.get(), client_socket_.get(), | 370 StreamConnectionTester tester(host_socket_.get(), client_socket_.get(), |
| 372 kMessageSize, kMessages); | 371 kMessageSize, kMessages); |
| 373 tester.Start(); | 372 tester.Start(); |
| 374 message_loop_->Run(); | 373 message_loop_->Run(); |
| 375 tester.CheckResults(); | 374 tester.CheckResults(); |
| 376 } | 375 } |
| 377 | 376 |
| 378 // Verify that we shutdown properly when channel authentication fails. | 377 // Verify that we shutdown properly when channel authentication fails. |
| 379 TEST_F(JingleSessionTest, TestFailedChannelAuth) { | 378 TEST_F(JingleSessionTest, TestFailedChannelAuth) { |
| 380 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); | 379 CreateSessionManagers(1, FakeAuthenticator::REJECT_CHANNEL); |
| 381 ASSERT_NO_FATAL_FAILURE( | 380 ASSERT_NO_FATAL_FAILURE( |
| 382 InitiateConnection(1, FakeAuthenticator::REJECT_CHANNEL, false)); | 381 InitiateConnection(1, FakeAuthenticator::ACCEPT, false)); |
| 383 | 382 |
| 384 ASSERT_NO_FATAL_FAILURE(CreateChannel(true)); | 383 client_session_->CreateStreamChannel(kChannelName, base::Bind( |
| 384 &JingleSessionTest::OnClientChannelCreated, base::Unretained(this))); |
| 385 host_session_->CreateStreamChannel(kChannelName, base::Bind( |
| 386 &JingleSessionTest::OnHostChannelCreated, base::Unretained(this))); |
| 387 |
| 388 // Terminate the message loop when we get rejection notification |
| 389 // from the host. |
| 390 EXPECT_CALL(host_channel_callback_, OnDone(NULL)) |
| 391 .WillOnce(QuitThread()); |
| 392 EXPECT_CALL(client_channel_callback_, OnDone(_)) |
| 393 .Times(AtMost(1)); |
| 394 |
| 395 message_loop_->Run(); |
| 396 |
| 397 EXPECT_TRUE(!host_socket_.get()); |
| 385 } | 398 } |
| 386 | 399 |
| 387 } // namespace protocol | 400 } // namespace protocol |
| 388 } // namespace remoting | 401 } // namespace remoting |
| OLD | NEW |