Index: remoting/host/chromoting_host_unittest.cc |
diff --git a/remoting/host/chromoting_host_unittest.cc b/remoting/host/chromoting_host_unittest.cc |
index 3a82f0c23a101bbe497ce35a6a2410b815f11c12..ce1f68e7c1aa59b6422007c69a7ffec9a0273215 100644 |
--- a/remoting/host/chromoting_host_unittest.cc |
+++ b/remoting/host/chromoting_host_unittest.cc |
@@ -5,10 +5,14 @@ |
#include "base/bind.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop_proxy.h" |
+#include "remoting/base/auto_thread_task_runner.h" |
#include "remoting/jingle_glue/mock_objects.h" |
#include "remoting/host/audio_capturer.h" |
#include "remoting/host/chromoting_host_context.h" |
#include "remoting/host/chromoting_host.h" |
+#include "remoting/host/desktop_environment.h" |
+#include "remoting/host/desktop_environment_factory.h" |
+#include "remoting/host/event_executor_fake.h" |
#include "remoting/host/host_mock_objects.h" |
#include "remoting/host/it2me_host_user_interface.h" |
#include "remoting/host/video_frame_capturer_fake.h" |
@@ -62,39 +66,63 @@ void DoNothing() { |
} // namespace |
+class MockDesktopEnvironmentFactory : public DesktopEnvironmentFactory { |
+ public: |
+ MockDesktopEnvironmentFactory(); |
+ virtual ~MockDesktopEnvironmentFactory(); |
+ |
+ virtual scoped_ptr<DesktopEnvironment> Create( |
+ ChromotingHostContext* context) OVERRIDE; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MockDesktopEnvironmentFactory); |
+}; |
+ |
+MockDesktopEnvironmentFactory::MockDesktopEnvironmentFactory() { |
+} |
+ |
+MockDesktopEnvironmentFactory::~MockDesktopEnvironmentFactory() { |
+} |
+ |
+scoped_ptr<DesktopEnvironment> MockDesktopEnvironmentFactory::Create( |
+ ChromotingHostContext* context) { |
+ scoped_ptr<EventExecutor> event_executor(new EventExecutorFake()); |
+ scoped_ptr<VideoFrameCapturer> video_capturer(new VideoFrameCapturerFake()); |
+ return scoped_ptr<DesktopEnvironment>(new DesktopEnvironment( |
+ scoped_ptr<AudioCapturer>(NULL), |
+ event_executor.Pass(), |
+ video_capturer.Pass())); |
+} |
+ |
class ChromotingHostTest : public testing::Test { |
public: |
ChromotingHostTest() { |
} |
virtual void SetUp() OVERRIDE { |
- message_loop_proxy_ = base::MessageLoopProxy::current(); |
+ ui_task_runner_ = new AutoThreadTaskRunner( |
+ message_loop_.message_loop_proxy(), |
+ base::Bind(&ChromotingHostTest::QuitMainMessageLoop, |
+ base::Unretained(this))); |
EXPECT_CALL(context_, ui_task_runner()) |
.Times(AnyNumber()) |
- .WillRepeatedly(Return(message_loop_proxy_.get())); |
+ .WillRepeatedly(Return(ui_task_runner_.get())); |
EXPECT_CALL(context_, capture_task_runner()) |
.Times(AnyNumber()) |
- .WillRepeatedly(Return(message_loop_proxy_.get())); |
+ .WillRepeatedly(Return(ui_task_runner_.get())); |
EXPECT_CALL(context_, encode_task_runner()) |
.Times(AnyNumber()) |
- .WillRepeatedly(Return(message_loop_proxy_.get())); |
+ .WillRepeatedly(Return(ui_task_runner_.get())); |
EXPECT_CALL(context_, network_task_runner()) |
.Times(AnyNumber()) |
- .WillRepeatedly(Return(message_loop_proxy_.get())); |
- |
- scoped_ptr<VideoFrameCapturer> capturer(new VideoFrameCapturerFake()); |
- scoped_ptr<AudioCapturer> audio_capturer(NULL); |
- event_executor_ = new MockEventExecutor(); |
- desktop_environment_ = DesktopEnvironment::CreateFake( |
- &context_, |
- capturer.Pass(), |
- scoped_ptr<EventExecutor>(event_executor_), |
- audio_capturer.Pass()); |
+ .WillRepeatedly(Return(ui_task_runner_.get())); |
+ |
+ desktop_environment_factory_.reset(new MockDesktopEnvironmentFactory()); |
session_manager_ = new protocol::MockSessionManager(); |
host_ = new ChromotingHost( |
- &context_, &signal_strategy_, desktop_environment_.get(), |
+ &context_, &signal_strategy_, desktop_environment_factory_.get(), |
scoped_ptr<protocol::SessionManager>(session_manager_)); |
host_->AddStatusObserver(&host_status_observer_); |
@@ -145,11 +173,11 @@ class ChromotingHostTest : public testing::Test { |
EXPECT_CALL(*session2_, config()) |
.WillRepeatedly(ReturnRef(session_config2_)); |
- owned_connection1_.reset(new MockConnectionToClient( |
- session1_, &host_stub1_, desktop_environment_->event_executor())); |
+ owned_connection1_.reset(new MockConnectionToClient(session1_, |
+ &host_stub1_)); |
connection1_ = owned_connection1_.get(); |
- owned_connection2_.reset(new MockConnectionToClient( |
- session2_, &host_stub2_, desktop_environment_->event_executor())); |
+ owned_connection2_.reset(new MockConnectionToClient(session2_, |
+ &host_stub2_)); |
connection2_ = owned_connection2_.get(); |
ON_CALL(video_stub1_, ProcessVideoPacketPtr(_, _)) |
@@ -194,12 +222,17 @@ class ChromotingHostTest : public testing::Test { |
((connection_index == 0) ? owned_connection1_ : owned_connection2_). |
PassAs<protocol::ConnectionToClient>(); |
protocol::ConnectionToClient* connection_ptr = connection.get(); |
+ scoped_ptr<DesktopEnvironment> desktop_environment = |
+ host_->desktop_environment_factory_->Create(&context_); |
+ connection_ptr->set_input_stub(desktop_environment->event_executor()); |
+ |
ClientSession* client = new ClientSession( |
host_.get(), |
+ context_.capture_task_runner(), |
+ context_.encode_task_runner(), |
+ context_.network_task_runner(), |
connection.Pass(), |
- desktop_environment_->event_executor(), |
- desktop_environment_->event_executor(), |
- desktop_environment_->capturer(), |
+ host_->desktop_environment_factory_->Create(&context_), |
base::TimeDelta()); |
connection_ptr->set_host_stub(client); |
@@ -265,12 +298,20 @@ class ChromotingHostTest : public testing::Test { |
static void AddClientToHost(scoped_refptr<ChromotingHost> host, |
ClientSession* session) { |
host->clients_.push_back(session); |
+ host->clients_count_++; |
} |
void ShutdownHost() { |
- message_loop_.PostTask( |
- FROM_HERE, base::Bind(&ChromotingHost::Shutdown, host_, |
- base::Bind(&PostQuitTask, &message_loop_))); |
+ ui_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&ChromotingHost::Shutdown, host_, |
+ base::Bind(&ChromotingHostTest::ReleaseUiTaskRunner, |
+ base::Unretained(this)))); |
+ } |
+ |
+ void ReleaseUiTaskRunner() { |
+ it2me_host_user_interface_.reset(); |
+ ui_task_runner_ = NULL; |
} |
void QuitMainMessageLoop() { |
@@ -304,12 +345,9 @@ class ChromotingHostTest : public testing::Test { |
EXPECT_CALL(host_status_observer_, OnClientAuthenticated(session_jid)); |
EXPECT_CALL(host_status_observer_, OnClientConnected(session_jid)) |
.After(client_authenticated); |
- Expectation session_started = |
- EXPECT_CALL(*event_executor_, OnSessionStartedPtr(_)) |
- .After(client_authenticated); |
Expectation video_packet_sent = |
EXPECT_CALL(video_stub, ProcessVideoPacketPtr(_, _)) |
- .After(session_started) |
+ .After(client_authenticated) |
.WillOnce(DoAll( |
action, |
RunDoneTask())) |
@@ -355,24 +393,21 @@ class ChromotingHostTest : public testing::Test { |
A action) { |
const std::string& session_jid = get_session_jid(connection_index); |
- EXPECT_CALL(*event_executor_, OnSessionFinished()) |
- .After(after) |
- .WillOnce(action); |
if (expect_host_status_change) { |
EXPECT_CALL(host_status_observer_, OnClientDisconnected(session_jid)) |
.After(after) |
+ .WillOnce(action) |
.RetiresOnSaturation(); |
} |
} |
protected: |
MessageLoop message_loop_; |
- scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
+ scoped_refptr<AutoThreadTaskRunner> ui_task_runner_; |
MockChromotingHostContext context_; |
MockConnectionToClientEventHandler handler_; |
MockSignalStrategy signal_strategy_; |
- MockEventExecutor* event_executor_; |
- scoped_ptr<DesktopEnvironment> desktop_environment_; |
+ scoped_ptr<DesktopEnvironmentFactory> desktop_environment_factory_; |
scoped_ptr<It2MeHostUserInterface> it2me_host_user_interface_; |
scoped_refptr<ChromotingHost> host_; |
MockHostStatusObserver host_status_observer_; |
@@ -433,10 +468,7 @@ TEST_F(ChromotingHostTest, StartAndShutdown) { |
EXPECT_CALL(host_status_observer_, OnShutdown()).After(start); |
host_->Start(xmpp_login_); |
- message_loop_.PostTask( |
- FROM_HERE, base::Bind( |
- &ChromotingHost::Shutdown, host_.get(), |
- base::Bind(&PostQuitTask, &message_loop_))); |
+ ShutdownHost(); |
message_loop_.Run(); |
} |