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/host/chromoting_host.h" | 5 #include "remoting/host/chromoting_host.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 protocol::ConnectionToClient* connection_ptr = connection.get(); | 129 protocol::ConnectionToClient* connection_ptr = connection.get(); |
130 std::unique_ptr<ClientSession> client(new ClientSession( | 130 std::unique_ptr<ClientSession> client(new ClientSession( |
131 host_.get(), std::move(connection), desktop_environment_factory_.get(), | 131 host_.get(), std::move(connection), desktop_environment_factory_.get(), |
132 base::TimeDelta(), nullptr, std::vector<HostExtension*>())); | 132 base::TimeDelta(), nullptr, std::vector<HostExtension*>())); |
133 ClientSession* client_ptr = client.get(); | 133 ClientSession* client_ptr = client.get(); |
134 | 134 |
135 connection_ptr->set_host_stub(client.get()); | 135 connection_ptr->set_host_stub(client.get()); |
136 get_client(connection_index) = client_ptr; | 136 get_client(connection_index) = client_ptr; |
137 | 137 |
138 // |host| is responsible for deleting |client| from now on. | 138 // |host| is responsible for deleting |client| from now on. |
139 host_->clients_.push_back(client.release()); | 139 host_->clients_.push_back(std::move(client)); |
140 | 140 |
141 if (authenticate) { | 141 if (authenticate) { |
142 client_ptr->OnConnectionAuthenticated(); | 142 client_ptr->OnConnectionAuthenticated(); |
143 if (!reject) | 143 if (!reject) |
144 client_ptr->OnConnectionChannelsConnected(); | 144 client_ptr->OnConnectionChannelsConnected(); |
145 } else { | 145 } else { |
146 client_ptr->OnConnectionClosed(protocol::AUTHENTICATION_FAILED); | 146 client_ptr->OnConnectionClosed(protocol::AUTHENTICATION_FAILED); |
147 } | 147 } |
148 } | 148 } |
149 | 149 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 | 237 |
238 protocol::FakeConnectionToClient*& get_connection(int connection_index) { | 238 protocol::FakeConnectionToClient*& get_connection(int connection_index) { |
239 return (connection_index == 0) ? connection1_ : connection2_; | 239 return (connection_index == 0) ? connection1_ : connection2_; |
240 } | 240 } |
241 | 241 |
242 // Returns the cached client pointers client1_ or client2_. | 242 // Returns the cached client pointers client1_ or client2_. |
243 ClientSession*& get_client(int connection_index) { | 243 ClientSession*& get_client(int connection_index) { |
244 return (connection_index == 0) ? client1_ : client2_; | 244 return (connection_index == 0) ? client1_ : client2_; |
245 } | 245 } |
246 | 246 |
247 // Returns the list of clients of the host_. | |
248 std::list<ClientSession*>& get_clients_from_host() { | |
249 return host_->clients_; | |
250 } | |
251 | |
252 const std::string& get_session_jid(int connection_index) { | 247 const std::string& get_session_jid(int connection_index) { |
253 return (connection_index == 0) ? session_jid1_ : session_jid2_; | 248 return (connection_index == 0) ? session_jid1_ : session_jid2_; |
254 } | 249 } |
255 }; | 250 }; |
256 | 251 |
257 TEST_F(ChromotingHostTest, StartAndShutdown) { | 252 TEST_F(ChromotingHostTest, StartAndShutdown) { |
258 StartHost(); | 253 StartHost(); |
259 } | 254 } |
260 | 255 |
261 TEST_F(ChromotingHostTest, Connect) { | 256 TEST_F(ChromotingHostTest, Connect) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 StartHost(); | 326 StartHost(); |
332 | 327 |
333 protocol::SessionManager::IncomingSessionResponse response = | 328 protocol::SessionManager::IncomingSessionResponse response = |
334 protocol::SessionManager::DECLINE; | 329 protocol::SessionManager::DECLINE; |
335 | 330 |
336 EXPECT_CALL(*session_unowned1_, Close(_)).WillOnce( | 331 EXPECT_CALL(*session_unowned1_, Close(_)).WillOnce( |
337 InvokeWithoutArgs(this, &ChromotingHostTest::NotifyConnectionClosed1)); | 332 InvokeWithoutArgs(this, &ChromotingHostTest::NotifyConnectionClosed1)); |
338 host_->OnIncomingSession(session_unowned1_.release(), &response); | 333 host_->OnIncomingSession(session_unowned1_.release(), &response); |
339 EXPECT_EQ(protocol::SessionManager::ACCEPT, response); | 334 EXPECT_EQ(protocol::SessionManager::ACCEPT, response); |
340 | 335 |
341 host_->OnSessionAuthenticating(get_clients_from_host().front()); | 336 host_->OnSessionAuthenticating( |
| 337 host_->client_sessions_for_tests().front().get()); |
342 host_->OnIncomingSession(session_unowned2_.get(), &response); | 338 host_->OnIncomingSession(session_unowned2_.get(), &response); |
343 EXPECT_EQ(protocol::SessionManager::OVERLOAD, response); | 339 EXPECT_EQ(protocol::SessionManager::OVERLOAD, response); |
344 } | 340 } |
345 | 341 |
346 TEST_F(ChromotingHostTest, LoginBackOffUponAuthenticating) { | 342 TEST_F(ChromotingHostTest, LoginBackOffUponAuthenticating) { |
347 StartHost(); | 343 StartHost(); |
348 | 344 |
349 EXPECT_CALL(*session_unowned1_, Close(_)).WillOnce( | 345 EXPECT_CALL(*session_unowned1_, Close(_)).WillOnce( |
350 InvokeWithoutArgs(this, &ChromotingHostTest::NotifyConnectionClosed1)); | 346 InvokeWithoutArgs(this, &ChromotingHostTest::NotifyConnectionClosed1)); |
351 | 347 |
352 EXPECT_CALL(*session_unowned2_, Close(_)).WillOnce( | 348 EXPECT_CALL(*session_unowned2_, Close(_)).WillOnce( |
353 InvokeWithoutArgs(this, &ChromotingHostTest::NotifyConnectionClosed2)); | 349 InvokeWithoutArgs(this, &ChromotingHostTest::NotifyConnectionClosed2)); |
354 | 350 |
355 protocol::SessionManager::IncomingSessionResponse response = | 351 protocol::SessionManager::IncomingSessionResponse response = |
356 protocol::SessionManager::DECLINE; | 352 protocol::SessionManager::DECLINE; |
357 | 353 |
358 host_->OnIncomingSession(session_unowned1_.release(), &response); | 354 host_->OnIncomingSession(session_unowned1_.release(), &response); |
359 EXPECT_EQ(protocol::SessionManager::ACCEPT, response); | 355 EXPECT_EQ(protocol::SessionManager::ACCEPT, response); |
360 | 356 |
361 host_->OnIncomingSession(session_unowned2_.release(), &response); | 357 host_->OnIncomingSession(session_unowned2_.release(), &response); |
362 EXPECT_EQ(protocol::SessionManager::ACCEPT, response); | 358 EXPECT_EQ(protocol::SessionManager::ACCEPT, response); |
363 | 359 |
364 // This will set the backoff. | 360 // This will set the backoff. |
365 host_->OnSessionAuthenticating(get_clients_from_host().front()); | 361 host_->OnSessionAuthenticating( |
| 362 host_->client_sessions_for_tests().front().get()); |
366 | 363 |
367 // This should disconnect client2. | 364 // This should disconnect client2. |
368 host_->OnSessionAuthenticating(get_clients_from_host().back()); | 365 host_->OnSessionAuthenticating( |
| 366 host_->client_sessions_for_tests().back().get()); |
369 | 367 |
370 // Verify that the host only has 1 client at this point. | 368 // Verify that the host only has 1 client at this point. |
371 EXPECT_EQ(get_clients_from_host().size(), 1U); | 369 EXPECT_EQ(host_->client_sessions_for_tests().size(), 1U); |
372 } | 370 } |
373 | 371 |
374 TEST_F(ChromotingHostTest, OnSessionRouteChange) { | 372 TEST_F(ChromotingHostTest, OnSessionRouteChange) { |
375 StartHost(); | 373 StartHost(); |
376 | 374 |
377 | 375 |
378 ExpectClientConnected(0); | 376 ExpectClientConnected(0); |
379 SimulateClientConnection(0, true, false); | 377 SimulateClientConnection(0, true, false); |
380 | 378 |
381 std::string channel_name("ChannelName"); | 379 std::string channel_name("ChannelName"); |
382 protocol::TransportRoute route; | 380 protocol::TransportRoute route; |
383 EXPECT_CALL(host_status_observer_, | 381 EXPECT_CALL(host_status_observer_, |
384 OnClientRouteChange(session_jid1_, channel_name, _)); | 382 OnClientRouteChange(session_jid1_, channel_name, _)); |
385 host_->OnSessionRouteChange(get_client(0), channel_name, route); | 383 host_->OnSessionRouteChange(get_client(0), channel_name, route); |
386 } | 384 } |
387 | 385 |
388 TEST_F(ChromotingHostTest, DisconnectAllClients) { | 386 TEST_F(ChromotingHostTest, DisconnectAllClients) { |
389 StartHost(); | 387 StartHost(); |
390 | 388 |
391 ExpectClientConnected(0); | 389 ExpectClientConnected(0); |
392 SimulateClientConnection(0, true, false); | 390 SimulateClientConnection(0, true, false); |
393 | 391 |
394 ExpectClientDisconnected(0); | 392 ExpectClientDisconnected(0); |
395 DisconnectAllClients(); | 393 DisconnectAllClients(); |
396 testing::Mock::VerifyAndClearExpectations(&host_status_observer_); | 394 testing::Mock::VerifyAndClearExpectations(&host_status_observer_); |
397 } | 395 } |
398 | 396 |
399 } // namespace remoting | 397 } // namespace remoting |
OLD | NEW |