[CRIU] [RFC PATCHv2 04/32] zdtm: zdtm.py: implement exhaustive group generation (still subject to test compatibility screening)
Pavel Emelyanov
xemul at virtuozzo.com
Mon Mar 14 04:26:55 PDT 2016
On 03/12/2016 11:42 AM, Ivan Shapovalov wrote:
> Signed-off-by: Ivan Shapovalov <intelfx at intelfx.name>
> ---
> test/zdtm.py | 42 ++++++++++++++++++++++++++++--------------
> 1 file changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/test/zdtm.py b/test/zdtm.py
> index d84e1cc..c3f900a 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -18,6 +18,7 @@ import imp
> import socket
> import fcntl
> import errno
> +import itertools
>
> os.chdir(os.path.dirname(os.path.abspath(__file__)))
>
> @@ -1331,25 +1332,37 @@ def group_tests(opts):
> random.shuffle(tlist)
Since you're generating all possible combinations you don't need this shuffle.
> if opts['exclude']:
> excl = re.compile(".*(" + "|".join(opts['exclude']) + ")")
> + tlist = filter(lambda t: not excl.match(t), tlist)
> print "Compiled exclusion list"
>
> - for t in tlist:
> - if excl and excl.match(t):
> - continue
> + tdlist = itertools.imap(get_test_desc, tlist)
>
> - td = get_test_desc(t)
> -
> - for g in pend_groups:
> - if g.merge(t, td):
> - if g.size() == maxs:
> - pend_groups.remove(g)
> - groups.append(g)
> - break
> - else:
> + if opts['exhaustive']:
> + for tgroup in itertools.combinations(zip(tlist, tdlist), maxs):
> + t, td = tgroup[0]
> g = group(t, td)
> - pend_groups.append(g)
> + for t, td in tgroup[1:]:
> + # because we are enumerating all combinations,
> + # we skip the whole combination on incompatibility
> + # (i. e. we do not allow short groups).
> + if not g.merge(t, td):
> + break
> + else:
> + groups.append(g)
>
> - groups += pend_groups
> + else:
> + for t, td in zip(tlist, tdlist):
> + for g in pend_groups:
> + if g.merge(t, td):
> + if g.size() == maxs:
> + pend_groups.remove(g)
> + groups.append(g)
> + break
> + else:
> + g = group(t, td)
> + pend_groups.append(g)
> +
> + groups += pend_groups
>
> nr = 0
> suf = opts['name'] or 'group'
> @@ -1442,6 +1455,7 @@ gp.set_defaults(action = group_tests)
> gp.add_argument("-m", "--max-size", help = "Maximum number of tests in group")
> gp.add_argument("-n", "--name", help = "Common name for group tests")
> gp.add_argument("-x", "--exclude", help = "Exclude tests from --all run", action = 'append')
> +gp.add_argument("--exhaustive", help = "Generate groups for all possible combinations of tests", action = 'store_true')
>
> cp = sp.add_parser("clean", help = "Clean something")
> cp.set_defaults(action = clean_stuff)
>
More information about the CRIU
mailing list