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

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: 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 checkes "section" and "key" 61 // Handles SetValue method call. This function checkes "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 dbus::MessageReader reader(method_call);
215 std::string target_name;
216 EXPECT_TRUE(reader.PopString(&target_name));
217 EXPECT_EQ(ibus::config::kServiceName, target_name);
218 EXPECT_FALSE(reader.HasMoreData());
219
220 callback_ = callback;
221 }
222
223 // Invokes reply with given |callback_| in Run method.
224 void EmitReplyCallback(const std::string& owner) {
225 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
226 dbus::MessageWriter writer(response.get());
227 writer.AppendString(owner);
228 callback_.Run(response.get());
229 }
230
231 private:
232 dbus::ObjectProxy::ResponseCallback callback_;
233
234 DISALLOW_COPY_AND_ASSIGN(MockGetNameOwnerMethodCallHandler);
235 };
236
237
238 // The class emulate GetNameOwner signal.
239 class NameOwnerChangedHandler {
240 public:
241 NameOwnerChangedHandler() {}
242
243 // SetNameOwnerChangedCallback mock function.
244 void SetNameOwnerChangedCallback(
245 dbus::ObjectProxy::SignalCallback callback) {
246 callback_ = callback;
247 }
248
249 // Invokes reply with given |callback_| in Run method.
250 void InvokeSignal(const std::string& name,
251 const std::string& old_owner,
252 const std::string& new_owner) {
253 dbus::Signal signal(ibus::kDBusInterface, ibus::kGetNameOwnerMethod);
254 dbus::MessageWriter writer(&signal);
255 writer.AppendString(name);
256 writer.AppendString(old_owner);
257 writer.AppendString(new_owner);
258 callback_.Run(&signal);
259 }
260
261 private:
262 dbus::ObjectProxy::SignalCallback callback_;
263
264 DISALLOW_COPY_AND_ASSIGN(NameOwnerChangedHandler);
265 };
266
267
195 class IBusConfigClientTest : public testing::Test { 268 class IBusConfigClientTest : public testing::Test {
196 public: 269 public:
197 IBusConfigClientTest() {} 270 IBusConfigClientTest() {}
271
198 protected: 272 protected:
199 virtual void SetUp() OVERRIDE { 273 virtual void SetUp() OVERRIDE {
200 dbus::Bus::Options options; 274 dbus::Bus::Options options;
201 mock_bus_ = new dbus::MockBus(options); 275 mock_bus_ = new dbus::MockBus(options);
202 mock_proxy_ = new dbus::MockObjectProxy(mock_bus_.get(), 276 mock_proxy_ = new dbus::MockObjectProxy(mock_bus_.get(),
203 ibus::kServiceName, 277 ibus::kServiceName,
204 dbus::ObjectPath( 278 dbus::ObjectPath(
205 ibus::config::kServicePath)); 279 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()); 280 EXPECT_CALL(*mock_bus_, ShutdownAndBlock());
212 client_.reset(IBusConfigClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION, 281 client_.reset(IBusConfigClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION,
213 mock_bus_)); 282 mock_bus_));
283
284 // Surpress uninteresting mock function call warning.
285 EXPECT_CALL(*mock_bus_.get(), AssertOnOriginThread())
286 .WillRepeatedly(Return());
214 } 287 }
215 288
216 virtual void TearDown() OVERRIDE { 289 virtual void TearDown() OVERRIDE {
217 mock_bus_->ShutdownAndBlock(); 290 mock_bus_->ShutdownAndBlock();
218 } 291 }
219 292
293 // Initialize |client_| with success configuration.
294 void SycnhronousInitialize() {
satorux1 2012/11/28 06:43:12 InitializeSync() ? Please also add some comment ex
Seigo Nonaka 2012/11/28 07:00:37 Done.
295 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
296 dbus::ObjectPath(
297 ibus::config::kServicePath)))
298 .WillOnce(Return(mock_proxy_.get()));
299
300 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
301 = new dbus::MockObjectProxy(mock_bus_.get(),
302 ibus::kServiceName,
303 dbus::ObjectPath(ibus::kDBusObjectPath));
304 EXPECT_CALL(*mock_bus_,
305 GetObjectProxy(ibus::kServiceName,
306 dbus::ObjectPath(ibus::kDBusObjectPath)))
307 .WillOnce(Return(mock_dbus_proxy.get()));
308
309 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
310 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _))
311 .WillOnce(Invoke(&mock_get_name_owner_method_call,
312 &MockGetNameOwnerMethodCallHandler::Run));
313 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_));
314 client_->AsyncInitialize(base::Bind(&base::DoNothing));
315 mock_get_name_owner_method_call.EmitReplyCallback(":0.1");
316 }
317
318
220 // The IBus config client to be tested. 319 // The IBus config client to be tested.
221 scoped_ptr<IBusConfigClient> client_; 320 scoped_ptr<IBusConfigClient> client_;
222 321
223 // A message loop to emulate asynchronous behavior. 322 // A message loop to emulate asynchronous behavior.
224 MessageLoop message_loop_; 323 MessageLoop message_loop_;
225 scoped_refptr<dbus::MockBus> mock_bus_; 324 scoped_refptr<dbus::MockBus> mock_bus_;
226 scoped_refptr<dbus::MockObjectProxy> mock_proxy_; 325 scoped_refptr<dbus::MockObjectProxy> mock_proxy_;
227 }; 326 };
228 327
229 TEST_F(IBusConfigClientTest, SetStringValueTest) { 328 TEST_F(IBusConfigClientTest, SetStringValueTest) {
230 // Set expectations 329 // Set expectations
330 SycnhronousInitialize();
231 const char value[] = "value"; 331 const char value[] = "value";
232 SetStringValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 332 SetStringValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
233 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 333 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
234 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 334 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
235 MockErrorCallback error_callback; 335 MockErrorCallback error_callback;
236 EXPECT_CALL(error_callback, Run()).Times(0); 336 EXPECT_CALL(error_callback, Run()).Times(0);
237 337
238 // Call SetStringValue. 338 // Call SetStringValue.
239 client_->SetStringValue(kKey, kSection, value, 339 client_->SetStringValue(kKey, kSection, value,
240 base::Bind(&MockErrorCallback::Run, 340 base::Bind(&MockErrorCallback::Run,
241 base::Unretained(&error_callback))); 341 base::Unretained(&error_callback)));
242 } 342 }
243 343
244 TEST_F(IBusConfigClientTest, SetStringValueTest_Fail) { 344 TEST_F(IBusConfigClientTest, SetStringValueTest_Fail) {
245 // Set expectations 345 // Set expectations
346 SycnhronousInitialize();
246 const char value[] = "value"; 347 const char value[] = "value";
247 SetStringValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 348 SetStringValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
248 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 349 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
249 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 350 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
250 MockErrorCallback error_callback; 351 MockErrorCallback error_callback;
251 EXPECT_CALL(error_callback, Run()); 352 EXPECT_CALL(error_callback, Run());
252 353
253 // Call SetStringValue. 354 // Call SetStringValue.
254 client_->SetStringValue(kKey, kSection, value, 355 client_->SetStringValue(kKey, kSection, value,
255 base::Bind(&MockErrorCallback::Run, 356 base::Bind(&MockErrorCallback::Run,
256 base::Unretained(&error_callback))); 357 base::Unretained(&error_callback)));
257 } 358 }
258 359
259 TEST_F(IBusConfigClientTest, SetIntValueTest) { 360 TEST_F(IBusConfigClientTest, SetIntValueTest) {
260 // Set expectations 361 // Set expectations
362 SycnhronousInitialize();
261 const int value = 1234; 363 const int value = 1234;
262 SetIntValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 364 SetIntValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
263 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 365 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
264 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 366 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
265 MockErrorCallback error_callback; 367 MockErrorCallback error_callback;
266 EXPECT_CALL(error_callback, Run()).Times(0); 368 EXPECT_CALL(error_callback, Run()).Times(0);
267 369
268 // Call SetIntValue. 370 // Call SetIntValue.
269 client_->SetIntValue(kKey, kSection, value, 371 client_->SetIntValue(kKey, kSection, value,
270 base::Bind(&MockErrorCallback::Run, 372 base::Bind(&MockErrorCallback::Run,
271 base::Unretained(&error_callback))); 373 base::Unretained(&error_callback)));
272 } 374 }
273 375
274 TEST_F(IBusConfigClientTest, SetIntValueTest_Fail) { 376 TEST_F(IBusConfigClientTest, SetIntValueTest_Fail) {
275 // Set expectations 377 // Set expectations
378 SycnhronousInitialize();
276 const int value = 1234; 379 const int value = 1234;
277 SetIntValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 380 SetIntValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
278 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 381 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
279 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 382 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
280 MockErrorCallback error_callback; 383 MockErrorCallback error_callback;
281 EXPECT_CALL(error_callback, Run()); 384 EXPECT_CALL(error_callback, Run());
282 385
283 // Call SetIntValue. 386 // Call SetIntValue.
284 client_->SetIntValue(kKey, kSection, value, 387 client_->SetIntValue(kKey, kSection, value,
285 base::Bind(&MockErrorCallback::Run, 388 base::Bind(&MockErrorCallback::Run,
286 base::Unretained(&error_callback))); 389 base::Unretained(&error_callback)));
287 } 390 }
288 391
289 TEST_F(IBusConfigClientTest, SetBoolValueTest) { 392 TEST_F(IBusConfigClientTest, SetBoolValueTest) {
290 // Set expectations 393 // Set expectations
394 SycnhronousInitialize();
291 const bool value = true; 395 const bool value = true;
292 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 396 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
293 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 397 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
294 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 398 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
295 MockErrorCallback error_callback; 399 MockErrorCallback error_callback;
296 EXPECT_CALL(error_callback, Run()).Times(0); 400 EXPECT_CALL(error_callback, Run()).Times(0);
297 401
298 // Call SetBoolValue. 402 // Call SetBoolValue.
299 client_->SetBoolValue(kKey, kSection, value, 403 client_->SetBoolValue(kKey, kSection, value,
300 base::Bind(&MockErrorCallback::Run, 404 base::Bind(&MockErrorCallback::Run,
301 base::Unretained(&error_callback))); 405 base::Unretained(&error_callback)));
302 } 406 }
303 407
304 TEST_F(IBusConfigClientTest, SetBoolValueTest_Fail) { 408 TEST_F(IBusConfigClientTest, SetBoolValueTest_Fail) {
305 // Set expectations 409 // Set expectations
410 SycnhronousInitialize();
306 const bool value = true; 411 const bool value = true;
307 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 412 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
308 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 413 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
309 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 414 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
310 MockErrorCallback error_callback; 415 MockErrorCallback error_callback;
311 EXPECT_CALL(error_callback, Run()); 416 EXPECT_CALL(error_callback, Run());
312 417
313 // Call SetBoolValue. 418 // Call SetBoolValue.
314 client_->SetBoolValue(kKey, kSection, value, 419 client_->SetBoolValue(kKey, kSection, value,
315 base::Bind(&MockErrorCallback::Run, 420 base::Bind(&MockErrorCallback::Run,
316 base::Unretained(&error_callback))); 421 base::Unretained(&error_callback)));
317 } 422 }
318 423
319 TEST_F(IBusConfigClientTest, SetStringListValueTest) { 424 TEST_F(IBusConfigClientTest, SetStringListValueTest) {
320 // Set expectations 425 // Set expectations
426 SycnhronousInitialize();
321 std::vector<std::string> value; 427 std::vector<std::string> value;
322 value.push_back("Sample value 1"); 428 value.push_back("Sample value 1");
323 value.push_back("Sample value 2"); 429 value.push_back("Sample value 2");
324 430
325 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); 431 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS);
326 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 432 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
327 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 433 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
328 MockErrorCallback error_callback; 434 MockErrorCallback error_callback;
329 EXPECT_CALL(error_callback, Run()).Times(0); 435 EXPECT_CALL(error_callback, Run()).Times(0);
330 436
331 // Call SetStringListValue. 437 // Call SetStringListValue.
332 client_->SetStringListValue(kKey, kSection, value, 438 client_->SetStringListValue(kKey, kSection, value,
333 base::Bind(&MockErrorCallback::Run, 439 base::Bind(&MockErrorCallback::Run,
334 base::Unretained(&error_callback))); 440 base::Unretained(&error_callback)));
335 } 441 }
336 442
337 TEST_F(IBusConfigClientTest, SetStringListValueTest_Fail) { 443 TEST_F(IBusConfigClientTest, SetStringListValueTest_Fail) {
338 // Set expectations 444 // Set expectations
445 SycnhronousInitialize();
339 std::vector<std::string> value; 446 std::vector<std::string> value;
340 value.push_back("Sample value 1"); 447 value.push_back("Sample value 1");
341 value.push_back("Sample value 2"); 448 value.push_back("Sample value 2");
342 449
343 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_FAIL); 450 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
344 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 451 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
345 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); 452 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
346 MockErrorCallback error_callback; 453 MockErrorCallback error_callback;
347 EXPECT_CALL(error_callback, Run()); 454 EXPECT_CALL(error_callback, Run());
348 455
349 // Call SetStringListValue. 456 // Call SetStringListValue.
350 client_->SetStringListValue(kKey, kSection, value, 457 client_->SetStringListValue(kKey, kSection, value,
351 base::Bind(&MockErrorCallback::Run, 458 base::Bind(&MockErrorCallback::Run,
352 base::Unretained(&error_callback))); 459 base::Unretained(&error_callback)));
353 } 460 }
354 461
462 TEST_F(IBusConfigClientTest, IBusConfigDaemon_NotAvailableTest) {
463 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
464
465 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
466 dbus::ObjectPath(
467 ibus::config::kServicePath)))
468 .Times(0);
469
470 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
471 = new dbus::MockObjectProxy(mock_bus_.get(),
472 ibus::kServiceName,
473 dbus::ObjectPath(ibus::kDBusObjectPath));
474 EXPECT_CALL(*mock_bus_,
475 GetObjectProxy(ibus::kServiceName,
476 dbus::ObjectPath(ibus::kDBusObjectPath)))
477 .WillOnce(Return(mock_dbus_proxy.get()));
478 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _))
479 .WillOnce(Invoke(&mock_get_name_owner_method_call,
480 &MockGetNameOwnerMethodCallHandler::Run));
481 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_));
482 client_->AsyncInitialize(base::Bind(&base::DoNothing));
483
484 // Passing empty string means there is no owner, thus ibus-config daemon is
485 // not ready.
486 mock_get_name_owner_method_call.EmitReplyCallback("");
487
488 // Make sure not crashing by function call without initialize.
489 const bool value = true;
490 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)).Times(0);
491 MockErrorCallback error_callback;
492 EXPECT_CALL(error_callback, Run()).Times(0);
493 client_->SetBoolValue(kKey, kSection, value,
494 base::Bind(&MockErrorCallback::Run,
495 base::Unretained(&error_callback)));
496 }
497
498 TEST_F(IBusConfigClientTest, IBusConfigDaemon_SlowInitializeTest) {
499 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
500
501 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
502 dbus::ObjectPath(
503 ibus::config::kServicePath)))
504 .WillOnce(Return(mock_proxy_.get()));
505
506 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
507 = new dbus::MockObjectProxy(mock_bus_.get(),
508 ibus::kServiceName,
509 dbus::ObjectPath(ibus::kDBusObjectPath));
510 EXPECT_CALL(*mock_bus_,
511 GetObjectProxy(ibus::kServiceName,
512 dbus::ObjectPath(ibus::kDBusObjectPath)))
513 .WillOnce(Return(mock_dbus_proxy.get()));
514 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _))
515 .WillOnce(Invoke(&mock_get_name_owner_method_call,
516 &MockGetNameOwnerMethodCallHandler::Run));
517 NameOwnerChangedHandler name_owner_changed_handler;
518 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_))
519 .WillOnce(Invoke(&name_owner_changed_handler,
520 &NameOwnerChangedHandler::SetNameOwnerChangedCallback));
521
522 client_->AsyncInitialize(base::Bind(&base::DoNothing));
523
524 // Passing empty string means there is no owner, thus ibus-config daemon is
525 // not ready.
526 mock_get_name_owner_method_call.EmitReplyCallback("");
527
528 // Fire NameOwnerChanged signal to emulate ibus-config daemon was acquired
529 // well-known name.
530 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName,
531 "",
532 ":0.1");
533
534 // Make sure it is possible to emit method calls.
535 const bool value = true;
536 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
537 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
538 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run));
539 MockErrorCallback error_callback;
540 EXPECT_CALL(error_callback, Run());
541
542 // Call SetBoolValue.
543 client_->SetBoolValue(kKey, kSection, value,
544 base::Bind(&MockErrorCallback::Run,
545 base::Unretained(&error_callback)));
546 }
547
548 TEST_F(IBusConfigClientTest, IBusConfigDaemon_ShutdownTest) {
549 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call;
550
551 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName,
552 dbus::ObjectPath(
553 ibus::config::kServicePath)))
554 .WillRepeatedly(Return(mock_proxy_.get()));
555
556 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy
557 = new dbus::MockObjectProxy(mock_bus_.get(),
558 ibus::kServiceName,
559 dbus::ObjectPath(ibus::kDBusObjectPath));
560 EXPECT_CALL(*mock_bus_,
561 GetObjectProxy(ibus::kServiceName,
562 dbus::ObjectPath(ibus::kDBusObjectPath)))
563 .WillOnce(Return(mock_dbus_proxy.get()));
564 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _))
565 .WillOnce(Invoke(&mock_get_name_owner_method_call,
566 &MockGetNameOwnerMethodCallHandler::Run));
567 NameOwnerChangedHandler name_owner_changed_handler;
568 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_))
569 .WillOnce(Invoke(&name_owner_changed_handler,
570 &NameOwnerChangedHandler::SetNameOwnerChangedCallback));
571
572 client_->AsyncInitialize(base::Bind(&base::DoNothing));
573
574 const bool value = true;
575 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL);
576 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _))
577 .WillRepeatedly(Invoke(&handler, &SetValueVerifierBase::Run));
578 MockErrorCallback error_callback;
579 EXPECT_CALL(error_callback, Run()).WillRepeatedly(Return());
580
581 // Initialize succeeded sucessfully.
582 mock_get_name_owner_method_call.EmitReplyCallback(":0.2");
583
584 // Call SetBoolValue.
585 client_->SetBoolValue(kKey, kSection, value,
586 base::Bind(&MockErrorCallback::Run,
587 base::Unretained(&error_callback)));
588
589 // Fire NameOwnerChanged signal to emulate shutting down the ibus-config
590 // daemon.
591 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName,
592 ":0.1",
593 "");
594
595 // Make sure not crashing on emitting method call.
596 client_->SetBoolValue(kKey, kSection, value,
597 base::Bind(&MockErrorCallback::Run,
598 base::Unretained(&error_callback)));
599
600 // Fire NameOwnerChanged signal to emulate that ibus-daemon is revived.
601 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName,
602 "",
603 ":0.2");
604
605 // Make sure it is possible to emit method calls.
606 client_->SetBoolValue(kKey, kSection, value,
607 base::Bind(&MockErrorCallback::Run,
608 base::Unretained(&error_callback)));
609 }
610
355 } // namespace chromeos 611 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698