Index: remoting/host/client_session_unittest.cc |
diff --git a/remoting/host/client_session_unittest.cc b/remoting/host/client_session_unittest.cc |
index 285bf4ad9f39b6f235589c559a4124b28383c0d9..323c43f5db829554a84985d8cc5b080684274709 100644 |
--- a/remoting/host/client_session_unittest.cc |
+++ b/remoting/host/client_session_unittest.cc |
@@ -55,9 +55,7 @@ ACTION_P2(LocalMouseMoved, client_session, event) { |
class ClientSessionTest : public testing::Test { |
public: |
- ClientSessionTest() |
- : client_jid_("user@domain/rest-of-jid"), |
- event_executor_(NULL) {} |
+ ClientSessionTest() : client_jid_("user@domain/rest-of-jid") {} |
virtual void SetUp() OVERRIDE; |
virtual void TearDown() OVERRIDE; |
@@ -65,8 +63,7 @@ class ClientSessionTest : public testing::Test { |
// Disconnects the client session. |
void DisconnectClientSession(); |
- // Asynchronously stops the client session. OnClientStopped() will be called |
- // once the client session is fully stopped. |
+ // Stops and releases the ClientSession, allowing the MessageLoop to quit. |
void StopClientSession(); |
protected: |
@@ -74,6 +71,18 @@ class ClientSessionTest : public testing::Test { |
// DesktopEnvironmentFactory::Create(). |
DesktopEnvironment* CreateDesktopEnvironment(); |
+ // Returns |event_executor_| created and initialized by SetUp(), to mock |
+ // DesktopEnvironment::CreateEventExecutor(). |
+ EventExecutor* CreateEventExecutor( |
+ scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); |
+ |
+ // Creates a fake VideoFrameCapturer, to mock |
+ // DesktopEnvironment::CreateVideoCapturer(). |
+ VideoFrameCapturer* CreateVideoCapturer( |
+ scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner); |
+ |
// Notifies the client session that the client connection has been |
// authenticated and channels have been connected. This effectively enables |
// the input pipe line and starts video capturing. |
@@ -83,10 +92,6 @@ class ClientSessionTest : public testing::Test { |
// released and quits the message loop to finish the test. |
void QuitMainMessageLoop(); |
- // Releases the ClientSession when it has been fully stopped, allowing |
- // the MessageLoop to quit. |
- void OnClientStopped(); |
- |
// Message loop passed to |client_session_| to perform all functions on. |
MessageLoop message_loop_; |
@@ -106,7 +111,7 @@ class ClientSessionTest : public testing::Test { |
// DesktopEnvironment owns |event_executor_|, but input injection tests need |
// to express expectations on it. |
- MockEventExecutor* event_executor_; |
+ scoped_ptr<MockEventExecutor> event_executor_; |
// ClientSession owns |connection_| but tests need it to inject fake events. |
MockConnectionToClient* connection_; |
@@ -121,12 +126,15 @@ void ClientSessionTest::SetUp() { |
base::Bind(&ClientSessionTest::QuitMainMessageLoop, |
base::Unretained(this))); |
- desktop_environment_factory_.reset(new MockDesktopEnvironmentFactory()); |
+ desktop_environment_factory_.reset( |
+ new MockDesktopEnvironmentFactory(ui_task_runner_)); |
EXPECT_CALL(*desktop_environment_factory_, CreatePtr()) |
.Times(AnyNumber()) |
.WillRepeatedly(Invoke(this, |
&ClientSessionTest::CreateDesktopEnvironment)); |
+ event_executor_.reset(new MockEventExecutor()); |
+ |
session_config_ = SessionConfig::ForTest(); |
// Mock protocol::Session APIs called directly by ClientSession. |
@@ -149,9 +157,11 @@ void ClientSessionTest::SetUp() { |
client_session_ = new ClientSession( |
&session_event_handler_, |
ui_task_runner, // Audio thread. |
+ ui_task_runner, // Input thread. |
ui_task_runner, // Capture thread. |
ui_task_runner, // Encode thread. |
ui_task_runner, // Network thread. |
+ ui_task_runner, // UI thread. |
connection.PassAs<protocol::ConnectionToClient>(), |
desktop_environment_factory_.get(), |
base::TimeDelta()); |
@@ -171,18 +181,35 @@ void ClientSessionTest::DisconnectClientSession() { |
void ClientSessionTest::StopClientSession() { |
// MockClientSessionEventHandler won't trigger Stop, so fake it. |
- client_session_->Stop(base::Bind( |
- &ClientSessionTest::OnClientStopped, base::Unretained(this))); |
+ client_session_->Stop(); |
+ client_session_ = NULL; |
+ |
+ desktop_environment_factory_.reset(); |
} |
DesktopEnvironment* ClientSessionTest::CreateDesktopEnvironment() { |
- scoped_ptr<VideoFrameCapturer> video_capturer(new VideoFrameCapturerFake()); |
+ MockDesktopEnvironment* desktop_environment = new MockDesktopEnvironment(); |
+ EXPECT_CALL(*desktop_environment, CreateAudioCapturerPtr(_)) |
+ .Times(0); |
+ EXPECT_CALL(*desktop_environment, CreateEventExecutorPtr(_, _)) |
+ .WillOnce(Invoke(this, &ClientSessionTest::CreateEventExecutor)); |
+ EXPECT_CALL(*desktop_environment, CreateVideoCapturerPtr(_, _)) |
+ .WillOnce(Invoke(this, &ClientSessionTest::CreateVideoCapturer)); |
+ |
+ return desktop_environment; |
+} |
+ |
+EventExecutor* ClientSessionTest::CreateEventExecutor( |
+ scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { |
+ EXPECT_TRUE(event_executor_); |
+ return event_executor_.release(); |
+} |
- EXPECT_TRUE(!event_executor_); |
- event_executor_ = new MockEventExecutor(); |
- return new DesktopEnvironment(scoped_ptr<AudioCapturer>(NULL), |
- scoped_ptr<EventExecutor>(event_executor_), |
- video_capturer.Pass()); |
+VideoFrameCapturer* ClientSessionTest::CreateVideoCapturer( |
+ scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner) { |
+ return new VideoFrameCapturerFake(); |
} |
void ClientSessionTest::ConnectClientSession() { |
@@ -194,10 +221,6 @@ void ClientSessionTest::QuitMainMessageLoop() { |
message_loop_.PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
} |
-void ClientSessionTest::OnClientStopped() { |
- client_session_ = NULL; |
-} |
- |
MATCHER_P2(EqualsClipboardEvent, m, d, "") { |
return (strcmp(arg.mime_type().c_str(), m) == 0 && |
memcmp(arg.data().data(), d, arg.data().size()) == 0); |