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

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

Issue 2453933008: Bugfixes in JingleSession (Closed)
Patch Set: Created 4 years, 1 month 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 61
62 class MockSessionEventHandler : public Session::EventHandler { 62 class MockSessionEventHandler : public Session::EventHandler {
63 public: 63 public:
64 MOCK_METHOD1(OnSessionStateChange, void(Session::State)); 64 MOCK_METHOD1(OnSessionStateChange, void(Session::State));
65 MOCK_METHOD2(OnSessionRouteChange, void(const std::string& channel_name, 65 MOCK_METHOD2(OnSessionRouteChange, void(const std::string& channel_name,
66 const TransportRoute& route)); 66 const TransportRoute& route));
67 }; 67 };
68 68
69 class FakeTransport : public Transport { 69 class FakeTransport : public Transport {
70 public: 70 public:
71 SendTransportInfoCallback send_transport_info_callback() {
72 return send_transport_info_callback_;
73 }
74
75 const std::vector<std::unique_ptr<buzz::XmlElement>>& received_messages() {
76 return received_messages_;
77 }
78
79 void set_on_message_callback(const base::Closure& on_message_callback) {
80 on_message_callback_ = on_message_callback;
81 }
82
83 // Transport interface.
71 void Start(Authenticator* authenticator, 84 void Start(Authenticator* authenticator,
72 SendTransportInfoCallback send_transport_info_callback) override { 85 SendTransportInfoCallback send_transport_info_callback) override {
73 send_transport_info_callback_ = send_transport_info_callback; 86 send_transport_info_callback_ = send_transport_info_callback;
74 } 87 }
75 88
76 bool ProcessTransportInfo(buzz::XmlElement* transport_info) override { 89 bool ProcessTransportInfo(buzz::XmlElement* transport_info) override {
77 received_messages_.push_back( 90 received_messages_.push_back(
78 base::MakeUnique<buzz::XmlElement>(*transport_info)); 91 base::MakeUnique<buzz::XmlElement>(*transport_info));
92 if (!on_message_callback_.is_null())
93 on_message_callback_.Run();
79 return true; 94 return true;
80 } 95 }
81 96
82 SendTransportInfoCallback send_transport_info_callback() {
83 return send_transport_info_callback_;
84 }
85
86 const std::vector<std::unique_ptr<buzz::XmlElement>>& received_messages() {
87 return received_messages_;
88 }
89
90 private: 97 private:
91 SendTransportInfoCallback send_transport_info_callback_; 98 SendTransportInfoCallback send_transport_info_callback_;
92 std::vector<std::unique_ptr<buzz::XmlElement>> received_messages_; 99 std::vector<std::unique_ptr<buzz::XmlElement>> received_messages_;
100 base::Closure on_message_callback_;
93 }; 101 };
94 102
95 std::unique_ptr<buzz::XmlElement> CreateTransportInfo(const std::string& id) { 103 std::unique_ptr<buzz::XmlElement> CreateTransportInfo(const std::string& id) {
96 std::unique_ptr<buzz::XmlElement> result( 104 std::unique_ptr<buzz::XmlElement> result(
97 buzz::XmlElement::ForStr("<transport xmlns='google:remoting:ice'/>")); 105 buzz::XmlElement::ForStr("<transport xmlns='google:remoting:ice'/>"));
98 result->AddAttr(buzz::QN_ID, id); 106 result->AddAttr(buzz::QN_ID, id);
99 return result; 107 return result;
100 } 108 }
101 109
102 } // namespace 110 } // namespace
103 111
104 class JingleSessionTest : public testing::Test { 112 class JingleSessionTest : public testing::Test {
105 public: 113 public:
106 JingleSessionTest() { 114 JingleSessionTest() {
107 message_loop_.reset(new base::MessageLoopForIO()); 115 message_loop_.reset(new base::MessageLoopForIO());
108 network_settings_ = 116 network_settings_ =
109 NetworkSettings(NetworkSettings::NAT_TRAVERSAL_OUTGOING); 117 NetworkSettings(NetworkSettings::NAT_TRAVERSAL_OUTGOING);
110 } 118 }
111 119
112 // Helper method that handles OnIncomingSession(). 120 // Helper method that handles OnIncomingSession().
113 void SetHostSession(Session* session) { 121 void SetHostSession(Session* session) {
114 DCHECK(session); 122 DCHECK(session);
115 host_session_.reset(session); 123 host_session_.reset(session);
116 host_session_->SetEventHandler(&host_session_event_handler_); 124 host_session_->SetEventHandler(&host_session_event_handler_);
117 host_session_->SetTransport(&host_transport_); 125 host_session_->SetTransport(&host_transport_);
118 } 126 }
119 127
120 void DeleteSession() { 128 void DeleteHostSession() { host_session_.reset(); }
121 host_session_.reset(); 129
122 } 130 void DeleteClientSession() { client_session_.reset(); }
123 131
124 protected: 132 protected:
125 void TearDown() override { 133 void TearDown() override {
126 CloseSessions(); 134 CloseSessions();
127 CloseSessionManager(); 135 CloseSessionManager();
128 base::RunLoop().RunUntilIdle(); 136 base::RunLoop().RunUntilIdle();
129 } 137 }
130 138
131 void CloseSessions() { 139 void CloseSessions() {
132 host_session_.reset(); 140 host_session_.reset();
(...skipping 26 matching lines...) Expand all
159 CreateSessionManagers(auth_round_trips, 0, auth_action); 167 CreateSessionManagers(auth_round_trips, 0, auth_action);
160 } 168 }
161 169
162 void CloseSessionManager() { 170 void CloseSessionManager() {
163 host_server_.reset(); 171 host_server_.reset();
164 client_server_.reset(); 172 client_server_.reset();
165 host_signal_strategy_.reset(); 173 host_signal_strategy_.reset();
166 client_signal_strategy_.reset(); 174 client_signal_strategy_.reset();
167 } 175 }
168 176
169 void InitiateConnection(int auth_round_trips, 177 void SetHostExpectation(bool expect_fail) {
170 FakeAuthenticator::Action auth_action,
171 bool expect_fail) {
172 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) 178 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _))
173 .WillOnce(DoAll( 179 .WillOnce(
174 WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)), 180 DoAll(WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)),
175 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); 181 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT)));
176 182
177 { 183 {
178 InSequence dummy; 184 InSequence dummy;
179 185
180 EXPECT_CALL(host_session_event_handler_, 186 EXPECT_CALL(host_session_event_handler_,
181 OnSessionStateChange(Session::ACCEPTED)) 187 OnSessionStateChange(Session::ACCEPTED))
182 .Times(AtMost(1)); 188 .Times(AtMost(1));
183 EXPECT_CALL(host_session_event_handler_, 189 EXPECT_CALL(host_session_event_handler_,
184 OnSessionStateChange(Session::AUTHENTICATING)) 190 OnSessionStateChange(Session::AUTHENTICATING))
185 .Times(AtMost(1)); 191 .Times(AtMost(1));
186 if (expect_fail) { 192 if (expect_fail) {
187 EXPECT_CALL(host_session_event_handler_, 193 EXPECT_CALL(host_session_event_handler_,
188 OnSessionStateChange(Session::FAILED)) 194 OnSessionStateChange(Session::FAILED))
189 .Times(1); 195 .Times(1);
190 } else { 196 } else {
191 EXPECT_CALL(host_session_event_handler_, 197 EXPECT_CALL(host_session_event_handler_,
192 OnSessionStateChange(Session::AUTHENTICATED)) 198 OnSessionStateChange(Session::AUTHENTICATED))
193 .Times(1); 199 .Times(1);
194 // Expect that the connection will be closed eventually. 200 // Expect that the connection will be closed eventually.
195 EXPECT_CALL(host_session_event_handler_, 201 EXPECT_CALL(host_session_event_handler_,
196 OnSessionStateChange(Session::CLOSED)) 202 OnSessionStateChange(Session::CLOSED))
197 .Times(AtMost(1)); 203 .Times(AtMost(1));
198 } 204 }
199 } 205 }
206 }
200 207
201 { 208 void SetClientExpectation(bool expect_fail) {
202 InSequence dummy; 209 InSequence dummy;
203 210
211 EXPECT_CALL(client_session_event_handler_,
212 OnSessionStateChange(Session::ACCEPTED))
213 .Times(AtMost(1));
214 EXPECT_CALL(client_session_event_handler_,
215 OnSessionStateChange(Session::AUTHENTICATING))
216 .Times(AtMost(1));
217 if (expect_fail) {
204 EXPECT_CALL(client_session_event_handler_, 218 EXPECT_CALL(client_session_event_handler_,
205 OnSessionStateChange(Session::ACCEPTED)) 219 OnSessionStateChange(Session::FAILED))
220 .Times(1);
221 } else {
222 EXPECT_CALL(client_session_event_handler_,
223 OnSessionStateChange(Session::AUTHENTICATED))
224 .Times(1);
225 // Expect that the connection will be closed eventually.
226 EXPECT_CALL(client_session_event_handler_,
227 OnSessionStateChange(Session::CLOSED))
206 .Times(AtMost(1)); 228 .Times(AtMost(1));
207 EXPECT_CALL(client_session_event_handler_,
208 OnSessionStateChange(Session::AUTHENTICATING))
209 .Times(AtMost(1));
210 if (expect_fail) {
211 EXPECT_CALL(client_session_event_handler_,
212 OnSessionStateChange(Session::FAILED))
213 .Times(1);
214 } else {
215 EXPECT_CALL(client_session_event_handler_,
216 OnSessionStateChange(Session::AUTHENTICATED))
217 .Times(1);
218 // Expect that the connection will be closed eventually.
219 EXPECT_CALL(client_session_event_handler_,
220 OnSessionStateChange(Session::CLOSED))
221 .Times(AtMost(1));
222 }
223 } 229 }
230 }
224 231
225 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator( 232 void ConnectClient(std::unique_ptr<Authenticator> authenticator) {
226 FakeAuthenticator::CLIENT, auth_round_trips, auth_action, true));
227
228 client_session_ = 233 client_session_ =
229 client_server_->Connect(kHostJid, std::move(authenticator)); 234 client_server_->Connect(kHostJid, std::move(authenticator));
230 client_session_->SetEventHandler(&client_session_event_handler_); 235 client_session_->SetEventHandler(&client_session_event_handler_);
231 client_session_->SetTransport(&client_transport_); 236 client_session_->SetTransport(&client_transport_);
237 base::RunLoop().RunUntilIdle();
238 }
232 239
233 base::RunLoop().RunUntilIdle(); 240 void InitiateConnection(int auth_round_trips,
241 FakeAuthenticator::Action auth_action,
242 bool expect_fail) {
243 SetHostExpectation(expect_fail);
244 SetClientExpectation(expect_fail);
245 ConnectClient(base::MakeUnique<FakeAuthenticator>(
246 FakeAuthenticator::CLIENT, auth_round_trips, auth_action, true));
234 } 247 }
235 248
236 void ExpectRouteChange(const std::string& channel_name) { 249 void ExpectRouteChange(const std::string& channel_name) {
237 EXPECT_CALL(host_session_event_handler_, 250 EXPECT_CALL(host_session_event_handler_,
238 OnSessionRouteChange(channel_name, _)) 251 OnSessionRouteChange(channel_name, _))
239 .Times(AtLeast(1)); 252 .Times(AtLeast(1));
240 EXPECT_CALL(client_session_event_handler_, 253 EXPECT_CALL(client_session_event_handler_,
241 OnSessionRouteChange(channel_name, _)) 254 OnSessionRouteChange(channel_name, _))
242 .Times(AtLeast(1)); 255 .Times(AtLeast(1));
243 } 256 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 ASSERT_EQ(kClientJid, 320 ASSERT_EQ(kClientJid,
308 jingle_element->Attr(buzz::QName(std::string(), "initiator"))); 321 jingle_element->Attr(buzz::QName(std::string(), "initiator")));
309 } 322 }
310 323
311 // Verify that we can connect two endpoints with multi-step authentication. 324 // Verify that we can connect two endpoints with multi-step authentication.
312 TEST_F(JingleSessionTest, ConnectWithMultistep) { 325 TEST_F(JingleSessionTest, ConnectWithMultistep) {
313 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); 326 CreateSessionManagers(3, FakeAuthenticator::ACCEPT);
314 InitiateConnection(3, FakeAuthenticator::ACCEPT, false); 327 InitiateConnection(3, FakeAuthenticator::ACCEPT, false);
315 } 328 }
316 329
317 TEST_F(JingleSessionTest, ConnectWithOutofOrderIqs) { 330 TEST_F(JingleSessionTest, ConnectWithOutOfOrderIqs) {
318 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 331 CreateSessionManagers(1, FakeAuthenticator::ACCEPT);
319 InitiateConnection(1, FakeAuthenticator::ACCEPT, false); 332 InitiateConnection(1, FakeAuthenticator::ACCEPT, false);
320 client_signal_strategy_->SimulatePackgeReordering(); 333 client_signal_strategy_->SimulatePackgeReordering();
334
321 // Verify that out of order transport messages are received correctly. 335 // Verify that out of order transport messages are received correctly.
322 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1")); 336 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1"));
323 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2")); 337 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2"));
324 base::RunLoop().RunUntilIdle(); 338 base::RunLoop().RunUntilIdle();
325 EXPECT_EQ(client_transport_.received_messages()[0]->Attr(buzz::QN_ID), "1"); 339
326 EXPECT_EQ(client_transport_.received_messages()[1]->Attr(buzz::QN_ID), "2"); 340 ASSERT_EQ(client_transport_.received_messages().size(), 2U);
341 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
342 EXPECT_EQ("2", client_transport_.received_messages()[1]->Attr(buzz::QN_ID));
343 }
344
345 // Verify that out-of-order messages are handled correctly when the session is
346 // torn down after the first message.
347 TEST_F(JingleSessionTest, ConnectWithOutOfOrderIqsDestroyOnFirstMessage) {
348 CreateSessionManagers(1, FakeAuthenticator::ACCEPT);
349 InitiateConnection(1, FakeAuthenticator::ACCEPT, false);
350 client_signal_strategy_->SimulatePackgeReordering();
351
352 // Verify that out of order transport messages are received correctly.
353 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1"));
354 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2"));
355
356 // Destroy the session as soon as the first message is received.
357 client_transport_.set_on_message_callback(base::Bind(
358 &JingleSessionTest::DeleteClientSession, base::Unretained(this)));
359
360 base::RunLoop().RunUntilIdle();
361
362 ASSERT_EQ(client_transport_.received_messages().size(), 1U);
363 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
327 } 364 }
328 365
329 // Verify that connection is terminated when single-step auth fails. 366 // Verify that connection is terminated when single-step auth fails.
330 TEST_F(JingleSessionTest, ConnectWithBadAuth) { 367 TEST_F(JingleSessionTest, ConnectWithBadAuth) {
331 CreateSessionManagers(1, FakeAuthenticator::REJECT); 368 CreateSessionManagers(1, FakeAuthenticator::REJECT);
332 InitiateConnection(1, FakeAuthenticator::ACCEPT, true); 369 InitiateConnection(1, FakeAuthenticator::ACCEPT, true);
333 } 370 }
334 371
335 // Verify that connection is terminated when multi-step auth fails. 372 // Verify that connection is terminated when multi-step auth fails.
336 TEST_F(JingleSessionTest, ConnectWithBadMultistepAuth) { 373 TEST_F(JingleSessionTest, ConnectWithBadMultistepAuth) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) 434 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _))
398 .WillOnce(DoAll( 435 .WillOnce(DoAll(
399 WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)), 436 WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)),
400 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); 437 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT)));
401 438
402 EXPECT_CALL(host_session_event_handler_, 439 EXPECT_CALL(host_session_event_handler_,
403 OnSessionStateChange(Session::ACCEPTED)) 440 OnSessionStateChange(Session::ACCEPTED))
404 .Times(AtMost(1)); 441 .Times(AtMost(1));
405 442
406 EXPECT_CALL(host_session_event_handler_, 443 EXPECT_CALL(host_session_event_handler_,
407 OnSessionStateChange(Session::AUTHENTICATING)) 444 OnSessionStateChange(Session::AUTHENTICATING))
408 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteSession)); 445 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteHostSession));
409 446
410 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator( 447 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator(
411 FakeAuthenticator::CLIENT, 3, FakeAuthenticator::ACCEPT, true)); 448 FakeAuthenticator::CLIENT, 3, FakeAuthenticator::ACCEPT, true));
412 449
413 client_session_ = client_server_->Connect(kHostJid, std::move(authenticator)); 450 client_session_ = client_server_->Connect(kHostJid, std::move(authenticator));
414 451
415 base::RunLoop().RunUntilIdle(); 452 base::RunLoop().RunUntilIdle();
416 } 453 }
417 454
418 TEST_F(JingleSessionTest, DeleteSessionOnAuth) { 455 TEST_F(JingleSessionTest, DeleteSessionOnAuth) {
419 // Same as the previous test, but set messages_till_started to 2 in 456 // Same as the previous test, but set messages_till_started to 2 in
420 // CreateSessionManagers so that the session will goes into the 457 // CreateSessionManagers so that the session will goes into the
421 // AUTHENTICATING state after two message exchanges. 458 // AUTHENTICATING state after two message exchanges.
422 CreateSessionManagers(3, 2, FakeAuthenticator::ACCEPT); 459 CreateSessionManagers(3, 2, FakeAuthenticator::ACCEPT);
423 460
424 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) 461 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _))
425 .WillOnce(DoAll( 462 .WillOnce(
426 WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)), 463 DoAll(WithArg<0>(Invoke(this, &JingleSessionTest::SetHostSession)),
427 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); 464 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT)));
428 465
429 EXPECT_CALL(host_session_event_handler_, 466 EXPECT_CALL(host_session_event_handler_,
430 OnSessionStateChange(Session::ACCEPTED)) 467 OnSessionStateChange(Session::ACCEPTED))
431 .Times(AtMost(1)); 468 .Times(AtMost(1));
432 469
433 EXPECT_CALL(host_session_event_handler_, 470 EXPECT_CALL(host_session_event_handler_,
434 OnSessionStateChange(Session::AUTHENTICATING)) 471 OnSessionStateChange(Session::AUTHENTICATING))
435 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteSession)); 472 .WillOnce(InvokeWithoutArgs(this, &JingleSessionTest::DeleteHostSession));
436 473
437 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator( 474 std::unique_ptr<Authenticator> authenticator(new FakeAuthenticator(
438 FakeAuthenticator::CLIENT, 3, FakeAuthenticator::ACCEPT, true)); 475 FakeAuthenticator::CLIENT, 3, FakeAuthenticator::ACCEPT, true));
439 476
440 client_session_ = client_server_->Connect(kHostJid, std::move(authenticator)); 477 client_session_ = client_server_->Connect(kHostJid, std::move(authenticator));
441 base::RunLoop().RunUntilIdle(); 478 base::RunLoop().RunUntilIdle();
442 } 479 }
443 480
444 // Verify that we can connect with multistep authentication. 481 // Verify that we can connect with multistep authentication.
445 TEST_F(JingleSessionTest, TestMultistepAuth) { 482 TEST_F(JingleSessionTest, TestMultistepAuth) {
446 CreateSessionManagers(3, FakeAuthenticator::ACCEPT); 483 CreateSessionManagers(3, FakeAuthenticator::ACCEPT);
447 ASSERT_NO_FATAL_FAILURE( 484 ASSERT_NO_FATAL_FAILURE(
448 InitiateConnection(3, FakeAuthenticator::ACCEPT, false)); 485 InitiateConnection(3, FakeAuthenticator::ACCEPT, false));
449 } 486 }
450 487
488 // Verify that incoming transport-info messages are handled correctly while in
489 // AUTHENTICATING state.
490 TEST_F(JingleSessionTest, TransportInfoDuringAuthentication) {
491 CreateSessionManagers(2, FakeAuthenticator::ACCEPT);
492
493 SetHostExpectation(false);
494 {
495 InSequence dummy;
496
497 EXPECT_CALL(client_session_event_handler_,
498 OnSessionStateChange(Session::ACCEPTED))
499 .Times(AtMost(1));
500 EXPECT_CALL(client_session_event_handler_,
501 OnSessionStateChange(Session::AUTHENTICATING))
502 .Times(AtMost(1));
503 }
504
505 // Create connection and pause it before authentication is finished.
506 FakeAuthenticator* authenticator = new FakeAuthenticator(
507 FakeAuthenticator::CLIENT, 2, FakeAuthenticator::ACCEPT, true);
508 authenticator->set_pause_message_index(4);
509 ConnectClient(base::WrapUnique(authenticator));
510
511 // Send 2 transport messages.
512 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("1"));
513 host_transport_.send_transport_info_callback().Run(CreateTransportInfo("2"));
514
515 base::RunLoop().RunUntilIdle();
516
517 // The transport-info messages should not be received here because
518 // authentication hasn't finished.
519 EXPECT_TRUE(client_transport_.received_messages().empty());
520
521 // Destroy the session as soon as the first message is received.
522 client_transport_.set_on_message_callback(base::Bind(
523 &JingleSessionTest::DeleteClientSession, base::Unretained(this)));
524
525 // Resume authentication.
526 authenticator->Resume();
527 base::RunLoop().RunUntilIdle();
528
529 // Verify that transport-info that the first transport-info message was
530 // received.
531 ASSERT_EQ(client_transport_.received_messages().size(), 1U);
532 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
533 }
534
451 } // namespace protocol 535 } // namespace protocol
452 } // namespace remoting 536 } // namespace remoting
OLDNEW
« remoting/protocol/jingle_session.cc ('K') | « remoting/protocol/jingle_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698