[style] change python yapf column_limit to 119 (#5339)

This commit is contained in:
Simon Lin
2020-08-06 21:40:24 -07:00
committed by GitHub
parent e810357adb
commit d7343c877b
150 changed files with 2910 additions and 5676 deletions
@@ -154,8 +154,7 @@ class HarnessCase(unittest.TestCase):
auto_dut = settings.AUTO_DUT
"""bool: whether use harness auto dut feature"""
timeout = hasattr(settings,
'TIMEOUT') and settings.TIMEOUT or DEFAULT_TIMEOUT
timeout = hasattr(settings, 'TIMEOUT') and settings.TIMEOUT or DEFAULT_TIMEOUT
"""number: timeout in seconds to stop running this test case"""
started = 0
@@ -171,19 +170,16 @@ class HarnessCase(unittest.TestCase):
self.dut = None
self._browser = None
self._hc = None
self.result_dir = '%s\\%s' % (settings.OUTPUT_PATH,
self.__class__.__name__)
self.result_dir = '%s\\%s' % (settings.OUTPUT_PATH, self.__class__.__name__)
self.history = HistoryHelper()
self.add_all_devices = False
self.new_th = False
harness_info = ConfigParser.ConfigParser()
harness_info.read('%s\\info.ini' % settings.HARNESS_HOME)
if harness_info.has_option('Thread_Harness_Info',
'Version') and harness_info.has_option(
'Thread_Harness_Info', 'Mode'):
harness_version = harness_info.get('Thread_Harness_Info',
'Version').rsplit(' ', 1)[1]
if harness_info.has_option('Thread_Harness_Info', 'Version') and harness_info.has_option(
'Thread_Harness_Info', 'Mode'):
harness_version = harness_info.get('Thread_Harness_Info', 'Version').rsplit(' ', 1)[1]
harness_mode = harness_info.get('Thread_Harness_Info', 'Mode')
if harness_mode == 'External' and harness_version > '1.4.0':
@@ -221,8 +217,7 @@ class HarnessCase(unittest.TestCase):
while True:
try:
pdu = pdu_factory.create_pdu_controller(
settings.PDU_CONTROLLER_TYPE)
pdu = pdu_factory.create_pdu_controller(settings.PDU_CONTROLLER_TYPE)
pdu.open(**settings.PDU_CONTROLLER_OPEN_PARAMS)
except EOFError:
logger.warning('Failed to connect to telnet')
@@ -252,25 +247,17 @@ class HarnessCase(unittest.TestCase):
time.sleep(2)
harness_config = ConfigParser.ConfigParser()
harness_config.read('%s\\Config\\Configuration.ini' %
settings.HARNESS_HOME)
if harness_config.has_option(
'THREAD_HARNESS_CONFIG',
'BrowserAutoNavigate') and harness_config.getboolean(
'THREAD_HARNESS_CONFIG', 'BrowserAutoNavigate'):
logger.error(
'BrowserAutoNavigate in Configuration.ini should be False')
raise FailError(
'BrowserAutoNavigate in Configuration.ini should be False')
harness_config.read('%s\\Config\\Configuration.ini' % settings.HARNESS_HOME)
if harness_config.has_option('THREAD_HARNESS_CONFIG', 'BrowserAutoNavigate') and harness_config.getboolean(
'THREAD_HARNESS_CONFIG', 'BrowserAutoNavigate'):
logger.error('BrowserAutoNavigate in Configuration.ini should be False')
raise FailError('BrowserAutoNavigate in Configuration.ini should be False')
if settings.MIXED_DEVICE_TYPE:
if harness_config.has_option(
'THREAD_HARNESS_CONFIG',
'EnableDeviceSelection') and not harness_config.getboolean(
'THREAD_HARNESS_CONFIG', 'EnableDeviceSelection'):
logger.error(
'EnableDeviceSelection in Configuration.ini should be True')
raise FailError(
'EnableDeviceSelection in Configuration.ini should be True')
if harness_config.has_option('THREAD_HARNESS_CONFIG',
'EnableDeviceSelection') and not harness_config.getboolean(
'THREAD_HARNESS_CONFIG', 'EnableDeviceSelection'):
logger.error('EnableDeviceSelection in Configuration.ini should be True')
raise FailError('EnableDeviceSelection in Configuration.ini should be True')
def _destroy_harness(self):
"""Stop harness backend service
@@ -309,9 +296,8 @@ class HarnessCase(unittest.TestCase):
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--disable-infobars')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_experimental_option(
'prefs',
{'profile.managed_default_content_settings.notifications': 1})
chrome_options.add_experimental_option('prefs',
{'profile.managed_default_content_settings.notifications': 1})
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.set_page_load_timeout(20)
@@ -334,11 +320,9 @@ class HarnessCase(unittest.TestCase):
self._browser = None
def _init_rf_shield(self):
if getattr(settings, 'SHIELD_CONTROLLER_TYPE', None) and getattr(
settings, 'SHIELD_CONTROLLER_PARAMS', None):
self.rf_shield = get_rf_shield_controller(
shield_type=settings.SHIELD_CONTROLLER_TYPE,
params=settings.SHIELD_CONTROLLER_PARAMS)
if getattr(settings, 'SHIELD_CONTROLLER_TYPE', None) and getattr(settings, 'SHIELD_CONTROLLER_PARAMS', None):
self.rf_shield = get_rf_shield_controller(shield_type=settings.SHIELD_CONTROLLER_TYPE,
params=settings.SHIELD_CONTROLLER_PARAMS)
else:
self.rf_shield = None
@@ -367,8 +351,7 @@ class HarnessCase(unittest.TestCase):
os.system('del /q "%s\\Reports\\*.*"' % settings.HARNESS_HOME)
else:
logger.info('Empty files in temps')
os.system('del /q "%s\\Thread_Harness\\temp\\*.*"' %
settings.HARNESS_HOME)
os.system('del /q "%s\\Thread_Harness\\temp\\*.*"' % settings.HARNESS_HOME)
# create directory
os.system('mkdir %s' % self.result_dir)
@@ -406,19 +389,16 @@ class HarnessCase(unittest.TestCase):
if dialog and dialog.get_attribute('aria-hidden') == 'false':
times = 100
while times:
status = dialog.find_element_by_class_name(
'status-notify').text
status = dialog.find_element_by_class_name('status-notify').text
if 'Searching' in status:
logger.info('Still detecting..')
elif 'Not' in status:
logger.warning('Sniffer device not verified!')
button = dialog.find_element_by_id(
'snifferAutoDetectBtn')
button = dialog.find_element_by_id('snifferAutoDetectBtn')
button.click()
elif 'Verified' in status:
logger.info('Verified!')
button = dialog.find_element_by_id(
'saveCaptureSettings')
button = dialog.find_element_by_id('saveCaptureSettings')
button.click()
break
else:
@@ -462,14 +442,12 @@ class HarnessCase(unittest.TestCase):
if dialog.get_attribute('aria-hidden') != 'false':
raise Exception('Missing General Setup dialog')
field = dialog.find_element_by_id(
'inp_general_child_update_wait_time')
field = dialog.find_element_by_id('inp_general_child_update_wait_time')
field.clear()
if self.child_timeout:
field.send_keys(str(self.child_timeout))
field = dialog.find_element_by_id(
'inp_general_sed_polling_rate')
field = dialog.find_element_by_id('inp_general_sed_polling_rate')
field.clear()
if self.sed_polling_interval:
field.send_keys(str(self.sed_polling_interval))
@@ -526,28 +504,22 @@ class HarnessCase(unittest.TestCase):
selected_hw_num = len(selected_hw_set)
while selected_hw_num:
remove_button = selected_hw_set[selected_hw_num -
1].find_element_by_class_name(
'removeSelectedDevice')
remove_button = selected_hw_set[selected_hw_num - 1].find_element_by_class_name('removeSelectedDevice')
remove_button.click()
selected_hw_num = selected_hw_num - 1
devices = [
device for device in settings.GOLDEN_DEVICES
if not self.history.is_bad_golden_device(device[0]) and
device for device in settings.GOLDEN_DEVICES if not self.history.is_bad_golden_device(device[0]) and
not (settings.DUT_DEVICE and device[0] == settings.DUT_DEVICE[0])
]
logger.info('Available golden devices: %s', json.dumps(devices,
indent=2))
logger.info('Available golden devices: %s', json.dumps(devices, indent=2))
shield_devices = [
shield_device for shield_device in settings.SHIELD_GOLDEN_DEVICES
if not self.history.is_bad_golden_device(shield_device[0]) and
not (settings.DUT2_DEVICE and
shield_device[0] == settings.DUT2_DEVICE[0])
not (settings.DUT2_DEVICE and shield_device[0] == settings.DUT2_DEVICE[0])
]
logger.info('Available shield golden devices: %s',
json.dumps(shield_devices, indent=2))
logger.info('Available shield golden devices: %s', json.dumps(shield_devices, indent=2))
golden_devices_required = self.golden_devices_required
dut_device = ()
@@ -582,11 +554,9 @@ class HarnessCase(unittest.TestCase):
logger.info('Must set DUT2_DEVICE')
raise FailError('DUT2_DEVICE must be set in settings.py')
if isinstance(self.device_order, list) and self.device_order:
logger.info('case %s devices ordered by %s ', self.case,
self.device_order)
logger.info('case %s devices ordered by %s ', self.case, self.device_order)
else:
logger.info('case %s uses %s as DUT', self.case,
settings.DUT2_DEVICE)
logger.info('case %s uses %s as DUT', self.case, settings.DUT2_DEVICE)
# for test bed with multi-vendor devices
if settings.MIXED_DEVICE_TYPE:
@@ -608,8 +578,7 @@ class HarnessCase(unittest.TestCase):
case_id = match_line.group(1)
if re.sub(r'\.', ' ', case_id) == self.case:
logger.info('Get line by case %s: %s', case_id,
topo_line)
logger.info('Get line by case %s: %s', case_id, topo_line)
topo_device_list = re.split(',', match_line.group(2))
for i in range(len(topo_device_list)):
topo_device = re.split(':', topo_device_list[i])
@@ -618,12 +587,9 @@ class HarnessCase(unittest.TestCase):
else:
continue
except Exception as e:
logger.info('Get devices from topology config file error: %s',
e)
logger.info('Get devices from topology config file error: %s', e)
raise GoldenDeviceNotEnoughError()
logger.info(
'Golden devices in topology config file for case %s: %s',
case_id, topo_mixed_devices)
logger.info('Golden devices in topology config file for case %s: %s', case_id, topo_mixed_devices)
f_topo.close()
golden_device_candidates = []
missing_golden_devices = topo_mixed_devices[:]
@@ -637,15 +603,13 @@ class HarnessCase(unittest.TestCase):
# mapping device in device_order which needs to be shielded
if device_order_item[1]:
if 'DUT' in device_order_item[0]:
golden_device_candidates.append(
settings.DUT2_DEVICE)
golden_device_candidates.append(settings.DUT2_DEVICE)
dut_device = settings.DUT2_DEVICE
matched_dut = True
matched = True
break
for device_item in shield_devices:
if (device_order_item[0] == mixed_device_item[0]
and
if (device_order_item[0] == mixed_device_item[0] and
mixed_device_item[1] == device_item[1]):
golden_device_candidates.append(device_item)
shield_devices.remove(device_item)
@@ -654,22 +618,19 @@ class HarnessCase(unittest.TestCase):
# mapping device in device_order which does not need to be shielded
else:
if 'DUT' in device_order_item[0]:
golden_device_candidates.append(
settings.DUT_DEVICE)
golden_device_candidates.append(settings.DUT_DEVICE)
matched_dut = True
matched = True
break
for device_item in devices:
if (device_order_item[0] == mixed_device_item[0]
and
if (device_order_item[0] == mixed_device_item[0] and
mixed_device_item[1] == device_item[1]):
golden_device_candidates.append(device_item)
devices.remove(device_item)
matched = True
break
if not matched:
logger.info('Golden device not enough in : no %s',
device_order_item)
logger.info('Golden device not enough in : no %s', device_order_item)
raise GoldenDeviceNotEnoughError()
if not matched_dut:
raise FailError('Failed to find DUT in device_order')
@@ -683,9 +644,7 @@ class HarnessCase(unittest.TestCase):
devices.remove(device_item)
missing_golden_devices.remove(mixed_device_item)
break
logger.info(
'Golden devices in topology config file mapped in settings : %s',
golden_device_candidates)
logger.info('Golden devices in topology config file mapped in settings : %s', golden_device_candidates)
if len(topo_mixed_devices) != len(golden_device_candidates):
device_dict = dict()
for missing_device in missing_golden_devices:
@@ -698,8 +657,7 @@ class HarnessCase(unittest.TestCase):
else:
devices = golden_device_candidates
golden_devices_required = len(devices)
logger.info('All case-needed golden devices: %s',
json.dumps(devices, indent=2))
logger.info('All case-needed golden devices: %s', json.dumps(devices, indent=2))
# for test bed with single vendor devices
else:
golden_device_candidates = []
@@ -710,8 +668,7 @@ class HarnessCase(unittest.TestCase):
# choose device which needs to be shielded
if device_order_item[1]:
if 'DUT' in device_order_item[0]:
golden_device_candidates.append(
settings.DUT2_DEVICE)
golden_device_candidates.append(settings.DUT2_DEVICE)
dut_device = settings.DUT2_DEVICE
matched_dut = True
matched = True
@@ -734,8 +691,7 @@ class HarnessCase(unittest.TestCase):
matched = True
break
if not matched:
logger.info('Golden device not enough in : no %s',
device_order_item)
logger.info('Golden device not enough in : no %s', device_order_item)
raise GoldenDeviceNotEnoughError()
if not matched_dut:
raise FailError('Failed to find DUT in device_order')
@@ -752,8 +708,7 @@ class HarnessCase(unittest.TestCase):
raise GoldenDeviceNotEnoughError()
# add golden devices
number_of_devices_to_add = len(
devices) if self.add_all_devices else golden_devices_required
number_of_devices_to_add = len(devices) if self.add_all_devices else golden_devices_required
for i in range(number_of_devices_to_add):
self._add_device(*devices.pop())
@@ -767,29 +722,24 @@ class HarnessCase(unittest.TestCase):
# enable AUTO DUT
if self.auto_dut:
checkbox_auto_dut = browser.find_element_by_id(
'EnableAutoDutSelection')
checkbox_auto_dut = browser.find_element_by_id('EnableAutoDutSelection')
if not checkbox_auto_dut.is_selected():
checkbox_auto_dut.click()
time.sleep(1)
if settings.DUT_DEVICE:
radio_auto_dut = browser.find_element_by_class_name(
'AutoDUT_RadBtns')
radio_auto_dut = browser.find_element_by_class_name('AutoDUT_RadBtns')
if not radio_auto_dut.is_selected() and not self.device_order:
radio_auto_dut.click()
if self.device_order:
selected_hw_set = test_bed.find_elements_by_class_name(
'selected-hw')
selected_hw_set = test_bed.find_elements_by_class_name('selected-hw')
for selected_hw in selected_hw_set:
form_inputs = selected_hw.find_elements_by_tag_name(
'input')
form_inputs = selected_hw.find_elements_by_tag_name('input')
form_port = form_inputs[0]
port = form_port.get_attribute('value').encode('utf8')
if port == dut_device[0]:
radio_auto_dut = selected_hw.find_element_by_class_name(
'AutoDUT_RadBtns')
radio_auto_dut = selected_hw.find_element_by_class_name('AutoDUT_RadBtns')
if not radio_auto_dut.is_selected():
radio_auto_dut.click()
@@ -798,23 +748,19 @@ class HarnessCase(unittest.TestCase):
self._connect_devices()
button_next = browser.find_element_by_id('nextBtn')
if not wait_until(
lambda: 'disabled' not in button_next.get_attribute(
'class'),
lambda: 'disabled' not in button_next.get_attribute('class'),
times=(30 + 4 * number_of_devices_to_add),
):
bad_ones = []
selected_hw_set = test_bed.find_elements_by_class_name(
'selected-hw')
selected_hw_set = test_bed.find_elements_by_class_name('selected-hw')
for selected_hw in selected_hw_set:
form_inputs = selected_hw.find_elements_by_tag_name(
'input')
form_inputs = selected_hw.find_elements_by_tag_name('input')
form_port = form_inputs[0]
if form_port.is_enabled():
bad_ones.append(selected_hw)
for selected_hw in bad_ones:
form_inputs = selected_hw.find_elements_by_tag_name(
'input')
form_inputs = selected_hw.find_elements_by_tag_name('input')
form_port = form_inputs[0]
port = form_port.get_attribute('value').encode('utf8')
if port == dut_device[0]:
@@ -830,8 +776,7 @@ class HarnessCase(unittest.TestCase):
self.history.mark_bad_golden_device(port)
# remove the bad one
selected_hw.find_element_by_class_name(
'removeSelectedDevice').click()
selected_hw.find_element_by_class_name('removeSelectedDevice').click()
time.sleep(0.1)
if len(devices):
@@ -847,17 +792,14 @@ class HarnessCase(unittest.TestCase):
continue
if self.auto_dut and not settings.DUT_DEVICE:
radio_auto_dut = browser.find_element_by_class_name(
'AutoDUT_RadBtns')
radio_auto_dut = browser.find_element_by_class_name('AutoDUT_RadBtns')
if not radio_auto_dut.is_selected():
radio_auto_dut.click()
time.sleep(5)
button_next.click()
if not wait_until(
lambda: self._browser.current_url.endswith(
'TestExecution.html'), 20):
if not wait_until(lambda: self._browser.current_url.endswith('TestExecution.html'), 20):
raise Exception('Failed to load TestExecution page')
except FailError:
raise
@@ -875,10 +817,8 @@ class HarnessCase(unittest.TestCase):
time.sleep(1)
checkbox = None
wait_until(lambda: self._browser.find_elements_by_css_selector(
'.tree-node .tree-title') and True)
elems = self._browser.find_elements_by_css_selector(
'.tree-node .tree-title')
wait_until(lambda: self._browser.find_elements_by_css_selector('.tree-node .tree-title') and True)
elems = self._browser.find_elements_by_css_selector('.tree-node .tree-title')
finder = re.compile(r'.*\b' + case + r'\b')
finder_dotted = re.compile(r'.*\b' + case.replace(' ', r'\.') + r'\b')
for elem in elems:
@@ -910,9 +850,7 @@ class HarnessCase(unittest.TestCase):
elem = self._browser.find_element_by_id('runTest')
elem.click()
if not wait_until(
lambda: self._browser.find_element_by_id('stopTest') and True,
10):
if not wait_until(lambda: self._browser.find_element_by_id('stopTest') and True, 10):
raise Exception('Failed to start test case')
def _collect_result(self):
@@ -922,14 +860,11 @@ class HarnessCase(unittest.TestCase):
"""
if self.new_th:
os.system('copy "%s\\Reports\\*.*" "%s"' %
(settings.HARNESS_HOME, self.result_dir))
os.system('copy "%s\\Reports\\*.*" "%s"' % (settings.HARNESS_HOME, self.result_dir))
else:
os.system('copy "%s\\Thread_Harness\\temp\\*.*" "%s"' %
(settings.HARNESS_HOME, self.result_dir))
os.system('copy "%s\\Thread_Harness\\temp\\*.*" "%s"' % (settings.HARNESS_HOME, self.result_dir))
os.system('copy "%s\\Captures\\*.pcapng" %s\\' %
(settings.HARNESS_HOME, self.result_dir))
os.system('copy "%s\\Captures\\*.pcapng" %s\\' % (settings.HARNESS_HOME, self.result_dir))
def _wait_dialog(self):
"""Wait for dialogs and handle them until done.
@@ -946,8 +881,7 @@ class HarnessCase(unittest.TestCase):
logger.exception('Failed to get dialog.')
else:
if dialog and dialog.get_attribute('aria-hidden') == 'false':
title = dialog.find_element_by_class_name(
'modal-title').text
title = dialog.find_element_by_class_name('modal-title').text
time.sleep(1)
logger.info('Handling dialog[%s]', title)
@@ -981,21 +915,15 @@ class HarnessCase(unittest.TestCase):
if self.timeout % 10 == 0:
lines = self._hc.tail()
if 'SUCCESS: The process "dumpcap.exe" with PID ' in lines:
logger.info(
'Tshark should be ended now, lets wait at most 30 seconds.'
)
if not wait_until(
lambda: 'tshark.exe' not in subprocess.check_output(
'tasklist'), 30):
res = subprocess.check_output(
'taskkill /t /f /im tshark.exe',
stderr=subprocess.STDOUT,
shell=True)
logger.info('Tshark should be ended now, lets wait at most 30 seconds.')
if not wait_until(lambda: 'tshark.exe' not in subprocess.check_output('tasklist'), 30):
res = subprocess.check_output('taskkill /t /f /im tshark.exe',
stderr=subprocess.STDOUT,
shell=True)
logger.info(res)
# Wait until case really stopped
wait_until(lambda: self._browser.find_element_by_id('runTest') and True,
30)
wait_until(lambda: self._browser.find_element_by_id('runTest') and True, 30)
if error:
raise FailError('Fail for previous exceptions')
@@ -1032,8 +960,7 @@ class HarnessCase(unittest.TestCase):
self.dut.extpanid = settings.THREAD_EXTPANID
self.dut.start()
elif title.startswith('MAC Address Required') or title.startswith(
'DUT Random Extended MAC Address Required'):
elif title.startswith('MAC Address Required') or title.startswith('DUT Random Extended MAC Address Required'):
mac = self.dut.mac
inp = dialog.find_element_by_id('cnfrmInpText')
inp.clear()
@@ -1043,8 +970,7 @@ class HarnessCase(unittest.TestCase):
ll64 = None
for addr in self.dut.addrs:
addr = addr.lower()
if addr.startswith('fe80') and not re.match(
'.+ff:fe00:[0-9a-f]{0,4}$', addr):
if addr.startswith('fe80') and not re.match('.+ff:fe00:[0-9a-f]{0,4}$', addr):
ll64 = addr
break
@@ -1077,8 +1003,7 @@ class HarnessCase(unittest.TestCase):
elif title.startswith('ML64 Address'):
ml64 = None
for addr in self.dut.addrs:
if addr.startswith('fd') and not re.match(
'.+ff:fe00:[0-9a-f]{0,4}$', addr):
if addr.startswith('fd') and not re.match('.+ff:fe00:[0-9a-f]{0,4}$', addr):
ml64 = addr
break
@@ -1090,21 +1015,18 @@ class HarnessCase(unittest.TestCase):
inp.clear()
inp.send_keys(ml64)
elif title.startswith('Shield Devices') or title.startswith(
'Shield DUT'):
elif title.startswith('Shield Devices') or title.startswith('Shield DUT'):
time.sleep(2)
if self.rf_shield:
logger.info('Shielding devices')
with self.rf_shield:
self.rf_shield.shield()
elif self.dut and settings.SHIELD_SIMULATION:
self.dut.channel = (self.channel == THREAD_CHANNEL_MAX and
THREAD_CHANNEL_MIN) or (self.channel + 1)
self.dut.channel = (self.channel == THREAD_CHANNEL_MAX and THREAD_CHANNEL_MIN) or (self.channel + 1)
else:
input('Shield DUT and press enter to continue..')
elif title.startswith('Unshield Devices') or title.startswith(
'Bring DUT back to network'):
elif title.startswith('Unshield Devices') or title.startswith('Bring DUT back to network'):
time.sleep(5)
if self.rf_shield:
logger.info('Unshielding devices')
@@ -1119,8 +1041,7 @@ class HarnessCase(unittest.TestCase):
body = dialog.find_element_by_id('cnfrmMsg').text
body = body.split(': ')[1]
params = reduce(
lambda params, param: params.update(
((param[0].strip(' '), param[1]),)) or params,
lambda params, param: params.update(((param[0].strip(' '), param[1]),)) or params,
[it.split('=') for it in body.split(', ')],
{},
)
@@ -88,12 +88,11 @@ class HarnessController(object):
else:
env = dict(
os.environ,
PYTHONPATH='%s\\Thread_Harness;%s\\ThirdParty\\hsdk-python\\src'
% (settings.HARNESS_HOME, settings.HARNESS_HOME),
PYTHONPATH='%s\\Thread_Harness;%s\\ThirdParty\\hsdk-python\\src' %
(settings.HARNESS_HOME, settings.HARNESS_HOME),
)
self.harness_file = '%s\\harness-%s.log' % (
self.result_dir, time.strftime('%Y%m%d%H%M%S'))
self.harness_file = '%s\\harness-%s.log' % (self.result_dir, time.strftime('%Y%m%d%H%M%S'))
with open(self.harness_file, 'w') as harness_out:
self.harness = subprocess.Popen(
[
@@ -113,10 +112,7 @@ class HarnessController(object):
if self.miniweb:
logger.warning('Miniweb already started')
else:
with open(
'%s\\miniweb-%s.log' %
(self.result_dir, time.strftime('%Y%m%d%H%M%S')),
'w') as miniweb_out:
with open('%s\\miniweb-%s.log' % (self.result_dir, time.strftime('%Y%m%d%H%M%S')), 'w') as miniweb_out:
self.miniweb = subprocess.Popen(
[settings.HARNESS_HOME + '\\MiniWeb\\miniweb.exe'],
stdout=miniweb_out,
@@ -106,10 +106,7 @@ class OpenThreadController(threading.Thread):
self.handle.setblocking(0)
self._is_net = True
else:
self.handle = serial.Serial(self.port,
115200,
timeout=0,
xonxoff=True)
self.handle = serial.Serial(self.port, 115200, timeout=0, xonxoff=True)
self._is_net = False
def _read(self, size=512):
@@ -45,9 +45,7 @@ logger = logging.getLogger(__name__)
try:
from pysnmp.hlapi import SnmpEngine, CommunityData, UdpTransportTarget, ContextData, getCmd, setCmd, ObjectType, ObjectIdentity, Integer32
except ImportError:
logger.warning(
'PySNMP module is not installed. Install if EATON_PDU_CONTROLLER is used'
)
logger.warning('PySNMP module is not installed. Install if EATON_PDU_CONTROLLER is used')
class PduController(object):
@@ -188,8 +186,7 @@ class NordicBoardPduController(PduController):
boards_serial_numbers = params['boards_serial_numbers']
for serial_number in boards_serial_numbers:
logger.info('Resetting board with the serial number: %s',
serial_number)
logger.info('Resetting board with the serial number: %s', serial_number)
self._pin_reset(serial_number)
def close(self):
@@ -208,12 +205,9 @@ class EatonPduController(PduController):
def open(self, **params):
missing_fields = ['ip', 'port']
missing_fields = [
field for field in missing_fields if field not in params.keys()
]
missing_fields = [field for field in missing_fields if field not in params.keys()]
if missing_fields:
raise KeyError(
'Missing keys in PDU params: {}'.format(missing_fields))
raise KeyError('Missing keys in PDU params: {}'.format(missing_fields))
self.params = params
self.type = 'pdu'
self.ip = self.params['ip']
@@ -221,8 +215,7 @@ class EatonPduController(PduController):
self._community = 'public'
self._snmp_engine = SnmpEngine()
self._community_data = CommunityData(self._community, mpModel=0)
self._udp_transport_target = UdpTransportTarget(
(self.ip, self.snmp_agent_port))
self._udp_transport_target = UdpTransportTarget((self.ip, self.snmp_agent_port))
self._context = ContextData()
def _outlet_oid_get(self, param, socket):
@@ -237,16 +230,11 @@ class EatonPduController(PduController):
full OID identifying the SNMP object (str)
"""
parameters = {
'get_state':
self.outlet_oid_cmd_get_state_base,
'set_on':
self.outlet_oid_cmd_set_on_base,
'set_off':
self.outlet_oid_cmd_set_off_base,
'set_reboot_delay':
self.outlet_oid_cmd_set_reboot_delay_seconds_base,
'reboot':
self.outlet_oid_cmd_reboot_base
'get_state': self.outlet_oid_cmd_get_state_base,
'set_on': self.outlet_oid_cmd_set_on_base,
'set_off': self.outlet_oid_cmd_set_off_base,
'set_reboot_delay': self.outlet_oid_cmd_set_reboot_delay_seconds_base,
'reboot': self.outlet_oid_cmd_reboot_base
}
return parameters[param.lower()] + str(socket)
@@ -261,8 +249,7 @@ class EatonPduController(PduController):
value (int): Value to be written to the OID as Integer32.
"""
errorIndication, errorStatus, errorIndex, varBinds = next(
setCmd(self._snmp_engine, self._community_data,
self._udp_transport_target, self._context,
setCmd(self._snmp_engine, self._community_data, self._udp_transport_target, self._context,
ObjectType(ObjectIdentity(oid), Integer32(value))))
if errorIndication:
@@ -285,8 +272,7 @@ class EatonPduController(PduController):
OID value (int)
"""
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(self._snmp_engine, self._community_data,
self._udp_transport_target, self._context,
getCmd(self._snmp_engine, self._community_data, self._udp_transport_target, self._context,
ObjectType(ObjectIdentity(oid))))
if errorIndication:
@@ -349,16 +335,13 @@ class EatonPduController(PduController):
time.sleep(2)
timeout = time.time() + self.PDU_COMMAND_TIMEOUT
while ((time.time() < timeout) and
not self.validate_state(socket, 0)):
while ((time.time() < timeout) and not self.validate_state(socket, 0)):
time.sleep(0.1)
if self.validate_state(socket, 0):
logger.debug('Turned OFF socket {} at {}'.format(
socket, self.ip))
logger.debug('Turned OFF socket {} at {}'.format(socket, self.ip))
else:
logger.error('Failed to turn OFF socket {} at {}'.format(
socket, self.ip))
logger.error('Failed to turn OFF socket {} at {}'.format(socket, self.ip))
def turn_on(self, sockets):
"""
@@ -375,16 +358,13 @@ class EatonPduController(PduController):
time.sleep(2)
timeout = time.time() + self.PDU_COMMAND_TIMEOUT
while ((time.time() < timeout) and
not self.validate_state(socket, 1)):
while ((time.time() < timeout) and not self.validate_state(socket, 1)):
time.sleep(0.1)
if self.validate_state(socket, 1):
logger.debug('Turned ON socket {} at {}'.format(
socket, self.ip))
logger.debug('Turned ON socket {} at {}'.format(socket, self.ip))
else:
logger.error('Failed to turn ON socket {} at {}'.format(
socket, self.ip))
logger.error('Failed to turn ON socket {} at {}'.format(socket, self.ip))
def close(self):
self._community = None
@@ -413,8 +393,7 @@ class IpPowerSocketPduController(PduController):
def open(self, **params):
self._base_url = 'http://{}/outs.cgi?out'.format(params['ip'])
password_manager = HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, self._base_url, params['user'],
params['pass'])
password_manager.add_password(None, self._base_url, params['user'], params['pass'])
authentication_handler = HTTPBasicAuthHandler(password_manager)
self._opener = build_opener(authentication_handler)
@@ -97,5 +97,4 @@ CONTROLLERS = {'RF_SWITCH': RfSwitchController}
def get_rf_shield_controller(shield_type, params):
if shield_type in CONTROLLERS:
return CONTROLLERS[shield_type](**params)
logger.exception(
'Unknown RF shield controller type: {}'.format(shield_type))
logger.exception('Unknown RF shield controller type: {}'.format(shield_type))
@@ -56,11 +56,7 @@ class SimpleTestResult(unittest.TestResult):
executions = 0
def __init__(self,
path,
auto_reboot_args=None,
keep_explorer=False,
add_all_devices=False):
def __init__(self, path, auto_reboot_args=None, keep_explorer=False, add_all_devices=False):
"""Record test results in json file
Args:
@@ -88,21 +84,16 @@ class SimpleTestResult(unittest.TestResult):
# create start up script if auto reboot enabled
if self.auto_reboot_args:
test.auto_reboot = True
os.system(
'echo %s > "%s"' %
(' '.join(self.auto_reboot_args +
['-c', test.__class__.__name__]), RESUME_SCRIPT_PATH))
os.system('echo %s > "%s"' %
(' '.join(self.auto_reboot_args + ['-c', test.__class__.__name__]), RESUME_SCRIPT_PATH))
# record start timestamp
self.started = time.strftime('%Y-%m-%dT%H:%M:%S')
os.system('mkdir %s' % test.result_dir)
self.log_handler = logging.FileHandler(
'%s\\auto-%s.log' %
(test.result_dir, time.strftime('%Y%m%d%H%M%S')))
self.log_handler = logging.FileHandler('%s\\auto-%s.log' % (test.result_dir, time.strftime('%Y%m%d%H%M%S')))
self.log_handler.setLevel(logging.DEBUG)
self.log_handler.setFormatter(
logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
self.log_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
logger.addHandler(self.log_handler)
def add_result(self, test, passed, error=None):
@@ -126,9 +117,7 @@ class SimpleTestResult(unittest.TestResult):
if self.auto_reboot_args:
os.system('del "%s"' % RESUME_SCRIPT_PATH)
json.dump(OrderedDict(sorted(self.result.items(), key=lambda t: t[0])),
open(self.path, 'w'),
indent=2)
json.dump(OrderedDict(sorted(self.result.items(), key=lambda t: t[0])), open(self.path, 'w'), indent=2)
# save logs
logger.removeHandler(self.log_handler)
@@ -169,10 +158,7 @@ def list_devices(names=None, continue_from=None, **kwargs):
"""List devices in settings file and print versions"""
if not names:
names = [
device for device, _type in settings.GOLDEN_DEVICES
if _type == 'OpenThread'
]
names = [device for device, _type in settings.GOLDEN_DEVICES if _type == 'OpenThread']
if continue_from:
continue_from = names.index(continue_from)
@@ -218,11 +204,7 @@ def discover(
if blacklist:
try:
excludes = [
line.strip('\n')
for line in open(blacklist, 'r').readlines()
if not line.startswith('#')
]
excludes = [line.strip('\n') for line in open(blacklist, 'r').readlines() if not line.startswith('#')]
except BaseException:
logger.exception('Failed to open test case black list file')
raise
@@ -243,11 +225,9 @@ def discover(
new_th = False
harness_info = ConfigParser.ConfigParser()
harness_info.read('%s\\info.ini' % settings.HARNESS_HOME)
if harness_info.has_option('Thread_Harness_Info',
'Version') and harness_info.has_option(
'Thread_Harness_Info', 'Mode'):
harness_version = harness_info.get('Thread_Harness_Info',
'Version').rsplit(' ', 1)[1]
if harness_info.has_option('Thread_Harness_Info', 'Version') and harness_info.has_option(
'Thread_Harness_Info', 'Mode'):
harness_version = harness_info.get('Thread_Harness_Info', 'Version').rsplit(' ', 1)[1]
harness_mode = harness_info.get('Thread_Harness_Info', 'Mode')
if harness_mode == 'External' and harness_version > '1.4.0':
@@ -273,9 +253,7 @@ def discover(
case_name = str(case.__class__.__name__)
# grep name
if name_greps and not any(
fnmatch.fnmatch(case_name, name_grep)
for name_grep in name_greps):
if name_greps and not any(fnmatch.fnmatch(case_name, name_grep) for name_grep in name_greps):
logger.info('case[%s] skipped by name greps', case_name)
continue
@@ -287,17 +265,15 @@ def discover(
# skip cases
if case_name in log:
if ((log[case_name]['passed'] and ('p' in skip)) or
(log[case_name]['passed'] is False and ('f' in skip)) or
(log[case_name]['passed'] is None and ('e' in skip))):
logger.warning('case[%s] skipped for its status[%s]',
case_name, log[case_name]['passed'])
(log[case_name]['passed'] is False and ('f' in skip)) or (log[case_name]['passed'] is None and
('e' in skip))):
logger.warning('case[%s] skipped for its status[%s]', case_name, log[case_name]['passed'])
continue
# continue from
if continue_from:
if continue_from != case_name:
logger.warning('case[%s] skipped for continue from[%s]',
case_name, continue_from)
logger.warning('case[%s] skipped for continue from[%s]', case_name, continue_from)
continue
else:
continue_from = None
@@ -309,9 +285,8 @@ def discover(
# max devices
if max_devices and case.golden_devices_required > max_devices:
logger.warning(
'case[%s] skipped for exceeding max golden devices allowed[%d]',
case_name, max_devices)
logger.warning('case[%s] skipped for exceeding max golden devices allowed[%d]', case_name,
max_devices)
continue
suite.addTest(case)
@@ -343,8 +318,7 @@ def discover(
settings.PDU_CONTROLLER_OPEN_PARAMS = {}
settings.PDU_CONTROLLER_REBOOT_PARAMS = {}
result = SimpleTestResult(result_file, auto_reboot_args, keep_explorer,
add_all_devices)
result = SimpleTestResult(result_file, auto_reboot_args, keep_explorer, add_all_devices)
for case in suite:
logger.info(case.__class__.__name__)
@@ -356,8 +330,7 @@ def discover(
def main():
parser = argparse.ArgumentParser(
description='Thread harness test case runner')
parser = argparse.ArgumentParser(description='Thread harness test case runner')
parser.add_argument('--auto-reboot',
'-a',
action='store_true',
@@ -375,31 +348,15 @@ def main():
type=str,
help='file to list test cases to skip',
default=None)
parser.add_argument('--continue-from',
'-c',
type=str,
default=None,
help='first case to test')
parser.add_argument('--delete-history',
'-d',
action='store_true',
default=False,
help='clear history on startup')
parser.add_argument('--continue-from', '-c', type=str, default=None, help='first case to test')
parser.add_argument('--delete-history', '-d', action='store_true', default=False, help='clear history on startup')
parser.add_argument('--keep-explorer',
'-e',
action='store_true',
default=False,
help='do not restart explorer.exe at the end')
parser.add_argument('--name-greps',
'-g',
action='append',
default=None,
help='grep case by names')
parser.add_argument('--list-file',
'-i',
type=str,
default=None,
help='file to list cases names to test')
parser.add_argument('--name-greps', '-g', action='append', default=None, help='grep case by names')
parser.add_argument('--list-file', '-i', type=str, default=None, help='file to list cases names to test')
parser.add_argument(
'--skip',
'-k',
@@ -408,21 +365,9 @@ def main():
help='type of results to skip. e for error, f for fail, p for pass.',
default='',
)
parser.add_argument('--list-devices',
'-l',
action='store_true',
default=False,
help='list devices')
parser.add_argument('--manual-reset',
'-m',
action='store_true',
default=False,
help='reset devices manually')
parser.add_argument('--dry-run',
'-n',
action='store_true',
default=False,
help='just show what to run')
parser.add_argument('--list-devices', '-l', action='store_true', default=False, help='list devices')
parser.add_argument('--manual-reset', '-m', action='store_true', default=False, help='reset devices manually')
parser.add_argument('--dry-run', '-n', action='store_true', default=False, help='just show what to run')
parser.add_argument(
'--result-file',
'-o',
@@ -436,31 +381,19 @@ def main():
type=str,
help='file name pattern, default to "*.py"',
default='*.py')
parser.add_argument('--rerun-fails',
'-r',
type=int,
default=0,
help='number of times to rerun failed test cases')
parser.add_argument('--rerun-fails', '-r', type=int, default=0, help='number of times to rerun failed test cases')
parser.add_argument('--add-all-devices',
'-t',
action='store_true',
default=False,
help='add all devices to the test bed')
parser.add_argument('--max-devices',
'-u',
type=int,
default=0,
help='max golden devices allowed')
parser.add_argument('--max-devices', '-u', type=int, default=0, help='max golden devices allowed')
args = vars(parser.parse_args())
if args['list_file']:
try:
names = [
line.strip('\n')
for line in open(args['list_file'], 'r').readlines()
if not line.startswith('#')
]
names = [line.strip('\n') for line in open(args['list_file'], 'r').readlines() if not line.startswith('#')]
except BaseException:
logger.exception('Failed to open test case list file')
raise
@@ -478,10 +411,7 @@ def main():
if rerun_fails > 0:
for i in range(rerun_fails):
failed_names = {
name for name in result.result
if result.result[name]['passed'] is False
}
failed_names = {name for name in result.result if result.result[name]['passed'] is False}
if not failed_names:
break
logger.info('Rerunning failed test cases')
@@ -37,8 +37,7 @@ class Leader_9_2_9(HarnessCase):
case = '9 2 9'
golden_devices_required = 3
case_need_shield = True
device_order = [('Router_2', False), ('Commissioner', True),
('Router_1', False), ('DUT', True)]
device_order = [('Router_2', False), ('Commissioner', True), ('Router_1', False), ('DUT', True)]
def on_dialog(self, dialog, title):
pass
+1 -2
View File
@@ -37,8 +37,7 @@ class MED_9_2_10(HarnessCase):
case = '9 2 10'
golden_devices_required = 4
case_need_shield = True
device_order = [('SED_1', False), ('DUT', False), ('Router_1', False),
('Commissioner', True), ('Leader', True)]
device_order = [('SED_1', False), ('DUT', False), ('Router_1', False), ('Commissioner', True), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class Router_9_2_10(HarnessCase):
case = '9 2 10'
golden_devices_required = 4
case_need_shield = True
device_order = [('SED_1', False), ('MED_1', False), ('DUT', False),
('Commissioner', True), ('Leader', True)]
device_order = [('SED_1', False), ('MED_1', False), ('DUT', False), ('Commissioner', True), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class Router_9_2_9(HarnessCase):
case = '9 2 9'
golden_devices_required = 3
case_need_shield = True
device_order = [('Router_2', False), ('Commissioner', True), ('DUT', False),
('Leader', True)]
device_order = [('Router_2', False), ('Commissioner', True), ('DUT', False), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
+1 -2
View File
@@ -37,8 +37,7 @@ class SED_9_2_10(HarnessCase):
case = '9 2 10'
golden_devices_required = 4
case_need_shield = True
device_order = [('DUT', False), ('MED_1', False), ('Router_1', False),
('Commissioner', True), ('Leader', True)]
device_order = [('DUT', False), ('MED_1', False), ('Router_1', False), ('Commissioner', True), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class Leader_9_2_9(HarnessCase):
case = '9 2 9'
golden_devices_required = 3
case_need_shield = True
device_order = [('Router_2', False), ('Commissioner', True),
('Router_1', False), ('DUT', True)]
device_order = [('Router_2', False), ('Commissioner', True), ('Router_1', False), ('DUT', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class MED_9_2_10(HarnessCase):
case = '9 2 10'
golden_devices_required = 4
case_need_shield = True
device_order = [('SED_1', False), ('DUT', False), ('Router_1', False),
('Commissioner', True), ('Leader', True)]
device_order = [('SED_1', False), ('DUT', False), ('Router_1', False), ('Commissioner', True), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class Router_9_2_10(HarnessCase):
case = '9 2 10'
golden_devices_required = 4
case_need_shield = True
device_order = [('SED_1', False), ('MED_1', False), ('DUT', False),
('Commissioner', True), ('Leader', True)]
device_order = [('SED_1', False), ('MED_1', False), ('DUT', False), ('Commissioner', True), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class Router_9_2_9(HarnessCase):
case = '9 2 9'
golden_devices_required = 3
case_need_shield = True
device_order = [('Router_2', False), ('Commissioner', True), ('DUT', False),
('Leader', True)]
device_order = [('Router_2', False), ('Commissioner', True), ('DUT', False), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
@@ -37,8 +37,7 @@ class SED_9_2_10(HarnessCase):
case = '9 2 10'
golden_devices_required = 4
case_need_shield = True
device_order = [('DUT', False), ('MED_1', False), ('Router_1', False),
('Commissioner', True), ('Leader', True)]
device_order = [('DUT', False), ('MED_1', False), ('Router_1', False), ('Commissioner', True), ('Leader', True)]
def on_dialog(self, dialog, title):
pass
+5 -10
View File
@@ -105,8 +105,7 @@ def device_calculate(topo_file, case_list):
matched_case = re.match(r'(.*)-(.*)', line, re.M | re.I)
if 'all' not in case_list and matched_case.group(
1) not in case_list:
if 'all' not in case_list and matched_case.group(1) not in case_list:
continue
logging.info('case %s:' % matched_case.group(1))
@@ -126,8 +125,7 @@ def device_calculate(topo_file, case_list):
for _, vendor in role_vendor_list:
case_vendor_dict[vendor] += 1
testbed_vendor_dict[vendor] = max(testbed_vendor_dict[vendor],
case_vendor_dict[vendor])
testbed_vendor_dict[vendor] = max(testbed_vendor_dict[vendor], case_vendor_dict[vendor])
logging.info('\tvendor devices : %s' % dict(case_vendor_dict))
@@ -143,19 +141,16 @@ def device_calculate(topo_file, case_list):
if 'Any' in testbed_vendor_dict:
testbed_vendor_dict['Any'] = count_any
logging.info('\nTestbed needed vendor devices:%s' %
dict(testbed_vendor_dict))
logging.info('\nTestbed needed vendor devices:%s' % dict(testbed_vendor_dict))
def main():
parser = argparse.ArgumentParser(
description='parse TopologyConfig file and list all devices by case')
parser = argparse.ArgumentParser(description='parse TopologyConfig file and list all devices by case')
parser.add_argument(
'-f',
dest='topo_file',
default='C:/GRL/Thread1.1/Thread_Harness/TestScripts/TopologyConfig.txt',
help=
'Topology config file (default: C:/GRL/Thread1.1/Thread_Harness/TestScripts/TopologyConfig.txt)',
help='Topology config file (default: C:/GRL/Thread1.1/Thread_Harness/TestScripts/TopologyConfig.txt)',
)
parser.add_argument('-c',
+8 -18
View File
@@ -43,27 +43,20 @@ class OT_Sniffer(ISniffer):
self.is_active = False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('OT_Sniffer: [intialize] --> ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('OT_Sniffer: [intialize] --> ' + str(e))
def discoverSniffer(self):
sniffers = []
p_discover = subprocess.Popen('extcap_ot.bat --extcap-interfaces',
stdout=subprocess.PIPE,
shell=True)
p_discover = subprocess.Popen('extcap_ot.bat --extcap-interfaces', stdout=subprocess.PIPE, shell=True)
for line in p_discover.stdout.readlines():
if line.startswith('interface'):
try:
# e.g. interface {value=COM10:460800}{display=OpenThread Sniffer COM10}
interface_port = line[line.index('value=') +
6:line.index('}{display')]
sniffers.append(
OT_Sniffer(addressofDevice=interface_port,
channel=ModuleHelper.Default_Channel))
interface_port = line[line.index('value=') + 6:line.index('}{display')]
sniffers.append(OT_Sniffer(addressofDevice=interface_port, channel=ModuleHelper.Default_Channel))
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'OT_Sniffer: [discoverSniffer] --> Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('OT_Sniffer: [discoverSniffer] --> Error: ' + str(e))
p_discover.wait()
return sniffers
@@ -88,8 +81,7 @@ class OT_Sniffer(ISniffer):
if python_exe.endswith(".exe"):
# sniffer_py: e.g. C:\Python37\Scripts\sniffer.py
sniffer_py = str(
os.path.dirname(python_exe)) + '\\Scripts\\sniffer.py'
sniffer_py = str(os.path.dirname(python_exe)) + '\\Scripts\\sniffer.py'
cmd = [
python_exe,
@@ -105,13 +97,11 @@ class OT_Sniffer(ISniffer):
captureFileLocation,
]
self.is_active = True
ModuleHelper.WriteIntoDebugLogger('OT_Sniffer: [cmd] --> %s' %
str(cmd))
ModuleHelper.WriteIntoDebugLogger('OT_Sniffer: [cmd] --> %s' % str(cmd))
self.subprocess = subprocess.Popen(cmd)
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'OT_Sniffer: [startSniffer] --> Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('OT_Sniffer: [startSniffer] --> Error: ' + str(e))
def stopSniffer(self):
"""
+84 -163
View File
@@ -62,8 +62,7 @@ from IThci import IThci
LINESEPX = re.compile(r'\r\n|\n')
"""regex: used to split lines"""
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(message)s")
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
_callStackDepth = 0
@@ -74,8 +73,8 @@ def watched(func):
@functools.wraps(func)
def wrapped_api_func(self, *args, **kwargs):
global _callStackDepth
callstr = '====' * _callStackDepth + "> %s%s%s" % (
func_name, str(args) if args else "", str(kwargs) if kwargs else "")
callstr = '====' * _callStackDepth + "> %s%s%s" % (func_name, str(args) if args else "",
str(kwargs) if kwargs else "")
_callStackDepth += 1
try:
@@ -84,8 +83,7 @@ def watched(func):
self.log("%s returns %r", callstr, ret)
return ret
except Exception as ex:
self.log("FUNC %s failed: %s\n%s", func_name, str(ex),
traceback.format_exc())
self.log("FUNC %s failed: %s\n%s", func_name, str(ex), traceback.format_exc())
raise
finally:
_callStackDepth -= 1
@@ -230,8 +228,7 @@ class OpenThreadTHCI(object):
break
if line != 'Done':
raise Exception('%s: failed to find end of response: %s' %
(self.port, response))
raise Exception('%s: failed to find end of response: %s' % (self.port, response))
return response
@@ -316,11 +313,9 @@ class OpenThreadTHCI(object):
if self.firmwarePrefix in self.UIStatusMsg:
self.deviceConnected = True
else:
self.UIStatusMsg = ('Firmware Not Matching Expecting ' +
self.firmwarePrefix + ', Now is ' +
self.UIStatusMsg = ('Firmware Not Matching Expecting ' + self.firmwarePrefix + ', Now is ' +
self.UIStatusMsg)
ModuleHelper.WriteIntoDebugLogger(
'Err: OpenThread device Firmware not matching..')
ModuleHelper.WriteIntoDebugLogger('Err: OpenThread device Firmware not matching..')
@API
def closeConnection(self):
@@ -335,8 +330,7 @@ class OpenThreadTHCI(object):
cmd = 'routereligible disable'
self.__executeCommand(cmd)
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'__disableRouterEligible() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('__disableRouterEligible() Error: ' + str(e))
def __setDeviceMode(self, mode):
"""set thread device mode:
@@ -358,8 +352,7 @@ class OpenThreadTHCI(object):
cmd = 'mode %s' % mode
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setDeviceMode() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setDeviceMode() Error: ' + str(e))
def __setRouterUpgradeThreshold(self, iThreshold):
"""set router upgrade threshold
@@ -378,8 +371,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'setRouterUpgradeThreshold() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('setRouterUpgradeThreshold() Error: ' + str(e))
def __setRouterDowngradeThreshold(self, iThreshold):
"""set router downgrade threshold
@@ -399,8 +391,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'setRouterDowngradeThreshold() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('setRouterDowngradeThreshold() Error: ' + str(e))
def __setRouterSelectionJitter(self, iRouterJitter):
"""set ROUTER_SELECTION_JITTER parameter for REED to upgrade to Router
@@ -418,8 +409,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'setRouterSelectionJitter() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('setRouterSelectionJitter() Error: ' + str(e))
def __setAddressfilterMode(self, mode):
"""set address filter mode
@@ -435,8 +425,7 @@ class OpenThreadTHCI(object):
return True
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'__setAddressFilterMode() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('__setAddressFilterMode() Error: ' + str(e))
def __startOpenThread(self):
"""start OpenThread stack
@@ -479,8 +468,7 @@ class OpenThreadTHCI(object):
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('startOpenThread() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('startOpenThread() Error: ' + str(e))
def __stopOpenThread(self):
"""stop OpenThread stack
@@ -496,8 +484,7 @@ class OpenThreadTHCI(object):
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('stopOpenThread() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('stopOpenThread() Error: ' + str(e))
def __isOpenThreadRunning(self):
"""check whether or not OpenThread is running
@@ -568,9 +555,7 @@ class OpenThreadTHCI(object):
prefix2 = self.__lstrip0x(prefix1)
hexPrefix = str(prefix2).ljust(16, '0')
hexIter = iter(hexPrefix)
finalMac = ':'.join(
a + b + c + d
for a, b, c, d in zip(hexIter, hexIter, hexIter, hexIter))
finalMac = ':'.join(a + b + c + d for a, b, c, d in zip(hexIter, hexIter, hexIter, hexIter))
prefix = str(finalMac)
strIp6Prefix = prefix[:19]
return strIp6Prefix + '::'
@@ -636,8 +621,7 @@ class OpenThreadTHCI(object):
except Exception:
pass
self.joinCommissionedStatus = self.joinStatus[
'succeed'] if joinSucceed else self.joinStatus['failed']
self.joinCommissionedStatus = self.joinStatus['succeed'] if joinSucceed else self.joinStatus['failed']
self.logThreadStatus = self.logStatus['stop']
return logs
@@ -665,8 +649,7 @@ class OpenThreadTHCI(object):
self.hasActiveDatasetToCommit = True
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setChannelMask() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setChannelMask() Error: ' + str(e))
def __setSecurityPolicy(self, securityPolicySecs, securityPolicyFlags):
print('call _setSecurityPolicy')
@@ -678,8 +661,7 @@ class OpenThreadTHCI(object):
self.hasActiveDatasetToCommit = True
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setSecurityPolicy() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setSecurityPolicy() Error: ' + str(e))
def __setKeySwitchGuardTime(self, iKeySwitchGuardTime):
""" set the Key switch guard time
@@ -701,8 +683,7 @@ class OpenThreadTHCI(object):
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'setKeySwitchGuardTime() Error; ' + str(e))
ModuleHelper.WriteIntoDebugLogger('setKeySwitchGuardTime() Error; ' + str(e))
def __getCommissionerSessionId(self):
""" get the commissioner session id allocated from Leader """
@@ -741,11 +722,9 @@ class OpenThreadTHCI(object):
cmd = 'networkname %s' % networkName
datasetCmd = 'dataset networkname %s' % networkName
self.hasActiveDatasetToCommit = True
return (self.__executeCommand(cmd)[-1] == 'Done' and
self.__executeCommand(datasetCmd)[-1] == 'Done')
return (self.__executeCommand(cmd)[-1] == 'Done' and self.__executeCommand(datasetCmd)[-1] == 'Done')
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setNetworkName() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setNetworkName() Error: ' + str(e))
@API
def setChannel(self, channel=11):
@@ -767,8 +746,7 @@ class OpenThreadTHCI(object):
cmd = 'channel %s' % channel
datasetCmd = 'dataset channel %s' % channel
self.hasActiveDatasetToCommit = True
return (self.__executeCommand(cmd)[-1] == 'Done' and
self.__executeCommand(datasetCmd)[-1] == 'Done')
return (self.__executeCommand(cmd)[-1] == 'Done' and self.__executeCommand(datasetCmd)[-1] == 'Done')
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setChannel() Error: ' + str(e))
@@ -914,11 +892,9 @@ class OpenThreadTHCI(object):
self.networkKey = masterKey
self.hasActiveDatasetToCommit = True
return (self.__executeCommand(cmd)[-1] == 'Done' and
self.__executeCommand(datasetCmd)[-1] == 'Done')
return (self.__executeCommand(cmd)[-1] == 'Done' and self.__executeCommand(datasetCmd)[-1] == 'Done')
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setNetworkkey() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setNetworkkey() Error: ' + str(e))
@API
def addBlockedMAC(self, xEUI):
@@ -959,8 +935,7 @@ class OpenThreadTHCI(object):
return ret
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('addBlockedMAC() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('addBlockedMAC() Error: ' + str(e))
@API
def addAllowMAC(self, xEUI):
@@ -1024,8 +999,7 @@ class OpenThreadTHCI(object):
return True
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('clearBlockList() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('clearBlockList() Error: ' + str(e))
@API
def clearAllowList(self):
@@ -1053,8 +1027,7 @@ class OpenThreadTHCI(object):
return True
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('clearAllowList() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('clearAllowList() Error: ' + str(e))
@API
def getDeviceRole(self):
@@ -1128,9 +1101,7 @@ class OpenThreadTHCI(object):
if self._update_router_status and eRoleId == Thread_Device_Role.Router:
self.__updateRouterStatus()
self.sleep(
5
) # increase delay temporally (+5s) to remedy TH's delay updates
self.sleep(5) # increase delay temporally (+5s) to remedy TH's delay updates
return True
except Exception as e:
@@ -1234,9 +1205,7 @@ class OpenThreadTHCI(object):
print(cmd)
self.__sendCommand(cmd)
# wait echo reply
self.sleep(
6
) # increase delay temporally (+5s) to remedy TH's delay updates
self.sleep(6) # increase delay temporally (+5s) to remedy TH's delay updates
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('ping() Error: ' + str(e))
@@ -1258,8 +1227,7 @@ class OpenThreadTHCI(object):
# wait echo reply
self.sleep(1)
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('multicast_ping() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('multicast_ping() Error: ' + str(e))
@API
def setPANID(self, xPAN):
@@ -1283,8 +1251,7 @@ class OpenThreadTHCI(object):
cmd = 'panid %s' % panid
datasetCmd = 'dataset panid %s' % panid
self.hasActiveDatasetToCommit = True
return (self.__executeCommand(cmd)[-1] == 'Done' and
self.__executeCommand(datasetCmd)[-1] == 'Done')
return (self.__executeCommand(cmd)[-1] == 'Done' and self.__executeCommand(datasetCmd)[-1] == 'Done')
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setPANID() Error: ' + str(e))
@@ -1362,8 +1329,7 @@ class OpenThreadTHCI(object):
try:
self.setMAC(self.mac)
self.__setChannelMask(self.channelMask)
self.__setSecurityPolicy(self.securityPolicySecs,
self.securityPolicyFlags)
self.__setSecurityPolicy(self.securityPolicySecs, self.securityPolicyFlags)
self.setChannel(self.channel)
self.setPANID(self.panId)
self.setXpanId(self.xpanId)
@@ -1373,8 +1339,7 @@ class OpenThreadTHCI(object):
self.setPSKc(self.pskc)
self.setActiveTimestamp(self.activetimestamp)
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setDefaultValue() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setDefaultValue() Error: ' + str(e))
@API
def getDeviceConncetionStatus(self):
@@ -1422,8 +1387,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('__setPollPeriod() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('__setPollPeriod() Error: ' + str(e))
@API
def setLinkQuality(self, EUIadr, LinkQuality):
@@ -1462,8 +1426,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setLinkQuality() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setLinkQuality() Error: ' + str(e))
@API
def setOutBoundLinkQuality(self, LinkQuality):
@@ -1488,8 +1451,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'setOutBoundLinkQuality() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('setOutBoundLinkQuality() Error: ' + str(e))
@API
def removeRouterPrefix(self, prefixEntry):
@@ -1515,8 +1477,7 @@ class OpenThreadTHCI(object):
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('removeRouterPrefix() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('removeRouterPrefix() Error: ' + str(e))
@API
def resetAndRejoin(self, timeout):
@@ -1547,8 +1508,7 @@ class OpenThreadTHCI(object):
return False
return True
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('resetAndRejoin() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('resetAndRejoin() Error: ' + str(e))
@API
def configBorderRouter(
@@ -1619,13 +1579,11 @@ class OpenThreadTHCI(object):
return True
else:
# send server data ntf to leader
return self.__executeCommand(
'netdataregister')[-1] == 'Done'
return self.__executeCommand('netdataregister')[-1] == 'Done'
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('configBorderRouter() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('configBorderRouter() Error: ' + str(e))
@API
def setNetworkIDTimeout(self, iNwkIDTimeOut):
@@ -1646,8 +1604,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setNetworkIDTimeout() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setNetworkIDTimeout() Error: ' + str(e))
@API
def setKeepAliveTimeOut(self, iTimeOut):
@@ -1669,8 +1626,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setKeepAliveTimeOut() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setKeepAliveTimeOut() Error: ' + str(e))
@API
def setKeySequenceCounter(self, iKeySequenceValue):
@@ -1696,8 +1652,7 @@ class OpenThreadTHCI(object):
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'setKeySequenceCounter() Error; ' + str(e))
ModuleHelper.WriteIntoDebugLogger('setKeySequenceCounter() Error; ' + str(e))
@API
def getKeySequenceCounter(self):
@@ -1729,8 +1684,7 @@ class OpenThreadTHCI(object):
print(keySequence)
return self.setKeySequenceCounter(keySequence)
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'incrementKeySequenceCounter() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('incrementKeySequenceCounter() Error: ' + str(e))
@API
def setNetworkDataRequirement(self, eDataRequirement):
@@ -1791,8 +1745,7 @@ class OpenThreadTHCI(object):
# send server data ntf to leader
return self.__executeCommand('netdataregister')[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('configExternalRouter() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('configExternalRouter() Error: ' + str(e))
@API
def getNeighbouringRouters(self):
@@ -1835,8 +1788,7 @@ class OpenThreadTHCI(object):
print(routerInfo)
return routerInfo
except Exception as e:
ModuleHelper.WriteIntoDebugLogger(
'getNeighbouringDevice() Error: ' + str(e))
ModuleHelper.WriteIntoDebugLogger('getNeighbouringDevice() Error: ' + str(e))
@API
def getChildrenInfo(self):
@@ -1885,8 +1837,7 @@ class OpenThreadTHCI(object):
print(childrenInfoAll)
return childrenInfoAll
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('getChildrenInfo() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('getChildrenInfo() Error: ' + str(e))
@API
def setXpanId(self, xPanId):
@@ -1914,8 +1865,7 @@ class OpenThreadTHCI(object):
self.xpanId = xpanid
self.hasActiveDatasetToCommit = True
return (self.__executeCommand(cmd)[-1] == 'Done' and
self.__executeCommand(datasetCmd)[-1] == 'Done')
return (self.__executeCommand(cmd)[-1] == 'Done' and self.__executeCommand(datasetCmd)[-1] == 'Done')
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setXpanId() Error: ' + str(e))
@@ -2056,8 +2006,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('forceSetSlaac() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('forceSetSlaac() Error: ' + str(e))
@API
def setSleepyNodePollTime(self):
@@ -2180,8 +2129,7 @@ class OpenThreadTHCI(object):
print(cmd)
if self.__executeCommand(cmd)[-1] == 'Done':
if self.logThreadStatus == self.logStatus['stop']:
self.logThread = ThreadRunner.run(
target=self.__readCommissioningLogs, args=(120,))
self.logThread = ThreadRunner.run(target=self.__readCommissioningLogs, args=(120,))
return True
else:
return False
@@ -2224,8 +2172,7 @@ class OpenThreadTHCI(object):
else:
return False
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('allowcommission() error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('allowcommission() error: ' + str(e))
@API
def joinCommissioned(self, strPSKd='THREADJPAKETEST', waitTime=20):
@@ -2247,8 +2194,7 @@ class OpenThreadTHCI(object):
self.joinCommissionedStatus = self.joinStatus['ongoing']
if self.logThreadStatus == self.logStatus['stop']:
self.logThread = ThreadRunner.run(
target=self.__readCommissioningLogs, args=(maxDuration,))
self.logThread = ThreadRunner.run(target=self.__readCommissioningLogs, args=(maxDuration,))
t_end = time.time() + maxDuration
while time.time() < t_end:
@@ -2289,28 +2235,20 @@ class OpenThreadTHCI(object):
infoType = info[0].strip()
infoValue = info[1].strip()
if 'direction' in infoType:
EncryptedPacket.Direction = (
PlatformDiagnosticPacket_Direction.IN
if 'recv' in infoValue else
PlatformDiagnosticPacket_Direction.OUT
if 'send' in infoValue else
PlatformDiagnosticPacket_Direction.UNKNOWN)
EncryptedPacket.Direction = (PlatformDiagnosticPacket_Direction.IN
if 'recv' in infoValue else PlatformDiagnosticPacket_Direction.OUT if
'send' in infoValue else PlatformDiagnosticPacket_Direction.UNKNOWN)
elif 'type' in infoType:
EncryptedPacket.Type = (
PlatformDiagnosticPacket_Type.JOIN_FIN_req
if 'JOIN_FIN.req' in infoValue else
PlatformDiagnosticPacket_Type.JOIN_FIN_rsp
if 'JOIN_FIN.rsp' in infoValue else
PlatformDiagnosticPacket_Type.JOIN_ENT_req
if 'JOIN_ENT.ntf' in infoValue else
PlatformDiagnosticPacket_Type.
JOIN_ENT_rsp if 'JOIN_ENT.rsp' in
infoValue else PlatformDiagnosticPacket_Type.UNKNOWN)
EncryptedPacket.Type = (PlatformDiagnosticPacket_Type.JOIN_FIN_req
if 'JOIN_FIN.req' in infoValue else
PlatformDiagnosticPacket_Type.JOIN_FIN_rsp if 'JOIN_FIN.rsp' in infoValue
else PlatformDiagnosticPacket_Type.JOIN_ENT_req if 'JOIN_ENT.ntf' in
infoValue else PlatformDiagnosticPacket_Type.JOIN_ENT_rsp if 'JOIN_ENT.rsp'
in infoValue else PlatformDiagnosticPacket_Type.UNKNOWN)
elif 'len' in infoType:
bytesInEachLine = 16
EncryptedPacket.TLVsLength = int(infoValue)
payloadLineCount = (int(infoValue) + bytesInEachLine -
1) / bytesInEachLine
payloadLineCount = (int(infoValue) + bytesInEachLine - 1) / bytesInEachLine
while payloadLineCount > 0:
payloadLineCount = payloadLineCount - 1
payloadLine = rawLogs.get()
@@ -2322,8 +2260,8 @@ class OpenThreadTHCI(object):
if '..' not in payloadValues[num]:
payload.append(int(payloadValues[num], 16))
EncryptedPacket.TLVs = (PlatformPackets.read(
EncryptedPacket.Type, payload) if payload != [] else [])
EncryptedPacket.TLVs = (PlatformPackets.read(EncryptedPacket.Type, payload)
if payload != [] else [])
ProcessedLogs.append(EncryptedPacket)
return ProcessedLogs
@@ -2354,8 +2292,7 @@ class OpenThreadTHCI(object):
"""
print('%s call MGMT_ED_SCAN' % self.port)
channelMask = ''
channelMask = '0x' + self.__convertLongToHex(
self.__convertChannelMask(listChannelMask))
channelMask = '0x' + self.__convertLongToHex(self.__convertChannelMask(listChannelMask))
try:
cmd = 'commissioner energy %s %s %s %s %s' % (
channelMask,
@@ -2370,8 +2307,7 @@ class OpenThreadTHCI(object):
ModuleHelper.WriteIntoDebugLogger('MGMT_ED_SCAN() error: ' + str(e))
@API
def MGMT_PANID_QUERY(self, sAddr, xCommissionerSessionId, listChannelMask,
xPanId):
def MGMT_PANID_QUERY(self, sAddr, xCommissionerSessionId, listChannelMask, xPanId):
"""send MGMT_PANID_QUERY message to a given destination
Args:
@@ -2384,8 +2320,7 @@ class OpenThreadTHCI(object):
print('%s call MGMT_PANID_QUERY' % self.port)
panid = ''
channelMask = ''
channelMask = '0x' + self.__convertLongToHex(
self.__convertChannelMask(listChannelMask))
channelMask = '0x' + self.__convertLongToHex(self.__convertChannelMask(listChannelMask))
if not isinstance(xPanId, str):
panid = str(hex(xPanId))
@@ -2395,12 +2330,10 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_PANID_QUERY() error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_PANID_QUERY() error: ' + str(e))
@API
def MGMT_ANNOUNCE_BEGIN(self, sAddr, xCommissionerSessionId,
listChannelMask, xCount, xPeriod):
def MGMT_ANNOUNCE_BEGIN(self, sAddr, xCommissionerSessionId, listChannelMask, xCount, xPeriod):
"""send MGMT_ANNOUNCE_BEGIN message to a given destination
Returns:
@@ -2409,8 +2342,7 @@ class OpenThreadTHCI(object):
"""
print('%s call MGMT_ANNOUNCE_BEGIN' % self.port)
channelMask = ''
channelMask = '0x' + self.__convertLongToHex(
self.__convertChannelMask(listChannelMask))
channelMask = '0x' + self.__convertLongToHex(self.__convertChannelMask(listChannelMask))
try:
cmd = 'commissioner announce %s %s %s %s' % (
channelMask,
@@ -2421,8 +2353,7 @@ class OpenThreadTHCI(object):
print(cmd)
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_ANNOUNCE_BEGIN() error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_ANNOUNCE_BEGIN() error: ' + str(e))
@API
def MGMT_ACTIVE_GET(self, Addr='', TLVs=[]):
@@ -2450,8 +2381,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_ACTIVE_GET() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_ACTIVE_GET() Error: ' + str(e))
@API
def MGMT_ACTIVE_SET(
@@ -2518,13 +2448,11 @@ class OpenThreadTHCI(object):
if listChannelMask is not None:
cmd += ' channelmask '
cmd += '0x' + self.__convertLongToHex(
self.__convertChannelMask(listChannelMask))
cmd += '0x' + self.__convertLongToHex(self.__convertChannelMask(listChannelMask))
if (sPSKc is not None or listSecurityPolicy is not None or
xCommissioningSessionId is not None or
xTmfPort is not None or xSteeringData is not None or
xBorderRouterLocator is not None or BogusTLV is not None):
if (sPSKc is not None or listSecurityPolicy is not None or xCommissioningSessionId is not None or
xTmfPort is not None or xSteeringData is not None or xBorderRouterLocator is not None or
BogusTLV is not None):
cmd += ' binary '
if sPSKc is not None:
@@ -2610,8 +2538,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_ACTIVE_SET() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_ACTIVE_SET() Error: ' + str(e))
@API
def MGMT_PENDING_GET(self, Addr='', TLVs=[]):
@@ -2639,8 +2566,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_PENDING_GET() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_PENDING_GET() Error: ' + str(e))
@API
def MGMT_PENDING_SET(
@@ -2716,8 +2642,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_PENDING_SET() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_PENDING_SET() Error: ' + str(e))
@API
def MGMT_COMM_GET(self, Addr='ff02::1', TLVs=[]):
@@ -2741,8 +2666,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_COMM_GET() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_COMM_GET() Error: ' + str(e))
@API
def MGMT_COMM_SET(
@@ -2793,8 +2717,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('MGMT_COMM_SET() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('MGMT_COMM_SET() Error: ' + str(e))
@API
def setActiveDataset(self, listActiveDataset=[]):
@@ -2823,8 +2746,7 @@ class OpenThreadTHCI(object):
self.hasActiveDatasetToCommit = True
return self.__executeCommand(cmd)[-1] == 'Done'
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('setActiveTimestamp() Error: ' +
str(e))
ModuleHelper.WriteIntoDebugLogger('setActiveTimestamp() Error: ' + str(e))
@API
def setUdpJoinerPort(self, portNumber):
@@ -2856,8 +2778,7 @@ class OpenThreadTHCI(object):
return self.__executeCommand(cmd)[-1] == 'Done'
@API
def sendBeacons(self, sAddr, xCommissionerSessionId, listChannelMask,
xPanId):
def sendBeacons(self, sAddr, xCommissionerSessionId, listChannelMask, xPanId):
print('%s call sendBeacons' % self.port)
self.__sendCommand('scan', expectEcho=False)
return True
+5 -13
View File
@@ -53,9 +53,7 @@ assert LOGX.match('[57522.618196] Under-voltage detected! (0x00050005)')
OTBR_AGENT_SYSLOG_PATTERN = re.compile(r'raspberrypi otbr-agent\[\d+\]: (.*)')
assert OTBR_AGENT_SYSLOG_PATTERN.search(
'Jun 23 05:21:22 raspberrypi otbr-agent[323]: =========[[THCI] direction=send | type=JOIN_FIN.req | len=039]==========]'
).group(
1
) == '=========[[THCI] direction=send | type=JOIN_FIN.req | len=039]==========]'
).group(1) == '=========[[THCI] direction=send | type=JOIN_FIN.req | len=039]==========]'
class OpenThread_BR(OpenThreadTHCI, IThci):
@@ -126,8 +124,7 @@ class OpenThread_BR(OpenThreadTHCI, IThci):
@watched
def _onCommissionStart(self):
assert self.__syslog_skip_lines is None
self.__syslog_skip_lines = int(
self.bash('wc -l /var/log/syslog')[0].split()[0])
self.__syslog_skip_lines = int(self.bash('wc -l /var/log/syslog')[0].split()[0])
self.__syslog_last_read_ts = 0
@watched
@@ -191,10 +188,7 @@ class OpenThread_BR(OpenThreadTHCI, IThci):
self.__bashWrite('\x03')
raise Exception('%s: failed to find end of response' % self.port)
def __bashExpect(self,
expected,
timeout=DEFAULT_COMMAND_TIMEOUT,
endswith=False):
def __bashExpect(self, expected, timeout=DEFAULT_COMMAND_TIMEOUT, endswith=False):
print('[%s] Expecting [%r]' % (self.port, expected))
deadline = time.time() + timeout
@@ -248,10 +242,8 @@ class OpenThread_BR(OpenThreadTHCI, IThci):
try:
tail += self.__bashRead(timeout=timeout)
tail = tail.replace(RPI_FULL_PROMPT, RPI_FULL_PROMPT + '\r\n')
tail = tail.replace(RPI_USERNAME_PROMPT,
RPI_USERNAME_PROMPT + '\r\n')
tail = tail.replace(RPI_PASSWORD_PROMPT,
RPI_PASSWORD_PROMPT + '\r\n')
tail = tail.replace(RPI_USERNAME_PROMPT, RPI_USERNAME_PROMPT + '\r\n')
tail = tail.replace(RPI_PASSWORD_PROMPT, RPI_PASSWORD_PROMPT + '\r\n')
finally:
self.__lines += [l.rstrip('\r') for l in LINESEPX.split(tail)]
assert len(self.__lines) >= 1, self.__lines
File diff suppressed because it is too large Load Diff