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

Side by Side Diff: chromeos/dbus/ibus/ibus_config_client_unittest.cc

Issue 11413165: Makes IBusConfigClient initialize asynchronous. (Closed) Base URL: http://git.chromium.org/chromium/src.git@base
Patch Set: Fix initialize logic Created 8 years 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "chromeos/dbus/ibus/ibus_config_client.h" 5 #include "chromeos/dbus/ibus/ibus_config_client.h"
6 6
7 #include <vector>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/message_loop.h" 10 #include "base/message_loop.h"
9 #include "base/values.h" 11 #include "base/values.h"
10 #include "chromeos/dbus/ibus/ibus_constants.h" 12 #include "chromeos/dbus/ibus/ibus_constants.h"
11 #include "dbus/message.h" 13 #include "dbus/message.h"
12 #include "dbus/mock_bus.h" 14 #include "dbus/mock_bus.h"
13 #include "dbus/mock_object_proxy.h" 15 #include "dbus/mock_object_proxy.h"
14 #include "dbus/object_path.h" 16 #include "dbus/object_path.h"
15 #include "dbus/values_util.h" 17 #include "dbus/values_util.h"
16 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 13 matching lines...) Expand all
30 }; 32 };
31 } // namespace 33 } // namespace
32 34
33 namespace chromeos { 35 namespace chromeos {
34 36
35 class MockErrorCallback { 37 class MockErrorCallback {
36 public: 38 public:
37 MOCK_METHOD0(Run, void()); 39 MOCK_METHOD0(Run, void());
38 }; 40 };
39 41
42 class MockOnIBusConfigReadyCallback {
43 public:
44 MOCK_METHOD0(Run, void());
45 };
46
40 // The base class of each type specified SetValue function handler. This class 47 // The base class of each type specified SetValue function handler. This class
41 // checks "section" and "key" field in SetValue message and callback success or 48 // checks "section" and "key" field in SetValue message and callback success or
42 // error callback based on given |success| flag. 49 // error callback based on given |success| flag.
43 class SetValueVerifierBase { 50 class SetValueVerifierBase {
44 public: 51 public:
45 SetValueVerifierBase(const std::string& expected_section, 52 SetValueVerifierBase(const std::string& expected_section,
46 const std::string& expected_key, 53 const std::string& expected_key,
47 HandlerBehavior behavior) 54 HandlerBehavior behavior)
48 : expected_section_(expected_section), 55 : expected_section_(expected_section),
49 expected_key_(expected_key), 56 expected_key_(expected_key),
50 behavior_(behavior) {} 57 behavior_(behavior) {}
51 58
59 virtual ~SetValueVerifierBase() {}
60
52 // Handles SetValue method call. This function checks "section" and "key" 61 // Handles SetValue method call. This function checks "section" and "key"
53 // field. For the "value" field, subclass checks it with over riding 62 // field. For the "value" field, subclass checks it with over riding
54 // VeirfyVariant member function. 63 // VeirfyVariant member function.
55 void Run(dbus::MethodCall* method_call, 64 void Run(dbus::MethodCall* method_call,
56 int timeout_ms, 65 int timeout_ms,
57 const dbus::ObjectProxy::ResponseCallback& callback, 66 const dbus::ObjectProxy::ResponseCallback& callback,
58 const dbus::ObjectProxy::ErrorCallback& error_callback) { 67 const dbus::ObjectProxy::ErrorCallback& error_callback) {
59 dbus::MessageReader reader(method_call); 68 dbus::MessageReader reader(method_call);
60 std::string section; 69 std::string section;
61 std::string key; 70 std::string key;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 } 194 }
186 EXPECT_FALSE(array_reader.HasMoreData()); 195 EXPECT_FALSE(array_reader.HasMoreData());
187 } 196 }
188 197
189 private: 198 private:
190 const std::vector<std::string>& expected_value_; 199 const std::vector<std::string>& expected_value_;
191 200
192 DISALLOW_COPY_AND_ASSIGN(SetStringListValueHandler); 201 DISALLOW_COPY_AND_ASSIGN(SetStringListValueHandler);
193 }; 202 };
194 203
204 // The class verifies GetNameOwner method call and emits response callback
205 // asynchronouslly.
206 class MockGetNameOwnerMethodCallHandler {
207 public:
208 MockGetNameOwnerMethodCallHandler() {}
209
210 // Handles CallMethod function.
211 void Run(dbus::MethodCall* method_call,
212 int timeout_ms,
213 const dbus::ObjectProxy::ResponseCallback& callback,
214 const dbus::ObjectProxy::ErrorCallback& error_callback) {
215 dbus::MessageReader reader(method_call);
216 std::string target_name;
217 EXPECT_TRUE(reader.PopString(&target_name));
218 EXPECT_EQ(ibus::config::kServiceName, target_name);
219 EXPECT_FALSE(reader.HasMoreData());
220
221 callback_ = callback;
222 }
223
224 // Invokes reply with given |callback_| in Run method.
225 void EmitReplyCallback(const std::string& owner) {
226 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
227 dbus::MessageWriter writer(response.get());
228 writer.AppendString(owner);
229 callback_.Run(response.get());
230 }
231
232 private:
233 dbus::ObjectProxy::ResponseCallback callback_;
234
235 DISALLOW_COPY_AND_ASSIGN(MockGetNameOwnerMethodCallHandler);
236 };
237
238
239 // The class emulate GetNameOwner signal.
240 class NameOwnerChangedHandler {
241 public:
242 NameOwnerChangedHandler() {}
243
244 // OnConnectToSignal mock function.
245 void OnConnectToSignal(
246 const std::string& interface_name,
247 const std::string& signal_name,
248 const dbus::ObjectProxy::SignalCallback& signal_callback,
249 const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) {
250 callback_ = signal_callback;
251 on_connected_callback.Run(interface_name, signal_name, true);
252 }
253
254 // Invokes reply with given |callback_| in Run method.
255 void InvokeSignal(const std::string& name,
256 const std::string& old_owner,
257 const std::string& new_owner) {
258 dbus::Signal signal(ibus::kDBusInterface, ibus::kGetNameOwnerMethod);
259 dbus::MessageWriter writer(&signal);
260 writer.AppendString(name);
261 writer.AppendString(old_owner);
262 writer.AppendString(new_owner);
263 callback_.Run(&signal);
264 }
265
266 private:
267 dbus::ObjectProxy::SignalCallback callback_;
268
269 DISALLOW_COPY_AND_ASSIGN(NameOwnerChangedHandler);
270 };
271
272
195 class IBusConfigClientTest : public testing::Test { 273 class IBusConfigClientTest : public testing::Test {
196 public: 274 public:
197 IBusConfigClientTest() {} 275 IBusConfigClientTest() {}
276
198 protected: 277 protected:
199 virtual void SetUp() OVERRIDE { 278 virtual void SetUp() OVERRIDE {
200 dbus::Bus::Options options; 279 dbus::Bus::Options options;
201 mock_bus_ = new dbus::MockBus(options); 280 mock_bus_ = new dbus::MockBus(options);
202 mock_proxy_ = new dbus::MockObjectProxy(mock_bus_.get(), 281 mock_proxy_ = new dbus::MockObjectProxy(mock_bus_.get(),
203 ibus::kServiceName, 282 ibus::kServiceName,
204 dbus::ObjectPath( 283 dbus::ObjectPath(
205 ibus::config::kServicePath)); 284 ibus::config::kServicePath));
206 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
207 dbus::ObjectPath(
208 ibus::config::kServicePath)))
209 .WillOnce(Return(mock_proxy_.get()));
210
211 EXPECT_CALL(*mock_bus_, ShutdownAndBlock()); 285 EXPECT_CALL(*mock_bus_, ShutdownAndBlock());
212 client_.reset(IBusConfigClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION, 286 client_.reset(IBusConfigClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION,
213 mock_bus_)); 287 mock_bus_));
288
289 // Surpress uninteresting mock function call warning.
290 EXPECT_CALL(*mock_bus_.get(), AssertOnOriginThread())
291 .WillRepeatedly(Return());
214 } 292 }
215 293
216 virtual void TearDown() OVERRIDE { 294 virtual void TearDown() OVERRIDE {
217 mock_bus_->ShutdownAndBlock(); 295 mock_bus_->ShutdownAndBlock();
218 } 296 }
219 297
298 // Initialize |client_| by replying valid owner name synchronously.
299 void InitializeSync() {
300 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
301 dbus::ObjectPath(
302 ibus::config::kServicePath)))
303 .WillOnce(Return(mock_proxy_.get()));
304
305 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
306 = new dbus::MockObjectProxy(mock_bus_.get(),
307 ibus::kDBusServiceName,
308 dbus::ObjectPath(ibus::kDBusObjectPath));
309 EXPECT_CALL(*mock_bus_,
310 GetObjectProxy(ibus::kServiceName,
311 dbus::ObjectPath(ibus::kDBusObjectPath)))
312 .WillOnce(Return(mock_dbus_proxy.get()));
313
314 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
315 EXPECT_CALL(*mock_dbus_proxy, CallMethodWithErrorCallback(_, _, _, _))
316 .WillOnce(Invoke(&mock_get_name_owner_method_call,
317 &MockGetNameOwnerMethodCallHandler::Run));
318 NameOwnerChangedHandler handler;
319 EXPECT_CALL(*mock_dbus_proxy, ConnectToSignal(
320 ibus::kDBusInterface,
321 ibus::kNameOwnerChangedSignal,
322 _,
323 _)).WillOnce(Invoke(&handler,
324 &NameOwnerChangedHandler::OnConnectToSignal));
325 client_->InitializeAsync(base::Bind(&base::DoNothing));
326 mock_get_name_owner_method_call.EmitReplyCallback(":0.1");
327 }
328
220 // The IBus config client to be tested. 329 // The IBus config client to be tested.
221 scoped_ptr<IBusConfigClient> client_; 330 scoped_ptr<IBusConfigClient> client_;
222 331
223 // A message loop to emulate asynchronous behavior. 332 // A message loop to emulate asynchronous behavior.
224 MessageLoop message_loop_; 333 MessageLoop message_loop_;
225 scoped_refptr<dbus::MockBus> mock_bus_; 334 scoped_refptr<dbus::MockBus> mock_bus_;
226 scoped_refptr<dbus::MockObjectProxy> mock_proxy_; 335 scoped_refptr<dbus::MockObjectProxy> mock_proxy_;
227 }; 336 };
228 337
229 TEST_F(IBusConfigClientTest, SetStringValueTest) { 338 TEST_F(IBusConfigClientTest, SetStringValueTest) {
230 // Set expectations 339 // Set expectations
340 InitializeSync();
231 const char value[] = "value"; 341 const char value[] = "value";
232 SetStringValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 342 SetStringValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
233 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 343 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
234 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 344 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
235 MockErrorCallback error_callback; 345 MockErrorCallback error_callback;
236 EXPECT_CALL(error_callback, Run()).Times(0); 346 EXPECT_CALL(error_callback, Run()).Times(0);
237 347
238 // Call SetStringValue. 348 // Call SetStringValue.
239 client_->SetStringValue(kKey, kSection, value, 349 client_->SetStringValue(kKey, kSection, value,
240 base::Bind(&MockErrorCallback::Run, 350 base::Bind(&MockErrorCallback::Run,
241 base::Unretained(&error_callback))); 351 base::Unretained(&error_callback)));
242 } 352 }
243 353
244 TEST_F(IBusConfigClientTest, SetStringValueTest_Fail) { 354 TEST_F(IBusConfigClientTest, SetStringValueTest_Fail) {
245 // Set expectations 355 // Set expectations
356 InitializeSync();
246 const char value[] = "value"; 357 const char value[] = "value";
247 SetStringValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 358 SetStringValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
248 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 359 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
249 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 360 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
250 MockErrorCallback error_callback; 361 MockErrorCallback error_callback;
251 EXPECT_CALL(error_callback, Run()); 362 EXPECT_CALL(error_callback, Run());
252 363
253 // Call SetStringValue. 364 // Call SetStringValue.
254 client_->SetStringValue(kKey, kSection, value, 365 client_->SetStringValue(kKey, kSection, value,
255 base::Bind(&MockErrorCallback::Run, 366 base::Bind(&MockErrorCallback::Run,
256 base::Unretained(&error_callback))); 367 base::Unretained(&error_callback)));
257 } 368 }
258 369
259 TEST_F(IBusConfigClientTest, SetIntValueTest) { 370 TEST_F(IBusConfigClientTest, SetIntValueTest) {
260 // Set expectations 371 // Set expectations
372 InitializeSync();
261 const int value = 1234; 373 const int value = 1234;
262 SetIntValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 374 SetIntValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
263 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 375 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
264 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 376 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
265 MockErrorCallback error_callback; 377 MockErrorCallback error_callback;
266 EXPECT_CALL(error_callback, Run()).Times(0); 378 EXPECT_CALL(error_callback, Run()).Times(0);
267 379
268 // Call SetIntValue. 380 // Call SetIntValue.
269 client_->SetIntValue(kKey, kSection, value, 381 client_->SetIntValue(kKey, kSection, value,
270 base::Bind(&MockErrorCallback::Run, 382 base::Bind(&MockErrorCallback::Run,
271 base::Unretained(&error_callback))); 383 base::Unretained(&error_callback)));
272 } 384 }
273 385
274 TEST_F(IBusConfigClientTest, SetIntValueTest_Fail) { 386 TEST_F(IBusConfigClientTest, SetIntValueTest_Fail) {
275 // Set expectations 387 // Set expectations
388 InitializeSync();
276 const int value = 1234; 389 const int value = 1234;
277 SetIntValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 390 SetIntValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
278 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 391 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
279 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 392 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
280 MockErrorCallback error_callback; 393 MockErrorCallback error_callback;
281 EXPECT_CALL(error_callback, Run()); 394 EXPECT_CALL(error_callback, Run());
282 395
283 // Call SetIntValue. 396 // Call SetIntValue.
284 client_->SetIntValue(kKey, kSection, value, 397 client_->SetIntValue(kKey, kSection, value,
285 base::Bind(&MockErrorCallback::Run, 398 base::Bind(&MockErrorCallback::Run,
286 base::Unretained(&error_callback))); 399 base::Unretained(&error_callback)));
287 } 400 }
288 401
289 TEST_F(IBusConfigClientTest, SetBoolValueTest) { 402 TEST_F(IBusConfigClientTest, SetBoolValueTest) {
290 // Set expectations 403 // Set expectations
404 InitializeSync();
291 const bool value = true; 405 const bool value = true;
292 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 406 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
293 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 407 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
294 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 408 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
295 MockErrorCallback error_callback; 409 MockErrorCallback error_callback;
296 EXPECT_CALL(error_callback, Run()).Times(0); 410 EXPECT_CALL(error_callback, Run()).Times(0);
297 411
298 // Call SetBoolValue. 412 // Call SetBoolValue.
299 client_->SetBoolValue(kKey, kSection, value, 413 client_->SetBoolValue(kKey, kSection, value,
300 base::Bind(&MockErrorCallback::Run, 414 base::Bind(&MockErrorCallback::Run,
301 base::Unretained(&error_callback))); 415 base::Unretained(&error_callback)));
302 } 416 }
303 417
304 TEST_F(IBusConfigClientTest, SetBoolValueTest_Fail) { 418 TEST_F(IBusConfigClientTest, SetBoolValueTest_Fail) {
305 // Set expectations 419 // Set expectations
420 InitializeSync();
306 const bool value = true; 421 const bool value = true;
307 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 422 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
308 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 423 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
309 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 424 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
310 MockErrorCallback error_callback; 425 MockErrorCallback error_callback;
311 EXPECT_CALL(error_callback, Run()); 426 EXPECT_CALL(error_callback, Run());
312 427
313 // Call SetBoolValue. 428 // Call SetBoolValue.
314 client_->SetBoolValue(kKey, kSection, value, 429 client_->SetBoolValue(kKey, kSection, value,
315 base::Bind(&MockErrorCallback::Run, 430 base::Bind(&MockErrorCallback::Run,
316 base::Unretained(&error_callback))); 431 base::Unretained(&error_callback)));
317 } 432 }
318 433
319 TEST_F(IBusConfigClientTest, SetStringListValueTest) { 434 TEST_F(IBusConfigClientTest, SetStringListValueTest) {
320 // Set expectations 435 // Set expectations
436 InitializeSync();
321 std::vector<std::string> value; 437 std::vector<std::string> value;
322 value.push_back("Sample value 1"); 438 value.push_back("Sample value 1");
323 value.push_back("Sample value 2"); 439 value.push_back("Sample value 2");
324 440
325 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 441 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
326 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 442 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
327 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 443 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
328 MockErrorCallback error_callback; 444 MockErrorCallback error_callback;
329 EXPECT_CALL(error_callback, Run()).Times(0); 445 EXPECT_CALL(error_callback, Run()).Times(0);
330 446
331 // Call SetStringListValue. 447 // Call SetStringListValue.
332 client_->SetStringListValue(kKey, kSection, value, 448 client_->SetStringListValue(kKey, kSection, value,
333 base::Bind(&MockErrorCallback::Run, 449 base::Bind(&MockErrorCallback::Run,
334 base::Unretained(&error_callback))); 450 base::Unretained(&error_callback)));
335 } 451 }
336 452
337 TEST_F(IBusConfigClientTest, SetStringListValueTest_Fail) { 453 TEST_F(IBusConfigClientTest, SetStringListValueTest_Fail) {
338 // Set expectations 454 // Set expectations
455 InitializeSync();
339 std::vector<std::string> value; 456 std::vector<std::string> value;
340 value.push_back("Sample value 1"); 457 value.push_back("Sample value 1");
341 value.push_back("Sample value 2"); 458 value.push_back("Sample value 2");
342 459
343 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 460 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
344 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 461 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
345 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 462 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
346 MockErrorCallback error_callback; 463 MockErrorCallback error_callback;
347 EXPECT_CALL(error_callback, Run()); 464 EXPECT_CALL(error_callback, Run());
348 465
349 // Call SetStringListValue. 466 // Call SetStringListValue.
350 client_->SetStringListValue(kKey, kSection, value, 467 client_->SetStringListValue(kKey, kSection, value,
351 base::Bind(&MockErrorCallback::Run, 468 base::Bind(&MockErrorCallback::Run,
352 base::Unretained(&error_callback))); 469 base::Unretained(&error_callback)));
353 } 470 }
354 471
472 TEST_F(IBusConfigClientTest, IBusConfigDaemon_NotAvailableTest) {
473 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
474
475 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
476 dbus::ObjectPath(
477 ibus::config::kServicePath)))
478 .Times(0);
479
480 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
481 = new dbus::MockObjectProxy(mock_bus_.get(),
482 ibus::kServiceName,
483 dbus::ObjectPath(ibus::kDBusObjectPath));
484 EXPECT_CALL(*mock_bus_,
485 GetObjectProxy(ibus::kServiceName,
486 dbus::ObjectPath(ibus::kDBusObjectPath)))
487 .WillOnce(Return(mock_dbus_proxy.get()));
488 EXPECT_CALL(*mock_dbus_proxy, CallMethodWithErrorCallback(_, _, _, _))
489 .WillOnce(Invoke(&mock_get_name_owner_method_call,
490 &MockGetNameOwnerMethodCallHandler::Run));
491 NameOwnerChangedHandler handler;
492 EXPECT_CALL(*mock_dbus_proxy, ConnectToSignal(
493 ibus::kDBusInterface,
494 ibus::kNameOwnerChangedSignal,
495 _,
496 _)).WillOnce(Invoke(&handler,
497 &NameOwnerChangedHandler::OnConnectToSignal));
498 client_->InitializeAsync(base::Bind(&base::DoNothing));
499
500 // Passing empty string means there is no owner, thus ibus-config daemon is
501 // not ready.
502 mock_get_name_owner_method_call.EmitReplyCallback("");
503
504 // Make sure not crashing by function call without initialize.
505 const bool value = true;
506 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)).Times(0);
507 MockErrorCallback error_callback;
508 EXPECT_CALL(error_callback, Run()).Times(0);
509 client_->SetBoolValue(kKey, kSection, value,
510 base::Bind(&MockErrorCallback::Run,
511 base::Unretained(&error_callback)));
512 }
513
514 TEST_F(IBusConfigClientTest, IBusConfigDaemon_SlowInitializeTest) {
515 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
516
517 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
518 dbus::ObjectPath(
519 ibus::config::kServicePath)))
520 .WillOnce(Return(mock_proxy_.get()));
521
522 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
523 = new dbus::MockObjectProxy(mock_bus_.get(),
524 ibus::kServiceName,
525 dbus::ObjectPath(ibus::kDBusObjectPath));
526 EXPECT_CALL(*mock_bus_,
527 GetObjectProxy(ibus::kServiceName,
528 dbus::ObjectPath(ibus::kDBusObjectPath)))
529 .WillOnce(Return(mock_dbus_proxy.get()));
530 EXPECT_CALL(*mock_dbus_proxy, CallMethodWithErrorCallback(_, _, _, _))
531 .WillOnce(Invoke(&mock_get_name_owner_method_call,
532 &MockGetNameOwnerMethodCallHandler::Run));
533 NameOwnerChangedHandler name_owner_changed_handler;
534 EXPECT_CALL(*mock_dbus_proxy, ConnectToSignal(
535 ibus::kDBusInterface,
536 ibus::kNameOwnerChangedSignal,
537 _,
538 _)).WillOnce(Invoke(&name_owner_changed_handler,
539 &NameOwnerChangedHandler::OnConnectToSignal));
540 client_->InitializeAsync(base::Bind(&base::DoNothing));
541
542 // Passing empty string means there is no owner, thus ibus-config daemon is
543 // not ready.
544 mock_get_name_owner_method_call.EmitReplyCallback("");
545
546 // Fire NameOwnerChanged signal to emulate ibus-config daemon was acquired
547 // well-known name.
548 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName,
549 "",
550 ":0.1");
551
552 // Make sure it is possible to emit method calls.
553 const bool value = true;
554 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
555 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
556 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
557 MockErrorCallback error_callback;
558 EXPECT_CALL(error_callback, Run());
559
560 // Call SetBoolValue.
561 client_->SetBoolValue(kKey, kSection, value,
562 base::Bind(&MockErrorCallback::Run,
563 base::Unretained(&error_callback)));
564 }
565
566 TEST_F(IBusConfigClientTest, IBusConfigDaemon_ShutdownTest) {
567 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
568
569 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
570 dbus::ObjectPath(
571 ibus::config::kServicePath)))
572 .WillRepeatedly(Return(mock_proxy_.get()));
573
574 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
575 = new dbus::MockObjectProxy(mock_bus_.get(),
576 ibus::kServiceName,
577 dbus::ObjectPath(ibus::kDBusObjectPath));
578 EXPECT_CALL(*mock_bus_,
579 GetObjectProxy(ibus::kServiceName,
580 dbus::ObjectPath(ibus::kDBusObjectPath)))
581 .WillOnce(Return(mock_dbus_proxy.get()));
582 EXPECT_CALL(*mock_dbus_proxy, CallMethodWithErrorCallback(_, _, _, _))
583 .WillOnce(Invoke(&mock_get_name_owner_method_call,
584 &MockGetNameOwnerMethodCallHandler::Run));
585 NameOwnerChangedHandler name_owner_changed_handler;
586 EXPECT_CALL(*mock_dbus_proxy, ConnectToSignal(
587 ibus::kDBusInterface,
588 ibus::kNameOwnerChangedSignal,
589 _,
590 _)).WillOnce(Invoke(&name_owner_changed_handler,
591 &NameOwnerChangedHandler::OnConnectToSignal));
592 client_->InitializeAsync(base::Bind(&base::DoNothing));
593
594 const bool value = true;
595 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
596 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
597 .WillRepeatedly(Invoke(&handler, &SetValueVerifierBase::Run));
598 MockErrorCallback error_callback;
599 EXPECT_CALL(error_callback, Run()).WillRepeatedly(Return());
600
601 // Initialize succeeded sucessfully.
602 mock_get_name_owner_method_call.EmitReplyCallback(":0.2");
603
604 // Call SetBoolValue.
605 client_->SetBoolValue(kKey, kSection, value,
606 base::Bind(&MockErrorCallback::Run,
607 base::Unretained(&error_callback)));
608
609 // Fire NameOwnerChanged signal to emulate shutting down the ibus-config
610 // daemon.
611 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName,
612 ":0.1",
613 "");
614
615 // Make sure not crashing on emitting method call.
616 client_->SetBoolValue(kKey, kSection, value,
617 base::Bind(&MockErrorCallback::Run,
618 base::Unretained(&error_callback)));
619
620 // Fire NameOwnerChanged signal to emulate that ibus-daemon is revived.
621 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName,
622 "",
623 ":0.2");
624
625 // Make sure it is possible to emit method calls.
626 client_->SetBoolValue(kKey, kSection, value,
627 base::Bind(&MockErrorCallback::Run,
628 base::Unretained(&error_callback)));
629 }
630
355 } // namespace chromeos 631 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698