Fully cover vnf
[functest.git] / functest / ci / tier_builder.py
1 #!/usr/bin/env python
2
3 # Copyright (c) 2016 Ericsson AB and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9
10 import yaml
11
12 import functest.ci.tier_handler as th
13
14
15 class TierBuilder(object):
16
17     def __init__(self, ci_installer, ci_scenario, testcases_file):
18         self.ci_installer = ci_installer
19         self.ci_scenario = ci_scenario
20         self.testcases_file = testcases_file
21         self.dic_tier_array = None
22         self.tier_objects = []
23         self.testcases_yaml = None
24         self.generate_tiers()
25
26     def read_test_yaml(self):
27         with open(self.testcases_file) as f:
28             self.testcases_yaml = yaml.safe_load(f)
29
30         self.dic_tier_array = []
31         for tier in self.testcases_yaml.get("tiers"):
32             self.dic_tier_array.append(tier)
33
34     def generate_tiers(self):
35         if self.dic_tier_array is None:
36             self.read_test_yaml()
37
38         del self.tier_objects[:]
39         for dic_tier in self.dic_tier_array:
40             tier = th.Tier(name=dic_tier['name'],
41                            order=dic_tier['order'],
42                            ci_loop=dic_tier['ci_loop'],
43                            description=dic_tier['description'])
44
45             for dic_testcase in dic_tier['testcases']:
46                 installer = dic_testcase['dependencies']['installer']
47                 scenario = dic_testcase['dependencies']['scenario']
48                 dep = th.Dependency(installer, scenario)
49
50                 testcase = th.TestCase(name=dic_testcase['case_name'],
51                                        enabled=dic_testcase.get(
52                                            'enabled', True),
53                                        dependency=dep,
54                                        criteria=dic_testcase['criteria'],
55                                        blocking=dic_testcase['blocking'],
56                                        description=dic_testcase['description'],
57                                        project=dic_testcase['project_name'])
58                 if (testcase.is_compatible(self.ci_installer,
59                                            self.ci_scenario) and
60                         testcase.is_enabled()):
61                     tier.add_test(testcase)
62                 else:
63                     tier.skip_test(testcase)
64
65             self.tier_objects.append(tier)
66
67     def get_tiers(self):
68         return self.tier_objects
69
70     def get_tier_names(self):
71         tier_names = []
72         for tier in self.tier_objects:
73             tier_names.append(tier.get_name())
74         return tier_names
75
76     def get_tier(self, tier_name):
77         for i in range(0, len(self.tier_objects)):
78             if self.tier_objects[i].get_name() == tier_name:
79                 return self.tier_objects[i]
80         return None
81
82     def get_tier_name(self, test_name):
83         for i in range(0, len(self.tier_objects)):
84             if self.tier_objects[i].is_test(test_name):
85                 return self.tier_objects[i].name
86         return None
87
88     def get_test(self, test_name):
89         for i in range(0, len(self.tier_objects)):
90             if self.tier_objects[i].is_test(test_name):
91                 return self.tier_objects[i].get_test(test_name)
92         return None
93
94     def get_tests(self, tier_name):
95         for i in range(0, len(self.tier_objects)):
96             if self.tier_objects[i].get_name() == tier_name:
97                 return self.tier_objects[i].get_tests()
98         return None
99
100     def __str__(self):
101         output = ""
102         for i in range(0, len(self.tier_objects)):
103             output += str(self.tier_objects[i]) + "\n"
104         return output