]> git.ipfire.org Git - thirdparty/suricata-verify.git/commitdiff
framework: utf-8 validation in test stdout/stderr
authorPhilippe Antoine <contact@catenacyber.fr>
Fri, 23 Sep 2022 12:08:54 +0000 (14:08 +0200)
committerCatena cyber <35799796+catenacyber@users.noreply.github.com>
Mon, 21 Nov 2022 19:50:10 +0000 (20:50 +0100)
run.py

diff --git a/run.py b/run.py
index af4ecc71dd7b1eef6e3a3c44d62a57bbc526e230..fb449021b9e54ed718a5b4174fe2a6160e93e4ab 100755 (executable)
--- a/run.py
+++ b/run.py
@@ -137,7 +137,7 @@ def get_suricata_version():
     return parse_suricata_version(output)
 
 
-def pipe_reader(fileobj, output=None, verbose=False):
+def pipe_reader(fileobj, output=None, verbose=False, utf8_errors=[]):
     for line in fileobj:
         if output:
             output.write(line)
@@ -146,7 +146,7 @@ def pipe_reader(fileobj, output=None, verbose=False):
             try:
                 line = line.decode().strip()
             except:
-                pass
+                self.utf8_errors.append("Invalid line")
             print(line)
 
 
@@ -508,6 +508,7 @@ class TestRunner:
         self.directory = directory
         self.suricata_config = suricata_config
         self.verbose = verbose
+        self.utf8_errors = []
         self.force = force
         self.output = outdir
         self.quiet = quiet
@@ -678,6 +679,8 @@ class TestRunner:
                 args, shell=shell, cwd=self.directory, env=env,
                 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
+            # used to get a return value from the threads
+            self.utf8_errors=[]
             self.start_reader(p.stdout, stdout)
             self.start_reader(p.stderr, stderr)
             for r in self.readers:
@@ -695,6 +698,9 @@ class TestRunner:
                 raise TestError("timed out when expected exit code %d" % (
                     expected_exit_code));
 
+            if len(self.utf8_errors) > 0:
+                 raise TestError("got utf8 decode errors %s" % self.utf8_errors);
+
             if r != expected_exit_code:
                 raise TestError("got exit code %d, expected %d" % (
                     r, expected_exit_code));
@@ -860,7 +866,7 @@ class TestRunner:
 
     def start_reader(self, input, output):
         t = threading.Thread(
-            target=pipe_reader, args=(input, output, self.verbose))
+            target=pipe_reader, args=(input, output, self.verbose, self.utf8_errors))
         t.start()
         self.readers.append(t)