Browse Source

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: Stephen Warren <swarren@nvidia.com>
Acked-by: Simon Glass <sjg@chromium.org>
Stephen Warren 9 years ago
parent
commit
e4119ebb6d
1 changed files with 25 additions and 24 deletions
  1. 25 24
      test/py/u_boot_console_base.py

+ 25 - 24
test/py/u_boot_console_base.py

@@ -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):
 
 
     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):
         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 = {
-            'spl_signon': 0,
-            'main_signon': 0,
-            'unknown_command': 0,
-            'error_notification': 0,
-        }
+        self.disable_check_count = {pat[PAT_ID]: 0 for pat in bad_pattern_defs}
+        self.eval_bad_patterns()
 
 
         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):
                 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):
                     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