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

Side by Side Diff: chromeos/dbus/shill_device_client.cc

Issue 11365022: Add TestInterface methods for adding shill stub devices and services (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Yet another clang fix Created 8 years, 1 month 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) 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/shill_device_client.h" 5 #include "chromeos/dbus/shill_device_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 const base::Closure& callback, 181 const base::Closure& callback,
182 const ErrorCallback& error_callback) OVERRIDE { 182 const ErrorCallback& error_callback) OVERRIDE {
183 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface, 183 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface,
184 shill::kSetCarrierFunction); 184 shill::kSetCarrierFunction);
185 dbus::MessageWriter writer(&method_call); 185 dbus::MessageWriter writer(&method_call);
186 writer.AppendString(carrier); 186 writer.AppendString(carrier);
187 GetHelper(device_path)->CallVoidMethodWithErrorCallback( 187 GetHelper(device_path)->CallVoidMethodWithErrorCallback(
188 &method_call, callback, error_callback); 188 &method_call, callback, error_callback);
189 } 189 }
190 190
191 virtual TestInterface* GetTestInterface() OVERRIDE {
192 return NULL;
193 }
194
191 private: 195 private:
192 typedef std::map<std::string, ShillClientHelper*> HelperMap; 196 typedef std::map<std::string, ShillClientHelper*> HelperMap;
193 197
194 // Returns the corresponding ShillClientHelper for the profile. 198 // Returns the corresponding ShillClientHelper for the profile.
195 ShillClientHelper* GetHelper(const dbus::ObjectPath& device_path) { 199 ShillClientHelper* GetHelper(const dbus::ObjectPath& device_path) {
196 HelperMap::iterator it = helpers_.find(device_path.value()); 200 HelperMap::iterator it = helpers_.find(device_path.value());
197 if (it != helpers_.end()) 201 if (it != helpers_.end())
198 return it->second; 202 return it->second;
199 203
200 // There is no helper for the profile, create it. 204 // There is no helper for the profile, create it.
201 dbus::ObjectProxy* object_proxy = 205 dbus::ObjectProxy* object_proxy =
202 bus_->GetObjectProxy(flimflam::kFlimflamServiceName, device_path); 206 bus_->GetObjectProxy(flimflam::kFlimflamServiceName, device_path);
203 ShillClientHelper* helper = new ShillClientHelper(bus_, object_proxy); 207 ShillClientHelper* helper = new ShillClientHelper(bus_, object_proxy);
204 helper->MonitorPropertyChanged(flimflam::kFlimflamDeviceInterface); 208 helper->MonitorPropertyChanged(flimflam::kFlimflamDeviceInterface);
205 helpers_.insert(HelperMap::value_type(device_path.value(), helper)); 209 helpers_.insert(HelperMap::value_type(device_path.value(), helper));
206 return helper; 210 return helper;
207 } 211 }
208 212
209 dbus::Bus* bus_; 213 dbus::Bus* bus_;
210 HelperMap helpers_; 214 HelperMap helpers_;
211 STLValueDeleter<HelperMap> helpers_deleter_; 215 STLValueDeleter<HelperMap> helpers_deleter_;
212 216
213 DISALLOW_COPY_AND_ASSIGN(ShillDeviceClientImpl); 217 DISALLOW_COPY_AND_ASSIGN(ShillDeviceClientImpl);
214 }; 218 };
215 219
216 // A stub implementation of ShillDeviceClient. 220 // A stub implementation of ShillDeviceClient.
217 // Implemented: Stub cellular device for SMS testing. 221 // Implemented: Stub cellular device for SMS testing.
218 class ShillDeviceClientStubImpl : public ShillDeviceClient { 222 class ShillDeviceClientStubImpl : public ShillDeviceClient,
223 public ShillDeviceClient::TestInterface {
219 public: 224 public:
220 ShillDeviceClientStubImpl() : weak_ptr_factory_(this) { 225 ShillDeviceClientStubImpl() : weak_ptr_factory_(this) {
221 // Add a cellular device for SMS. Note: name matches Manager entry. 226 SetDefaultProperties();
222 const char kStubCellular1[] = "stub_cellular1";
223 base::DictionaryValue* cellular_properties = new base::DictionaryValue;
224 cellular_properties->SetWithoutPathExpansion(
225 flimflam::kTypeProperty,
226 base::Value::CreateStringValue(flimflam::kTypeCellular));
227 cellular_properties->SetWithoutPathExpansion(
228 flimflam::kDBusConnectionProperty,
229 base::Value::CreateStringValue("/stub"));
230 cellular_properties->SetWithoutPathExpansion(
231 flimflam::kDBusObjectProperty,
232 base::Value::CreateStringValue("/device/cellular1"));
233 stub_devices_.Set(kStubCellular1, cellular_properties);
234
235 // Create a second device stubbing a modem managed by
236 // ModemManager1 interfaces.
237 // Note: name matches Manager entry.
238 const char kStubCellular2[] = "stub_cellular2";
239 cellular_properties = new base::DictionaryValue;
240 cellular_properties->SetWithoutPathExpansion(
241 flimflam::kTypeProperty,
242 base::Value::CreateStringValue(flimflam::kTypeCellular));
243 cellular_properties->SetWithoutPathExpansion(
244 flimflam::kDBusConnectionProperty,
245 base::Value::CreateStringValue(":stub.0"));
246 cellular_properties->SetWithoutPathExpansion(
247 flimflam::kDBusObjectProperty,
248 base::Value::CreateStringValue(
249 "/org/freedesktop/ModemManager1/stub/0"));
250 stub_devices_.Set(kStubCellular2, cellular_properties);
251 } 227 }
252 228
253 virtual ~ShillDeviceClientStubImpl() {} 229 virtual ~ShillDeviceClientStubImpl() {}
254 230
255 ///////////////////////////////////
256 // ShillDeviceClient overrides. 231 // ShillDeviceClient overrides.
232
257 virtual void AddPropertyChangedObserver( 233 virtual void AddPropertyChangedObserver(
258 const dbus::ObjectPath& device_path, 234 const dbus::ObjectPath& device_path,
259 ShillPropertyChangedObserver* observer) OVERRIDE {} 235 ShillPropertyChangedObserver* observer) OVERRIDE {}
260 236
261 virtual void RemovePropertyChangedObserver( 237 virtual void RemovePropertyChangedObserver(
262 const dbus::ObjectPath& device_path, 238 const dbus::ObjectPath& device_path,
263 ShillPropertyChangedObserver* observer) OVERRIDE {} 239 ShillPropertyChangedObserver* observer) OVERRIDE {}
264 240
265 virtual void GetProperties(const dbus::ObjectPath& device_path, 241 virtual void GetProperties(const dbus::ObjectPath& device_path,
266 const DictionaryValueCallback& callback) OVERRIDE { 242 const DictionaryValueCallback& callback) OVERRIDE {
267 MessageLoop::current()->PostTask( 243 MessageLoop::current()->PostTask(
268 FROM_HERE, 244 FROM_HERE,
269 base::Bind(&ShillDeviceClientStubImpl::PassStubDeviceProperties, 245 base::Bind(&ShillDeviceClientStubImpl::PassStubDeviceProperties,
270 weak_ptr_factory_.GetWeakPtr(), 246 weak_ptr_factory_.GetWeakPtr(),
271 device_path, callback)); 247 device_path, callback));
272 } 248 }
273 249
274 virtual base::DictionaryValue* CallGetPropertiesAndBlock( 250 virtual base::DictionaryValue* CallGetPropertiesAndBlock(
275 const dbus::ObjectPath& device_path) OVERRIDE { 251 const dbus::ObjectPath& device_path) OVERRIDE {
276 return new base::DictionaryValue; 252 return new base::DictionaryValue;
hashimoto 2012/11/02 02:06:47 Could you make this method return the same value a
stevenjb 2012/11/02 02:43:25 Done.
277 } 253 }
278 254
279 virtual void ProposeScan(const dbus::ObjectPath& device_path, 255 virtual void ProposeScan(const dbus::ObjectPath& device_path,
280 const VoidDBusMethodCallback& callback) OVERRIDE { 256 const VoidDBusMethodCallback& callback) OVERRIDE {
281 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS); 257 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS);
282 } 258 }
283 259
284 virtual void SetProperty(const dbus::ObjectPath& device_path, 260 virtual void SetProperty(const dbus::ObjectPath& device_path,
285 const std::string& name, 261 const std::string& name,
286 const base::Value& value, 262 const base::Value& value,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 MessageLoop::current()->PostTask(FROM_HERE, callback); 335 MessageLoop::current()->PostTask(FROM_HERE, callback);
360 } 336 }
361 337
362 virtual void Register(const dbus::ObjectPath& device_path, 338 virtual void Register(const dbus::ObjectPath& device_path,
363 const std::string& network_id, 339 const std::string& network_id,
364 const base::Closure& callback, 340 const base::Closure& callback,
365 const ErrorCallback& error_callback) OVERRIDE { 341 const ErrorCallback& error_callback) OVERRIDE {
366 MessageLoop::current()->PostTask(FROM_HERE, callback); 342 MessageLoop::current()->PostTask(FROM_HERE, callback);
367 } 343 }
368 344
369 // ShillDeviceClient override.
370 virtual void SetCarrier(const dbus::ObjectPath& device_path, 345 virtual void SetCarrier(const dbus::ObjectPath& device_path,
371 const std::string& carrier, 346 const std::string& carrier,
372 const base::Closure& callback, 347 const base::Closure& callback,
373 const ErrorCallback& error_callback) OVERRIDE { 348 const ErrorCallback& error_callback) OVERRIDE {
374 MessageLoop::current()->PostTask(FROM_HERE, callback); 349 MessageLoop::current()->PostTask(FROM_HERE, callback);
375 } 350 }
376 351
352 virtual ShillDeviceClient::TestInterface* GetTestInterface() OVERRIDE {
353 return this;
354 }
355
356 // ShillDeviceClient::TestInterface overrides.
357
358 virtual void AddDevice(const std::string& device_path,
359 const std::string& type,
360 const std::string& object_path,
361 const std::string& connection_path) OVERRIDE {
362 base::DictionaryValue* properties = GetDeviceProperties(device_path);
363 properties->SetWithoutPathExpansion(
364 flimflam::kTypeProperty,
365 base::Value::CreateStringValue(type));
366 properties->SetWithoutPathExpansion(
367 flimflam::kDBusObjectProperty,
368 base::Value::CreateStringValue(object_path));
369 properties->SetWithoutPathExpansion(
370 flimflam::kDBusConnectionProperty,
371 base::Value::CreateStringValue(connection_path));
372 }
373
374 virtual void RemoveDevice(const std::string& device_path) OVERRIDE {
375 stub_devices_.RemoveWithoutPathExpansion(device_path, NULL);
376 }
377
378 virtual void ClearDevices() OVERRIDE {
379 stub_devices_.Clear();
380 }
381
377 private: 382 private:
383 void SetDefaultProperties() {
384 // Add a wifi device. Note: path matches Manager entry.
385 AddDevice("stub_wifi_device1", flimflam::kTypeWifi,
386 "/device/wifi1", "/stub");
387
388 // Add a cellular device. Used in SMS stub. Note: path matches
389 // Manager entry.
390 AddDevice("stub_cellular_device1", flimflam::kTypeCellular,
391 "/device/cellular1", "/stub");
392 }
393
378 void PassStubDeviceProperties(const dbus::ObjectPath& device_path, 394 void PassStubDeviceProperties(const dbus::ObjectPath& device_path,
379 const DictionaryValueCallback& callback) const { 395 const DictionaryValueCallback& callback) const {
380 const base::DictionaryValue* device_properties = NULL; 396 const base::DictionaryValue* device_properties = NULL;
381 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) { 397 if (!stub_devices_.GetDictionaryWithoutPathExpansion(
398 device_path.value(), &device_properties)) {
382 base::DictionaryValue empty_dictionary; 399 base::DictionaryValue empty_dictionary;
383 callback.Run(DBUS_METHOD_CALL_FAILURE, empty_dictionary); 400 callback.Run(DBUS_METHOD_CALL_FAILURE, empty_dictionary);
384 return; 401 return;
385 } 402 }
386 callback.Run(DBUS_METHOD_CALL_SUCCESS, *device_properties); 403 callback.Run(DBUS_METHOD_CALL_SUCCESS, *device_properties);
387 } 404 }
388 405
389 // Posts a task to run a void callback with status code |status|. 406 // Posts a task to run a void callback with status code |status|.
390 void PostVoidCallback(const VoidDBusMethodCallback& callback, 407 void PostVoidCallback(const VoidDBusMethodCallback& callback,
391 DBusMethodCallStatus status) { 408 DBusMethodCallStatus status) {
392 MessageLoop::current()->PostTask(FROM_HERE, 409 MessageLoop::current()->PostTask(FROM_HERE,
393 base::Bind(callback, status)); 410 base::Bind(callback, status));
394 } 411 }
395 412
413 base::DictionaryValue* GetDeviceProperties(const std::string& device_path) {
414 base::DictionaryValue* properties = NULL;
415 if (!stub_devices_.GetDictionaryWithoutPathExpansion(
416 device_path, &properties)) {
417 properties = new base::DictionaryValue;
418 stub_devices_.Set(device_path, properties);
419 }
420 return properties;
421 }
422
396 // Dictionary of <device_name, Dictionary>. 423 // Dictionary of <device_name, Dictionary>.
397 base::DictionaryValue stub_devices_; 424 base::DictionaryValue stub_devices_;
398 425
399 // Note: This should remain the last member so it'll be destroyed and 426 // Note: This should remain the last member so it'll be destroyed and
400 // invalidate its weak pointers before any other members are destroyed. 427 // invalidate its weak pointers before any other members are destroyed.
401 base::WeakPtrFactory<ShillDeviceClientStubImpl> weak_ptr_factory_; 428 base::WeakPtrFactory<ShillDeviceClientStubImpl> weak_ptr_factory_;
402 429
403 DISALLOW_COPY_AND_ASSIGN(ShillDeviceClientStubImpl); 430 DISALLOW_COPY_AND_ASSIGN(ShillDeviceClientStubImpl);
404 }; 431 };
405 432
406 } // namespace 433 } // namespace
407 434
408 ShillDeviceClient::ShillDeviceClient() {} 435 ShillDeviceClient::ShillDeviceClient() {}
409 436
410 ShillDeviceClient::~ShillDeviceClient() {} 437 ShillDeviceClient::~ShillDeviceClient() {}
411 438
412 // static 439 // static
413 ShillDeviceClient* ShillDeviceClient::Create( 440 ShillDeviceClient* ShillDeviceClient::Create(
414 DBusClientImplementationType type, 441 DBusClientImplementationType type,
415 dbus::Bus* bus) { 442 dbus::Bus* bus) {
416 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 443 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
417 return new ShillDeviceClientImpl(bus); 444 return new ShillDeviceClientImpl(bus);
418 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 445 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
419 return new ShillDeviceClientStubImpl(); 446 return new ShillDeviceClientStubImpl();
420 } 447 }
421 448
422 } // namespace chromeos 449 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698