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..b23085babd3001946df85a3b3dbba0266ecd8267 100644 |
--- a/client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py |
+++ b/client/site_tests/platform_CrosDisksDBus/platform_CrosDisksDBus.py |
@@ -10,12 +10,117 @@ import dbus |
class platform_CrosDisksDBus(test.test): |
version = 1 |
+ def validate_disk_properties(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.Array), |
+ ('DevicePresentationHide', dbus.Boolean), |
+ ('DeviceSize', dbus.UInt64), |
+ ('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. |
+ mount_paths = disk['DeviceMountPaths'] |
+ if disk['DeviceIsMounted']: |
+ if len(mount_paths) == 0: |
+ raise error.TestFail( |
+ "disk.DeviceMountPaths should not be empty " |
+ "if disk.DeviceIsMounted is true") |
+ else: |
+ if len(mount_paths) != 0: |
+ raise error.TestFail( |
+ "disk.DeviceMountPaths should be empty " |
+ "if disk.DeviceIsMounted is false") |
+ |
+ if mount_paths.signature != dbus.Signature('s'): |
+ raise error.TestFail( |
+ "disk.DeviceMountPaths should contain only strings") |
+ |
+ for mount_path in mount_paths: |
+ if not mount_path: |
+ raise error.TestFail( |
+ "disk.DeviceMountPaths should not contain any " |
+ "empty string") |
+ |
+ def test_is_alive(self): |
+ # Check if CrosDisks server is alive. |
+ is_alive = self.cros_disks.IsAlive() |
+ if not is_alive: |
+ raise error.TestFail("Unable to talk to the disk daemon") |
+ |
+ def test_enumerate_device_files(self): |
+ # Check if EnumerateDeviceFiles method returns a list of devices. |
+ devices = self.cros_disks.EnumerateDeviceFiles() |
+ for device in devices: |
+ if not device or not isinstance(device, dbus.String): |
+ raise error.TestFail( |
+ "device returned by EnumerateDeviceFiles " |
+ "should be a non-empty string") |
+ |
+ def test_get_device_properties(self): |
+ # Check if GetDeviceProperties method returns valid properties. |
+ devices = self.cros_disks.EnumerateDeviceFiles() |
+ for device in devices: |
+ properties = self.cros_disks.GetDeviceProperties(device) |
+ self.validate_disk_properties(properties) |
+ |
+ def test_get_device_properties_of_nonexistent_device(self): |
+ try: |
+ properties = self.cros_disks.GetDeviceProperties('/nonexistent') |
+ except dbus.DBusException: |
+ return |
+ raise error.TestFail( |
+ "GetDeviceProperties of a nonexistent device should fail") |
+ |
+ def test_mount_nonexistent_device(self): |
+ try: |
+ path = self.cros_disks.FilesystemMount('/nonexistent', '', []) |
+ except dbus.DBusException: |
+ return |
+ raise error.TestFail("Mounting a nonexistent device should fail") |
+ |
+ def test_unmount_nonexistent_device(self): |
+ try: |
+ self.cros_disks.FilesystemUnmount('/nonexistent', []) |
+ except dbus.DBusException: |
+ return |
+ raise error.TestFail("Unmounting a nonexistent device should fail") |
+ |
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') |
- is_alive = cros_disks.IsAlive() |
- if not is_alive: |
- raise error.TestFail("Unable to talk to the disk daemon") |
+ self.cros_disks = dbus.Interface(proxy, 'org.chromium.CrosDisks') |
+ self.test_is_alive() |
+ self.test_enumerate_device_files() |
+ self.test_get_device_properties() |
+ self.test_get_device_properties_of_nonexistent_device() |
+ self.test_mount_nonexistent_device() |
+ self.test_unmount_nonexistent_device() |