summaryrefslogtreecommitdiffstats
path: root/remoting/host/client_session_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/host/client_session_unittest.cc')
-rw-r--r--remoting/host/client_session_unittest.cc135
1 files changed, 105 insertions, 30 deletions
diff --git a/remoting/host/client_session_unittest.cc b/remoting/host/client_session_unittest.cc
index bc41d67..f098a18 100644
--- a/remoting/host/client_session_unittest.cc
+++ b/remoting/host/client_session_unittest.cc
@@ -3,8 +3,11 @@
// found in the LICENSE file.
#include "base/message_loop.h"
+#include "remoting/base/auto_thread_task_runner.h"
#include "remoting/base/constants.h"
+#include "remoting/host/audio_capturer.h"
#include "remoting/host/client_session.h"
+#include "remoting/host/desktop_environment.h"
#include "remoting/host/host_mock_objects.h"
#include "remoting/protocol/protocol_mock_objects.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -17,9 +20,12 @@ using protocol::MockConnectionToClientEventHandler;
using protocol::MockHostStub;
using protocol::MockInputStub;
using protocol::MockSession;
+using protocol::SessionConfig;
using testing::_;
+using testing::AnyNumber;
using testing::DeleteArg;
+using testing::Expectation;
using testing::InSequence;
using testing::Return;
using testing::ReturnRef;
@@ -29,31 +35,76 @@ class ClientSessionTest : public testing::Test {
ClientSessionTest() {}
virtual void SetUp() OVERRIDE {
+ ui_task_runner_ = new AutoThreadTaskRunner(
+ message_loop_.message_loop_proxy(),
+ base::Bind(&ClientSessionTest::QuitMainMessageLoop,
+ base::Unretained(this)));
+
+ EXPECT_CALL(context_, ui_task_runner())
+ .Times(AnyNumber())
+ .WillRepeatedly(Return(ui_task_runner_.get()));
+ EXPECT_CALL(context_, capture_task_runner())
+ .Times(AnyNumber())
+ .WillRepeatedly(Return(ui_task_runner_.get()));
+ EXPECT_CALL(context_, encode_task_runner())
+ .Times(AnyNumber())
+ .WillRepeatedly(Return(ui_task_runner_.get()));
+ EXPECT_CALL(context_, network_task_runner())
+ .Times(AnyNumber())
+ .WillRepeatedly(Return(ui_task_runner_.get()));
+
client_jid_ = "user@domain/rest-of-jid";
+ event_executor_ = new MockEventExecutor();
+ capturer_ = new MockVideoFrameCapturer();
+ EXPECT_CALL(*capturer_, Start(_));
+ EXPECT_CALL(*capturer_, Stop());
+ EXPECT_CALL(*capturer_, InvalidateRegion(_)).Times(AnyNumber());
+ EXPECT_CALL(*capturer_, CaptureInvalidRegion(_)).Times(AnyNumber());
+
+ scoped_ptr<DesktopEnvironment> desktop_environment(new DesktopEnvironment(
+ scoped_ptr<AudioCapturer>(NULL),
+ scoped_ptr<EventExecutor>(event_executor_),
+ scoped_ptr<VideoFrameCapturer>(capturer_)));
+
// Set up a large default screen size that won't affect most tests.
default_screen_size_.set(1000, 1000);
- EXPECT_CALL(capturer_, size_most_recent())
+ EXPECT_CALL(*capturer_, size_most_recent())
.WillRepeatedly(ReturnRef(default_screen_size_));
+ session_config_ = SessionConfig::GetDefault();
+
protocol::MockSession* session = new MockSession();
+ EXPECT_CALL(*session, config()).WillRepeatedly(ReturnRef(session_config_));
EXPECT_CALL(*session, jid()).WillRepeatedly(ReturnRef(client_jid_));
EXPECT_CALL(*session, SetEventHandler(_));
EXPECT_CALL(*session, Close());
scoped_ptr<protocol::ConnectionToClient> connection(
new protocol::ConnectionToClient(session));
connection_ = connection.get();
- client_session_.reset(new ClientSession(
- &session_event_handler_, connection.Pass(),
- &host_clipboard_stub_, &host_input_stub_, &capturer_,
- base::TimeDelta()));
+
+ client_session_ = new ClientSession(
+ &session_event_handler_,
+ context_.capture_task_runner(),
+ context_.encode_task_runner(),
+ context_.network_task_runner(),
+ connection.Pass(),
+ desktop_environment.Pass(),
+ base::TimeDelta());
}
virtual void TearDown() OVERRIDE {
- client_session_.reset();
- // Run message loop before destroying because protocol::Session is
- // destroyed asynchronously.
- message_loop_.RunAllPending();
+ // MockClientSessionEventHandler won't trigger StopAndDelete, so fake it.
+ client_session_->Stop(base::Bind(
+ &ClientSessionTest::OnClientStopped, base::Unretained(this)));
+
+ // Run message loop before destroying because the session is destroyed
+ // asynchronously.
+ ui_task_runner_ = NULL;
+ message_loop_.Run();
+
+ // Verify that the client session has been stopped.
+ EXPECT_TRUE(client_session_.get() == NULL);
}
protected:
@@ -64,15 +115,25 @@ class ClientSessionTest : public testing::Test {
protocol::OK);
}
- SkISize default_screen_size_;
+ void QuitMainMessageLoop() {
+ message_loop_.PostTask(FROM_HERE, MessageLoop::QuitClosure());
+ }
+
+ void OnClientStopped() {
+ client_session_ = NULL;
+ }
+
MessageLoop message_loop_;
+ scoped_refptr<AutoThreadTaskRunner> ui_task_runner_;
+ MockChromotingHostContext context_;
+ SkISize default_screen_size_;
std::string client_jid_;
MockHostStub host_stub_;
- MockClipboardStub host_clipboard_stub_;
- MockInputStub host_input_stub_;
- MockVideoFrameCapturer capturer_;
+ MockEventExecutor* event_executor_;
+ MockVideoFrameCapturer* capturer_;
MockClientSessionEventHandler session_event_handler_;
- scoped_ptr<ClientSession> client_session_;
+ scoped_refptr<ClientSession> client_session_;
+ SessionConfig session_config_;
// ClientSession owns |connection_| but tests need it to inject fake events.
protocol::ConnectionToClient* connection_;
@@ -98,10 +159,12 @@ TEST_F(ClientSessionTest, ClipboardStubFilter) {
InSequence s;
EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_));
+ EXPECT_CALL(*event_executor_, StartPtr(_));
EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_));
- EXPECT_CALL(host_clipboard_stub_, InjectClipboardEvent(EqualsClipboardEvent(
+ EXPECT_CALL(*event_executor_, InjectClipboardEvent(EqualsClipboardEvent(
kMimeTypeTextUtf8, "b")));
EXPECT_CALL(session_event_handler_, OnSessionClosed(_));
+ EXPECT_CALL(*event_executor_, StopAndDeleteMock());
// This event should not get through to the clipboard stub,
// because the client isn't authenticated yet.
@@ -160,11 +223,13 @@ TEST_F(ClientSessionTest, InputStubFilter) {
InSequence s;
EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_));
+ EXPECT_CALL(*event_executor_, StartPtr(_));
EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_));
- EXPECT_CALL(host_input_stub_, InjectKeyEvent(EqualsUsbEvent(2, true)));
- EXPECT_CALL(host_input_stub_, InjectKeyEvent(EqualsUsbEvent(2, false)));
- EXPECT_CALL(host_input_stub_, InjectMouseEvent(EqualsMouseEvent(200, 201)));
+ EXPECT_CALL(*event_executor_, InjectKeyEvent(EqualsUsbEvent(2, true)));
+ EXPECT_CALL(*event_executor_, InjectKeyEvent(EqualsUsbEvent(2, false)));
+ EXPECT_CALL(*event_executor_, InjectMouseEvent(EqualsMouseEvent(200, 201)));
EXPECT_CALL(session_event_handler_, OnSessionClosed(_));
+ EXPECT_CALL(*event_executor_, StopAndDeleteMock());
// These events should not get through to the input stub,
// because the client isn't authenticated yet.
@@ -196,10 +261,12 @@ TEST_F(ClientSessionTest, LocalInputTest) {
InSequence s;
EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_));
+ EXPECT_CALL(*event_executor_, StartPtr(_));
EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_));
- EXPECT_CALL(host_input_stub_, InjectMouseEvent(EqualsMouseEvent(100, 101)));
- EXPECT_CALL(host_input_stub_, InjectMouseEvent(EqualsMouseEvent(200, 201)));
+ EXPECT_CALL(*event_executor_, InjectMouseEvent(EqualsMouseEvent(100, 101)));
+ EXPECT_CALL(*event_executor_, InjectMouseEvent(EqualsMouseEvent(200, 201)));
EXPECT_CALL(session_event_handler_, OnSessionClosed(_));
+ EXPECT_CALL(*event_executor_, StopAndDeleteMock());
client_session_->OnConnectionAuthenticated(client_session_->connection());
client_session_->OnConnectionChannelsConnected(client_session_->connection());
@@ -233,16 +300,18 @@ TEST_F(ClientSessionTest, RestoreEventState) {
InSequence s;
EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_));
+ EXPECT_CALL(*event_executor_, StartPtr(_));
EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_));
- EXPECT_CALL(host_input_stub_, InjectKeyEvent(EqualsUsbEvent(1, true)));
- EXPECT_CALL(host_input_stub_, InjectKeyEvent(EqualsUsbEvent(2, true)));
- EXPECT_CALL(host_input_stub_, InjectMouseEvent(EqualsMouseButtonEvent(
+ EXPECT_CALL(*event_executor_, InjectKeyEvent(EqualsUsbEvent(1, true)));
+ EXPECT_CALL(*event_executor_, InjectKeyEvent(EqualsUsbEvent(2, true)));
+ EXPECT_CALL(*event_executor_, InjectMouseEvent(EqualsMouseButtonEvent(
protocol::MouseEvent::BUTTON_LEFT, true)));
- EXPECT_CALL(host_input_stub_, InjectKeyEvent(EqualsUsbEvent(1, false)));
- EXPECT_CALL(host_input_stub_, InjectKeyEvent(EqualsUsbEvent(2, false)));
- EXPECT_CALL(host_input_stub_, InjectMouseEvent(EqualsMouseButtonEvent(
+ EXPECT_CALL(*event_executor_, InjectKeyEvent(EqualsUsbEvent(1, false)));
+ EXPECT_CALL(*event_executor_, InjectKeyEvent(EqualsUsbEvent(2, false)));
+ EXPECT_CALL(*event_executor_, InjectMouseEvent(EqualsMouseButtonEvent(
protocol::MouseEvent::BUTTON_LEFT, false)));
EXPECT_CALL(session_event_handler_, OnSessionClosed(_));
+ EXPECT_CALL(*event_executor_, StopAndDeleteMock());
client_session_->OnConnectionAuthenticated(client_session_->connection());
client_session_->OnConnectionChannelsConnected(client_session_->connection());
@@ -256,12 +325,15 @@ TEST_F(ClientSessionTest, RestoreEventState) {
TEST_F(ClientSessionTest, ClampMouseEvents) {
SkISize screen(SkISize::Make(200, 100));
- EXPECT_CALL(capturer_, size_most_recent())
+ EXPECT_CALL(*capturer_, size_most_recent())
.WillRepeatedly(ReturnRef(screen));
EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_));
- EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_));
+ EXPECT_CALL(*event_executor_, StartPtr(_));
+ Expectation connected =
+ EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_));
EXPECT_CALL(session_event_handler_, OnSessionClosed(_));
+ EXPECT_CALL(*event_executor_, StopAndDeleteMock());
client_session_->OnConnectionAuthenticated(client_session_->connection());
client_session_->OnConnectionChannelsConnected(client_session_->connection());
@@ -276,8 +348,11 @@ TEST_F(ClientSessionTest, ClampMouseEvents) {
for (int i = 0; i < 3; i++) {
event.set_x(input_x[i]);
event.set_y(input_y[j]);
- EXPECT_CALL(host_input_stub_, InjectMouseEvent(EqualsMouseEvent(
- expected_x[i], expected_y[j])));
+ connected =
+ EXPECT_CALL(*event_executor_,
+ InjectMouseEvent(EqualsMouseEvent(expected_x[i],
+ expected_y[j])))
+ .After(connected);
connection_->input_stub()->InjectMouseEvent(event);
}
}