Skip to content
Snippets Groups Projects
Commit e4119ebb authored by Stephen Warren's avatar Stephen Warren Committed by Simon Glass
Browse files

test.py: calculate bad patterns on change only


A future patch will use the bad_patterns array in multiple places. Rather
than duplicating the code to calculate it, or even sharing it in a
function and simply calling it redundantly when nothing has changed, only
re-calculate the list when some change is made to it. This reduces work.

Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
Acked-by: default avatarSimon Glass <sjg@chromium.org>
parent 44ac762b
No related branches found
No related tags found
No related merge requests found
...@@ -23,6 +23,17 @@ pattern_stop_autoboot_prompt = re.compile('Hit any key to stop autoboot: ') ...@@ -23,6 +23,17 @@ pattern_stop_autoboot_prompt = re.compile('Hit any key to stop autoboot: ')
pattern_unknown_command = re.compile('Unknown command \'.*\' - try \'help\'') pattern_unknown_command = re.compile('Unknown command \'.*\' - try \'help\'')
pattern_error_notification = re.compile('## Error: ') pattern_error_notification = re.compile('## Error: ')
PAT_ID = 0
PAT_RE = 1
bad_pattern_defs = (
('spl_signon', pattern_u_boot_spl_signon),
('main_signon', pattern_u_boot_main_signon),
('stop_autoboot_prompt', pattern_stop_autoboot_prompt),
('unknown_command', pattern_unknown_command),
('error_notification', pattern_error_notification),
)
class ConsoleDisableCheck(object): class ConsoleDisableCheck(object):
"""Context manager (for Python's with statement) that temporarily disables """Context manager (for Python's with statement) that temporarily disables
the specified console output error check. This is useful when deliberately the specified console output error check. This is useful when deliberately
...@@ -37,9 +48,11 @@ class ConsoleDisableCheck(object): ...@@ -37,9 +48,11 @@ class ConsoleDisableCheck(object):
def __enter__(self): def __enter__(self):
self.console.disable_check_count[self.check_type] += 1 self.console.disable_check_count[self.check_type] += 1
self.console.eval_bad_patterns()
def __exit__(self, extype, value, traceback): def __exit__(self, extype, value, traceback):
self.console.disable_check_count[self.check_type] -= 1 self.console.disable_check_count[self.check_type] -= 1
self.console.eval_bad_patterns()
class ConsoleBase(object): class ConsoleBase(object):
"""The interface through which test functions interact with the U-Boot """The interface through which test functions interact with the U-Boot
...@@ -77,16 +90,18 @@ class ConsoleBase(object): ...@@ -77,16 +90,18 @@ class ConsoleBase(object):
self.prompt = self.config.buildconfig['config_sys_prompt'][1:-1] self.prompt = self.config.buildconfig['config_sys_prompt'][1:-1]
self.prompt_escaped = re.escape(self.prompt) self.prompt_escaped = re.escape(self.prompt)
self.p = None self.p = None
self.disable_check_count = { self.disable_check_count = {pat[PAT_ID]: 0 for pat in bad_pattern_defs}
'spl_signon': 0, self.eval_bad_patterns()
'main_signon': 0,
'unknown_command': 0,
'error_notification': 0,
}
self.at_prompt = False self.at_prompt = False
self.at_prompt_logevt = None self.at_prompt_logevt = None
def eval_bad_patterns(self):
self.bad_patterns = [pat[PAT_RE] for pat in bad_pattern_defs \
if self.disable_check_count[pat[PAT_ID]] == 0]
self.bad_pattern_ids = [pat[PAT_ID] for pat in bad_pattern_defs \
if self.disable_check_count[pat[PAT_ID]] == 0]
def close(self): def close(self):
"""Terminate the connection to the U-Boot console. """Terminate the connection to the U-Boot console.
...@@ -148,20 +163,6 @@ class ConsoleBase(object): ...@@ -148,20 +163,6 @@ class ConsoleBase(object):
self.at_prompt_logevt != self.logstream.logfile.cur_evt: self.at_prompt_logevt != self.logstream.logfile.cur_evt:
self.logstream.write(self.prompt, implicit=True) self.logstream.write(self.prompt, implicit=True)
bad_patterns = []
bad_pattern_ids = []
if (self.disable_check_count['spl_signon'] == 0):
bad_patterns.append(pattern_u_boot_spl_signon)
bad_pattern_ids.append('SPL signon')
if self.disable_check_count['main_signon'] == 0:
bad_patterns.append(pattern_u_boot_main_signon)
bad_pattern_ids.append('U-Boot main signon')
if self.disable_check_count['unknown_command'] == 0:
bad_patterns.append(pattern_unknown_command)
bad_pattern_ids.append('Unknown command')
if self.disable_check_count['error_notification'] == 0:
bad_patterns.append(pattern_error_notification)
bad_pattern_ids.append('Error notification')
try: try:
self.at_prompt = False self.at_prompt = False
if send_nl: if send_nl:
...@@ -175,18 +176,18 @@ class ConsoleBase(object): ...@@ -175,18 +176,18 @@ class ConsoleBase(object):
continue continue
chunk = re.escape(chunk) chunk = re.escape(chunk)
chunk = chunk.replace('\\\n', '[\r\n]') chunk = chunk.replace('\\\n', '[\r\n]')
m = self.p.expect([chunk] + bad_patterns) m = self.p.expect([chunk] + self.bad_patterns)
if m != 0: if m != 0:
self.at_prompt = False self.at_prompt = False
raise Exception('Bad pattern found on console: ' + raise Exception('Bad pattern found on console: ' +
bad_pattern_ids[m - 1]) self.bad_pattern_ids[m - 1])
if not wait_for_prompt: if not wait_for_prompt:
return return
m = self.p.expect([self.prompt_escaped] + bad_patterns) m = self.p.expect([self.prompt_escaped] + self.bad_patterns)
if m != 0: if m != 0:
self.at_prompt = False self.at_prompt = False
raise Exception('Bad pattern found on console: ' + raise Exception('Bad pattern found on console: ' +
bad_pattern_ids[m - 1]) self.bad_pattern_ids[m - 1])
self.at_prompt = True self.at_prompt = True
self.at_prompt_logevt = self.logstream.logfile.cur_evt self.at_prompt_logevt = self.logstream.logfile.cur_evt
# Only strip \r\n; space/TAB might be significant if testing # Only strip \r\n; space/TAB might be significant if testing
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment