9b444b7ca37c546ea39907f3982b3aa32957468f
[functest.git] / ci / tier_handler.py
1 #!/usr/bin/env python
2 #
3 # jose.lausuch@ericsson.com
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9
10
11 import re
12
13
14 class Tier:
15     def __init__(self, name, order, ci, description=""):
16         self.tests_array = []
17         self.name = name
18         self.order = order
19         self.ci = ci
20         self.description = description
21
22     def add_test(self, testcase):
23         self.tests_array.append(testcase)
24
25     def get_tests(self):
26         array_tests = []
27         for test in self.tests_array:
28             array_tests.append(test)
29         return array_tests
30
31     def get_test_names(self):
32         array_tests = []
33         for test in self.tests_array:
34             array_tests.append(test.get_name())
35         return array_tests
36
37     def get_test(self, test_name):
38         if self.is_test(test_name):
39             for test in self.tests_array:
40                 if test.get_name() == test_name:
41                     return test
42         return None
43
44     def is_test(self, test_name):
45         for test in self.tests_array:
46             if test.get_name() == test_name:
47                 return True
48         return False
49
50     def get_name(self):
51         return self.name
52
53     def get_order(self):
54         return self.order
55
56     def __str__(self):
57         lines = []
58         line_max = 50
59         line = ""
60         line_count = 0
61         for i in range(len(self.description)):
62             line += self.description[i]
63             if line_count >= line_max - 1:
64                 line_count = 0
65                 lines.append(line)
66                 line = ""
67             else:
68                 line_count += 1
69         if line != "":
70             lines.append(line)
71
72         out = ""
73         out += ("+=======================================================+\n")
74         out += ("| Tier:  " + self.name.ljust(47) + "|\n")
75         out += ("+=======================================================+\n")
76         out += ("| Order: " + str(self.order).ljust(47) + "|\n")
77         out += ("| Description:                                          |\n")
78         for i in range(len(lines)):
79             out += ("|    " + lines[i].ljust(50) + " |\n")
80         out += ("| Test cases:                                           |\n")
81         tests = self.get_test_names()
82         if len(tests) > 0:
83             for i in range(len(tests)):
84                 out += ("|    - %s |\n" % tests[i].ljust(48))
85         else:
86             out += ("|    (There are no supported test cases "
87                     .ljust(56) + "|\n")
88             out += ("|    in this tier for the given scenario) "
89                     .ljust(56) + "|\n")
90         out += ("|".ljust(56) + "|\n")
91         out += ("+-------------------------------------------------------+\n")
92         return out
93
94
95 class TestCase:
96     def __init__(self, name, dependency, description=""):
97         self.name = name
98         self.dependency = dependency
99         self.description = description
100
101     def is_compatible(self, ci_installer, ci_scenario):
102         if re.search(self.dependency.get_installer(), ci_installer) is None:
103             return False
104
105         if re.search(self.dependency.get_scenario(), ci_scenario) is None:
106             return False
107
108         return True
109
110     def get_name(self):
111         return self.name
112
113     def __str__(self):
114         lines = []
115         line_max = 50
116         line = ""
117         line_count = 0
118         for i in range(len(self.description)):
119             line += self.description[i]
120             if line_count >= line_max - 1:
121                 line_count = 0
122                 lines.append(line)
123                 line = ""
124             else:
125                 line_count += 1
126         if line != "":
127             lines.append(line)
128
129         out = ""
130         out += ("+=======================================================+\n")
131         out += ("| Testcase:  " + self.name.ljust(43) + "|\n")
132         out += ("+=======================================================+\n")
133         out += ("| Description:                                          |\n")
134         for i in range(len(lines)):
135             out += ("|    " + lines[i].ljust(50) + " |\n")
136         out += ("| Dependencies:                                         |\n")
137         installer = self.dependency.get_installer()
138         scenario = self.dependency.get_scenario()
139         out += ("|    - Installer: " + installer.ljust(38) + "|\n")
140         out += ("|    - Scenario : " + scenario.ljust(38) + "|\n")
141         out += ("|".ljust(56) + "|\n")
142         out += ("+-------------------------------------------------------+\n")
143         return out
144
145
146 class Dependency:
147     def __init__(self, installer, scenario):
148         self.installer = installer
149         self.scenario = scenario
150
151     def get_installer(self):
152         return self.installer
153
154     def get_scenario(self):
155         return self.scenario
156
157     def __str__(self):
158         return ("Dependency info:\n"
159                 "        installer: " + self.installer + "\n"
160                 "        scenario:  " + self.scenario + "\n")