[autotest] Fix bug in _verify_usb_device_ok.
A UsbDevice has a list of interfaces. Since the values are not unique, we can't use set operations to check if a UsbDevice matches the spec.
BUG=chromium:784396
TEST=unit test
Change-Id: I05671795178101bed53a58c9e3bbd0886f25196c
Reviewed-on: https://chromium-review.googlesource.com/775956
Reviewed-by: Denis Tosic <dtosic@chromium.org>
Reviewed-by: Claes Malmnäs <malmnas@google.com>
Commit-Queue: Claes Malmnäs <malmnas@google.com>
Tested-by: Claes Malmnäs <malmnas@google.com>
Trybot-Ready: Claes Malmnäs <malmnas@google.com>
diff --git a/client/common_lib/cros/get_usb_devices.py b/client/common_lib/cros/get_usb_devices.py
index 165e30e..8b40897 100644
--- a/client/common_lib/cros/get_usb_devices.py
+++ b/client/common_lib/cros/get_usb_devices.py
@@ -151,14 +151,16 @@
device_found = False
# Retrieve a spec for this vid:pid
usb_device = cfm_usb_devices.get_usb_device(vid_pid)
- # Set of expected interfaces. This might be a subset of the actual set of
- # interfaces.
- expected_interfaces = set(usb_device.interfaces)
+ # List of expected interfaces. This might be a sublist of the actual list of
+ # interfaces. Note: we have to use lists and not sets since the list of
+ # interfaces might contain duplicates.
+ expected_interfaces = sorted(usb_device.interfaces)
+ length = len(expected_interfaces)
# Find all actual UsbDevices matching the vid:pid
for _data in _filter_by_vid_pid(usbdata, vid_pid):
device_found = True
- actual_interfaces = set(_data['intdriver'])
- if not expected_interfaces.issubset(actual_interfaces):
+ actual_interfaces = sorted(_data['intdriver'])[0:length]
+ if not actual_interfaces == expected_interfaces:
raise RuntimeError(
'Device %s has unexpected interfaces.' % vid_pid)
if not device_found:
diff --git a/client/common_lib/cros/get_usb_devices_unittest.py b/client/common_lib/cros/get_usb_devices_unittest.py
index f621c47..a5a6aee 100644
--- a/client/common_lib/cros/get_usb_devices_unittest.py
+++ b/client/common_lib/cros/get_usb_devices_unittest.py
@@ -3,6 +3,7 @@
from autotest_lib.client.common_lib.cros import get_usb_devices
from autotest_lib.client.common_lib.cros.cfm import cfm_usb_devices
+# pylint:disable=missing-docstring
class GetDevicesTest(unittest.TestCase):
"""Unit test for file get_usb_devices."""
@@ -39,14 +40,15 @@
self.assertEquals(pid, '456')
def test_verify_usb_device_ok(self):
- vid_pid = '17e9:016b'
usbdata = [
{
- 'Vendor': '17e9',
- 'ProdID': '016b',
- 'intdriver': ['udl']
+ 'Vendor': '18d1',
+ 'ProdID': '8001',
+ 'intdriver': ['snd-usb-audio', 'snd-usb-audio', 'snd-usb-audio',
+ 'usbhid'],
},
]
+ vid_pid = '%s:%s' % (usbdata[0]['Vendor'], usbdata[0]['ProdID'])
get_usb_devices._verify_usb_device_ok(usbdata, vid_pid)
usbdata[0]['intdriver'] = []