Index: remoting/host/security_key/security_key_ipc_client_unittest.cc |
diff --git a/remoting/host/security_key/security_key_ipc_client_unittest.cc b/remoting/host/security_key/security_key_ipc_client_unittest.cc |
index 2bd669fdd4226604a17969183f128408db637806..7b1cfd46126cc4e763dc67642d4ee1745555e21a 100644 |
--- a/remoting/host/security_key/security_key_ipc_client_unittest.cc |
+++ b/remoting/host/security_key/security_key_ipc_client_unittest.cc |
@@ -36,6 +36,12 @@ class SecurityKeyIpcClientTest : public testing::Test { |
// completion of an IPC channel state change or reception of an IPC message. |
void OperationComplete(bool failed); |
+ // Callback used to signal when the IPC channel is ready for messages. |
+ void ConnectionStateHandler(bool established); |
+ |
+ // Callback used to drive the |fake_ipc_server_| connection behavior. |
+ void SendConnectionMessage(); |
+ |
// Used as a callback given to the object under test, expected to be called |
// back when a security key request is received by it. |
void SendMessageToClient(int connection_id, const std::string& data); |
@@ -85,6 +91,12 @@ class SecurityKeyIpcClientTest : public testing::Test { |
// Tracks the success/failure of the last async operation. |
bool operation_failed_ = false; |
+ // Tracks whether the IPC channel connection has been established. |
+ bool connection_established_ = false; |
+ |
+ // Used to drive invalid session behavior for testing the client. |
+ bool simulate_invalid_session_ = false; |
+ |
// Used to validate the object under test uses the correct ID when |
// communicating over the IPC channel. |
int last_connection_id_received_ = -1; |
@@ -105,7 +117,8 @@ SecurityKeyIpcClientTest::SecurityKeyIpcClientTest() |
/*initial_connect_timeout=*/base::TimeDelta::FromMilliseconds(500), |
base::Bind(&SecurityKeyIpcClientTest::SendMessageToClient, |
base::Unretained(this)), |
- base::Bind(&base::DoNothing), |
+ base::Bind(&SecurityKeyIpcClientTest::SendConnectionMessage, |
+ base::Unretained(this)), |
base::Bind(&SecurityKeyIpcClientTest::OperationComplete, |
base::Unretained(this), |
/*failed=*/false)) {} |
@@ -128,6 +141,19 @@ void SecurityKeyIpcClientTest::OperationComplete(bool failed) { |
run_loop_->Quit(); |
} |
+void SecurityKeyIpcClientTest::ConnectionStateHandler(bool established) { |
+ connection_established_ = established; |
+ OperationComplete(/*failed=*/false); |
+} |
+ |
+void SecurityKeyIpcClientTest::SendConnectionMessage() { |
+ if (simulate_invalid_session_) { |
+ fake_ipc_server_.SendInvalidSessionMessage(); |
+ } else { |
+ fake_ipc_server_.SendConnectionReadyMessage(); |
+ } |
+} |
+ |
void SecurityKeyIpcClientTest::WaitForOperationComplete() { |
run_loop_->Run(); |
run_loop_.reset(new base::RunLoop()); |
@@ -166,11 +192,12 @@ void SecurityKeyIpcClientTest::EstablishConnection(bool expect_success) { |
// Establish the IPC channel so we can begin sending and receiving security |
// key messages. |
security_key_ipc_client_.EstablishIpcConnection( |
- base::Bind(&SecurityKeyIpcClientTest::OperationComplete, |
- base::Unretained(this), /*failed=*/false), |
+ base::Bind(&SecurityKeyIpcClientTest::ConnectionStateHandler, |
+ base::Unretained(this)), |
base::Bind(&SecurityKeyIpcClientTest::OperationComplete, |
base::Unretained(this), /*failed=*/true)); |
WaitForOperationComplete(); |
+ ASSERT_EQ(connection_established_, expect_success); |
ASSERT_NE(operation_failed_, expect_success); |
} |
@@ -281,8 +308,8 @@ TEST_F(SecurityKeyIpcClientTest, NonExistentIpcServerChannel) { |
// Attempt to establish the conection (should fail since the IPC channel does |
// not exist). |
security_key_ipc_client_.EstablishIpcConnection( |
- base::Bind(&SecurityKeyIpcClientTest::OperationComplete, |
- base::Unretained(this), /*failed=*/false), |
+ base::Bind(&SecurityKeyIpcClientTest::ConnectionStateHandler, |
+ base::Unretained(this)), |
base::Bind(&SecurityKeyIpcClientTest::OperationComplete, |
base::Unretained(this), /*failed=*/true)); |
WaitForOperationComplete(); |
@@ -294,6 +321,7 @@ TEST_F(SecurityKeyIpcClientTest, SecurityKeyIpcServerRunningInWrongSession) { |
// Set the expected session Id to a different session than we are running in. |
security_key_ipc_client_.SetExpectedIpcServerSessionIdForTest(session_id_ + |
1); |
+ simulate_invalid_session_ = true; |
// Attempting to establish a connection should fail here since the IPC Server |
// is 'running' in a different session than expected. |