blob: 26a1dcaa85f906ffc4b09812dc402cb659a214c0 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import tempfile
import unittest
from cros.factory.probe.functions import usb
from cros.factory.utils import file_utils
class USBFunctionTest(unittest.TestCase):
def setUp(self):
self.my_root = tempfile.mkdtemp()
self.orig_glob_path = usb.USBFunction.GLOB_PATH
usb.USBFunction.GLOB_PATH = self.my_root + usb.USBFunction.GLOB_PATH
def tearDown(self):
usb.USBFunction.GLOB_PATH = self.orig_glob_path
def _CreateUSBDevice(self, usb_name, real_path, values):
real_path = self.my_root + real_path
file_utils.TryMakeDirs(real_path)
for key, value in values.items():
file_utils.WriteFile(os.path.join(real_path, key), value)
link_name = os.path.join(
self.my_root, 'sys', 'bus', 'usb', 'devices', usb_name)
file_utils.TryMakeDirs(os.path.dirname(link_name))
file_utils.ForceSymlink(real_path, link_name)
def testNormal(self):
# usb 1-1 includes only one required fields
values1 = {'idVendor': 'google', 'idProduct': '1-1'}
self._CreateUSBDevice('1-1', '/sys/devices/usb3/1-1', values1)
# usb 1-1.2 includes some optional fields
values2 = {'idVendor': 'goog', 'idProduct': '1-1.2', 'manufacturer': '123'}
self._CreateUSBDevice('1-1.2', '/sys/devices/usb3/1-1.2', values2)
# usb 1-1.2.y has an invalid directory name
values3 = {'idVendor': 'goog', 'idProduct': 'cros'}
self._CreateUSBDevice('1-1.2.y', '/sys/devices/usb3/1-1.2.y', values3)
# usb 1-2 misses some required fields
values4 = {'idVendor': 'goog', 'product': '234'}
self._CreateUSBDevice('1-2', '/sys/devices/usb3/1-2', values4)
# usb1 is a usb root hub.
values5 = {'idVendor': 'aaa', 'idProduct': 'usb1'}
self._CreateUSBDevice('usb1', '/sys/devices/usb1', values5)
func = usb.USBFunction()
self.assertCountEqual(
func(),
self._AddExtraFields([values1, values2, values5]))
func = usb.USBFunction(dir_path=self.my_root + '/sys/bus/usb/devices/1-1')
self.assertCountEqual(func(), self._AddExtraFields([values1]))
func = usb.USBFunction(dir_path=self.my_root + '/sys/devices/usb3/1-1.2')
self.assertCountEqual(func(), self._AddExtraFields([values2]))
def _AddExtraFields(self, values):
for value in values:
value['device_path'] = os.path.join(
self.my_root, 'sys', 'bus', 'usb', 'devices', value['idProduct'])
value['bus_type'] = 'usb'
return values
if __name__ == '__main__':
unittest.main()