1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "remoting/protocol/connection_to_client.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/message_loop/message_loop_proxy.h"
10 #include "remoting/base/constants.h"
11 #include "remoting/protocol/fake_session.h"
12 #include "remoting/protocol/protocol_mock_objects.h"
13 #include "testing/gmock/include/gmock/gmock.h"
16 using ::testing::NotNull
;
17 using ::testing::StrictMock
;
22 class ConnectionToClientTest
: public testing::Test
{
24 ConnectionToClientTest() {
28 virtual void SetUp() OVERRIDE
{
29 session_
= new FakeSession();
31 // Allocate a ClientConnection object with the mock objects.
32 viewer_
.reset(new ConnectionToClient(session_
));
33 viewer_
->set_clipboard_stub(&clipboard_stub_
);
34 viewer_
->set_host_stub(&host_stub_
);
35 viewer_
->set_input_stub(&input_stub_
);
36 viewer_
->SetEventHandler(&handler_
);
37 EXPECT_CALL(handler_
, OnConnectionAuthenticated(viewer_
.get()));
38 EXPECT_CALL(handler_
, OnConnectionChannelsConnected(viewer_
.get()));
39 session_
->event_handler()->OnSessionStateChange(Session::CONNECTED
);
40 session_
->event_handler()->OnSessionStateChange(Session::AUTHENTICATED
);
41 message_loop_
.RunUntilIdle();
44 virtual void TearDown() OVERRIDE
{
46 message_loop_
.RunUntilIdle();
49 base::MessageLoop message_loop_
;
50 MockConnectionToClientEventHandler handler_
;
51 MockClipboardStub clipboard_stub_
;
52 MockHostStub host_stub_
;
53 MockInputStub input_stub_
;
54 scoped_ptr
<ConnectionToClient
> viewer_
;
56 // Owned by |viewer_|.
57 FakeSession
* session_
;
60 DISALLOW_COPY_AND_ASSIGN(ConnectionToClientTest
);
63 TEST_F(ConnectionToClientTest
, SendUpdateStream
) {
64 scoped_ptr
<VideoPacket
> packet(new VideoPacket());
65 viewer_
->video_stub()->ProcessVideoPacket(packet
.Pass(), base::Closure());
67 message_loop_
.RunUntilIdle();
69 // Verify that something has been written.
70 // TODO(sergeyu): Verify that the correct data has been written.
71 ASSERT_TRUE(session_
->GetStreamChannel(kVideoChannelName
));
72 EXPECT_GT(session_
->GetStreamChannel(kVideoChannelName
)->
73 written_data().size(), 0u);
75 // And then close the connection to ConnectionToClient.
76 viewer_
->Disconnect();
78 message_loop_
.RunUntilIdle();
81 TEST_F(ConnectionToClientTest
, NoWriteAfterDisconnect
) {
82 scoped_ptr
<VideoPacket
> packet(new VideoPacket());
83 viewer_
->video_stub()->ProcessVideoPacket(packet
.Pass(), base::Closure());
85 // And then close the connection to ConnectionToClient.
86 viewer_
->Disconnect();
88 // The test will crash if data writer tries to write data to the
90 // TODO(sergeyu): Use MockSession to verify that no data is written?
91 message_loop_
.RunUntilIdle();
94 TEST_F(ConnectionToClientTest
, StateChange
) {
95 EXPECT_CALL(handler_
, OnConnectionClosed(viewer_
.get(), OK
));
96 session_
->event_handler()->OnSessionStateChange(Session::CLOSED
);
97 message_loop_
.RunUntilIdle();
99 EXPECT_CALL(handler_
, OnConnectionClosed(viewer_
.get(), SESSION_REJECTED
));
100 session_
->set_error(SESSION_REJECTED
);
101 session_
->event_handler()->OnSessionStateChange(Session::FAILED
);
102 message_loop_
.RunUntilIdle();
105 } // namespace protocol
106 } // namespace remoting