Tests: USB: Update error formatting in basic test

pull/11696/head
Filip Jagodzinski 2019-09-17 16:37:15 +02:00 committed by adbridge
parent 85c495f451
commit 0f896fa97d
1 changed files with 33 additions and 42 deletions

View File

@ -85,13 +85,9 @@ REQUEST_SYNCH_FRAME = 12
FEATURE_ENDPOINT_HALT = 0 FEATURE_ENDPOINT_HALT = 0
FEATURE_DEVICE_REMOTE_WAKEUP = 1 FEATURE_DEVICE_REMOTE_WAKEUP = 1
DEVICE_QUALIFIER_DESC_SIZE = 10 DEVICE_QUALIFIER_DESC_SIZE = 10
DESC_TYPE_DEVICE_QUALIFIER = 0x06 DESC_TYPE_DEVICE_QUALIFIER = 0x06
DEVICE_DESC_SIZE = 18 DEVICE_DESC_SIZE = 18
device_descriptor_parser = struct.Struct('BBHBBBBHHHBBBB') device_descriptor_parser = struct.Struct('BBHBBBBHHHBBBB')
device_descriptor_keys = ['bLength', 'bDescriptorType', 'bcdUSB', 'bDeviceClass', device_descriptor_keys = ['bLength', 'bDescriptorType', 'bcdUSB', 'bDeviceClass',
@ -352,11 +348,9 @@ class PyusbBasicTest(BaseHostTest):
self.register_callback('reset_support', self._callback_reset_support) self.register_callback('reset_support', self._callback_reset_support)
def result(self): def result(self):
return self.__result return self.__result
def teardown(self): def teardown(self):
pass pass
@ -415,10 +409,9 @@ def get_set_configuration_test(dev, log):
# check if dafault(1) configuration set # check if dafault(1) configuration set
try: try:
ret = usb.control.get_configuration(dev) ret = usb.control.get_configuration(dev)
raise_if_different(1, ret, lineno(), "FAILED - expected first configuration set") raise_if_different(1, ret, lineno(), 'Invalid configuration.')
except usb.core.USBError as error: except usb.core.USBError as error:
print(error) raise_unconditionally(lineno(), 'get_configuration request failed ({}).'.format(str(error).strip()))
raise_unconditionally(lineno(), "FAILED - get_configuration !!!")
cfg = dev.get_active_configuration() cfg = dev.get_active_configuration()
for intf in cfg: for intf in cfg:
@ -428,17 +421,15 @@ def get_set_configuration_test(dev, log):
try: try:
ret = dev.set_configuration(0) ret = dev.set_configuration(0)
except usb.core.USBError as error: except usb.core.USBError as error:
print(error) raise_unconditionally(lineno(), 'set_configuration request (deconfigure) failed ({}).'.format(str(error).strip()))
raise_unconditionally(lineno(), "FAILED - set_configuration(0) !!!")
# check if deconfigured # check if deconfigured
try: try:
ret = usb.control.get_configuration(dev) ret = usb.control.get_configuration(dev)
raise_if_different(0, ret, lineno(), "FAILED - expected to be deconfigured") raise_if_different(0, ret, lineno(), 'Invalid configuration.')
print("device deconfigured - OK") print("device deconfigured - OK")
except usb.core.USBError as error: except usb.core.USBError as error:
print(error) raise_unconditionally(lineno(), 'get_configuration request failed ({}).'.format(str(error).strip()))
raise_unconditionally(lineno(), "FAILED - get_active_configuration !!!")
# for every configuration # for every configuration
for cfg in dev: for cfg in dev:
@ -446,17 +437,15 @@ def get_set_configuration_test(dev, log):
# set configuration # set configuration
ret = cfg.set() ret = cfg.set()
except usb.core.USBError as error: except usb.core.USBError as error:
print(error) raise_unconditionally(lineno(), 'set_configuration request failed ({}).'.format(str(error).strip()))
raise_unconditionally(lineno(), "FAILED - set configuration")
# check if configured # check if configured
try: try:
ret = usb.control.get_configuration(dev) ret = usb.control.get_configuration(dev)
raise_if_different(cfg.bConfigurationValue, ret, lineno(), "FAILED - expected {} configuration set".format(cfg.bConfigurationValue)) raise_if_different(cfg.bConfigurationValue, ret, lineno(), 'Invalid configuration.')
print("configuration {} set - OK ".format(cfg.bConfigurationValue)) print("configuration {} set - OK ".format(cfg.bConfigurationValue))
except usb.core.USBError as error: except usb.core.USBError as error:
print(error) raise_unconditionally(lineno(), 'get_configuration request failed ({}).'.format(str(error).strip()))
raise_unconditionally(lineno(), "FAILED - get_configuration !!!")
# test control data transfer after configuration set # test control data transfer after configuration set
control_data_test(dev, [64, 256], log) control_data_test(dev, [64, 256], log)
print("") # new line print("") # new line
@ -477,7 +466,7 @@ def get_set_interface_test(dev, log):
cfg.set() cfg.set()
# for every interface # for every interface
for intf in cfg: for intf in cfg:
intf.set_altsetting(); intf.set_altsetting()
altsett = usb.control.get_interface(dev, intf.bInterfaceNumber) altsett = usb.control.get_interface(dev, intf.bInterfaceNumber)
raise_if_different(intf.bAlternateSetting, altsett, lineno(), text='Wrong alternate setting for interface {}'.format(intf.bInterfaceNumber)) raise_if_different(intf.bAlternateSetting, altsett, lineno(), text='Wrong alternate setting for interface {}'.format(intf.bInterfaceNumber))
print("cfg({}) inteface {}.{} set - OK".format(cfg.bConfigurationValue, intf.bInterfaceNumber, intf.bAlternateSetting)) print("cfg({}) inteface {}.{} set - OK".format(cfg.bConfigurationValue, intf.bInterfaceNumber, intf.bAlternateSetting))
@ -583,15 +572,13 @@ def set_clear_feature_test(dev, log):
try: try:
usb.control.set_feature(dev, FEATURE_ENDPOINT_HALT, ep) usb.control.set_feature(dev, FEATURE_ENDPOINT_HALT, ep)
except usb.core.USBError as err: except usb.core.USBError as err:
print(err) raise_unconditionally(lineno(), 'set_feature request (halt) failed for endpoint {} ({}).'.format(ep.bEndpointAddress, str(err).strip()))
raise_unconditionally(lineno(), "endpoint {} halt failed".format(ep.bEndpointAddress))
# check if endpoint was halted # check if endpoint was halted
try: try:
ret = usb.control.get_status(dev, ep) ret = usb.control.get_status(dev, ep)
except usb.core.USBError as err: except usb.core.USBError as err:
print(err) raise_unconditionally(lineno(), 'get_status request failed for endpoint {} ({}).'.format(ep.bEndpointAddress, str(err).strip()))
raise_unconditionally(lineno(), "endpoint status failed".format(ep.bEndpointAddress))
if(ret != 1): if(ret != 1):
raise_unconditionally(lineno(), "endpoint {} was not halted".format(ep.bEndpointAddress)) raise_unconditionally(lineno(), "endpoint {} was not halted".format(ep.bEndpointAddress))
print("cfg({}) intf({}.{}) ep {} halted - OK".format(cfg.bConfigurationValue, intf.bInterfaceNumber, intf.bAlternateSetting, ep.bEndpointAddress)) print("cfg({}) intf({}.{}) ep {} halted - OK".format(cfg.bConfigurationValue, intf.bInterfaceNumber, intf.bAlternateSetting, ep.bEndpointAddress))
@ -600,8 +587,7 @@ def set_clear_feature_test(dev, log):
try: try:
usb.control.clear_feature(dev, FEATURE_ENDPOINT_HALT, ep) usb.control.clear_feature(dev, FEATURE_ENDPOINT_HALT, ep)
except usb.core.USBError as err: except usb.core.USBError as err:
print(err) raise_unconditionally(lineno(), "clear_feature request (unhalt) failed for endpoint {} ({})".format(ep.bEndpointAddress, str(err).strip()))
raise_unconditionally(lineno(), "endpoint {} unhalt failed".format(ep.bEndpointAddress))
# check if endpoint was unhalted # check if endpoint was unhalted
ret = usb.control.get_status(dev, ep) ret = usb.control.get_status(dev, ep)
@ -635,9 +621,9 @@ def get_descriptor_test(dev, vendor_id, product_id, log):
try: try:
ret = get_descriptor(dev, (DESC_TYPE_DEVICE << 8) | (0 << 0), 0, DEVICE_DESC_SIZE) ret = get_descriptor(dev, (DESC_TYPE_DEVICE << 8) | (0 << 0), 0, DEVICE_DESC_SIZE)
dev_desc = dict(zip(device_descriptor_keys, device_descriptor_parser.unpack(ret))) dev_desc = dict(zip(device_descriptor_keys, device_descriptor_parser.unpack(ret)))
raise_if_different(DEVICE_DESC_SIZE, dev_desc['bLength'], lineno(), text='Wrong device descriptor size !!!') raise_if_different(DEVICE_DESC_SIZE, dev_desc['bLength'], lineno(), text='Wrong device descriptor size.')
raise_if_different(vendor_id, dev_desc['idVendor'], lineno(), text='Wrong vendor id !!!') raise_if_different(vendor_id, dev_desc['idVendor'], lineno(), text='Wrong vendor ID.')
raise_if_different(product_id, dev_desc['idProduct'], lineno(), text='Wrong product id !!!') raise_if_different(product_id, dev_desc['idProduct'], lineno(), text='Wrong product ID.')
except usb.core.USBError: except usb.core.USBError:
raise_unconditionally(lineno(), "Requesting device descriptor failed") raise_unconditionally(lineno(), "Requesting device descriptor failed")
@ -645,21 +631,21 @@ def get_descriptor_test(dev, vendor_id, product_id, log):
try: try:
ret = get_descriptor(dev, (DESC_TYPE_CONFIG << 8) | (0 << 0), 0, CONFIGURATION_DESC_SIZE) ret = get_descriptor(dev, (DESC_TYPE_CONFIG << 8) | (0 << 0), 0, CONFIGURATION_DESC_SIZE)
conf_desc = dict(zip(configuration_descriptor_keys, configuration_descriptor_parser.unpack(ret))) conf_desc = dict(zip(configuration_descriptor_keys, configuration_descriptor_parser.unpack(ret)))
raise_if_different(CONFIGURATION_DESC_SIZE, conf_desc['bLength'], lineno(), text='Wrong configuration descriptor size !!!') raise_if_different(CONFIGURATION_DESC_SIZE, conf_desc['bLength'], lineno(), text='Wrong configuration descriptor size.')
except usb.core.USBError: except usb.core.USBError:
raise_unconditionally(lineno(), "Requesting configuration descriptor failed") raise_unconditionally(lineno(), "Requesting configuration descriptor failed")
# interface descriptor # interface descriptor
try: try:
ret = get_descriptor(dev, (DESC_TYPE_INTERFACE << 8) | (0 << 0), 0, INTERFACE_DESC_SIZE) ret = get_descriptor(dev, (DESC_TYPE_INTERFACE << 8) | (0 << 0), 0, INTERFACE_DESC_SIZE)
raise_unconditionally(lineno(), "Requesting interface descriptor should fail since it is not directly accessible") raise_unconditionally(lineno(), "Requesting interface descriptor should fail since it is not directly accessible.")
except usb.core.USBError: except usb.core.USBError:
log("interface descriptor is not directly accessible - OK") log("interface descriptor is not directly accessible - OK")
# endpoint descriptor # endpoint descriptor
try: try:
ret = get_descriptor(dev, (DESC_TYPE_ENDPOINT << 8) | (0 << 0), 0, ENDPOINT_DESC_SIZE) ret = get_descriptor(dev, (DESC_TYPE_ENDPOINT << 8) | (0 << 0), 0, ENDPOINT_DESC_SIZE)
raise_unconditionally(lineno(), "Requesting endpoint descriptor should fail since it is not directly accessible") raise_unconditionally(lineno(), "Requesting endpoint descriptor should fail since it is not directly accessible.")
except usb.core.USBError: except usb.core.USBError:
log("endpoint descriptor is not directly accessible - OK") log("endpoint descriptor is not directly accessible - OK")
print("") # new line print("") # new line
@ -687,7 +673,7 @@ def set_descriptor_test(dev, log):
data = bytearray(DEVICE_DESC_SIZE) # Descriptor data data = bytearray(DEVICE_DESC_SIZE) # Descriptor data
try: try:
dev.ctrl_transfer(request_type, request, value, index, data) dev.ctrl_transfer(request_type, request, value, index, data)
raise_unconditionally(lineno(), "SET_DESCRIPTOR should fail since it is not implemented") raise_unconditionally(lineno(), "set_descriptor request should fail since it is not implemented")
except usb.core.USBError: except usb.core.USBError:
log("SET_DESCRIPTOR is unsupported - OK") log("SET_DESCRIPTOR is unsupported - OK")
print("") # new line print("") # new line
@ -715,7 +701,7 @@ def synch_frame_test(dev, log):
ret = ret[0] | (ret[1] << 8) ret = ret[0] | (ret[1] << 8)
log("synch frame ret: %d" % (ret)) log("synch frame ret: %d" % (ret))
except usb.core.USBError: except usb.core.USBError:
raise_unconditionally(lineno(), "SYNCH_FRAME failed") raise_unconditionally(lineno(), "SYNCH_FRAME request failed")
print("") # new line print("") # new line
@ -847,7 +833,7 @@ def control_data_test(dev, sizes_list, log):
ret = dev.ctrl_transfer(request_type, request, value, index, length, 5000) ret = dev.ctrl_transfer(request_type, request, value, index, length, 5000)
raise_if_different(i, len(ret), lineno(), "send/receive data is the wrong size") raise_if_different(i, len(ret), lineno(), "send/receive data is the wrong size")
for j in range(0, i): for j in range(0, i):
raise_if_different(data[j], ret[j], lineno(), "send/receive data not match") raise_if_different(data[j], ret[j], lineno(), "send/receive data mismatch")
except usb.core.USBError: except usb.core.USBError:
raise_unconditionally(lineno(), "VENDOR_TEST_CTRL_IN_SIZES failed") raise_unconditionally(lineno(), "VENDOR_TEST_CTRL_IN_SIZES failed")
count += 1 count += 1
@ -1001,7 +987,7 @@ def halt_ep_test(dev, ep_out, ep_in, log):
raise RuntimeError('Invalid endpoint status after halt operation') raise RuntimeError('Invalid endpoint status after halt operation')
except Exception as err: except Exception as err:
ctrl_error.set() ctrl_error.set()
log('Endpoint {:#04x} halt failed ({}).'.format(ep_to_halt.bEndpointAddress, err)) log('Endpoint {:#04x} halt failed ({!r}).'.format(ep_to_halt.bEndpointAddress, err))
# Whether the halt operation was successful or not, # Whether the halt operation was successful or not,
# wait a bit so the main thread has a chance to run into a USBError # wait a bit so the main thread has a chance to run into a USBError
# or report the failure of halt operation. # or report the failure of halt operation.
@ -1015,27 +1001,32 @@ def halt_ep_test(dev, ep_out, ep_in, log):
try: try:
while delayed_halt.is_alive(): while delayed_halt.is_alive():
if ctrl_error.is_set(): if ctrl_error.is_set():
raise_unconditionally(lineno(), 'Halting endpoint {0.bEndpointAddress:#04x} failed' break
.format(ep_to_halt))
try: try:
loopback_ep_test(ep_out, ep_in, ep_out.wMaxPacketSize) loopback_ep_test(ep_out, ep_in, ep_out.wMaxPacketSize)
except usb.core.USBError as err: except usb.core.USBError as err:
if ctrl_error.is_set():
break
try: try:
ep_status = usb.control.get_status(dev, ep_to_halt) ep_status = usb.control.get_status(dev, ep_to_halt)
except usb.core.USBError as err: except usb.core.USBError as err:
if ctrl_error.is_set():
break
raise_unconditionally(lineno(), 'Unable to get endpoint status ({!r}).'.format(err)) raise_unconditionally(lineno(), 'Unable to get endpoint status ({!r}).'.format(err))
if ep_status == 1: if ep_status == 1:
# OK, got USBError because of endpoint halt # OK, got USBError because of endpoint halt
return return
else: else:
raise_unconditionally(lineno(), 'Unexpected error ({!r}).'.format(err)) raise_unconditionally(lineno(), 'Unexpected error ({!r}).'.format(err))
except: if ctrl_error.is_set():
raise raise_unconditionally(lineno(), 'Halting endpoint {0.bEndpointAddress:#04x} failed'
.format(ep_to_halt))
finally: finally:
# Always wait for the Timer thread created above. # Always wait for the Timer thread created above.
delayed_halt.join() delayed_halt.join()
ep_out.clear_halt() if not ctrl_error.is_set():
ep_in.clear_halt() ep_out.clear_halt()
ep_in.clear_halt()
raise_unconditionally(lineno(), 'Halting endpoint {0.bEndpointAddress:#04x}' raise_unconditionally(lineno(), 'Halting endpoint {0.bEndpointAddress:#04x}'
' during transmission did not raise USBError.' ' during transmission did not raise USBError.'
.format(ep_to_halt)) .format(ep_to_halt))