OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop_proxy.h" | 7 #include "base/message_loop_proxy.h" |
8 #include "base/task.h" | 8 #include "base/task.h" |
9 #include "remoting/host/capturer_fake.h" | 9 #include "remoting/host/capturer_fake.h" |
10 #include "remoting/host/chromoting_host.h" | 10 #include "remoting/host/chromoting_host.h" |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 .Times(AnyNumber()); | 149 .Times(AnyNumber()); |
150 EXPECT_CALL(*connection2_.get(), video_stub()) | 150 EXPECT_CALL(*connection2_.get(), video_stub()) |
151 .Times(AnyNumber()); | 151 .Times(AnyNumber()); |
152 EXPECT_CALL(*connection2_.get(), client_stub()) | 152 EXPECT_CALL(*connection2_.get(), client_stub()) |
153 .Times(AnyNumber()); | 153 .Times(AnyNumber()); |
154 EXPECT_CALL(*connection2_.get(), session()) | 154 EXPECT_CALL(*connection2_.get(), session()) |
155 .Times(AnyNumber()); | 155 .Times(AnyNumber()); |
156 } | 156 } |
157 | 157 |
158 virtual void TearDown() OVERRIDE { | 158 virtual void TearDown() OVERRIDE { |
| 159 connection_ = NULL; |
| 160 client_ = NULL; |
| 161 connection2_ = NULL; |
| 162 client2_ = NULL; |
| 163 host_ = NULL; |
159 message_loop_.RunAllPending(); | 164 message_loop_.RunAllPending(); |
160 } | 165 } |
161 | 166 |
162 // Helper method to pretend a client is connected to ChromotingHost. | 167 // Helper method to pretend a client is connected to ChromotingHost. |
163 void SimulateClientConnection(int connection_index, bool authenticate) { | 168 void SimulateClientConnection(int connection_index, bool authenticate) { |
164 scoped_refptr<protocol::ConnectionToClient> connection = | 169 scoped_refptr<protocol::ConnectionToClient> connection = |
165 (connection_index == 0) ? connection_ : connection2_; | 170 (connection_index == 0) ? connection_ : connection2_; |
166 scoped_refptr<ClientSession> client = new ClientSession( | 171 scoped_refptr<ClientSession> client = new ClientSession( |
167 host_.get(), | 172 host_.get(), |
168 connection, | 173 connection, |
(...skipping 12 matching lines...) Expand all Loading... |
181 | 186 |
182 if (connection_index == 0) { | 187 if (connection_index == 0) { |
183 client_ = client; | 188 client_ = client; |
184 } else { | 189 } else { |
185 client2_ = client; | 190 client2_ = client; |
186 } | 191 } |
187 } | 192 } |
188 | 193 |
189 // Helper method to remove a client connection from ChromotingHost. | 194 // Helper method to remove a client connection from ChromotingHost. |
190 void RemoveClientSession() { | 195 void RemoveClientSession() { |
191 context_.network_message_loop()->PostTask( | 196 client_->OnConnectionClosed(connection_); |
192 FROM_HERE, base::Bind( | |
193 &ClientSession::OnConnectionClosed, client_, connection_)); | |
194 } | 197 } |
195 | 198 |
196 static void AddClientToHost(scoped_refptr<ChromotingHost> host, | 199 static void AddClientToHost(scoped_refptr<ChromotingHost> host, |
197 scoped_refptr<ClientSession> session) { | 200 scoped_refptr<ClientSession> session) { |
198 host->clients_.push_back(session); | 201 host->clients_.push_back(session); |
199 } | 202 } |
200 | 203 |
201 void ShutdownHost() { | 204 void ShutdownHost() { |
202 host_->Shutdown(base::Bind(&PostQuitTask, &message_loop_)); | 205 message_loop_.PostTask( |
| 206 FROM_HERE, base::Bind(&ChromotingHost::Shutdown, host_, |
| 207 base::Bind(&PostQuitTask, &message_loop_))); |
203 } | 208 } |
204 | 209 |
205 protected: | 210 protected: |
206 MessageLoop message_loop_; | 211 MessageLoop message_loop_; |
207 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 212 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
208 MockConnectionToClientEventHandler handler_; | 213 MockConnectionToClientEventHandler handler_; |
209 scoped_ptr<DesktopEnvironment> desktop_environment_; | 214 scoped_ptr<DesktopEnvironment> desktop_environment_; |
210 scoped_refptr<ChromotingHost> host_; | 215 scoped_refptr<ChromotingHost> host_; |
211 scoped_refptr<InMemoryHostConfig> config_; | 216 scoped_refptr<InMemoryHostConfig> config_; |
212 MockChromotingHostContext context_; | 217 MockChromotingHostContext context_; |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 | 379 |
375 TEST_F(ChromotingHostTest, CurtainModeFail) { | 380 TEST_F(ChromotingHostTest, CurtainModeFail) { |
376 host_->Start(); | 381 host_->Start(); |
377 | 382 |
378 // Ensure that curtain mode is not activated if a connection does not | 383 // Ensure that curtain mode is not activated if a connection does not |
379 // authenticate. | 384 // authenticate. |
380 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | 385 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) |
381 .Times(0); | 386 .Times(0); |
382 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 387 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
383 .Times(0); | 388 .Times(0); |
384 EXPECT_CALL(*connection_.get(), Disconnect()) | 389 EXPECT_CALL(*continue_window_, Hide()) |
385 .WillOnce(QuitMainMessageLoop(&message_loop_)); | 390 .Times(AnyNumber()); |
| 391 EXPECT_CALL(*disconnect_window_, Hide()) |
| 392 .Times(AnyNumber()); |
386 SimulateClientConnection(0, false); | 393 SimulateClientConnection(0, false); |
387 RemoveClientSession(); | 394 context_.network_message_loop()->PostTask( |
| 395 FROM_HERE, base::Bind(&ChromotingHostTest::RemoveClientSession, |
| 396 base::Unretained(this))); |
| 397 PostQuitTask(&message_loop_); |
388 message_loop_.Run(); | 398 message_loop_.Run(); |
389 } | 399 } |
390 | 400 |
391 TEST_F(ChromotingHostTest, CurtainModeFailSecond) { | 401 TEST_F(ChromotingHostTest, CurtainModeFailSecond) { |
392 host_->Start(); | 402 host_->Start(); |
393 | 403 |
394 // When a video packet is received we connect the second mock | 404 // When a video packet is received we connect the second mock |
395 // connection. | 405 // connection. |
396 { | 406 { |
397 InSequence s; | 407 InSequence s; |
398 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 408 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
399 .WillOnce(QuitMainMessageLoop(&message_loop_)); | 409 .WillOnce(QuitMainMessageLoop(&message_loop_)); |
400 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 410 EXPECT_CALL(*local_input_monitor_, Start(_)) |
401 .Times(0); | 411 .Times(1); |
| 412 EXPECT_CALL(*disconnect_window_, Show(_, "user@domain")) |
| 413 .Times(1); |
402 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 414 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
403 .WillOnce(DoAll( | 415 .WillOnce(DoAll( |
404 InvokeWithoutArgs( | 416 InvokeWithoutArgs( |
405 CreateFunctor( | 417 CreateFunctor( |
406 this, | 418 this, |
407 &ChromotingHostTest::SimulateClientConnection, 1, false)), | 419 &ChromotingHostTest::SimulateClientConnection, 1, false)), |
408 RunDoneTask())) | 420 RunDoneTask())) |
409 .RetiresOnSaturation(); | 421 .RetiresOnSaturation(); |
410 // Check that the second connection does not affect curtain mode. | 422 // Check that the second connection does not affect curtain mode. |
411 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | 423 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 .Times(1) | 457 .Times(1) |
446 .InSequence(s2); | 458 .InSequence(s2); |
447 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 459 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
448 .InSequence(s1, s2) | 460 .InSequence(s1, s2) |
449 .WillOnce(DoAll( | 461 .WillOnce(DoAll( |
450 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 462 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
451 RunDoneTask())) | 463 RunDoneTask())) |
452 .RetiresOnSaturation(); | 464 .RetiresOnSaturation(); |
453 EXPECT_CALL(*connection_.get(), Disconnect()) | 465 EXPECT_CALL(*connection_.get(), Disconnect()) |
454 .InSequence(s1, s2) | 466 .InSequence(s1, s2) |
| 467 .WillOnce(InvokeWithoutArgs( |
| 468 this, &ChromotingHostTest::RemoveClientSession)) |
455 .RetiresOnSaturation(); | 469 .RetiresOnSaturation(); |
456 EXPECT_CALL(*local_input_monitor_, Stop()) | 470 EXPECT_CALL(*local_input_monitor_, Stop()) |
457 .Times(1) | 471 .Times(1) |
458 .InSequence(s1, s2); | 472 .InSequence(s1, s2); |
459 EXPECT_CALL(*continue_window_, Hide()) | 473 EXPECT_CALL(*continue_window_, Hide()) |
460 .Times(1) | 474 .Times(1) |
461 .InSequence(s1); | 475 .InSequence(s1); |
462 EXPECT_CALL(*disconnect_window_, Hide()) | 476 EXPECT_CALL(*disconnect_window_, Hide()) |
463 .Times(1) | 477 .Times(1) |
464 .InSequence(s2); | 478 .InSequence(s2); |
465 } | 479 } |
466 SimulateClientConnection(0, true); | 480 SimulateClientConnection(0, true); |
467 message_loop_.Run(); | 481 message_loop_.Run(); |
468 host_->set_it2me(false); | 482 host_->set_it2me(false); |
469 EXPECT_THAT(curtain_activated, false); | 483 EXPECT_THAT(curtain_activated, false); |
470 } | 484 } |
471 | 485 |
472 } // namespace remoting | 486 } // namespace remoting |
OLD | NEW |