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 |