blob: 22c5e500955d4c94daf9f776f8cde7959cf0a7e5 [file] [log] [blame]
import mock
import unittest
from autotest_lib.client.common_lib.cros.cfm.usb import usb_device_collector
from autotest_lib.client.common_lib.cros.cfm.usb import usb_device_spec
# pylint: disable=missing-docstring
class UsbDeviceCollectorTest(unittest.TestCase):
"""Unit test for the class UsbDeviceCollector."""
def setUp(self):
# Sample stdout from `usb-devices`.
usb_devices = (
'\n'
'T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 8 Spd=12 '
'MxCh= 0\n'
'D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1\n'
'P: Vendor=0000 ProdID=aaaa Rev=01.01\n'
'S: Manufacturer=Google Inc.\n'
'S: Product=FOO\n'
'S: SerialNumber=GATRW17340078\n'
'C: #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA\n'
'I: If#= 0 Alt= 0 #EPs= 0 Cls=0e(video) Sub=01 Prot=00 '
'Driver=int-a\n'
'I: If#= 1 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 '
'Driver=(none)\n'
'\n'
'T: Bus=01 Lev=02 Prnt=08 Port=03 Cnt=01 Dev#= 4 Spd=5000 '
'MxCh= 0\n'
'D: Ver= 3.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs= 1\n'
'P: Vendor=0a0a ProdID=9f9f Rev=06.00\n'
'S: Manufacturer=Huddly\n'
'S: Product=BAR\n'
'S: SerialNumber=43F00190\n'
'C: #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=752mA\n'
'I: If#= 0 Alt= 0 #EPs= 0 Cls=0e(video) Sub=01 Prot=00 '
'Driver=int-a\n'
'I: If#= 1 Alt= 0 #EPs= 1 Cls=0e(video) Sub=02 Prot=00 '
'Driver=int-a\n'
'I: If#= 2 Alt= 0 #EPs= 0 Cls=0e(video) Sub=01 Prot=00 '
'Driver=int-b\n')
mock_host = mock.Mock()
mock_host.run.return_value.stdout = usb_devices
self.collector = usb_device_collector.UsbDeviceCollector(mock_host)
def test_get_usb_devices(self):
"""Unit test for get_usb_devices."""
usb_data = self.collector.get_usb_devices()
self.assertEqual(2, len(usb_data))
foo_device = usb_data[0]
self.assertEqual(foo_device.vendor_id, '0000')
self.assertEqual(foo_device.product_id, 'aaaa')
self.assertEqual(foo_device.product, 'FOO')
self.assertEqual(foo_device.interfaces, ['int-a', '(none)'])
self.assertEqual(foo_device.bus, 1)
self.assertEqual(foo_device.port, 2)
self.assertIsNone(foo_device.parent)
bar_device = usb_data[1]
self.assertEqual(bar_device.vendor_id, '0a0a')
self.assertEqual(bar_device.product_id, '9f9f')
self.assertEqual(bar_device.product, 'BAR')
self.assertEqual(bar_device.interfaces, ['int-a', 'int-a', 'int-b'])
self.assertEqual(bar_device.bus, 1)
self.assertEqual(bar_device.port, 4)
self.assertEqual(bar_device.parent, foo_device)
def test_get_devices_by_spec(self):
spec = usb_device_spec.UsbDeviceSpec('0a0a', '9f9f', 'PRODUCT', [])
devices = self.collector.get_devices_by_spec(spec)
self.assertEquals(len(devices), 1)
def test_get_devices_by_specs(self):
specs = (usb_device_spec.UsbDeviceSpec('0a0a', '9f9f', 'PRODUCT', []),
usb_device_spec.UsbDeviceSpec('0000', 'aaaa', 'PRODUCT', []))
devices = self.collector.get_devices_by_spec(*specs)
self.assertEquals(len(devices), 2)
def test_get_devices_by_not_matching_specs(self):
specs = (usb_device_spec.UsbDeviceSpec('no', 'match', 'PRODUCT', []),
usb_device_spec.UsbDeviceSpec('nono', 'match', 'PRODUCT', []))
devices = self.collector.get_devices_by_spec(*specs)
self.assertEquals(devices, [])
if __name__ == "__main__":
unittest.main()