Add whitelist and blacklist file options to tempest run

This commit uses the regex_builder logic from os-testr to construct a
regex given a whitelist and/or a blacklist file. Where all matches from
the blacklist file will be excluded and all matches from the whitelist file
will be included.

Partially-Implements bp tempest-run-cmd

Change-Id: I642fac16c6da4a5b6c5eb2d6d3145d18ab1823ce
This commit is contained in:
Matthew Treinish 2016-05-23 17:24:12 -04:00
parent 330f11dd91
commit a6b4da9f5f
No known key found for this signature in database
GPG Key ID: FD12A0F214C9E177
2 changed files with 41 additions and 0 deletions

View File

@ -23,6 +23,27 @@ Tempest run has several options:
any tests that match on re.match() with the regex
* **--smoke**: Run all the tests tagged as smoke
There are also the **--blacklist_file** and **--whitelist_file** options that
let you pass a filepath to tempest run with the file format being a line
seperated regex, with '#' used to signify the start of a comment on a line.
For example::
# Regex file
^regex1 # Match these tests
.*regex2 # Match those tests
The blacklist file will be used to construct a negative lookahead regex and
the whitelist file will simply OR all the regexes in the file. The whitelist
and blacklist file options are mutually exclusive so you can't use them
together. However, you can combine either with a normal regex or the *--smoke*
flag. When used with a blacklist file the generated regex will be combined to
something like::
^((?!black_regex1|black_regex2).)*$cli_regex1
When combined with a whitelist file all the regexes from the file and the CLI
regexes will be ORed.
You can also use the **--list-tests** option in conjunction with selection
arguments to list which tests will be run.
@ -47,6 +68,7 @@ import sys
import threading
from cliff import command
from os_testr import regex_builder
from os_testr import subunit_trace
from oslo_log import log as logging
from testrepository.commands import run_argv
@ -109,6 +131,15 @@ class TempestRun(command.Command):
regex.add_argument('--regex', '-r', default='',
help='A normal testr selection regex used to '
'specify a subset of tests to run')
list_selector = parser.add_mutually_exclusive_group()
list_selector.add_argument('--whitelist_file',
help="Path to a whitelist file, this file "
"contains a seperate regex on each "
"newline.")
list_selector.add_argument('--blacklist_file',
help='Path to a blacklist file, this file '
'contains a separate regex exclude on '
'each newline')
# list only args
parser.add_argument('--list-tests', '-l', action='store_true',
help='List tests',
@ -138,6 +169,10 @@ class TempestRun(command.Command):
regex = 'smoke'
elif parsed_args.regex:
regex = parsed_args.regex
if parsed_args.whitelist_file or parsed_args.blacklist_file:
regex = regex_builder.construct_regex(parsed_args.blacklist_file,
parsed_args.whitelist_file,
regex, False)
return regex
def _build_options(self, parsed_args):

View File

@ -46,18 +46,24 @@ class TestTempestRun(base.TestCase):
args = mock.Mock(spec=argparse.Namespace)
setattr(args, 'smoke', False)
setattr(args, 'regex', '')
setattr(args, 'whitelist_file', None)
setattr(args, 'blacklist_file', None)
self.assertEqual('', self.run_cmd._build_regex(args))
def test__build_regex_smoke(self):
args = mock.Mock(spec=argparse.Namespace)
setattr(args, "smoke", True)
setattr(args, 'regex', '')
setattr(args, 'whitelist_file', None)
setattr(args, 'blacklist_file', None)
self.assertEqual('smoke', self.run_cmd._build_regex(args))
def test__build_regex_regex(self):
args = mock.Mock(spec=argparse.Namespace)
setattr(args, 'smoke', False)
setattr(args, "regex", 'i_am_a_fun_little_regex')
setattr(args, 'whitelist_file', None)
setattr(args, 'blacklist_file', None)
self.assertEqual('i_am_a_fun_little_regex',
self.run_cmd._build_regex(args))