| Index: remoting/host/security_key/remote_security_key_ipc_server_unittest.cc
|
| diff --git a/remoting/host/security_key/remote_security_key_ipc_server_unittest.cc b/remoting/host/security_key/remote_security_key_ipc_server_unittest.cc
|
| index dbe9b7bedb4b561b8e471759565e95f89220c5b8..cf0b4a6af1f891c54189b2f0479bcfd80eb58fe5 100644
|
| --- a/remoting/host/security_key/remote_security_key_ipc_server_unittest.cc
|
| +++ b/remoting/host/security_key/remote_security_key_ipc_server_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include <string>
|
|
|
| #include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| #include "base/callback.h"
|
| #include "base/macros.h"
|
| #include "base/message_loop/message_loop.h"
|
| @@ -35,6 +36,9 @@ class RemoteSecurityKeyIpcServerTest : public testing::Test {
|
| // completion of an IPC channel state change or reception of an IPC message.
|
| void OperationComplete();
|
|
|
| + // Used as a callback to signal receipt of a security key request message.
|
| + void SendRequestToClient(int connection_id, const std::string& data);
|
| +
|
| protected:
|
| // Returns a unique IPC channel name which prevents conflicts when running
|
| // tests concurrently.
|
| @@ -43,9 +47,6 @@ class RemoteSecurityKeyIpcServerTest : public testing::Test {
|
| // Waits until the current |run_loop_| instance is signaled, then resets it.
|
| void WaitForOperationComplete();
|
|
|
| - // Used as a callback to signal receipt of a security key request message.
|
| - void SendRequestToClient(int connection_id, const std::string& data);
|
| -
|
| // IPC tests require a valid MessageLoop to run.
|
| base::MessageLoopForIO message_loop_;
|
|
|
| @@ -69,9 +70,15 @@ class RemoteSecurityKeyIpcServerTest : public testing::Test {
|
|
|
| RemoteSecurityKeyIpcServerTest::RemoteSecurityKeyIpcServerTest()
|
| : run_loop_(new base::RunLoop()) {
|
| + uint32_t peer_session_id = UINT32_MAX;
|
| +#if defined(OS_WIN)
|
| + EXPECT_TRUE(ProcessIdToSessionId(GetCurrentProcessId(),
|
| + reinterpret_cast<DWORD*>(&peer_session_id)));
|
| +#endif // defined(OS_WIN)
|
| +
|
| remote_security_key_ipc_server_ =
|
| remoting::RemoteSecurityKeyIpcServer::Create(
|
| - kTestConnectionId,
|
| + kTestConnectionId, peer_session_id,
|
| base::TimeDelta::FromMilliseconds(kInitialConnectTimeoutMs),
|
| base::Bind(&RemoteSecurityKeyIpcServerTest::SendRequestToClient,
|
| base::Unretained(this)),
|
| @@ -116,6 +123,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, HandleSingleGnubbyRequest) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Send a request from the IPC client to the IPC server.
|
| std::string request_data("Blergh!");
|
| fake_ipc_client.SendSecurityKeyRequestViaIpc(request_data);
|
| @@ -150,6 +159,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, HandleLargeGnubbyRequest) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Send a request from the IPC client to the IPC server.
|
| std::string request_data(kLargeMessageSizeBytes, 'Y');
|
| fake_ipc_client.SendSecurityKeyRequestViaIpc(request_data);
|
| @@ -184,6 +195,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, HandleReallyLargeGnubbyRequest) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Send a request from the IPC client to the IPC server.
|
| std::string request_data(kLargeMessageSizeBytes * 2, 'Y');
|
| fake_ipc_client.SendSecurityKeyRequestViaIpc(request_data);
|
| @@ -218,6 +231,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, HandleMultipleGnubbyRequests) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Send a request from the IPC client to the IPC server.
|
| std::string request_data_1("Blergh!");
|
| fake_ipc_client.SendSecurityKeyRequestViaIpc(request_data_1);
|
| @@ -288,6 +303,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, NoGnubbyRequestTimeout) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Now that a connection has been established, we wait for the timeout.
|
| base::Time start_time(base::Time::NowFromSystemTime());
|
| WaitForOperationComplete();
|
| @@ -312,6 +329,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, GnubbyResponseTimeout) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Now that a connection has been established, we issue a request and
|
| // then wait for the timeout.
|
| std::string request_data("I can haz Auth?");
|
| @@ -343,6 +362,8 @@ TEST_F(RemoteSecurityKeyIpcServerTest, SendResponseTimeout) {
|
| ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| WaitForOperationComplete();
|
|
|
| + ASSERT_TRUE(fake_ipc_client.ipc_channel_connected());
|
| +
|
| // Issue a request.
|
| std::string request_data("Auth me yo!");
|
| fake_ipc_client.SendSecurityKeyRequestViaIpc(request_data);
|
| @@ -362,4 +383,38 @@ TEST_F(RemoteSecurityKeyIpcServerTest, SendResponseTimeout) {
|
| kConnectionTimeoutErrorDeltaMs);
|
| }
|
|
|
| +#if defined(OS_WIN)
|
| +TEST_F(RemoteSecurityKeyIpcServerTest, IpcConnectionFailsFromInvalidSession) {
|
| + uint32_t peer_session_id = UINT32_MAX;
|
| + ASSERT_TRUE(ProcessIdToSessionId(GetCurrentProcessId(),
|
| + reinterpret_cast<DWORD*>(&peer_session_id)));
|
| + peer_session_id++;
|
| +
|
| + // Reinitialize the object under test.
|
| + remote_security_key_ipc_server_ =
|
| + remoting::RemoteSecurityKeyIpcServer::Create(
|
| + kTestConnectionId, peer_session_id,
|
| + base::TimeDelta::FromMilliseconds(kInitialConnectTimeoutMs),
|
| + base::Bind(&RemoteSecurityKeyIpcServerTest::SendRequestToClient,
|
| + base::Unretained(this)),
|
| + base::Bind(&base::DoNothing));
|
| +
|
| + base::TimeDelta request_timeout(base::TimeDelta::FromMilliseconds(500));
|
| + std::string channel_name(GetUniqueTestChannelName());
|
| + ASSERT_TRUE(remote_security_key_ipc_server_->CreateChannel(channel_name,
|
| + request_timeout));
|
| +
|
| + // Create a fake client and attempt to connect to the IPC server channel.
|
| + FakeRemoteSecurityKeyIpcClient fake_ipc_client(
|
| + base::Bind(&RemoteSecurityKeyIpcServerTest::OperationComplete,
|
| + base::Unretained(this)));
|
| + ASSERT_TRUE(fake_ipc_client.ConnectViaIpc(channel_name));
|
| + WaitForOperationComplete();
|
| + WaitForOperationComplete();
|
| +
|
| + // Verify the connection failed.
|
| + ASSERT_FALSE(fake_ipc_client.ipc_channel_connected());
|
| +}
|
| +#endif // defined(OS_WIN)
|
| +
|
| } // namespace remoting
|
|
|