Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: remoting/host/chromoting_host_unittest.cc

Issue 6711033: A new authenticated connection evicts an old one. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/task.h" 5 #include "base/task.h"
6 #include "remoting/host/capturer_fake.h" 6 #include "remoting/host/capturer_fake.h"
7 #include "remoting/host/chromoting_host.h" 7 #include "remoting/host/chromoting_host.h"
8 #include "remoting/host/chromoting_host_context.h" 8 #include "remoting/host/chromoting_host_context.h"
9 #include "remoting/host/desktop_environment_fake.h" 9 #include "remoting/host/desktop_environment_fake.h"
10 #include "remoting/host/host_mock_objects.h" 10 #include "remoting/host/host_mock_objects.h"
(...skipping 23 matching lines...) Expand all
34 using testing::Return; 34 using testing::Return;
35 35
36 namespace remoting { 36 namespace remoting {
37 37
38 namespace { 38 namespace {
39 39
40 void PostQuitTask(MessageLoop* message_loop) { 40 void PostQuitTask(MessageLoop* message_loop) {
41 message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 41 message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask());
42 } 42 }
43 43
44 void BeginSessionRequest(protocol::HostStub* host_stub) { 44 void BeginSessionRequest(protocol::ConnectionToClient* connection,
45 protocol::HostStub* host_stub) {
45 LocalLoginCredentials* credentials = 46 LocalLoginCredentials* credentials =
46 new LocalLoginCredentials(); 47 new LocalLoginCredentials();
47 credentials->set_type(protocol::PASSWORD); 48 credentials->set_type(protocol::PASSWORD);
48 credentials->set_username("hello"); 49 credentials->set_username("hello");
49 50
50 const std::string password = "world!"; 51 const std::string password = "world!";
51 credentials->set_credential(password.data(), password.length()); 52 credentials->set_credential(password.data(), password.length());
52 53
53 host_stub->BeginSessionRequest( 54 host_stub->BeginSessionRequest(
55 connection,
54 credentials, 56 credentials,
55 new DeleteTask<LocalLoginCredentials>(credentials)); 57 new DeleteTask<LocalLoginCredentials>(credentials));
56 } 58 }
57 59
58 // Run the task and delete it afterwards. This action is used to deal with 60 // Run the task and delete it afterwards. This action is used to deal with
59 // done callbacks. 61 // done callbacks.
60 ACTION(RunDoneTask) { 62 ACTION(RunDoneTask) {
61 arg1->Run(); 63 arg1->Run();
62 delete arg1; 64 delete arg1;
63 } 65 }
(...skipping 19 matching lines...) Expand all
83 .WillByDefault(Return(&message_loop_)); 85 .WillByDefault(Return(&message_loop_));
84 EXPECT_CALL(context_, main_message_loop()) 86 EXPECT_CALL(context_, main_message_loop())
85 .Times(AnyNumber()); 87 .Times(AnyNumber());
86 EXPECT_CALL(context_, encode_message_loop()) 88 EXPECT_CALL(context_, encode_message_loop())
87 .Times(AnyNumber()); 89 .Times(AnyNumber());
88 EXPECT_CALL(context_, network_message_loop()) 90 EXPECT_CALL(context_, network_message_loop())
89 .Times(AnyNumber()); 91 .Times(AnyNumber());
90 92
91 Capturer* capturer = new CapturerFake(context_.main_message_loop()); 93 Capturer* capturer = new CapturerFake(context_.main_message_loop());
92 host_stub_ = new MockHostStub(); 94 host_stub_ = new MockHostStub();
95 host_stub2_ = new MockHostStub();
93 input_stub_ = new MockInputStub(); 96 input_stub_ = new MockInputStub();
97 input_stub2_ = new MockInputStub();
94 DesktopEnvironment* desktop = 98 DesktopEnvironment* desktop =
95 new DesktopEnvironmentFake(capturer, input_stub_); 99 new DesktopEnvironmentFake(capturer, input_stub_);
96 host_ = ChromotingHost::Create(&context_, config_, desktop); 100 host_ = ChromotingHost::Create(&context_, config_, desktop);
97 connection_ = new MockConnectionToClient( 101 connection_ = new MockConnectionToClient(
98 &message_loop_, &handler_, host_stub_, input_stub_); 102 &message_loop_, &handler_, host_stub_, input_stub_);
103 connection2_ = new MockConnectionToClient(
104 &message_loop_, &handler_, host_stub2_, input_stub2_);
99 session_ = new MockSession(); 105 session_ = new MockSession();
106 session2_ = new MockSession();
100 session_config_.reset(SessionConfig::CreateDefault()); 107 session_config_.reset(SessionConfig::CreateDefault());
108 session_config2_.reset(SessionConfig::CreateDefault());
101 109
102 ON_CALL(video_stub_, ProcessVideoPacket(_, _)) 110 ON_CALL(video_stub_, ProcessVideoPacket(_, _))
103 .WillByDefault( 111 .WillByDefault(
104 DoAll(DeleteArg<0>(), DeleteArg<1>())); 112 DoAll(DeleteArg<0>(), DeleteArg<1>()));
113 ON_CALL(video_stub2_, ProcessVideoPacket(_, _))
114 .WillByDefault(
115 DoAll(DeleteArg<0>(), DeleteArg<1>()));
105 ON_CALL(*connection_.get(), video_stub()) 116 ON_CALL(*connection_.get(), video_stub())
106 .WillByDefault(Return(&video_stub_)); 117 .WillByDefault(Return(&video_stub_));
107 ON_CALL(*connection_.get(), client_stub()) 118 ON_CALL(*connection_.get(), client_stub())
108 .WillByDefault(Return(&client_stub_)); 119 .WillByDefault(Return(&client_stub_));
109 ON_CALL(*connection_.get(), session()) 120 ON_CALL(*connection_.get(), session())
110 .WillByDefault(Return(session_)); 121 .WillByDefault(Return(session_));
122 ON_CALL(*connection2_.get(), video_stub())
123 .WillByDefault(Return(&video_stub2_));
124 ON_CALL(*connection2_.get(), client_stub())
125 .WillByDefault(Return(&client_stub2_));
126 ON_CALL(*connection2_.get(), session())
127 .WillByDefault(Return(session2_));
111 ON_CALL(*session_.get(), config()) 128 ON_CALL(*session_.get(), config())
112 .WillByDefault(Return(session_config_.get())); 129 .WillByDefault(Return(session_config_.get()));
130 ON_CALL(*session2_.get(), config())
131 .WillByDefault(Return(session_config2_.get()));
113 EXPECT_CALL(*connection_.get(), video_stub()) 132 EXPECT_CALL(*connection_.get(), video_stub())
114 .Times(AnyNumber()); 133 .Times(AnyNumber());
115 EXPECT_CALL(*connection_.get(), client_stub()) 134 EXPECT_CALL(*connection_.get(), client_stub())
116 .Times(AnyNumber()); 135 .Times(AnyNumber());
117 EXPECT_CALL(*connection_.get(), session()) 136 EXPECT_CALL(*connection_.get(), session())
118 .Times(AnyNumber()); 137 .Times(AnyNumber());
138 EXPECT_CALL(*connection2_.get(), video_stub())
139 .Times(AnyNumber());
140 EXPECT_CALL(*connection2_.get(), client_stub())
141 .Times(AnyNumber());
142 EXPECT_CALL(*connection2_.get(), session())
143 .Times(AnyNumber());
119 EXPECT_CALL(*session_.get(), config()) 144 EXPECT_CALL(*session_.get(), config())
120 .Times(AnyNumber()); 145 .Times(AnyNumber());
146 EXPECT_CALL(*session2_.get(), config())
147 .Times(AnyNumber());
148
121 } 149 }
122 150
123 virtual void TearDown() { 151 virtual void TearDown() {
124 } 152 }
125 153
126 // Helper metjod to pretend a client is connected to ChromotingHost. 154 // Helper method to pretend a client is connected to ChromotingHost.
127 void SimulateClientConnection() { 155 void SimulateClientConnection(int connection_index) {
156 scoped_refptr<MockConnectionToClient> connection =
157 (connection_index == 0) ? connection_ : connection2_;
158
128 context_.network_message_loop()->PostTask( 159 context_.network_message_loop()->PostTask(
129 FROM_HERE, 160 FROM_HERE,
130 NewRunnableMethod(host_.get(), 161 NewRunnableMethod(host_.get(),
131 &ChromotingHost::set_connection, 162 &ChromotingHost::add_connection,
132 connection_)); 163 connection));
133 context_.network_message_loop()->PostTask( 164 context_.network_message_loop()->PostTask(
134 FROM_HERE, 165 FROM_HERE,
135 NewRunnableMethod(host_.get(), 166 NewRunnableMethod(host_.get(),
136 &ChromotingHost::OnClientConnected, 167 &ChromotingHost::OnClientConnected,
137 connection_)); 168 connection));
138 context_.network_message_loop()->PostTask( 169 context_.network_message_loop()->PostTask(
139 FROM_HERE, 170 FROM_HERE,
140 NewRunnableFunction(&BeginSessionRequest, host_->host_stub())); 171 NewRunnableFunction(&BeginSessionRequest,
172 connection,
173 host_->host_stub()));
141 } 174 }
142 175
143 // Helper method to remove a client connection from ChromotongHost. 176 void SimulateSecondClientConnection() {
177 SimulateClientConnection(1);
178 }
179
180 // Helper method to remove a client connection from ChromotingHost.
144 void RemoveClientConnection() { 181 void RemoveClientConnection() {
145 context_.network_message_loop()->PostTask( 182 context_.network_message_loop()->PostTask(
146 FROM_HERE, 183 FROM_HERE,
147 NewRunnableMethod(host_.get(), 184 NewRunnableMethod(host_.get(),
148 &ChromotingHost::OnClientDisconnected, 185 &ChromotingHost::OnClientDisconnected,
149 connection_)); 186 connection_));
150 } 187 }
151 188
152 protected: 189 protected:
153 MessageLoop message_loop_; 190 MessageLoop message_loop_;
154 MockConnectionToClientEventHandler handler_; 191 MockConnectionToClientEventHandler handler_;
155 scoped_refptr<ChromotingHost> host_; 192 scoped_refptr<ChromotingHost> host_;
156 scoped_refptr<InMemoryHostConfig> config_; 193 scoped_refptr<InMemoryHostConfig> config_;
157 MockChromotingHostContext context_; 194 MockChromotingHostContext context_;
158 scoped_refptr<MockConnectionToClient> connection_; 195 scoped_refptr<MockConnectionToClient> connection_;
159 scoped_refptr<MockSession> session_; 196 scoped_refptr<MockSession> session_;
160 scoped_ptr<SessionConfig> session_config_; 197 scoped_ptr<SessionConfig> session_config_;
161 MockVideoStub video_stub_; 198 MockVideoStub video_stub_;
162 MockClientStub client_stub_; 199 MockClientStub client_stub_;
163 MockHostStub* host_stub_; 200 MockHostStub* host_stub_;
164 MockInputStub* input_stub_; 201 MockInputStub* input_stub_;
202 scoped_refptr<MockConnectionToClient> connection2_;
203 scoped_refptr<MockSession> session2_;
204 scoped_ptr<SessionConfig> session_config2_;
205 MockVideoStub video_stub2_;
206 MockClientStub client_stub2_;
207 MockHostStub* host_stub2_;
208 MockInputStub* input_stub2_;
165 }; 209 };
166 210
167 TEST_F(ChromotingHostTest, StartAndShutdown) { 211 TEST_F(ChromotingHostTest, StartAndShutdown) {
168 host_->Start(NewRunnableFunction(&PostQuitTask, &message_loop_)); 212 host_->Start(NewRunnableFunction(&PostQuitTask, &message_loop_));
169 213
170 message_loop_.PostTask(FROM_HERE, 214 message_loop_.PostTask(FROM_HERE,
171 NewRunnableMethod(host_.get(), 215 NewRunnableMethod(host_.get(),
172 &ChromotingHost::Shutdown)); 216 &ChromotingHost::Shutdown));
173 message_loop_.Run(); 217 message_loop_.Run();
174 } 218 }
(...skipping 10 matching lines...) Expand all
185 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) 229 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
186 .WillOnce(DoAll( 230 .WillOnce(DoAll(
187 InvokeWithoutArgs(host_.get(), &ChromotingHost::Shutdown), 231 InvokeWithoutArgs(host_.get(), &ChromotingHost::Shutdown),
188 RunDoneTask())) 232 RunDoneTask()))
189 .RetiresOnSaturation(); 233 .RetiresOnSaturation();
190 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) 234 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
191 .Times(AnyNumber()); 235 .Times(AnyNumber());
192 EXPECT_CALL(*connection_.get(), Disconnect()) 236 EXPECT_CALL(*connection_.get(), Disconnect())
193 .RetiresOnSaturation(); 237 .RetiresOnSaturation();
194 238
195 SimulateClientConnection(); 239 SimulateClientConnection(0);
196 message_loop_.Run(); 240 message_loop_.Run();
197 } 241 }
198 242
199 TEST_F(ChromotingHostTest, Reconnect) { 243 TEST_F(ChromotingHostTest, Reconnect) {
200 host_->Start(NewRunnableFunction(&PostQuitTask, &message_loop_)); 244 host_->Start(NewRunnableFunction(&PostQuitTask, &message_loop_));
201 245
202 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) 246 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _))
203 .Times(2) 247 .Times(2)
204 .WillRepeatedly(RunDoneTask()); 248 .WillRepeatedly(RunDoneTask());
205 249
206 // When the video packet is received we first disconnect the mock 250 // When the video packet is received we first disconnect the mock
207 // connection. 251 // connection.
208 { 252 {
209 InSequence s; 253 InSequence s;
210 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) 254 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
211 .WillOnce(DoAll( 255 .WillOnce(DoAll(
212 InvokeWithoutArgs(this, 256 InvokeWithoutArgs(this,
213 &ChromotingHostTest::RemoveClientConnection), 257 &ChromotingHostTest::RemoveClientConnection),
214 RunDoneTask())) 258 RunDoneTask()))
215 .RetiresOnSaturation(); 259 .RetiresOnSaturation();
216 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) 260 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
217 .Times(AnyNumber()); 261 .Times(AnyNumber());
218 } 262 }
219 263
220 // If Disconnect() is called we can break the main message loop. 264 // If Disconnect() is called we can break the main message loop.
221 EXPECT_CALL(*connection_.get(), Disconnect()) 265 EXPECT_CALL(*connection_.get(), Disconnect())
222 .WillOnce(QuitMainMessageLoop(&message_loop_)) 266 .WillOnce(QuitMainMessageLoop(&message_loop_))
223 .RetiresOnSaturation(); 267 .RetiresOnSaturation();
224 268
225 SimulateClientConnection(); 269 SimulateClientConnection(0);
226 message_loop_.Run(); 270 message_loop_.Run();
227 271
228 // Connect the client again. 272 // Connect the client again.
229 { 273 {
230 InSequence s; 274 InSequence s;
231 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) 275 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
232 .WillOnce(DoAll( 276 .WillOnce(DoAll(
233 InvokeWithoutArgs(host_.get(), &ChromotingHost::Shutdown), 277 InvokeWithoutArgs(host_.get(), &ChromotingHost::Shutdown),
234 RunDoneTask())) 278 RunDoneTask()))
235 .RetiresOnSaturation(); 279 .RetiresOnSaturation();
236 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) 280 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
237 .Times(AnyNumber()); 281 .Times(AnyNumber());
238 } 282 }
239 EXPECT_CALL(*connection_.get(), Disconnect()) 283 EXPECT_CALL(*connection_.get(), Disconnect())
240 .RetiresOnSaturation(); 284 .RetiresOnSaturation();
241 285
242 SimulateClientConnection(); 286 SimulateClientConnection(0);
243 message_loop_.Run(); 287 message_loop_.Run();
244 } 288 }
245 289
290 TEST_F(ChromotingHostTest, ConnectTwice) {
291 host_->Start(NewRunnableFunction(&PostQuitTask, &message_loop_));
292
293 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _))
294 .Times(1)
295 .WillRepeatedly(RunDoneTask());
296
297 EXPECT_CALL(client_stub2_, BeginSessionResponse(_, _))
298 .Times(1)
299 .WillRepeatedly(RunDoneTask());
300
301 // When a video packet is received we connect the second mock
302 // connection.
303 {
304 InSequence s;
305 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
306 .WillOnce(DoAll(
307 InvokeWithoutArgs(
308 this, &ChromotingHostTest::SimulateSecondClientConnection),
309 RunDoneTask()))
310 .RetiresOnSaturation();
311 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _))
312 .Times(AnyNumber());
313 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _))
314 .WillOnce(DoAll(
315 InvokeWithoutArgs(host_.get(), &ChromotingHost::Shutdown),
316 RunDoneTask()))
317 .RetiresOnSaturation();
318 EXPECT_CALL(video_stub2_, ProcessVideoPacket(_, _))
319 .Times(AnyNumber());
320 }
321
322 EXPECT_CALL(*connection_.get(), Disconnect())
323 .RetiresOnSaturation();
324 EXPECT_CALL(*connection2_.get(), Disconnect())
325 .RetiresOnSaturation();
326
327 SimulateClientConnection(0);
328 message_loop_.Run();
329 }
330
246 } // namespace remoting 331 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698