Index: remoting/protocol/authenticator_test_base.cc |
diff --git a/remoting/protocol/authenticator_test_base.cc b/remoting/protocol/authenticator_test_base.cc |
index 02ea9c3bbece8f72c37d00b105f0c5f25e830b69..ca7d59770c78de129c30db79cbae5560340fd690 100644 |
--- a/remoting/protocol/authenticator_test_base.cc |
+++ b/remoting/protocol/authenticator_test_base.cc |
@@ -56,21 +56,38 @@ void AuthenticatorTestBase::SetUp() { |
base::Base64Encode(key_string, &key_base64); |
key_pair_.reset(new KeyPair()); |
key_pair_->LoadFromString(key_base64); |
+ host_public_key_ = key_pair_->GetPublicKey(); |
} |
void AuthenticatorTestBase::RunAuthExchange() { |
- do { |
- scoped_ptr<buzz::XmlElement> message; |
+ ContinueAuthExchange(false); |
+} |
- // Pass message from client to host. |
- ASSERT_EQ(Authenticator::MESSAGE_READY, client_->state()); |
- message = client_->GetNextMessage(); |
- ASSERT_TRUE(message.get()); |
- ASSERT_NE(Authenticator::MESSAGE_READY, client_->state()); |
+void AuthenticatorTestBase::ContinueAuthExchange(bool skip_client_to_host) { |
+ while (client_->state() != Authenticator::ACCEPTED && |
+ client_->state() != Authenticator::REJECTED) { |
+ scoped_ptr<buzz::XmlElement> message; |
- ASSERT_EQ(Authenticator::WAITING_MESSAGE, host_->state()); |
- host_->ProcessMessage(message.get()); |
- ASSERT_NE(Authenticator::WAITING_MESSAGE, host_->state()); |
+ if (!skip_client_to_host) { |
+ // Pass message from client to host. |
+ ASSERT_EQ(Authenticator::MESSAGE_READY, client_->state()); |
+ message = client_->GetNextMessage(); |
+ ASSERT_TRUE(message.get()); |
+ ASSERT_NE(Authenticator::MESSAGE_READY, client_->state()); |
+ |
+ ASSERT_EQ(Authenticator::WAITING_MESSAGE, host_->state()); |
+ host_->ProcessMessage(message.get()); |
+ ASSERT_NE(Authenticator::WAITING_MESSAGE, host_->state()); |
+ |
+ if (host_->state() == Authenticator::WAITING_EXTERNAL) { |
+ host_->PerformExternalAction(base::Bind( |
+ &AuthenticatorTestBase::ContinueAuthExchange, |
+ base::Unretained(this), true)); |
+ break; |
+ } |
+ } else { |
+ skip_client_to_host = false; |
+ } |
// Are we done yet? |
if (host_->state() == Authenticator::ACCEPTED || |
@@ -87,8 +104,14 @@ void AuthenticatorTestBase::RunAuthExchange() { |
ASSERT_EQ(Authenticator::WAITING_MESSAGE, client_->state()); |
client_->ProcessMessage(message.get()); |
ASSERT_NE(Authenticator::WAITING_MESSAGE, client_->state()); |
- } while (client_->state() != Authenticator::ACCEPTED && |
- client_->state() != Authenticator::REJECTED); |
+ |
+ if (client_->state() == Authenticator::WAITING_EXTERNAL) { |
+ client_->PerformExternalAction(base::Bind( |
+ &AuthenticatorTestBase::ContinueAuthExchange, base::Unretained(this), |
+ false)); |
+ break; |
+ } |
+ } |
} |
void AuthenticatorTestBase::RunChannelAuth(bool expected_fail) { |
@@ -96,16 +119,6 @@ void AuthenticatorTestBase::RunChannelAuth(bool expected_fail) { |
host_fake_socket_.reset(new FakeSocket()); |
client_fake_socket_->PairWith(host_fake_socket_.get()); |
- client_auth_->SecureAndAuthenticate( |
- client_fake_socket_.PassAs<net::StreamSocket>(), |
- base::Bind(&AuthenticatorTestBase::OnClientConnected, |
- base::Unretained(this))); |
- |
- host_auth_->SecureAndAuthenticate( |
- host_fake_socket_.PassAs<net::StreamSocket>(), |
- base::Bind(&AuthenticatorTestBase::OnHostConnected, |
- base::Unretained(this))); |
- |
// Expect two callbacks to be called - the client callback and the host |
// callback. |
int callback_counter = 2; |
@@ -120,6 +133,16 @@ void AuthenticatorTestBase::RunChannelAuth(bool expected_fail) { |
.WillOnce(QuitThreadOnCounter(&callback_counter)); |
} |
+ client_auth_->SecureAndAuthenticate( |
+ client_fake_socket_.PassAs<net::StreamSocket>(), |
+ base::Bind(&AuthenticatorTestBase::OnClientConnected, |
+ base::Unretained(this))); |
+ |
+ host_auth_->SecureAndAuthenticate( |
+ host_fake_socket_.PassAs<net::StreamSocket>(), |
+ base::Bind(&AuthenticatorTestBase::OnHostConnected, |
+ base::Unretained(this))); |
+ |
// Ensure that .Run() does not run unbounded if the callbacks are never |
// called. |
base::Timer shutdown_timer(false, false); |