From 3030d25d2a25347b0b6c7fcdd14bfe31fc5a86b6 Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Thu, 12 Jul 2018 10:48:17 +0200 Subject: Skip testcases by any env var MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It also removes CI_LOOP which is releng centric. It can be passed as dependency if required. Change-Id: I146bb97950cb88062451158b7cc6a16c7f9d47a2 Signed-off-by: Cédric Ollivier --- xtesting/ci/run_tests.py | 7 ++----- xtesting/ci/testcases.yaml | 1 - xtesting/ci/tier_builder.py | 35 ++++++++++++++++----------------- xtesting/ci/tier_handler.py | 47 ++++++--------------------------------------- 4 files changed, 25 insertions(+), 65 deletions(-) (limited to 'xtesting/ci') diff --git a/xtesting/ci/run_tests.py b/xtesting/ci/run_tests.py index d77041d2..31451090 100644 --- a/xtesting/ci/run_tests.py +++ b/xtesting/ci/run_tests.py @@ -202,15 +202,12 @@ class Runner(object): tiers_to_run = [] msg = prettytable.PrettyTable( header_style='upper', padding_width=5, - field_names=['tiers', 'order', 'CI Loop', 'description', + field_names=['tiers', 'order', 'description', 'testcases']) for tier in self.tiers.get_tiers(): - ci_loop = env.get('CI_LOOP') - if (tier.get_tests() and - re.search(ci_loop, tier.get_ci_loop()) is not None): + if tier.get_tests(): tiers_to_run.append(tier) msg.add_row([tier.get_name(), tier.get_order(), - tier.get_ci_loop(), textwrap.fill(tier.description, width=40), textwrap.fill(' '.join([str(x.get_name( )) for x in tier.get_tests()]), width=40)]) diff --git a/xtesting/ci/testcases.yaml b/xtesting/ci/testcases.yaml index d9ff36c6..6ab5927f 100644 --- a/xtesting/ci/testcases.yaml +++ b/xtesting/ci/testcases.yaml @@ -3,7 +3,6 @@ tiers: - name: samples order: 1 - ci_loop: 'daily' description: '' testcases: - diff --git a/xtesting/ci/tier_builder.py b/xtesting/ci/tier_builder.py index a4169099..42909810 100644 --- a/xtesting/ci/tier_builder.py +++ b/xtesting/ci/tier_builder.py @@ -9,6 +9,7 @@ """TierBuilder class to parse testcases config file""" +import re import yaml from xtesting.ci import tier_handler @@ -43,34 +44,32 @@ class TierBuilder(object): for dic_tier in self.dic_tier_array: tier = tier_handler.Tier( name=dic_tier['name'], order=dic_tier['order'], - ci_loop=dic_tier['ci_loop'], description=dic_tier['description']) for dic_testcase in dic_tier['testcases']: - if not dic_testcase.get('dependencies'): - installer = '.*' - scenario = '.*' - else: - installer = dic_testcase['dependencies'].get( - 'installer', '.*') - scenario = dic_testcase['dependencies'].get( - 'scenario', '.*') - dep = tier_handler.Dependency(installer, scenario) - testcase = tier_handler.TestCase( name=dic_testcase['case_name'], enabled=dic_testcase.get('enabled', True), - dependency=dep, criteria=dic_testcase['criteria'], + criteria=dic_testcase['criteria'], blocking=dic_testcase['blocking'], description=dic_testcase['description'], project=dic_testcase['project_name']) - if (testcase.is_compatible(self.ci_installer, - self.ci_scenario) and - testcase.is_enabled()): - tier.add_test(testcase) + if not dic_testcase.get('dependencies'): + if testcase.is_enabled(): + tier.add_test(testcase) + else: + tier.skip_test(testcase) else: - tier.skip_test(testcase) - + for dependency in dic_testcase['dependencies']: + kenv = dependency.keys()[0] + if not re.search(dependency[kenv], env.get(kenv)): + tier.skip_test(testcase) + break + else: + if testcase.is_enabled(): + tier.add_test(testcase) + else: + tier.skip_test(testcase) self.tier_objects.append(tier) def get_tiers(self): diff --git a/xtesting/ci/tier_handler.py b/xtesting/ci/tier_handler.py index 0adc9b81..7a77e4cf 100644 --- a/xtesting/ci/tier_handler.py +++ b/xtesting/ci/tier_handler.py @@ -10,7 +10,6 @@ """Tier and TestCase classes to wrap the testcases config file""" # pylint: disable=missing-docstring -import re import textwrap import prettytable @@ -36,12 +35,11 @@ def split_text(text, max_len): class Tier(object): - def __init__(self, name, order, ci_loop, description=""): + def __init__(self, name, order, description=""): self.tests_array = [] self.skipped_tests_array = [] self.name = name self.order = order - self.ci_loop = ci_loop self.description = description def add_test(self, testcase): @@ -84,16 +82,13 @@ class Tier(object): def get_order(self): return self.order - def get_ci_loop(self): - return self.ci_loop - def __str__(self): msg = prettytable.PrettyTable( header_style='upper', padding_width=5, - field_names=['tiers', 'order', 'CI Loop', 'description', + field_names=['tiers', 'order', 'description', 'testcases']) msg.add_row( - [self.name, self.order, self.ci_loop, + [self.name, self.order, textwrap.fill(self.description, width=40), textwrap.fill(' '.join([str(x.get_name( )) for x in self.get_tests()]), width=40)]) @@ -102,27 +97,16 @@ class Tier(object): class TestCase(object): - def __init__(self, name, enabled, dependency, criteria, blocking, + def __init__(self, name, enabled, criteria, blocking, description="", project=""): # pylint: disable=too-many-arguments self.name = name self.enabled = enabled - self.dependency = dependency self.criteria = criteria self.blocking = blocking self.description = description self.project = project - def is_compatible(self, ci_installer, ci_scenario): - try: - if not re.search(self.dependency.get_installer(), ci_installer): - return False - if not re.search(self.dependency.get_scenario(), ci_scenario): - return False - return True - except TypeError: - return False - def get_name(self): return self.name @@ -141,26 +125,7 @@ class TestCase(object): def __str__(self): msg = prettytable.PrettyTable( header_style='upper', padding_width=5, - field_names=['test case', 'description', 'criteria', 'dependency']) + field_names=['test case', 'description', 'criteria']) msg.add_row([self.name, textwrap.fill(self.description, width=40), - self.criteria, self.dependency]) + self.criteria]) return msg.get_string() - - -class Dependency(object): - - def __init__(self, installer='.*', scenario='.*'): - self.installer = installer - self.scenario = scenario - - def get_installer(self): - return self.installer - - def get_scenario(self): - return self.scenario - - def __str__(self): - delimitator = "\n" if self.get_installer( - ) and self.get_scenario() else "" - return "{}{}{}".format(self.get_installer(), delimitator, - self.get_scenario()) -- cgit 1.2.3-korg