123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- # Copyright (C) 2009-2011 Wander Lairson Costa
- #
- # The following terms apply to all files associated
- # with the software unless explicitly disclaimed in individual files.
- #
- # The authors hereby grant permission to use, copy, modify, distribute,
- # and license this software and its documentation for any purpose, provided
- # that existing copyright notices are retained in all copies and that this
- # notice is included verbatim in any distributions. No written agreement,
- # license, or royalty fee is required for any of the authorized uses.
- # Modifications to this software may be copyrighted by their authors
- # and need not follow the licensing terms described here, provided that
- # the new terms are clearly indicated on the first page of each file where
- # they apply.
- #
- # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
- # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
- # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
- # POSSIBILITY OF SUCH DAMAGE.
- #
- # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
- # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
- # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
- # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
- # MODIFICATIONS.
- # Integration tests
- import utils
- import unittest
- import usb.core
- import devinfo
- import usb.util
- import usb.backend.libusb01 as libusb01
- import usb.backend.libusb10 as libusb10
- import usb.backend.openusb as openusb
- data_list = (utils.get_array_data1(),
- utils.get_array_data2(),
- utils.get_list_data1(),
- utils.get_list_data2(),
- utils.get_str_data1(),
- utils.get_str_data1())
- class DeviceTest(unittest.TestCase):
- def __init__(self, dev):
- unittest.TestCase.__init__(self)
- self.dev = dev
- def runTest(self):
- try:
- self.test_attributes()
- self.test_timeout()
- self.test_set_configuration()
- self.test_set_interface_altsetting()
- self.test_write_read()
- self.test_ctrl_transfer()
- #self.test_reset()
- finally:
- usb.util.dispose_resources(self.dev)
- def test_attributes(self):
- self.assertEqual(self.dev.bLength, 18)
- self.assertEqual(self.dev.bDescriptorType, usb.util.DESC_TYPE_DEVICE)
- self.assertEqual(self.dev.bcdUSB, 0x0200)
- self.assertEqual(self.dev.idVendor, devinfo.ID_VENDOR)
- self.assertEqual(self.dev.idProduct, devinfo.ID_PRODUCT)
- self.assertEqual(self.dev.bcdDevice, 0x0001)
- self.assertEqual(self.dev.iManufacturer, 0x01)
- self.assertEqual(self.dev.iProduct, 0x02)
- self.assertEqual(self.dev.iSerialNumber, 0x03)
- self.assertEqual(self.dev.bNumConfigurations, 0x01)
- self.assertEqual(self.dev.bMaxPacketSize0, 16)
- self.assertEqual(self.dev.bDeviceClass, 0x00)
- self.assertEqual(self.dev.bDeviceSubClass, 0x00)
- self.assertEqual(self.dev.bDeviceProtocol, 0x00)
- def test_timeout(self):
- def set_invalid_timeout():
- self.dev.default_timeout = -1
- tmo = self.dev.default_timeout
- self.dev.default_timeout = 1
- self.assertEqual(self.dev.default_timeout, 1)
- self.dev.default_timeout = tmo
- self.assertEqual(self.dev.default_timeout, tmo)
- self.assertRaises(ValueError, set_invalid_timeout)
- self.assertEqual(self.dev.default_timeout, tmo)
- def test_set_configuration(self):
- cfg = self.dev[0].bConfigurationValue
- self.dev.set_configuration(0)
- self.dev.set_configuration(cfg)
- self.dev.set_configuration()
- self.assertEqual(cfg, self.dev.get_active_configuration().bConfigurationValue)
- self.dev.set_configuration(0)
- self.assertRaises(usb.core.USBError, self.dev.get_active_configuration)
- self.dev.set_configuration()
- def test_set_interface_altsetting(self):
- intf = self.dev.get_active_configuration()[(0,0)]
- self.dev.set_interface_altsetting(intf.bInterfaceNumber, intf.bAlternateSetting)
- self.dev.set_interface_altsetting()
- def test_reset(self):
- self.dev.reset()
- utils.delay_after_reset()
- def test_write_read(self):
- ep_list = ((devinfo.EP_BULK_OUT, devinfo.EP_BULK_IN),
- (devinfo.EP_INTR_OUT, devinfo.EP_INTR_IN))
- for ep in ep_list:
- for data in data_list:
- adata = utils.to_array(data)
- length = utils.data_len(data)
- ret = self.dev.write(ep[0], data)
- self.assertEqual(ret,
- length,
- 'Failed to write data: ' + \
- str(data) + ', in EP = ' + \
- str(ep[0])
- )
- ret = self.dev.read(ep[1], length)
- self.assertTrue(utils.array_equals(ret, adata),
- str(ret) + ' != ' + \
- str(adata) + ', in EP = ' + \
- str(ep[1])
- )
- def test_ctrl_transfer(self):
- for data in data_list:
- length = utils.data_len(data)
- adata = utils.to_array(data)
- ret = self.dev.ctrl_transfer(
- 0x40,
- devinfo.CTRL_LOOPBACK_WRITE,
- 0,
- 0,
- data
- )
- self.assertEqual(ret,
- length,
- 'Failed to write data: ' + str(data))
- ret = utils.to_array(self.dev.ctrl_transfer(
- 0xC0,
- devinfo.CTRL_LOOPBACK_READ,
- 0,
- 0,
- length
- ))
- self.assertTrue(utils.array_equals(ret, adata),
- str(ret) + ' != ' + str(adata))
- class ConfigurationTest(unittest.TestCase):
- def __init__(self, dev):
- unittest.TestCase.__init__(self)
- self.cfg = dev[0]
- def runTest(self):
- try:
- self.test_attributes()
- self.test_set()
- finally:
- usb.util.dispose_resources(self.cfg.device)
- def test_attributes(self):
- self.assertEqual(self.cfg.bLength, 9)
- self.assertEqual(self.cfg.bDescriptorType, usb.util.DESC_TYPE_CONFIG)
- self.assertEqual(self.cfg.wTotalLength, 46)
- self.assertEqual(self.cfg.bNumInterfaces, 0x01)
- self.assertEqual(self.cfg.bConfigurationValue, 0x01)
- self.assertEqual(self.cfg.iConfiguration, 0x00)
- self.assertEqual(self.cfg.bmAttributes, 0xC0)
- self.assertEqual(self.cfg.bMaxPower, 50)
- def test_set(self):
- self.cfg.set()
- class InterfaceTest(unittest.TestCase):
- def __init__(self, dev):
- unittest.TestCase.__init__(self)
- self.dev = dev
- self.intf = dev[0][(0,0)]
- def runTest(self):
- try:
- self.dev.set_configuration()
- self.test_attributes()
- self.test_set_altsetting()
- finally:
- usb.util.dispose_resources(self.intf.device)
- def test_attributes(self):
- self.assertEqual(self.intf.bLength, 9)
- self.assertEqual(self.intf.bDescriptorType, usb.util.DESC_TYPE_INTERFACE)
- self.assertEqual(self.intf.bInterfaceNumber, 0)
- self.assertEqual(self.intf.bAlternateSetting, 0)
- self.assertEqual(self.intf.bNumEndpoints, 4)
- self.assertEqual(self.intf.bInterfaceClass, 0xFF)
- self.assertEqual(self.intf.bInterfaceSubClass, 0xFF)
- self.assertEqual(self.intf.bInterfaceProtocol, 0xFF)
- self.assertEqual(self.intf.iInterface, 0x00)
- def test_set_altsetting(self):
- self.intf.set_altsetting()
- class EndpointTest(unittest.TestCase):
- def __init__(self, dev):
- unittest.TestCase.__init__(self)
- self.dev = dev
- intf = dev[0][(0,0)]
- self.ep_out = usb.util.find_descriptor(intf, bEndpointAddress=0x01)
- self.ep_in = usb.util.find_descriptor(intf, bEndpointAddress=0x81)
- def runTest(self):
- try:
- self.dev.set_configuration()
- self.test_attributes()
- self.test_write_read()
- finally:
- usb.util.dispose_resources(self.dev)
- def test_attributes(self):
- self.assertEqual(self.ep_out.bLength, 7)
- self.assertEqual(self.ep_out.bDescriptorType, usb.util.DESC_TYPE_ENDPOINT)
- self.assertEqual(self.ep_out.bEndpointAddress, 0x01)
- self.assertEqual(self.ep_out.bmAttributes, 0x02)
- self.assertEqual(self.ep_out.wMaxPacketSize, 64)
- self.assertEqual(self.ep_out.bInterval, 32)
- def test_write_read(self):
- for data in data_list:
- adata = utils.to_array(data)
- ret = self.ep_out.write(data)
- length = utils.data_len(data)
- self.assertEqual(ret, length, 'Failed to write data: ' + str(data))
- ret = self.ep_in.read(length)
- self.assertTrue(utils.array_equals(ret, adata), str(ret) + ' != ' + str(adata))
- def get_suite():
- suite = unittest.TestSuite()
- test_cases = (DeviceTest, ConfigurationTest, InterfaceTest, EndpointTest)
- for m in (libusb10, libusb01, openusb):
- b = m.get_backend()
- if b is None:
- continue
- dev = utils.find_my_device(b)
- if dev is None:
- utils.logger.warning('Test hardware not found for backend %s', m.__name__)
- continue
- for ObjectTestCase in test_cases:
- utils.logger.info('Adding %s(%s) to test suite...', ObjectTestCase.__name__, m.__name__)
- suite.addTest(ObjectTestCase(dev))
- return suite
- if __name__ == '__main__':
- utils.run_tests(get_suite())
|