OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "dbus/object_manager.h" | 5 #include "dbus/object_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 | 80 |
81 // Create the client, using the D-Bus thread. | 81 // Create the client, using the D-Bus thread. |
82 Bus::Options bus_options; | 82 Bus::Options bus_options; |
83 bus_options.bus_type = Bus::SESSION; | 83 bus_options.bus_type = Bus::SESSION; |
84 bus_options.connection_type = Bus::PRIVATE; | 84 bus_options.connection_type = Bus::PRIVATE; |
85 bus_options.dbus_task_runner = dbus_thread_->task_runner(); | 85 bus_options.dbus_task_runner = dbus_thread_->task_runner(); |
86 bus_ = new Bus(bus_options); | 86 bus_ = new Bus(bus_options); |
87 ASSERT_TRUE(bus_->HasDBusThread()); | 87 ASSERT_TRUE(bus_->HasDBusThread()); |
88 | 88 |
89 object_manager_ = bus_->GetObjectManager( | 89 object_manager_ = bus_->GetObjectManager( |
90 "org.chromium.TestService", | 90 test_service_->service_name(), |
91 ObjectPath("/org/chromium/TestService")); | 91 ObjectPath("/org/chromium/TestService")); |
92 object_manager_->RegisterInterface("org.chromium.TestInterface", this); | 92 object_manager_->RegisterInterface("org.chromium.TestInterface", this); |
93 | 93 |
94 WaitForObject(); | 94 WaitForObject(); |
95 } | 95 } |
96 | 96 |
97 void TearDown() override { | 97 void TearDown() override { |
98 bus_->ShutdownOnDBusThreadAndBlock(); | 98 bus_->ShutdownOnDBusThreadAndBlock(); |
99 | 99 |
100 // Shut down the service. | 100 // Shut down the service. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 } | 182 } |
183 | 183 |
184 void WaitForMethodCallback() { | 184 void WaitForMethodCallback() { |
185 run_loop_.reset(new base::RunLoop); | 185 run_loop_.reset(new base::RunLoop); |
186 run_loop_->Run(); | 186 run_loop_->Run(); |
187 method_callback_called_ = false; | 187 method_callback_called_ = false; |
188 } | 188 } |
189 | 189 |
190 void PerformAction(const std::string& action, const ObjectPath& object_path) { | 190 void PerformAction(const std::string& action, const ObjectPath& object_path) { |
191 ObjectProxy* object_proxy = bus_->GetObjectProxy( | 191 ObjectProxy* object_proxy = bus_->GetObjectProxy( |
192 "org.chromium.TestService", | 192 test_service_->service_name(), |
193 ObjectPath("/org/chromium/TestObject")); | 193 ObjectPath("/org/chromium/TestObject")); |
194 | 194 |
195 MethodCall method_call("org.chromium.TestInterface", "PerformAction"); | 195 MethodCall method_call("org.chromium.TestInterface", "PerformAction"); |
196 MessageWriter writer(&method_call); | 196 MessageWriter writer(&method_call); |
197 writer.AppendString(action); | 197 writer.AppendString(action); |
198 writer.AppendObjectPath(object_path); | 198 writer.AppendObjectPath(object_path); |
199 | 199 |
200 object_proxy->CallMethod(&method_call, | 200 object_proxy->CallMethod(&method_call, |
201 ObjectProxy::TIMEOUT_USE_DEFAULT, | 201 ObjectProxy::TIMEOUT_USE_DEFAULT, |
202 base::Bind(&ObjectManagerTest::MethodCallback, | 202 base::Bind(&ObjectManagerTest::MethodCallback, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 } | 281 } |
282 | 282 |
283 TEST_F(ObjectManagerTest, GetObjectsWithUnknownInterface) { | 283 TEST_F(ObjectManagerTest, GetObjectsWithUnknownInterface) { |
284 std::vector<ObjectPath> object_paths = | 284 std::vector<ObjectPath> object_paths = |
285 object_manager_->GetObjectsWithInterface("org.chromium.UnknownService"); | 285 object_manager_->GetObjectsWithInterface("org.chromium.UnknownService"); |
286 EXPECT_EQ(0U, object_paths.size()); | 286 EXPECT_EQ(0U, object_paths.size()); |
287 } | 287 } |
288 | 288 |
289 TEST_F(ObjectManagerTest, SameObject) { | 289 TEST_F(ObjectManagerTest, SameObject) { |
290 ObjectManager* object_manager = bus_->GetObjectManager( | 290 ObjectManager* object_manager = bus_->GetObjectManager( |
291 "org.chromium.TestService", | 291 test_service_->service_name(), |
292 ObjectPath("/org/chromium/TestService")); | 292 ObjectPath("/org/chromium/TestService")); |
293 EXPECT_EQ(object_manager_, object_manager); | 293 EXPECT_EQ(object_manager_, object_manager); |
294 } | 294 } |
295 | 295 |
296 TEST_F(ObjectManagerTest, DifferentObjectForService) { | 296 TEST_F(ObjectManagerTest, DifferentObjectForService) { |
297 ObjectManager* object_manager = bus_->GetObjectManager( | 297 ObjectManager* object_manager = bus_->GetObjectManager( |
298 "org.chromium.DifferentService", | 298 "org.chromium.DifferentService", |
299 ObjectPath("/org/chromium/TestService")); | 299 ObjectPath("/org/chromium/TestService")); |
300 EXPECT_NE(object_manager_, object_manager); | 300 EXPECT_NE(object_manager_, object_manager); |
301 } | 301 } |
302 | 302 |
303 TEST_F(ObjectManagerTest, DifferentObjectForPath) { | 303 TEST_F(ObjectManagerTest, DifferentObjectForPath) { |
304 ObjectManager* object_manager = bus_->GetObjectManager( | 304 ObjectManager* object_manager = bus_->GetObjectManager( |
305 "org.chromium.TestService", | 305 test_service_->service_name(), |
306 ObjectPath("/org/chromium/DifferentService")); | 306 ObjectPath("/org/chromium/DifferentService")); |
307 EXPECT_NE(object_manager_, object_manager); | 307 EXPECT_NE(object_manager_, object_manager); |
308 } | 308 } |
309 | 309 |
310 TEST_F(ObjectManagerTest, SecondObject) { | 310 TEST_F(ObjectManagerTest, SecondObject) { |
311 PerformAction("AddObject", ObjectPath("/org/chromium/SecondObject")); | 311 PerformAction("AddObject", ObjectPath("/org/chromium/SecondObject")); |
312 WaitForObject(); | 312 WaitForObject(); |
313 | 313 |
314 ObjectProxy* object_proxy = object_manager_->GetObjectProxy( | 314 ObjectProxy* object_proxy = object_manager_->GetObjectProxy( |
315 ObjectPath("/org/chromium/SecondObject")); | 315 ObjectPath("/org/chromium/SecondObject")); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 | 380 |
381 std::vector<ObjectPath> object_paths = object_manager_->GetObjects(); | 381 std::vector<ObjectPath> object_paths = object_manager_->GetObjects(); |
382 ASSERT_EQ(1U, object_paths.size()); | 382 ASSERT_EQ(1U, object_paths.size()); |
383 } | 383 } |
384 | 384 |
385 TEST_F(ObjectManagerTest, PropertiesChangedAsObjectsReceived) { | 385 TEST_F(ObjectManagerTest, PropertiesChangedAsObjectsReceived) { |
386 // Remove the existing object manager. | 386 // Remove the existing object manager. |
387 object_manager_->UnregisterInterface("org.chromium.TestInterface"); | 387 object_manager_->UnregisterInterface("org.chromium.TestInterface"); |
388 run_loop_.reset(new base::RunLoop); | 388 run_loop_.reset(new base::RunLoop); |
389 EXPECT_TRUE(bus_->RemoveObjectManager( | 389 EXPECT_TRUE(bus_->RemoveObjectManager( |
390 "org.chromium.TestService", | 390 test_service_->service_name(), |
391 ObjectPath("/org/chromium/TestService"), | 391 ObjectPath("/org/chromium/TestService"), |
392 run_loop_->QuitClosure())); | 392 run_loop_->QuitClosure())); |
393 run_loop_->Run(); | 393 run_loop_->Run(); |
394 | 394 |
395 PerformAction("SetSendImmediatePropertiesChanged", | 395 PerformAction("SetSendImmediatePropertiesChanged", |
396 ObjectPath("/org/chromium/TestService")); | 396 ObjectPath("/org/chromium/TestService")); |
397 | 397 |
398 object_manager_ = bus_->GetObjectManager( | 398 object_manager_ = bus_->GetObjectManager( |
399 "org.chromium.TestService", | 399 test_service_->service_name(), |
400 ObjectPath("/org/chromium/TestService")); | 400 ObjectPath("/org/chromium/TestService")); |
401 object_manager_->RegisterInterface("org.chromium.TestInterface", this); | 401 object_manager_->RegisterInterface("org.chromium.TestInterface", this); |
402 | 402 |
403 // The newly created object manager should call GetManagedObjects immediately | 403 // The newly created object manager should call GetManagedObjects immediately |
404 // after setting up the match rule for PropertiesChanged. We should process | 404 // after setting up the match rule for PropertiesChanged. We should process |
405 // the PropertiesChanged event right after that. If we don't receive it within | 405 // the PropertiesChanged event right after that. If we don't receive it within |
406 // 2 seconds, then fail the test. | 406 // 2 seconds, then fail the test. |
407 message_loop_.PostDelayedTask( | 407 message_loop_.PostDelayedTask( |
408 FROM_HERE, | 408 FROM_HERE, |
409 base::Bind(&ObjectManagerTest::PropertiesChangedTestTimeout, | 409 base::Bind(&ObjectManagerTest::PropertiesChangedTestTimeout, |
410 base::Unretained(this)), | 410 base::Unretained(this)), |
411 base::TimeDelta::FromSeconds(2)); | 411 base::TimeDelta::FromSeconds(2)); |
412 | 412 |
413 while (last_name_value_ != "ChangedTestServiceName" && !timeout_expired_) { | 413 while (last_name_value_ != "ChangedTestServiceName" && !timeout_expired_) { |
414 run_loop_.reset(new base::RunLoop); | 414 run_loop_.reset(new base::RunLoop); |
415 run_loop_->Run(); | 415 run_loop_->Run(); |
416 } | 416 } |
417 } | 417 } |
418 | 418 |
419 } // namespace dbus | 419 } // namespace dbus |
OLD | NEW |