From d1a6666742fa2f82bfe26531826fd41f69a237bf Mon Sep 17 00:00:00 2001 From: Mark Stemm Date: Tue, 2 Jul 2019 17:44:34 -0700 Subject: [PATCH] New flags to compare stdout/stderr, validate rules New test options stdout_is/stderr_is do a direct comparison between stdout/stderr and the provided value. Test option validate_rules_file maps to -V arguments, which validate rules and exits. --- test/falco_test.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/falco_test.py b/test/falco_test.py index 99082979..782e8aeb 100644 --- a/test/falco_test.py +++ b/test/falco_test.py @@ -41,6 +41,9 @@ class FalcoTest(Test): build_dir = os.path.join('/build', build_type) self.falcodir = self.params.get('falcodir', '/', default=os.path.join(self.basedir, build_dir)) + self.stdout_is = self.params.get('stdout_is', '*', default='') + self.stderr_is = self.params.get('stderr_is', '*', default='') + self.stdout_contains = self.params.get('stdout_contains', '*', default='') if not isinstance(self.stdout_contains, list): @@ -83,8 +86,21 @@ class FalcoTest(Test): if not isinstance(self.rules_file, list): self.rules_file = [self.rules_file] + self.validate_rules_file = self.params.get('validate_rules_file', '*', default=False) + + if self.validate_rules_file == False: + self.validate_rules_file = [] + else: + if not isinstance(self.validate_rules_file, list): + self.validate_rules_file = [self.validate_rules_file] + self.rules_args = "" + for file in self.validate_rules_file: + if not os.path.isabs(file): + file = os.path.join(self.basedir, file) + self.rules_args = self.rules_args + "-V " + file + " " + for file in self.rules_file: if not os.path.isabs(file): file = os.path.join(self.basedir, file) @@ -433,6 +449,15 @@ class FalcoTest(Test): res = self.falco_proc.run(timeout=180, sig=9) + if self.stdout_is != '': + print(self.stdout_is) + if self.stdout_is != res.stdout: + self.fail("Stdout was not exactly {}".format(self.stdout_is)) + + if self.stderr_is != '': + if self.stderr_is != res.stdout: + self.fail("Stdout was not exactly {}".format(self.stderr_is)) + for pattern in self.stderr_contains: match = re.search(pattern, res.stderr) if match is None: