Chromium Code Reviews| Index: client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py |
| diff --git a/client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py b/client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py |
| index ba9699dd869432f0fbb40082f01870dbebd8896b..125bb3e310460012eb70336e71f42f2de1646c05 100644 |
| --- a/client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py |
| +++ b/client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py |
| @@ -10,12 +10,84 @@ import dbus |
| class platform_CrosDisksDBus(test.test): |
| version = 1 |
| + def validate_disk(self, disk): |
| + # Disk properties provided by the API |
| + disk_properties = ( |
| + ('DeviceFile', dbus.String), |
| + ('DeviceIsDrive', dbus.Boolean), |
| + ('DeviceIsMediaAvailable', dbus.Boolean), |
| + ('DeviceIsMounted', dbus.Boolean), |
| + ('DeviceIsOpticalDisc', dbus.Boolean), |
| + ('DeviceIsReadOnly', dbus.Boolean), |
| + ('DeviceMountPaths', dbus.String), |
| + ('DevicePresentationHide', dbus.Boolean), |
| + ('DeviceSize', dbus.Int64), |
| + ('DriveIsRotational', dbus.Boolean), |
| + ('DriveModel', dbus.String), |
| + ('IdLabel', dbus.String), |
| + ('NativePath', dbus.String), |
| + ) |
| + |
| + for (prop_name, prop_value_type) in disk_properties: |
| + # Check if all disk properties are set. |
| + if prop_name not in disk: |
| + raise error.TestFail("disk.%s not found" % prop_name) |
| + |
| + # Check if each disk property has the right data type. |
| + prop_value = disk[prop_name] |
| + if not isinstance(prop_value, prop_value_type): |
| + raise error.TestFail( |
| + "disk.%s is %s, but %s expected" |
| + % (prop_name, type(prop_value), prop_value_type)) |
| + |
| + # Check if DeviceFile has a proper value. |
| + if not disk['DeviceFile']: |
| + raise error.TestFail( |
| + "disk.DeviceFile should not be empty") |
| + |
| + # Check if the values of DeviceIsMounted and DeviceMountPaths |
| + # are consistent. |
| + if disk['DeviceIsMounted']: |
| + if not disk['DeviceMountPaths']: |
| + raise error.TestFail( |
| + "disk.DeviceMountPaths should not be empty " |
| + "if disk.DeviceIsMounted is true") |
| + else: |
| + if disk['DeviceMountPaths']: |
| + raise error.TestFail( |
| + "disk.DeviceMountPaths should be empty " |
| + "if disk.DeviceIsMounted is false") |
| + |
| def run_once(self): |
| # TODO(rtc): Excercise the whole API. |
| bus = dbus.SystemBus() |
| proxy = bus.get_object('org.chromium.CrosDisks', |
| '/org/chromium/CrosDisks') |
| cros_disks = dbus.Interface(proxy, 'org.chromium.CrosDisks') |
| + |
| + # Check if CrosDisks server is alive. |
|
rtc
2011/04/18 20:29:13
Can you pull these checks into different methods?
|
| is_alive = cros_disks.IsAlive() |
| if not is_alive: |
| raise error.TestFail("Unable to talk to the disk daemon") |
| + |
| + # Check if EnumerateDevices method returns a list of devices. |
| + devices = cros_disks.EnumerateDevices() |
| + for device in devices: |
| + if not device or not isinstance(device, dbus.String): |
| + raise error.TestFail( |
| + "device returned by EnumerateDevices " |
| + "should be a non-empty string") |
| + |
| + # Check if GetAll method returns a list of disk properties. |
| + disks = cros_disks.GetAll() |
| + for disk in disks: |
| + self.validate_disk(disk) |
| + |
| + # Check if GetAll and EnumerateDevices return the same number |
| + # of entries. |
| + if len(disks) != len(devices): |
| + raise error.TestFail( |
| + "GetAll returns %d entries, " |
| + "but EnumerateDevices returns %d entries" |
| + % (len(disks), len(devices))) |
| + |