From a507f38dc69019523ff02006622eb4ab84cd5ba1 Mon Sep 17 00:00:00 2001
From: Cédric Ollivier <cedric.ollivier@orange.com>
Date: Thu, 12 Jul 2018 08:31:31 +0200
Subject: Improve dependency management
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

It avoids declaring dependencies if needed.
Negative regex are correcty managed as well.

Change-Id: I0e978823526246bc4a5192e63a8a893a4add0e2a
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
---
 xtesting/ci/run_tests.py    |  4 +---
 xtesting/ci/testcases.yaml  | 16 +---------------
 xtesting/ci/tier_builder.py | 25 ++++++++++++++++---------
 xtesting/ci/tier_handler.py | 12 +++---------
 4 files changed, 21 insertions(+), 36 deletions(-)

(limited to 'xtesting/ci')

diff --git a/xtesting/ci/run_tests.py b/xtesting/ci/run_tests.py
index ff100334..d77041d2 100644
--- a/xtesting/ci/run_tests.py
+++ b/xtesting/ci/run_tests.py
@@ -22,9 +22,9 @@ import os
 import re
 import sys
 import textwrap
-import pkg_resources
 
 import enum
+import pkg_resources
 import prettytable
 import six
 import yaml
@@ -92,8 +92,6 @@ class Runner(object):
         self.clean_flag = True
         self.report_flag = False
         self.tiers = tier_builder.TierBuilder(
-            env.get('INSTALLER_TYPE'),
-            env.get('DEPLOY_SCENARIO'),
             pkg_resources.resource_filename('xtesting', 'ci/testcases.yaml'))
 
     @staticmethod
diff --git a/xtesting/ci/testcases.yaml b/xtesting/ci/testcases.yaml
index 42e71936..d9ff36c6 100644
--- a/xtesting/ci/testcases.yaml
+++ b/xtesting/ci/testcases.yaml
@@ -13,9 +13,6 @@ tiers:
                 blocking: true
                 clean_flag: false
                 description: ''
-                dependencies:
-                    installer: ''
-                    scenario: ''
                 run:
                     module: 'xtesting.samples.first'
                     class: 'Test'
@@ -27,9 +24,6 @@ tiers:
                 blocking: true
                 clean_flag: false
                 description: ''
-                dependencies:
-                    installer: ''
-                    scenario: ''
                 run:
                     module: 'xtesting.samples.second'
                     class: 'Test'
@@ -41,9 +35,6 @@ tiers:
                 blocking: true
                 clean_flag: false
                 description: ''
-                dependencies:
-                    installer: ''
-                    scenario: ''
                 run:
                     module: 'xtesting.core.feature'
                     class: 'BashFeature'
@@ -57,9 +48,6 @@ tiers:
                 blocking: true
                 clean_flag: false
                 description: ''
-                dependencies:
-                    installer: ''
-                    scenario: ''
                 run:
                     module: 'xtesting.core.unit'
                     class: 'Suite'
@@ -72,10 +60,8 @@ tiers:
                 enabled: false
                 criteria: 100
                 blocking: false
+                clean_flag: false
                 description: ''
-                dependencies:
-                    installer: ''
-                    scenario: ''
                 run:
                     module: 'xtesting.core.robotframework'
                     class: 'RobotFramework'
diff --git a/xtesting/ci/tier_builder.py b/xtesting/ci/tier_builder.py
index 2c7b0cab..a4169099 100644
--- a/xtesting/ci/tier_builder.py
+++ b/xtesting/ci/tier_builder.py
@@ -11,15 +11,16 @@
 
 import yaml
 
-import xtesting.ci.tier_handler as th
+from xtesting.ci import tier_handler
+from xtesting.utils import env
 
 
 class TierBuilder(object):
     # pylint: disable=missing-docstring
 
-    def __init__(self, ci_installer, ci_scenario, testcases_file):
-        self.ci_installer = ci_installer
-        self.ci_scenario = ci_scenario
+    def __init__(self, testcases_file):
+        self.ci_installer = env.get('INSTALLER_TYPE')
+        self.ci_scenario = env.get('DEPLOY_SCENARIO')
         self.testcases_file = testcases_file
         self.dic_tier_array = None
         self.tier_objects = []
@@ -40,17 +41,23 @@ class TierBuilder(object):
 
         del self.tier_objects[:]
         for dic_tier in self.dic_tier_array:
-            tier = th.Tier(
+            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']:
-                installer = dic_testcase['dependencies']['installer']
-                scenario = dic_testcase['dependencies']['scenario']
-                dep = th.Dependency(installer, scenario)
+                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 = th.TestCase(
+                testcase = tier_handler.TestCase(
                     name=dic_testcase['case_name'],
                     enabled=dic_testcase.get('enabled', True),
                     dependency=dep, criteria=dic_testcase['criteria'],
diff --git a/xtesting/ci/tier_handler.py b/xtesting/ci/tier_handler.py
index 915985f5..0adc9b81 100644
--- a/xtesting/ci/tier_handler.py
+++ b/xtesting/ci/tier_handler.py
@@ -115,15 +115,9 @@ class TestCase(object):
 
     def is_compatible(self, ci_installer, ci_scenario):
         try:
-            if not ci_installer:
-                if self.dependency.get_installer():
-                    return False
-            elif not re.search(self.dependency.get_installer(), ci_installer):
+            if not re.search(self.dependency.get_installer(), ci_installer):
                 return False
-            if not ci_scenario:
-                if self.dependency.get_scenario():
-                    return False
-            elif not re.search(self.dependency.get_scenario(), ci_scenario):
+            if not re.search(self.dependency.get_scenario(), ci_scenario):
                 return False
             return True
         except TypeError:
@@ -155,7 +149,7 @@ class TestCase(object):
 
 class Dependency(object):
 
-    def __init__(self, installer, scenario):
+    def __init__(self, installer='.*', scenario='.*'):
         self.installer = installer
         self.scenario = scenario
 
-- 
cgit