Chromium Code Reviews| 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" |
| 11 #include "remoting/host/chromoting_host_context.h" | 11 #include "remoting/host/chromoting_host_context.h" |
| 12 #include "remoting/host/host_mock_objects.h" | 12 #include "remoting/host/host_mock_objects.h" |
| 13 #include "remoting/host/in_memory_host_config.h" | 13 #include "remoting/host/in_memory_host_config.h" |
| 14 #include "remoting/proto/video.pb.h" | 14 #include "remoting/proto/video.pb.h" |
| 15 #include "remoting/protocol/protocol_mock_objects.h" | 15 #include "remoting/protocol/protocol_mock_objects.h" |
| 16 #include "remoting/protocol/session_config.h" | 16 #include "remoting/protocol/session_config.h" |
| 17 #include "testing/gmock_mutant.h" | 17 #include "testing/gmock_mutant.h" |
| 18 #include "testing/gmock/include/gmock/gmock.h" | 18 #include "testing/gmock/include/gmock/gmock.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 | 20 |
| 21 using ::remoting::protocol::LocalLoginCredentials; | |
| 22 using ::remoting::protocol::MockClientStub; | 21 using ::remoting::protocol::MockClientStub; |
| 23 using ::remoting::protocol::MockConnectionToClient; | 22 using ::remoting::protocol::MockConnectionToClient; |
| 24 using ::remoting::protocol::MockConnectionToClientEventHandler; | 23 using ::remoting::protocol::MockConnectionToClientEventHandler; |
| 25 using ::remoting::protocol::MockHostStub; | 24 using ::remoting::protocol::MockHostStub; |
| 26 using ::remoting::protocol::MockSession; | 25 using ::remoting::protocol::MockSession; |
| 27 using ::remoting::protocol::MockVideoStub; | 26 using ::remoting::protocol::MockVideoStub; |
| 28 using ::remoting::protocol::SessionConfig; | 27 using ::remoting::protocol::SessionConfig; |
| 29 | 28 |
| 30 using testing::_; | 29 using testing::_; |
| 31 using testing::AnyNumber; | 30 using testing::AnyNumber; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 95 local_input_monitor_ = new MockLocalInputMonitor(); | 94 local_input_monitor_ = new MockLocalInputMonitor(); |
| 96 desktop_environment_.reset( | 95 desktop_environment_.reset( |
| 97 new DesktopEnvironment(&context_, capturer, event_executor_, curtain_, | 96 new DesktopEnvironment(&context_, capturer, event_executor_, curtain_, |
| 98 disconnect_window_, continue_window_, | 97 disconnect_window_, continue_window_, |
| 99 local_input_monitor_)); | 98 local_input_monitor_)); |
| 100 MockAccessVerifier* access_verifier = new MockAccessVerifier(); | 99 MockAccessVerifier* access_verifier = new MockAccessVerifier(); |
| 101 | 100 |
| 102 host_ = ChromotingHost::Create(&context_, config_, | 101 host_ = ChromotingHost::Create(&context_, config_, |
| 103 desktop_environment_.get(), | 102 desktop_environment_.get(), |
| 104 access_verifier, false); | 103 access_verifier, false); |
| 105 credentials_.set_type(protocol::PASSWORD); | |
| 106 credentials_.set_username("user"); | |
| 107 credentials_.set_credential("password"); | |
| 108 connection_ = new MockConnectionToClient( | 104 connection_ = new MockConnectionToClient( |
| 109 &handler_, &host_stub_, event_executor_); | 105 &handler_, &host_stub_, event_executor_); |
| 110 connection2_ = new MockConnectionToClient( | 106 connection2_ = new MockConnectionToClient( |
| 111 &handler_, &host_stub2_, &event_executor2_); | 107 &handler_, &host_stub2_, &event_executor2_); |
| 112 session_.reset(new MockSession()); | 108 session_.reset(new MockSession()); |
| 113 session2_.reset(new MockSession()); | 109 session2_.reset(new MockSession()); |
| 114 session_config_ = SessionConfig::GetDefault(); | 110 session_config_ = SessionConfig::GetDefault(); |
| 115 session_jid_ = "user@domain/rest-of-jid"; | 111 session_jid_ = "user@domain/rest-of-jid"; |
| 116 session2_jid_ = "user2@domain/rest-of-jid"; | 112 session2_jid_ = "user2@domain/rest-of-jid"; |
| 117 session_config2_ = SessionConfig::GetDefault(); | 113 session_config2_ = SessionConfig::GetDefault(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 .Times(AnyNumber()); | 152 .Times(AnyNumber()); |
| 157 EXPECT_CALL(*session2_.get(), config()) | 153 EXPECT_CALL(*session2_.get(), config()) |
| 158 .Times(AnyNumber()); | 154 .Times(AnyNumber()); |
| 159 } | 155 } |
| 160 | 156 |
| 161 virtual void TearDown() OVERRIDE { | 157 virtual void TearDown() OVERRIDE { |
| 162 message_loop_.RunAllPending(); | 158 message_loop_.RunAllPending(); |
| 163 } | 159 } |
| 164 | 160 |
| 165 // Helper method to pretend a client is connected to ChromotingHost. | 161 // Helper method to pretend a client is connected to ChromotingHost. |
| 166 void SimulateClientConnection(int connection_index, bool authenticate) { | 162 void SimulateClientConnection(int connection_index) { |
| 167 scoped_refptr<MockConnectionToClient> connection = | 163 scoped_refptr<MockConnectionToClient> connection = |
| 168 (connection_index == 0) ? connection_ : connection2_; | 164 (connection_index == 0) ? connection_ : connection2_; |
| 169 | 165 |
| 170 MockUserAuthenticator *user_authenticator = new MockUserAuthenticator; | |
| 171 EXPECT_CALL(*user_authenticator, Authenticate(_, _)) | |
| 172 .WillOnce(Return(authenticate)); | |
| 173 | |
| 174 scoped_refptr<ClientSession> client = new ClientSession( | 166 scoped_refptr<ClientSession> client = new ClientSession( |
| 175 host_.get(), | 167 host_.get(), |
| 176 user_authenticator, | |
| 177 connection, | 168 connection, |
| 178 event_executor_, | 169 event_executor_, |
| 179 desktop_environment_->capturer()); | 170 desktop_environment_->capturer()); |
| 180 connection->set_host_stub(client.get()); | 171 connection->set_host_stub(client.get()); |
| 181 | 172 |
| 182 context_.network_message_loop()->PostTask( | 173 context_.network_message_loop()->PostTask( |
| 183 FROM_HERE, | 174 FROM_HERE, |
| 184 NewRunnableFunction(&ChromotingHostTest::AddClientToHost, | 175 NewRunnableFunction(&ChromotingHostTest::AddClientToHost, |
| 185 host_, client)); | 176 host_, client)); |
| 186 context_.network_message_loop()->PostTask( | 177 context_.network_message_loop()->PostTask( |
| 187 FROM_HERE, | 178 FROM_HERE, |
| 188 NewRunnableMethod(client.get(), | 179 NewRunnableMethod(client.get(), |
| 189 &ClientSession::BeginSessionRequest, | 180 &ClientSession::OnAuthorizationComplete)); |
| 190 &credentials_, | |
| 191 base::Bind(&DummyDoneTask))); | |
| 192 } | 181 } |
| 193 | 182 |
| 194 // Helper method to remove a client connection from ChromotingHost. | 183 // Helper method to remove a client connection from ChromotingHost. |
| 195 void RemoveClientConnection() { | 184 void RemoveClientConnection() { |
| 196 context_.network_message_loop()->PostTask( | 185 context_.network_message_loop()->PostTask( |
| 197 FROM_HERE, | 186 FROM_HERE, |
| 198 NewRunnableMethod(host_.get(), | 187 NewRunnableMethod(host_.get(), |
| 199 &ChromotingHost::OnClientDisconnected, | 188 &ChromotingHost::OnClientDisconnected, |
| 200 connection_)); | 189 connection_)); |
| 201 } | 190 } |
| 202 | 191 |
| 203 static void AddClientToHost(scoped_refptr<ChromotingHost> host, | 192 static void AddClientToHost(scoped_refptr<ChromotingHost> host, |
| 204 scoped_refptr<ClientSession> session) { | 193 scoped_refptr<ClientSession> session) { |
| 205 host->clients_.push_back(session); | 194 host->clients_.push_back(session); |
| 206 } | 195 } |
| 207 | 196 |
| 208 void ShutdownHost() { | 197 void ShutdownHost() { |
| 209 host_->Shutdown( | 198 host_->Shutdown( |
| 210 NewRunnableFunction(&PostQuitTask, &message_loop_)); | 199 NewRunnableFunction(&PostQuitTask, &message_loop_)); |
| 211 } | 200 } |
| 212 | 201 |
| 213 protected: | 202 protected: |
| 214 MessageLoop message_loop_; | 203 MessageLoop message_loop_; |
| 215 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 204 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
| 216 MockConnectionToClientEventHandler handler_; | 205 MockConnectionToClientEventHandler handler_; |
| 217 scoped_ptr<DesktopEnvironment> desktop_environment_; | 206 scoped_ptr<DesktopEnvironment> desktop_environment_; |
| 218 scoped_refptr<ChromotingHost> host_; | 207 scoped_refptr<ChromotingHost> host_; |
| 219 scoped_refptr<InMemoryHostConfig> config_; | 208 scoped_refptr<InMemoryHostConfig> config_; |
| 220 MockChromotingHostContext context_; | 209 MockChromotingHostContext context_; |
| 221 protocol::LocalLoginCredentials credentials_; | |
| 222 scoped_refptr<MockConnectionToClient> connection_; | 210 scoped_refptr<MockConnectionToClient> connection_; |
| 223 std::string session_jid_; | 211 std::string session_jid_; |
| 224 scoped_ptr<MockSession> session_; | 212 scoped_ptr<MockSession> session_; |
| 225 SessionConfig session_config_; | 213 SessionConfig session_config_; |
| 226 MockVideoStub video_stub_; | 214 MockVideoStub video_stub_; |
| 227 MockClientStub client_stub_; | 215 MockClientStub client_stub_; |
| 228 MockHostStub host_stub_; | 216 MockHostStub host_stub_; |
| 229 scoped_refptr<MockConnectionToClient> connection2_; | 217 scoped_refptr<MockConnectionToClient> connection2_; |
| 230 std::string session2_jid_; | 218 std::string session2_jid_; |
| 231 scoped_ptr<MockSession> session2_; | 219 scoped_ptr<MockSession> session2_; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 249 message_loop_.PostTask( | 237 message_loop_.PostTask( |
| 250 FROM_HERE,NewRunnableMethod( | 238 FROM_HERE,NewRunnableMethod( |
| 251 host_.get(), &ChromotingHost::Shutdown, | 239 host_.get(), &ChromotingHost::Shutdown, |
| 252 NewRunnableFunction(&PostQuitTask, &message_loop_))); | 240 NewRunnableFunction(&PostQuitTask, &message_loop_))); |
| 253 message_loop_.Run(); | 241 message_loop_.Run(); |
| 254 } | 242 } |
| 255 | 243 |
| 256 TEST_F(ChromotingHostTest, DISABLED_Connect) { | 244 TEST_F(ChromotingHostTest, DISABLED_Connect) { |
| 257 host_->Start(); | 245 host_->Start(); |
| 258 | 246 |
| 259 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
| 260 .WillOnce(RunDoneTask()); | |
| 261 | |
| 262 // When the video packet is received we first shutdown ChromotingHost | 247 // When the video packet is received we first shutdown ChromotingHost |
| 263 // then execute the done task. | 248 // then execute the done task. |
| 264 { | 249 { |
| 265 InSequence s; | 250 InSequence s; |
| 266 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 251 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
| 267 .Times(1); | 252 .Times(1); |
| 268 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 253 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
| 269 .Times(0); | 254 .Times(0); |
| 270 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 255 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 271 .WillOnce(DoAll( | 256 .WillOnce(DoAll( |
| 272 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 257 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
| 273 RunDoneTask())) | 258 RunDoneTask())) |
| 274 .RetiresOnSaturation(); | 259 .RetiresOnSaturation(); |
| 275 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 260 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 276 .Times(AnyNumber()); | 261 .Times(AnyNumber()); |
| 277 EXPECT_CALL(*connection_.get(), Disconnect()) | 262 EXPECT_CALL(*connection_.get(), Disconnect()) |
| 278 .RetiresOnSaturation(); | 263 .RetiresOnSaturation(); |
| 279 } | 264 } |
| 280 SimulateClientConnection(0, true); | 265 SimulateClientConnection(0); |
| 281 message_loop_.Run(); | 266 message_loop_.Run(); |
| 282 } | 267 } |
| 283 | 268 |
| 284 TEST_F(ChromotingHostTest, DISABLED_Reconnect) { | 269 TEST_F(ChromotingHostTest, DISABLED_Reconnect) { |
| 285 host_->Start(); | 270 host_->Start(); |
| 286 | 271 |
| 287 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
| 288 .Times(2) | |
| 289 .WillRepeatedly(RunDoneTask()); | |
| 290 | |
| 291 // When the video packet is received we first disconnect the mock | 272 // When the video packet is received we first disconnect the mock |
| 292 // connection. | 273 // connection. |
| 293 { | 274 { |
| 294 InSequence s; | 275 InSequence s; |
| 295 // Ensure that curtain mode is activated before the first video packet. | 276 // Ensure that curtain mode is activated before the first video packet. |
| 296 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 277 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
| 297 .Times(1); | 278 .Times(1); |
| 298 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 279 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
| 299 .Times(0); | 280 .Times(0); |
| 300 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 281 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 301 .WillOnce(DoAll( | 282 .WillOnce(DoAll( |
| 302 InvokeWithoutArgs(this, | 283 InvokeWithoutArgs(this, |
| 303 &ChromotingHostTest::RemoveClientConnection), | 284 &ChromotingHostTest::RemoveClientConnection), |
| 304 RunDoneTask())) | 285 RunDoneTask())) |
| 305 .RetiresOnSaturation(); | 286 .RetiresOnSaturation(); |
| 306 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 287 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 307 .Times(AnyNumber()); | 288 .Times(AnyNumber()); |
| 308 EXPECT_CALL(*curtain_, EnableCurtainMode(false)) | 289 EXPECT_CALL(*curtain_, EnableCurtainMode(false)) |
| 309 .Times(1); | 290 .Times(1); |
| 310 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 291 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 311 .Times(AnyNumber()); | 292 .Times(AnyNumber()); |
| 312 } | 293 } |
| 313 | 294 |
| 314 // If Disconnect() is called we can break the main message loop. | 295 // If Disconnect() is called we can break the main message loop. |
| 315 EXPECT_CALL(*connection_.get(), Disconnect()) | 296 EXPECT_CALL(*connection_.get(), Disconnect()) |
| 316 .WillOnce(QuitMainMessageLoop(&message_loop_)) | 297 .WillOnce(QuitMainMessageLoop(&message_loop_)) |
| 317 .RetiresOnSaturation(); | 298 .RetiresOnSaturation(); |
| 318 | 299 |
| 319 SimulateClientConnection(0, true); | 300 SimulateClientConnection(0); |
| 320 message_loop_.Run(); | 301 message_loop_.Run(); |
| 321 | 302 |
| 322 // Connect the client again. | 303 // Connect the client again. |
| 323 { | 304 { |
| 324 InSequence s; | 305 InSequence s; |
| 325 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 306 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
| 326 .Times(1); | 307 .Times(1); |
| 327 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 308 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
| 328 .Times(0); | 309 .Times(0); |
| 329 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 310 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 330 .WillOnce(DoAll( | 311 .WillOnce(DoAll( |
| 331 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 312 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
| 332 RunDoneTask())) | 313 RunDoneTask())) |
| 333 .RetiresOnSaturation(); | 314 .RetiresOnSaturation(); |
| 334 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 315 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 335 .Times(AnyNumber()); | 316 .Times(AnyNumber()); |
| 336 } | 317 } |
| 337 | 318 |
| 338 EXPECT_CALL(*connection_.get(), Disconnect()) | 319 EXPECT_CALL(*connection_.get(), Disconnect()) |
| 339 .RetiresOnSaturation(); | 320 .RetiresOnSaturation(); |
| 340 | 321 |
| 341 SimulateClientConnection(0, true); | 322 SimulateClientConnection(0); |
| 342 message_loop_.Run(); | 323 message_loop_.Run(); |
| 343 } | 324 } |
| 344 | 325 |
| 345 TEST_F(ChromotingHostTest, DISABLED_ConnectTwice) { | 326 TEST_F(ChromotingHostTest, DISABLED_ConnectTwice) { |
| 346 host_->Start(); | 327 host_->Start(); |
| 347 | 328 |
| 348 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
| 349 .Times(1) | |
| 350 .WillRepeatedly(RunDoneTask()); | |
| 351 | |
| 352 EXPECT_CALL(client_stub2_, BeginSessionResponse(_, _)) | |
| 353 .Times(1) | |
| 354 .WillRepeatedly(RunDoneTask()); | |
| 355 | |
| 356 // When a video packet is received we connect the second mock | 329 // When a video packet is received we connect the second mock |
| 357 // connection. | 330 // connection. |
| 358 { | 331 { |
| 359 InSequence s; | 332 InSequence s; |
| 360 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 333 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
| 361 .Times(1) | 334 .Times(1) |
| 362 .WillOnce(QuitMainMessageLoop(&message_loop_)); | 335 .WillOnce(QuitMainMessageLoop(&message_loop_)); |
| 363 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 336 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
| 364 .Times(0); | 337 .Times(0); |
| 365 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 338 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 366 .WillOnce(DoAll( | 339 .WillOnce(DoAll( |
| 367 InvokeWithoutArgs( | 340 InvokeWithoutArgs( |
| 368 CreateFunctor( | 341 CreateFunctor( |
| 369 this, | 342 this, |
| 370 &ChromotingHostTest::SimulateClientConnection, 1, true)), | 343 &ChromotingHostTest::SimulateClientConnection, 1)), |
| 371 RunDoneTask())) | 344 RunDoneTask())) |
| 372 .RetiresOnSaturation(); | 345 .RetiresOnSaturation(); |
| 373 // Check that the second connection does not affect curtain mode. | 346 // Check that the second connection does not affect curtain mode. |
| 374 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | 347 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) |
| 375 .Times(0); | 348 .Times(0); |
| 376 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 349 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
| 377 .Times(0); | 350 .Times(0); |
| 378 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 351 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 379 .Times(AnyNumber()); | 352 .Times(AnyNumber()); |
| 380 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _)) | 353 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _)) |
| 381 .WillOnce(DoAll( | 354 .WillOnce(DoAll( |
| 382 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 355 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
| 383 RunDoneTask())) | 356 RunDoneTask())) |
| 384 .RetiresOnSaturation(); | 357 .RetiresOnSaturation(); |
| 385 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _)) | 358 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _)) |
| 386 .Times(AnyNumber()); | 359 .Times(AnyNumber()); |
| 387 } | 360 } |
| 388 | 361 |
| 389 EXPECT_CALL(*connection_.get(), Disconnect()) | 362 EXPECT_CALL(*connection_.get(), Disconnect()) |
| 390 .RetiresOnSaturation(); | 363 .RetiresOnSaturation(); |
| 391 EXPECT_CALL(*connection2_.get(), Disconnect()) | 364 EXPECT_CALL(*connection2_.get(), Disconnect()) |
| 392 .RetiresOnSaturation(); | 365 .RetiresOnSaturation(); |
| 393 | 366 |
| 394 SimulateClientConnection(0, true); | 367 SimulateClientConnection(0); |
| 395 message_loop_.Run(); | 368 message_loop_.Run(); |
| 396 } | 369 } |
| 397 | 370 |
| 398 TEST_F(ChromotingHostTest, CurtainModeFail) { | |
|
Wez
2011/11/03 00:25:02
Assuming that we retain the idea of curtain mode,
Sergey Ulanov
2011/11/03 01:21:12
Done.
| |
| 399 host_->Start(); | |
| 400 | |
| 401 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
| 402 .WillOnce(RunDoneTask()); | |
| 403 | |
| 404 // Ensure that curtain mode is not activated if a connection does not | |
| 405 // authenticate. | |
| 406 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | |
| 407 .Times(0); | |
| 408 EXPECT_CALL(*disconnect_window_, Show(_, _)) | |
| 409 .Times(0); | |
| 410 EXPECT_CALL(*connection_.get(), Disconnect()) | |
| 411 .WillOnce(QuitMainMessageLoop(&message_loop_)); | |
| 412 SimulateClientConnection(0, false); | |
| 413 RemoveClientConnection(); | |
| 414 message_loop_.Run(); | |
| 415 } | |
| 416 | |
| 417 TEST_F(ChromotingHostTest, CurtainModeFailSecond) { | |
| 418 host_->Start(); | |
| 419 | |
| 420 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
| 421 .WillOnce(RunDoneTask()); | |
| 422 | |
| 423 EXPECT_CALL(client_stub2_, BeginSessionResponse(_, _)) | |
| 424 .WillOnce(RunDoneTask()); | |
| 425 | |
| 426 | |
| 427 // When a video packet is received we connect the second mock | |
| 428 // connection. | |
| 429 { | |
| 430 InSequence s; | |
| 431 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | |
| 432 .WillOnce(QuitMainMessageLoop(&message_loop_)); | |
| 433 EXPECT_CALL(*disconnect_window_, Show(_, _)) | |
| 434 .Times(0); | |
| 435 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | |
| 436 .WillOnce(DoAll( | |
| 437 InvokeWithoutArgs( | |
| 438 CreateFunctor( | |
| 439 this, | |
| 440 &ChromotingHostTest::SimulateClientConnection, 1, false)), | |
| 441 RunDoneTask())) | |
| 442 .RetiresOnSaturation(); | |
| 443 // Check that the second connection does not affect curtain mode. | |
| 444 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | |
| 445 .Times(0); | |
| 446 EXPECT_CALL(*disconnect_window_, Show(_, _)) | |
| 447 .Times(0); | |
| 448 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | |
| 449 .Times(AnyNumber()); | |
| 450 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _)) | |
| 451 .Times(0); | |
| 452 } | |
| 453 | |
| 454 SimulateClientConnection(0, true); | |
| 455 message_loop_.Run(); | |
| 456 } | |
| 457 | |
| 458 ACTION_P(SetBool, var) { *var = true; } | 371 ACTION_P(SetBool, var) { *var = true; } |
| 459 | 372 |
| 460 TEST_F(ChromotingHostTest, CurtainModeIT2Me) { | 373 TEST_F(ChromotingHostTest, CurtainModeIT2Me) { |
| 461 host_->Start(); | 374 host_->Start(); |
| 462 host_->set_it2me(true); | 375 host_->set_it2me(true); |
| 463 | 376 |
| 464 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
| 465 .WillOnce(RunDoneTask()); | |
| 466 | |
| 467 // When the video packet is received we first shutdown ChromotingHost | 377 // When the video packet is received we first shutdown ChromotingHost |
| 468 // then execute the done task. | 378 // then execute the done task. |
| 469 bool curtain_activated = false; | 379 bool curtain_activated = false; |
| 470 { | 380 { |
| 471 Sequence s1, s2; | 381 Sequence s1, s2; |
| 472 // Can't just expect Times(0) because if it fails then the host will | 382 // Can't just expect Times(0) because if it fails then the host will |
| 473 // not be shut down and the message loop will never exit. | 383 // not be shut down and the message loop will never exit. |
| 474 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | 384 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) |
| 475 .Times(AnyNumber()) | 385 .Times(AnyNumber()) |
| 476 .WillRepeatedly(SetBool(&curtain_activated)); | 386 .WillRepeatedly(SetBool(&curtain_activated)); |
| 477 EXPECT_CALL(*disconnect_window_, Show(_, "user@domain")) | 387 EXPECT_CALL(*disconnect_window_, Show(_, "user@domain")) |
| 478 .Times(1) | 388 .Times(1) |
| 479 .InSequence(s1); | 389 .InSequence(s1); |
| 480 EXPECT_CALL(*local_input_monitor_, Start(_)) | 390 EXPECT_CALL(*local_input_monitor_, Start(_)) |
| 481 .Times(1) | 391 .Times(1) |
| 482 .InSequence(s2); | 392 .InSequence(s2); |
| 483 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 393 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 484 .InSequence(s1, s2) | 394 .InSequence(s1, s2) |
| 485 .WillOnce(DoAll( | 395 .WillOnce(DoAll( |
| 486 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 396 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
| 487 RunDoneTask())) | 397 RunDoneTask())) |
| 488 .RetiresOnSaturation(); | 398 .RetiresOnSaturation(); |
| 489 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 399 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
| 490 .Times(AnyNumber()) | 400 .Times(AnyNumber()) |
| 491 .InSequence(s1, s2); | 401 .InSequence(s1, s2); |
| 492 EXPECT_CALL(*connection_.get(), Disconnect()) | 402 EXPECT_CALL(*connection_.get(), Disconnect()) |
| 493 .InSequence(s1, s2) | 403 .InSequence(s1, s2) |
| 494 .RetiresOnSaturation(); | 404 .RetiresOnSaturation(); |
| 405 EXPECT_CALL(*local_input_monitor_, Stop()) | |
| 406 .Times(1) | |
| 407 .InSequence(s1, s2); | |
| 408 EXPECT_CALL(*continue_window_, Hide()) | |
| 409 .Times(1) | |
| 410 .InSequence(s1); | |
| 411 EXPECT_CALL(*disconnect_window_, Hide()) | |
| 412 .Times(1) | |
| 413 .InSequence(s2); | |
|
Wez
2011/11/03 00:25:02
How come these have changed?
Sergey Ulanov
2011/11/03 01:21:12
They haven't changed. I just added them to fix gun
| |
| 495 } | 414 } |
| 496 SimulateClientConnection(0, true); | 415 SimulateClientConnection(0); |
| 497 message_loop_.Run(); | 416 message_loop_.Run(); |
| 498 host_->set_it2me(false); | 417 host_->set_it2me(false); |
| 499 EXPECT_THAT(curtain_activated, false); | 418 EXPECT_THAT(curtain_activated, false); |
| 500 } | 419 } |
| 501 | 420 |
| 502 } // namespace remoting | 421 } // namespace remoting |
| OLD | NEW |