Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Side by Side Diff: remoting/protocol/jingle_session_unittest.cc

Issue 2808283002: Improve tests for Mixed-Case JIDs. (Closed)
Patch Set: . Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 using testing::Return; 45 using testing::Return;
46 using testing::SaveArg; 46 using testing::SaveArg;
47 using testing::SetArgumentPointee; 47 using testing::SetArgumentPointee;
48 using testing::WithArg; 48 using testing::WithArg;
49 49
50 namespace remoting { 50 namespace remoting {
51 namespace protocol { 51 namespace protocol {
52 52
53 namespace { 53 namespace {
54 54
55 const char kHostJid[] = "host@gmail.com/123"; 55 const char kHostJid[] = "Host@gmail.com/123";
56 const char kClientJid[] = "client@gmail.com/321"; 56 const char kClientJid[] = "Client@gmail.com/321";
57
58 // kHostJid the way it would be store din the directory.
joedow 2017/04/11 16:20:34 s/store din/stored in
Sergey Ulanov 2017/04/11 21:14:20 Done.
59 const char kNormalizedHostJid[] = "host@gmail.com/123";
57 60
58 class MockSessionManagerListener { 61 class MockSessionManagerListener {
59 public: 62 public:
60 MOCK_METHOD2(OnIncomingSession, 63 MOCK_METHOD2(OnIncomingSession,
61 void(Session*, 64 void(Session*,
62 SessionManager::IncomingSessionResponse*)); 65 SessionManager::IncomingSessionResponse*));
63 }; 66 };
64 67
65 class MockSessionEventHandler : public Session::EventHandler { 68 class MockSessionEventHandler : public Session::EventHandler {
66 public: 69 public:
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 CloseSessions(); 178 CloseSessions();
176 CloseSessionManager(); 179 CloseSessionManager();
177 base::RunLoop().RunUntilIdle(); 180 base::RunLoop().RunUntilIdle();
178 } 181 }
179 182
180 void CloseSessions() { 183 void CloseSessions() {
181 host_session_.reset(); 184 host_session_.reset();
182 client_session_.reset(); 185 client_session_.reset();
183 } 186 }
184 187
185 void CreateSessionManagers(int auth_round_trips, int messages_till_start, 188 void CreateSessionManagers(FakeAuthenticator::Config auth_config,
186 FakeAuthenticator::Action auth_action) { 189 int messages_till_start) {
187 if (!host_signal_strategy_) { 190 host_signal_strategy_ =
188 host_signal_strategy_.reset( 191 base::MakeUnique<FakeSignalStrategy>(SignalingAddress(kHostJid));
189 new FakeSignalStrategy(SignalingAddress(kHostJid))); 192 client_signal_strategy_ =
190 } 193 base::MakeUnique<FakeSignalStrategy>(SignalingAddress(kClientJid));
191 if (!client_signal_strategy_) { 194
192 client_signal_strategy_.reset(
193 new FakeSignalStrategy(SignalingAddress(kClientJid)));
194 }
195 FakeSignalStrategy::Connect(host_signal_strategy_.get(), 195 FakeSignalStrategy::Connect(host_signal_strategy_.get(),
196 client_signal_strategy_.get()); 196 client_signal_strategy_.get());
197 197
198 host_server_.reset(new JingleSessionManager(host_signal_strategy_.get())); 198 host_server_.reset(new JingleSessionManager(host_signal_strategy_.get()));
199 host_server_->AcceptIncoming( 199 host_server_->AcceptIncoming(
200 base::Bind(&MockSessionManagerListener::OnIncomingSession, 200 base::Bind(&MockSessionManagerListener::OnIncomingSession,
201 base::Unretained(&host_server_listener_))); 201 base::Unretained(&host_server_listener_)));
202 202
203 std::unique_ptr<AuthenticatorFactory> factory( 203 std::unique_ptr<AuthenticatorFactory> factory(
204 new FakeHostAuthenticatorFactory(auth_round_trips, messages_till_start, 204 new FakeHostAuthenticatorFactory(messages_till_start, auth_config));
205 auth_action, true));
206 host_server_->set_authenticator_factory(std::move(factory)); 205 host_server_->set_authenticator_factory(std::move(factory));
207 206
208 client_server_.reset( 207 client_server_.reset(
209 new JingleSessionManager(client_signal_strategy_.get())); 208 new JingleSessionManager(client_signal_strategy_.get()));
210 } 209 }
211 210
212 void CreateSessionManagers(int auth_round_trips, 211 void CreateSessionManagers(FakeAuthenticator::Config auth_config) {
213 FakeAuthenticator::Action auth_action) { 212 CreateSessionManagers(auth_config, 0);
214 CreateSessionManagers(auth_round_trips, 0, auth_action);
215 } 213 }
216 214
217 void CloseSessionManager() { 215 void CloseSessionManager() {
218 host_server_.reset(); 216 host_server_.reset();
219 client_server_.reset(); 217 client_server_.reset();
220 host_signal_strategy_.reset(); 218 host_signal_strategy_.reset();
221 client_signal_strategy_.reset(); 219 client_signal_strategy_.reset();
222 } 220 }
223 221
224 void SetHostExpectation(bool expect_fail) { 222 void SetHostExpectation(bool expect_fail) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 OnSessionStateChange(Session::AUTHENTICATED)) 268 OnSessionStateChange(Session::AUTHENTICATED))
271 .Times(1); 269 .Times(1);
272 // Expect that the connection will be closed eventually. 270 // Expect that the connection will be closed eventually.
273 EXPECT_CALL(client_session_event_handler_, 271 EXPECT_CALL(client_session_event_handler_,
274 OnSessionStateChange(Session::CLOSED)) 272 OnSessionStateChange(Session::CLOSED))
275 .Times(AtMost(1)); 273 .Times(AtMost(1));
276 } 274 }
277 } 275 }
278 276
279 void ConnectClient(std::unique_ptr<Authenticator> authenticator) { 277 void ConnectClient(std::unique_ptr<Authenticator> authenticator) {
280 client_session_ = client_server_->Connect(SignalingAddress(host_jid_), 278 client_session_ = client_server_->Connect(
281 std::move(authenticator)); 279 SignalingAddress(kNormalizedHostJid), std::move(authenticator));
282 client_session_->SetEventHandler(&client_session_event_handler_); 280 client_session_->SetEventHandler(&client_session_event_handler_);
283 client_session_->SetTransport(&client_transport_); 281 client_session_->SetTransport(&client_transport_);
284 client_session_->AddPlugin(&client_plugin_); 282 client_session_->AddPlugin(&client_plugin_);
285 base::RunLoop().RunUntilIdle(); 283 base::RunLoop().RunUntilIdle();
286 } 284 }
287 285
288 void InitiateConnection(int auth_round_trips, 286 void ConnectClient(FakeAuthenticator::Config auth_config) {
289 FakeAuthenticator::Action auth_action, 287 ConnectClient(base::MakeUnique<FakeAuthenticator>(
288 FakeAuthenticator::CLIENT, auth_config,
289 client_signal_strategy_->GetLocalAddress().id(), kNormalizedHostJid));
290 }
291
292 void InitiateConnection(FakeAuthenticator::Config auth_config,
290 bool expect_fail) { 293 bool expect_fail) {
291 SetHostExpectation(expect_fail); 294 SetHostExpectation(expect_fail);
292 SetClientExpectation(expect_fail); 295 SetClientExpectation(expect_fail);
293 ConnectClient(base::MakeUnique<FakeAuthenticator>( 296 ConnectClient(auth_config);
294 FakeAuthenticator::CLIENT, auth_round_trips, auth_action, true));
295 } 297 }
296 298
297 void ExpectRouteChange(const std::string& channel_name) { 299 void ExpectRouteChange(const std::string& channel_name) {
298 EXPECT_CALL(host_session_event_handler_, 300 EXPECT_CALL(host_session_event_handler_,
299 OnSessionRouteChange(channel_name, _)) 301 OnSessionRouteChange(channel_name, _))
300 .Times(AtLeast(1)); 302 .Times(AtLeast(1));
301 EXPECT_CALL(client_session_event_handler_, 303 EXPECT_CALL(client_session_event_handler_,
302 OnSessionRouteChange(channel_name, _)) 304 OnSessionRouteChange(channel_name, _))
303 .Times(AtLeast(1)); 305 .Times(AtLeast(1));
304 } 306 }
(...skipping 14 matching lines...) Expand all
319 } 321 }
320 } 322 }
321 323
322 std::unique_ptr<base::MessageLoopForIO> message_loop_; 324 std::unique_ptr<base::MessageLoopForIO> message_loop_;
323 325
324 NetworkSettings network_settings_; 326 NetworkSettings network_settings_;
325 327
326 std::unique_ptr<FakeSignalStrategy> host_signal_strategy_; 328 std::unique_ptr<FakeSignalStrategy> host_signal_strategy_;
327 std::unique_ptr<FakeSignalStrategy> client_signal_strategy_; 329 std::unique_ptr<FakeSignalStrategy> client_signal_strategy_;
328 330
329 std::string host_jid_ = kHostJid;
330
331 std::unique_ptr<JingleSessionManager> host_server_; 331 std::unique_ptr<JingleSessionManager> host_server_;
332 MockSessionManagerListener host_server_listener_; 332 MockSessionManagerListener host_server_listener_;
333 std::unique_ptr<JingleSessionManager> client_server_; 333 std::unique_ptr<JingleSessionManager> client_server_;
334 334
335 std::unique_ptr<Session> host_session_; 335 std::unique_ptr<Session> host_session_;
336 MockSessionEventHandler host_session_event_handler_; 336 MockSessionEventHandler host_session_event_handler_;
337 FakeTransport host_transport_; 337 FakeTransport host_transport_;
338 std::unique_ptr<Session> client_session_; 338 std::unique_ptr<Session> client_session_;
339 MockSessionEventHandler client_session_event_handler_; 339 MockSessionEventHandler client_session_event_handler_;
340 FakeTransport client_transport_; 340 FakeTransport client_transport_;
341 341
342 FakePlugin host_plugin_; 342 FakePlugin host_plugin_;
343 FakePlugin client_plugin_; 343 FakePlugin client_plugin_;
344 }; 344 };
345 345
346 346
347 // Verify that we can create and destroy session managers without a 347 // Verify that we can create and destroy session managers without a
348 // connection. 348 // connection.
349 TEST_F(JingleSessionTest, CreateAndDestoy) { 349 TEST_F(JingleSessionTest, CreateAndDestoy) {
350 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 350 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
351 } 351 }
352 352
353 // Verify that an incoming session can be rejected, and that the 353 // Verify that an incoming session can be rejected, and that the
354 // status of the connection is set to FAILED in this case. 354 // status of the connection is set to FAILED in this case.
355 TEST_F(JingleSessionTest, RejectConnection) { 355 TEST_F(JingleSessionTest, RejectConnection) {
356 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 356 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
357 357
358 // Reject incoming session. 358 // Reject incoming session.
359 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) 359 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _))
360 .WillOnce(SetArgumentPointee<1>(protocol::SessionManager::DECLINE)); 360 .WillOnce(SetArgumentPointee<1>(protocol::SessionManager::DECLINE));
361 361
362 { 362 {
363 InSequence dummy; 363 InSequence dummy;
364 EXPECT_CALL(client_session_event_handler_, 364 EXPECT_CALL(client_session_event_handler_,
365 OnSessionStateChange(Session::FAILED)) 365 OnSessionStateChange(Session::FAILED))
366 .Times(1); 366 .Times(1);
367 } 367 }
368 368
369 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator( 369 ConnectClient(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
370 FakeAuthenticator::CLIENT, 1, FakeAuthenticator::ACCEPT, true));
371 client_session_ = client_server_->Connect(SignalingAddress(kHostJid),
372 std::move(authenticator));
373 client_session_->SetEventHandler(&client_session_event_handler_); 370 client_session_->SetEventHandler(&client_session_event_handler_);
374 371
375 base::RunLoop().RunUntilIdle(); 372 base::RunLoop().RunUntilIdle();
376 } 373 }
377 374
378 // Verify that we can connect two endpoints with single-step authentication. 375 // Verify that we can connect two endpoints with single-step authentication.
379 TEST_F(JingleSessionTest, Connect) { 376 TEST_F(JingleSessionTest, Connect) {
380 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 377 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
381 InitiateConnection(1, FakeAuthenticator::ACCEPT, false); 378 InitiateConnection(FakeAuthenticator::Config(), false);
382 379
383 // Verify that the client specified correct initiator value. 380 // Verify that the client specified correct initiator value.
384 ASSERT_GT(host_signal_strategy_->received_messages().size(), 0U); 381 ASSERT_GT(host_signal_strategy_->received_messages().size(), 0U);
385 const buzz::XmlElement* initiate_xml = 382 const buzz::XmlElement* initiate_xml =
386 host_signal_strategy_->received_messages().front(); 383 host_signal_strategy_->received_messages().front();
387 const buzz::XmlElement* jingle_element = 384 const buzz::XmlElement* jingle_element =
388 initiate_xml->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle")); 385 initiate_xml->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle"));
389 ASSERT_TRUE(jingle_element); 386 ASSERT_TRUE(jingle_element);
390 ASSERT_EQ(kClientJid, 387 ASSERT_EQ(client_signal_strategy_->GetLocalAddress().id(),
391 jingle_element->Attr(buzz::QName(std::string(), "initiator"))); 388 jingle_element->Attr(buzz::QName(std::string(), "initiator")));
392 } 389 }
393 390
394 TEST_F(JingleSessionTest, MixedCaseHostJid) {
395 std::string host_jid = std::string("A") + kHostJid;
396 host_signal_strategy_.reset(
397 new FakeSignalStrategy(SignalingAddress(host_jid)));
398
399 // Imitate host JID being lower-cased when stored in the directory.
400 host_jid_ = base::ToLowerASCII(host_jid);
401
402 CreateSessionManagers(1, FakeAuthenticator::ACCEPT);
403 InitiateConnection(1, FakeAuthenticator::ACCEPT, false);
404 }
405
406 TEST_F(JingleSessionTest, MixedCaseClientJid) {
407 client_signal_strategy_.reset(
408 new FakeSignalStrategy(SignalingAddress(std::string("A") + kClientJid)));
409 CreateSessionManagers(1, FakeAuthenticator::ACCEPT);
410 InitiateConnection(1, FakeAuthenticator::ACCEPT, false);
411 }
412
413 // Verify that we can connect two endpoints with multi-step authentication. 391 // Verify that we can connect two endpoints with multi-step authentication.
414 TEST_F(JingleSessionTest, ConnectWithMultistep) { 392 TEST_F(JingleSessionTest, ConnectWithMultistep) {
415 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); 393 const int kAuthRoundtrips = 3;
416 InitiateConnection(3, FakeAuthenticator::ACCEPT, false); 394 FakeAuthenticator::Config auth_config(kAuthRoundtrips,
395 FakeAuthenticator::ACCEPT, true);
396 CreateSessionManagers(auth_config);
397 InitiateConnection(auth_config, false);
417 } 398 }
418 399
419 TEST_F(JingleSessionTest, ConnectWithOutOfOrderIqs) { 400 TEST_F(JingleSessionTest, ConnectWithOutOfOrderIqs) {
420 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 401 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
421 InitiateConnection(1, FakeAuthenticator::ACCEPT, false); 402 InitiateConnection(FakeAuthenticator::Config(), false);
422 client_signal_strategy_->SimulateMessageReordering(); 403 client_signal_strategy_->SimulateMessageReordering();
423 404
424 // Verify that out of order transport messages are received correctly. 405 // Verify that out of order transport messages are received correctly.
425 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1")); 406 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1"));
426 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2")); 407 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2"));
427 base::RunLoop().RunUntilIdle(); 408 base::RunLoop().RunUntilIdle();
428 409
429 ASSERT_EQ(client_transport_.received_messages().size(), 2U); 410 ASSERT_EQ(client_transport_.received_messages().size(), 2U);
430 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID)); 411 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
431 EXPECT_EQ("2", client_transport_.received_messages()[1]->Attr(buzz::QN_ID)); 412 EXPECT_EQ("2", client_transport_.received_messages()[1]->Attr(buzz::QN_ID));
432 } 413 }
433 414
434 // Verify that out-of-order messages are handled correctly when the session is 415 // Verify that out-of-order messages are handled correctly when the session is
435 // torn down after the first message. 416 // torn down after the first message.
436 TEST_F(JingleSessionTest, ConnectWithOutOfOrderIqsDestroyOnFirstMessage) { 417 TEST_F(JingleSessionTest, ConnectWithOutOfOrderIqsDestroyOnFirstMessage) {
437 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 418 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
438 InitiateConnection(1, FakeAuthenticator::ACCEPT, false); 419 InitiateConnection(FakeAuthenticator::Config(), false);
439 client_signal_strategy_->SimulateMessageReordering(); 420 client_signal_strategy_->SimulateMessageReordering();
440 421
441 // Verify that out of order transport messages are received correctly. 422 // Verify that out of order transport messages are received correctly.
442 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1")); 423 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1"));
443 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2")); 424 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2"));
444 425
445 // Destroy the session as soon as the first message is received. 426 // Destroy the session as soon as the first message is received.
446 client_transport_.set_on_message_callback(base::Bind( 427 client_transport_.set_on_message_callback(base::Bind(
447 &JingleSessionTest::DeleteClientSession, base::Unretained(this))); 428 &JingleSessionTest::DeleteClientSession, base::Unretained(this)));
448 429
449 base::RunLoop().RunUntilIdle(); 430 base::RunLoop().RunUntilIdle();
450 431
451 ASSERT_EQ(client_transport_.received_messages().size(), 1U); 432 ASSERT_EQ(client_transport_.received_messages().size(), 1U);
452 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID)); 433 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
453 } 434 }
454 435
455 // Verify that connection is terminated when single-step auth fails. 436 // Verify that connection is terminated when single-step auth fails.
456 TEST_F(JingleSessionTest, ConnectWithBadAuth) { 437 TEST_F(JingleSessionTest, ConnectWithBadAuth) {
457 CreateSessionManagers(1, FakeAuthenticator::REJECT); 438 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::REJECT));
458 InitiateConnection(1, FakeAuthenticator::ACCEPT, true); 439 InitiateConnection(FakeAuthenticator::Config(), true);
459 } 440 }
460 441
461 // Verify that connection is terminated when multi-step auth fails. 442 // Verify that connection is terminated when multi-step auth fails.
462 TEST_F(JingleSessionTest, ConnectWithBadMultistepAuth) { 443 TEST_F(JingleSessionTest, ConnectWithBadMultistepAuth) {
463 CreateSessionManagers(3, FakeAuthenticator::REJECT); 444 const int kAuthRoundtrips = 3;
464 InitiateConnection(3, FakeAuthenticator::ACCEPT, true); 445 CreateSessionManagers(FakeAuthenticator::Config(
446 kAuthRoundtrips, FakeAuthenticator::REJECT, false));
447 InitiateConnection(FakeAuthenticator::Config(
448 kAuthRoundtrips, FakeAuthenticator::ACCEPT, false),
449 true);
465 } 450 }
466 451
467 // Verify that incompatible protocol configuration is handled properly. 452 // Verify that incompatible protocol configuration is handled properly.
468 TEST_F(JingleSessionTest, TestIncompatibleProtocol) { 453 TEST_F(JingleSessionTest, TestIncompatibleProtocol) {
469 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 454 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
470 455
471 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)).Times(0); 456 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)).Times(0);
472 457
473 EXPECT_CALL(client_session_event_handler_, 458 EXPECT_CALL(client_session_event_handler_,
474 OnSessionStateChange(Session::FAILED)) 459 OnSessionStateChange(Session::FAILED))
475 .Times(1); 460 .Times(1);
476 461
477 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator(
478 FakeAuthenticator::CLIENT, 1, FakeAuthenticator::ACCEPT, true));
479
480 std::unique_ptr<CandidateSessionConfig> config = 462 std::unique_ptr<CandidateSessionConfig> config =
481 CandidateSessionConfig::CreateDefault(); 463 CandidateSessionConfig::CreateDefault();
482 // Disable all video codecs so the host will reject connection. 464 // Disable all video codecs so the host will reject connection.
483 config->mutable_video_configs()->clear(); 465 config->mutable_video_configs()->clear();
484 client_server_->set_protocol_config(std::move(config)); 466 client_server_->set_protocol_config(std::move(config));
485 client_session_ = client_server_->Connect(SignalingAddress(kHostJid), 467 ConnectClient(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
486 std::move(authenticator));
487 client_session_->SetEventHandler(&client_session_event_handler_);
488
489 base::RunLoop().RunUntilIdle();
490 468
491 EXPECT_EQ(INCOMPATIBLE_PROTOCOL, client_session_->error()); 469 EXPECT_EQ(INCOMPATIBLE_PROTOCOL, client_session_->error());
492 EXPECT_FALSE(host_session_); 470 EXPECT_FALSE(host_session_);
493 } 471 }
494 472
495 // Verify that GICE-only client is rejected with an appropriate error code. 473 // Verify that GICE-only client is rejected with an appropriate error code.
496 TEST_F(JingleSessionTest, TestLegacyIceConnection) { 474 TEST_F(JingleSessionTest, TestLegacyIceConnection) {
497 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 475 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
498 476
499 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)).Times(0); 477 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)).Times(0);
500 478
501 EXPECT_CALL(client_session_event_handler_, 479 EXPECT_CALL(client_session_event_handler_,
502 OnSessionStateChange(Session::FAILED)) 480 OnSessionStateChange(Session::FAILED))
503 .Times(1); 481 .Times(1);
504 482
505 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator(
506 FakeAuthenticator::CLIENT, 1, FakeAuthenticator::ACCEPT, true));
507
508 std::unique_ptr<CandidateSessionConfig> config = 483 std::unique_ptr<CandidateSessionConfig> config =
509 CandidateSessionConfig::CreateDefault(); 484 CandidateSessionConfig::CreateDefault();
510 config->set_ice_supported(false); 485 config->set_ice_supported(false);
511 client_server_->set_protocol_config(std::move(config)); 486 client_server_->set_protocol_config(std::move(config));
512 client_session_ = client_server_->Connect(SignalingAddress(kHostJid), 487 ConnectClient(FakeAuthenticator::Config(FakeAuthenticator::ACCEPT));
513 std::move(authenticator));
514 client_session_->SetEventHandler(&client_session_event_handler_);
515
516 base::RunLoop().RunUntilIdle();
517 488
518 EXPECT_EQ(INCOMPATIBLE_PROTOCOL, client_session_->error()); 489 EXPECT_EQ(INCOMPATIBLE_PROTOCOL, client_session_->error());
519 EXPECT_FALSE(host_session_); 490 EXPECT_FALSE(host_session_);
520 } 491 }
521 492
522 TEST_F(JingleSessionTest, DeleteSessionOnIncomingConnection) { 493 TEST_F(JingleSessionTest, DeleteSessionOnIncomingConnection) {
523 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); 494 const int kAuthRoundtrips = 3;
495 FakeAuthenticator::Config auth_config(kAuthRoundtrips,
496 FakeAuthenticator::ACCEPT, true);
497 CreateSessionManagers(auth_config);
524 498
525 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) 499 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _))
526 .WillOnce(DoAll( 500 .WillOnce(DoAll(
527 WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)), 501 WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)),
528 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); 502 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT)));
529 503
530 EXPECT_CALL(host_session_event_handler_, 504 EXPECT_CALL(host_session_event_handler_,
531 OnSessionStateChange(Session::ACCEPTED)) 505 OnSessionStateChange(Session::ACCEPTED))
532 .Times(AtMost(1)); 506 .Times(AtMost(1));
533 507
534 EXPECT_CALL(host_session_event_handler_, 508 EXPECT_CALL(host_session_event_handler_,
535 OnSessionStateChange(Session::AUTHENTICATING)) 509 OnSessionStateChange(Session::AUTHENTICATING))
536 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteHostSession)); 510 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteHostSession));
537 511
538 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator( 512 ConnectClient(auth_config);
539 FakeAuthenticator::CLIENT, 3, FakeAuthenticator::ACCEPT, true));
540
541 client_session_ = client_server_->Connect(SignalingAddress(kHostJid),
542 std::move(authenticator));
543
544 base::RunLoop().RunUntilIdle();
545 } 513 }
546 514
547 TEST_F(JingleSessionTest, DeleteSessionOnAuth) { 515 TEST_F(JingleSessionTest, DeleteSessionOnAuth) {
548 // Same as the previous test, but set messages_till_started to 2 in 516 // Same as the previous test, but set messages_till_started to 2 in
549 // CreateSessionManagers so that the session will goes into the 517 // CreateSessionManagers so that the session will goes into the
550 // AUTHENTICATING state after two message exchanges. 518 // AUTHENTICATING state after two message exchanges.
551 CreateSessionManagers(3, 2, FakeAuthenticator::ACCEPT); 519 const int kMessagesTillStarted = 2;
520
521 const int kAuthRoundtrips = 3;
522 FakeAuthenticator::Config auth_config(kAuthRoundtrips,
523 FakeAuthenticator::ACCEPT, true);
524 CreateSessionManagers(auth_config, kMessagesTillStarted);
552 525
553 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) 526 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _))
554 .WillOnce( 527 .WillOnce(
555 DoAll(WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)), 528 DoAll(WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)),
556 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); 529 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT)));
557 530
558 EXPECT_CALL(host_session_event_handler_, 531 EXPECT_CALL(host_session_event_handler_,
559 OnSessionStateChange(Session::ACCEPTED)) 532 OnSessionStateChange(Session::ACCEPTED))
560 .Times(AtMost(1)); 533 .Times(AtMost(1));
561 534
562 EXPECT_CALL(host_session_event_handler_, 535 EXPECT_CALL(host_session_event_handler_,
563 OnSessionStateChange(Session::AUTHENTICATING)) 536 OnSessionStateChange(Session::AUTHENTICATING))
564 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteHostSession)); 537 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteHostSession));
565 538
566 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator( 539 ConnectClient(auth_config);
567 FakeAuthenticator::CLIENT, 3, FakeAuthenticator::ACCEPT, true));
568
569 client_session_ = client_server_->Connect(SignalingAddress(kHostJid),
570 std::move(authenticator));
571 base::RunLoop().RunUntilIdle();
572 }
573
574 // Verify that we can connect with multistep authentication.
575 TEST_F(JingleSessionTest, TestMultistepAuth) {
576 CreateSessionManagers(3, FakeAuthenticator::ACCEPT);
577 ASSERT_NO_FATAL_FAILURE(
578 InitiateConnection(3, FakeAuthenticator::ACCEPT, false));
579 } 540 }
580 541
581 // Verify that incoming transport-info messages are handled correctly while in 542 // Verify that incoming transport-info messages are handled correctly while in
582 // AUTHENTICATING state. 543 // AUTHENTICATING state.
583 TEST_F(JingleSessionTest, TransportInfoDuringAuthentication) { 544 TEST_F(JingleSessionTest, TransportInfoDuringAuthentication) {
584 CreateSessionManagers(2, FakeAuthenticator::ACCEPT); 545 const int kAuthRoundtrips = 2;
546 FakeAuthenticator::Config auth_config(kAuthRoundtrips,
547 FakeAuthenticator::ACCEPT, true);
548
549 CreateSessionManagers(auth_config);
585 550
586 SetHostExpectation(false); 551 SetHostExpectation(false);
587 { 552 {
588 InSequence dummy; 553 InSequence dummy;
589 554
590 EXPECT_CALL(client_session_event_handler_, 555 EXPECT_CALL(client_session_event_handler_,
591 OnSessionStateChange(Session::ACCEPTED)) 556 OnSessionStateChange(Session::ACCEPTED))
592 .Times(AtMost(1)); 557 .Times(AtMost(1));
593 EXPECT_CALL(client_session_event_handler_, 558 EXPECT_CALL(client_session_event_handler_,
594 OnSessionStateChange(Session::AUTHENTICATING)) 559 OnSessionStateChange(Session::AUTHENTICATING))
595 .Times(AtMost(1)); 560 .Times(AtMost(1));
596 } 561 }
597 562
598 // Create connection and pause it before authentication is finished. 563 // Create connection and pause it before authentication is finished.
599 FakeAuthenticator* authenticator = new FakeAuthenticator( 564 FakeAuthenticator* authenticator = new FakeAuthenticator(
600 FakeAuthenticator::CLIENT, 2, FakeAuthenticator::ACCEPT, true); 565 FakeAuthenticator::CLIENT, auth_config,
566 client_signal_strategy_->GetLocalAddress().id(), kNormalizedHostJid);
601 authenticator->set_pause_message_index(4); 567 authenticator->set_pause_message_index(4);
602 ConnectClient(base::WrapUnique(authenticator)); 568 ConnectClient(base::WrapUnique(authenticator));
603 569
604 // Send 2 transport messages. 570 // Send 2 transport messages.
605 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1")); 571 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1"));
606 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2")); 572 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2"));
607 573
608 base::RunLoop().RunUntilIdle(); 574 base::RunLoop().RunUntilIdle();
609 575
610 // The transport-info messages should not be received here because 576 // The transport-info messages should not be received here because
(...skipping 10 matching lines...) Expand all
621 587
622 // Verify that transport-info that the first transport-info message was 588 // Verify that transport-info that the first transport-info message was
623 // received. 589 // received.
624 ASSERT_EQ(client_transport_.received_messages().size(), 1U); 590 ASSERT_EQ(client_transport_.received_messages().size(), 1U);
625 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID)); 591 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
626 } 592 }
627 593
628 TEST_F(JingleSessionTest, TestSessionPlugin) { 594 TEST_F(JingleSessionTest, TestSessionPlugin) {
629 host_plugin_.Clear(); 595 host_plugin_.Clear();
630 client_plugin_.Clear(); 596 client_plugin_.Clear();
631 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); 597
632 ASSERT_NO_FATAL_FAILURE( 598 const int kAuthRoundtrips = 3;
633 InitiateConnection(3, FakeAuthenticator::ACCEPT, false)); 599 FakeAuthenticator::Config auth_config(kAuthRoundtrips,
600 FakeAuthenticator::ACCEPT, true);
601
602 CreateSessionManagers(auth_config);
603 ASSERT_NO_FATAL_FAILURE(InitiateConnection(auth_config, false));
634 ExpectPluginMessagesEqual(); 604 ExpectPluginMessagesEqual();
635 } 605 }
636 606
637 TEST_F(JingleSessionTest, SessionPluginShouldNotBeInvolvedInSessionTerminate) { 607 TEST_F(JingleSessionTest, SessionPluginShouldNotBeInvolvedInSessionTerminate) {
638 host_plugin_.Clear(); 608 host_plugin_.Clear();
639 client_plugin_.Clear(); 609 client_plugin_.Clear();
640 CreateSessionManagers(1, FakeAuthenticator::REJECT); 610 CreateSessionManagers(FakeAuthenticator::Config(FakeAuthenticator::REJECT));
641 InitiateConnection(1, FakeAuthenticator::ACCEPT, true); 611 InitiateConnection(FakeAuthenticator::Config(), true);
642 // It's expected the client sends one more plugin message than host, the host 612 // It's expected the client sends one more plugin message than host, the host
643 // won't send plugin message in the SESSION_TERMINATE message. 613 // won't send plugin message in the SESSION_TERMINATE message.
644 ASSERT_EQ(client_plugin_.outgoing_messages().size() - 1, 614 ASSERT_EQ(client_plugin_.outgoing_messages().size() - 1,
645 client_plugin_.incoming_messages().size()); 615 client_plugin_.incoming_messages().size());
646 ExpectPluginMessagesEqual(); 616 ExpectPluginMessagesEqual();
647 } 617 }
648 618
649 TEST_F(JingleSessionTest, ImmediatelyCloseSessionAfterConnect) { 619 TEST_F(JingleSessionTest, ImmediatelyCloseSessionAfterConnect) {
650 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); 620 const int kAuthRoundtrips = 3;
621 FakeAuthenticator::Config auth_config(kAuthRoundtrips,
622 FakeAuthenticator::ACCEPT, true);
623 CreateSessionManagers(auth_config);
651 client_session_ = client_server_->Connect( 624 client_session_ = client_server_->Connect(
652 SignalingAddress(host_jid_), 625 SignalingAddress(kNormalizedHostJid),
653 base::MakeUnique<FakeAuthenticator>(FakeAuthenticator::CLIENT, 3, 626 base::MakeUnique<FakeAuthenticator>(
654 FakeAuthenticator::ACCEPT, true)); 627 FakeAuthenticator::CLIENT, auth_config,
628 client_signal_strategy_->GetLocalAddress().id(), kNormalizedHostJid));
629
655 client_session_->Close(HOST_OVERLOAD); 630 client_session_->Close(HOST_OVERLOAD);
656 base::RunLoop().RunUntilIdle(); 631 base::RunLoop().RunUntilIdle();
657 // We should only send a SESSION_TERMINATE message if the session has been 632 // We should only send a SESSION_TERMINATE message if the session has been
658 // closed before SESSION_INITIATE message. 633 // closed before SESSION_INITIATE message.
659 ASSERT_EQ(1U, host_signal_strategy_->received_messages().size()); 634 ASSERT_EQ(1U, host_signal_strategy_->received_messages().size());
660 } 635 }
661 636
662 } // namespace protocol 637 } // namespace protocol
663 } // namespace remoting 638 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698