root / snf-tools / synnefo_tools / burnin / common.py @ 79a5c431
History | View | Annotate | Download (11 kB)
1 | 4c52d5bf | Ilias Tsitsimpis | # Copyright 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 4c52d5bf | Ilias Tsitsimpis | #
|
3 | 4c52d5bf | Ilias Tsitsimpis | # Redistribution and use in source and binary forms, with or
|
4 | 4c52d5bf | Ilias Tsitsimpis | # without modification, are permitted provided that the following
|
5 | 4c52d5bf | Ilias Tsitsimpis | # conditions are met:
|
6 | 4c52d5bf | Ilias Tsitsimpis | #
|
7 | 4c52d5bf | Ilias Tsitsimpis | # 1. Redistributions of source code must retain the above
|
8 | 4c52d5bf | Ilias Tsitsimpis | # copyright notice, this list of conditions and the following
|
9 | 4c52d5bf | Ilias Tsitsimpis | # disclaimer.
|
10 | 4c52d5bf | Ilias Tsitsimpis | #
|
11 | 4c52d5bf | Ilias Tsitsimpis | # 2. Redistributions in binary form must reproduce the above
|
12 | 4c52d5bf | Ilias Tsitsimpis | # copyright notice, this list of conditions and the following
|
13 | 4c52d5bf | Ilias Tsitsimpis | # disclaimer in the documentation and/or other materials
|
14 | 4c52d5bf | Ilias Tsitsimpis | # provided with the distribution.
|
15 | 4c52d5bf | Ilias Tsitsimpis | #
|
16 | 4c52d5bf | Ilias Tsitsimpis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 4c52d5bf | Ilias Tsitsimpis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 4c52d5bf | Ilias Tsitsimpis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 4c52d5bf | Ilias Tsitsimpis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 4c52d5bf | Ilias Tsitsimpis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 4c52d5bf | Ilias Tsitsimpis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 4c52d5bf | Ilias Tsitsimpis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 4c52d5bf | Ilias Tsitsimpis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 4c52d5bf | Ilias Tsitsimpis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 4c52d5bf | Ilias Tsitsimpis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 4c52d5bf | Ilias Tsitsimpis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 4c52d5bf | Ilias Tsitsimpis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 4c52d5bf | Ilias Tsitsimpis | #
|
29 | 4c52d5bf | Ilias Tsitsimpis | # The views and conclusions contained in the software and
|
30 | 4c52d5bf | Ilias Tsitsimpis | # documentation are those of the authors and should not be
|
31 | 4c52d5bf | Ilias Tsitsimpis | # interpreted as representing official policies, either expressed
|
32 | 4c52d5bf | Ilias Tsitsimpis | # or implied, of GRNET S.A.
|
33 | 4c52d5bf | Ilias Tsitsimpis | |
34 | 4c52d5bf | Ilias Tsitsimpis | """
|
35 | 4c52d5bf | Ilias Tsitsimpis | Common utils for burnin tests
|
36 | 4c52d5bf | Ilias Tsitsimpis |
|
37 | 4c52d5bf | Ilias Tsitsimpis | """
|
38 | 4c52d5bf | Ilias Tsitsimpis | |
39 | 4c52d5bf | Ilias Tsitsimpis | import sys |
40 | 6f2b9836 | Ilias Tsitsimpis | import datetime |
41 | 4c52d5bf | Ilias Tsitsimpis | import traceback |
42 | 4c52d5bf | Ilias Tsitsimpis | # Use backported unittest functionality if Python < 2.7
|
43 | 4c52d5bf | Ilias Tsitsimpis | try:
|
44 | 4c52d5bf | Ilias Tsitsimpis | import unittest2 as unittest |
45 | 4c52d5bf | Ilias Tsitsimpis | except ImportError: |
46 | 4c52d5bf | Ilias Tsitsimpis | if sys.version_info < (2, 7): |
47 | 4c52d5bf | Ilias Tsitsimpis | raise Exception("The unittest2 package is required for Python < 2.7") |
48 | 4c52d5bf | Ilias Tsitsimpis | import unittest |
49 | 4c52d5bf | Ilias Tsitsimpis | |
50 | 4c52d5bf | Ilias Tsitsimpis | from kamaki.clients.astakos import AstakosClient |
51 | 4c52d5bf | Ilias Tsitsimpis | from kamaki.clients.compute import ComputeClient |
52 | 79a5c431 | Ilias Tsitsimpis | from kamaki.clients.pithos import PithosClient |
53 | 4c52d5bf | Ilias Tsitsimpis | |
54 | 12ef696f | Ilias Tsitsimpis | from synnefo_tools.burnin.logger import Log |
55 | 4c52d5bf | Ilias Tsitsimpis | |
56 | 4c52d5bf | Ilias Tsitsimpis | |
57 | 4c52d5bf | Ilias Tsitsimpis | # --------------------------------------------------------------------
|
58 | 4c52d5bf | Ilias Tsitsimpis | # Global variables
|
59 | 4c52d5bf | Ilias Tsitsimpis | logger = None # Invalid constant name. pylint: disable-msg=C0103 |
60 | 12ef696f | Ilias Tsitsimpis | SNF_TEST_PREFIX = "snf-test-"
|
61 | 4c52d5bf | Ilias Tsitsimpis | CONNECTION_RETRY_LIMIT = 2
|
62 | 4c52d5bf | Ilias Tsitsimpis | |
63 | 4c52d5bf | Ilias Tsitsimpis | |
64 | 4c52d5bf | Ilias Tsitsimpis | # --------------------------------------------------------------------
|
65 | 4c52d5bf | Ilias Tsitsimpis | # BurninTestResult class
|
66 | 4c52d5bf | Ilias Tsitsimpis | class BurninTestResult(unittest.TestResult): |
67 | 4c52d5bf | Ilias Tsitsimpis | """Modify the TextTestResult class"""
|
68 | 4c52d5bf | Ilias Tsitsimpis | def __init__(self): |
69 | 4c52d5bf | Ilias Tsitsimpis | super(BurninTestResult, self).__init__() |
70 | 4c52d5bf | Ilias Tsitsimpis | |
71 | 4c52d5bf | Ilias Tsitsimpis | # Test parameters
|
72 | 4c52d5bf | Ilias Tsitsimpis | self.failfast = True |
73 | 4c52d5bf | Ilias Tsitsimpis | |
74 | 4c52d5bf | Ilias Tsitsimpis | def startTest(self, test): # noqa |
75 | 4c52d5bf | Ilias Tsitsimpis | """Called when the test case test is about to be run"""
|
76 | 4c52d5bf | Ilias Tsitsimpis | super(BurninTestResult, self).startTest(test) |
77 | fe15cd00 | Ilias Tsitsimpis | logger.log(test.__class__.__name__, test.shortDescription()) |
78 | 4c52d5bf | Ilias Tsitsimpis | |
79 | 4c52d5bf | Ilias Tsitsimpis | # Method could be a function. pylint: disable-msg=R0201
|
80 | 4c52d5bf | Ilias Tsitsimpis | def _test_failed(self, test, err): |
81 | 4c52d5bf | Ilias Tsitsimpis | """Test failed"""
|
82 | 79a5c431 | Ilias Tsitsimpis | # Get class name
|
83 | 79a5c431 | Ilias Tsitsimpis | if test.__class__.__name__ == "_ErrorHolder": |
84 | 79a5c431 | Ilias Tsitsimpis | class_name = test.id().split('.')[-1].rstrip(')') |
85 | 79a5c431 | Ilias Tsitsimpis | else:
|
86 | 79a5c431 | Ilias Tsitsimpis | class_name = test.__class__.__name__ |
87 | fe15cd00 | Ilias Tsitsimpis | err_msg = str(test) + "... failed (%s)." |
88 | 6f2b9836 | Ilias Tsitsimpis | timestamp = datetime.datetime.strftime( |
89 | 6f2b9836 | Ilias Tsitsimpis | datetime.datetime.now(), "%a %b %d %Y %H:%M:%S")
|
90 | 79a5c431 | Ilias Tsitsimpis | logger.error(class_name, err_msg, timestamp) |
91 | 4c52d5bf | Ilias Tsitsimpis | (err_type, err_value, err_trace) = err |
92 | 4c52d5bf | Ilias Tsitsimpis | trcback = traceback.format_exception(err_type, err_value, err_trace) |
93 | 79a5c431 | Ilias Tsitsimpis | logger.info(class_name, trcback) |
94 | 4c52d5bf | Ilias Tsitsimpis | |
95 | 4c52d5bf | Ilias Tsitsimpis | def addError(self, test, err): # noqa |
96 | 4c52d5bf | Ilias Tsitsimpis | """Called when the test case test raises an unexpected exception"""
|
97 | 4c52d5bf | Ilias Tsitsimpis | super(BurninTestResult, self).addError(test, err) |
98 | 4c52d5bf | Ilias Tsitsimpis | self._test_failed(test, err)
|
99 | 4c52d5bf | Ilias Tsitsimpis | |
100 | 4c52d5bf | Ilias Tsitsimpis | def addFailure(self, test, err): # noqa |
101 | 4c52d5bf | Ilias Tsitsimpis | """Called when the test case test signals a failure"""
|
102 | 4c52d5bf | Ilias Tsitsimpis | super(BurninTestResult, self).addFailure(test, err) |
103 | 4c52d5bf | Ilias Tsitsimpis | self._test_failed(test, err)
|
104 | 4c52d5bf | Ilias Tsitsimpis | |
105 | 4c52d5bf | Ilias Tsitsimpis | |
106 | 4c52d5bf | Ilias Tsitsimpis | # --------------------------------------------------------------------
|
107 | 4c52d5bf | Ilias Tsitsimpis | # BurninTests class
|
108 | 12ef696f | Ilias Tsitsimpis | # Too few public methods (0/2). pylint: disable-msg=R0903
|
109 | 12ef696f | Ilias Tsitsimpis | class Clients(object): |
110 | 12ef696f | Ilias Tsitsimpis | """Our kamaki clients"""
|
111 | 12ef696f | Ilias Tsitsimpis | auth_url = None
|
112 | 12ef696f | Ilias Tsitsimpis | token = None
|
113 | 79a5c431 | Ilias Tsitsimpis | # Astakos
|
114 | 12ef696f | Ilias Tsitsimpis | astakos = None
|
115 | 12ef696f | Ilias Tsitsimpis | retry = CONNECTION_RETRY_LIMIT |
116 | 79a5c431 | Ilias Tsitsimpis | # Compute
|
117 | 12ef696f | Ilias Tsitsimpis | compute = None
|
118 | 12ef696f | Ilias Tsitsimpis | compute_url = None
|
119 | 79a5c431 | Ilias Tsitsimpis | # Cyclades
|
120 | 79a5c431 | Ilias Tsitsimpis | cyclades = None
|
121 | 79a5c431 | Ilias Tsitsimpis | # Pithos
|
122 | 79a5c431 | Ilias Tsitsimpis | pithos = None
|
123 | 79a5c431 | Ilias Tsitsimpis | pithos_url = None
|
124 | 12ef696f | Ilias Tsitsimpis | |
125 | 12ef696f | Ilias Tsitsimpis | |
126 | 4c52d5bf | Ilias Tsitsimpis | # Too many public methods (45/20). pylint: disable-msg=R0904
|
127 | 4c52d5bf | Ilias Tsitsimpis | class BurninTests(unittest.TestCase): |
128 | 4c52d5bf | Ilias Tsitsimpis | """Common class that all burnin tests should implement"""
|
129 | 12ef696f | Ilias Tsitsimpis | clients = Clients() |
130 | 6f2b9836 | Ilias Tsitsimpis | run_id = None
|
131 | 79a5c431 | Ilias Tsitsimpis | use_ipv6 = None
|
132 | 79a5c431 | Ilias Tsitsimpis | action_timeout = None
|
133 | 79a5c431 | Ilias Tsitsimpis | action_warning = None
|
134 | 79a5c431 | Ilias Tsitsimpis | query_interval = None
|
135 | 12ef696f | Ilias Tsitsimpis | |
136 | 4c52d5bf | Ilias Tsitsimpis | @classmethod
|
137 | 4c52d5bf | Ilias Tsitsimpis | def setUpClass(cls): # noqa |
138 | 4c52d5bf | Ilias Tsitsimpis | """Initialize BurninTests"""
|
139 | 4c52d5bf | Ilias Tsitsimpis | cls.suite_name = cls.__name__ |
140 | 4c52d5bf | Ilias Tsitsimpis | logger.testsuite_start(cls.suite_name) |
141 | 4c52d5bf | Ilias Tsitsimpis | |
142 | 4c52d5bf | Ilias Tsitsimpis | # Set test parameters
|
143 | 4c52d5bf | Ilias Tsitsimpis | cls.longMessage = True
|
144 | 4c52d5bf | Ilias Tsitsimpis | |
145 | fe15cd00 | Ilias Tsitsimpis | def _setattr(self, attr, value): |
146 | fe15cd00 | Ilias Tsitsimpis | """Used by tests to set an attribute to TestCase
|
147 | fe15cd00 | Ilias Tsitsimpis |
|
148 | fe15cd00 | Ilias Tsitsimpis | Since each instance of the TestCase will only be used to run a single
|
149 | fe15cd00 | Ilias Tsitsimpis | test method (a new fixture is created for each test) the attributes can
|
150 | fe15cd00 | Ilias Tsitsimpis | not be saved in the class instance. Instead the class itself should be
|
151 | fe15cd00 | Ilias Tsitsimpis | used.
|
152 | fe15cd00 | Ilias Tsitsimpis |
|
153 | fe15cd00 | Ilias Tsitsimpis | """
|
154 | fe15cd00 | Ilias Tsitsimpis | setattr(self.__class__, attr, value) |
155 | fe15cd00 | Ilias Tsitsimpis | |
156 | fe15cd00 | Ilias Tsitsimpis | def test_000_clients_setup(self): |
157 | 4c52d5bf | Ilias Tsitsimpis | """Initializing astakos/cyclades/pithos clients"""
|
158 | 4c52d5bf | Ilias Tsitsimpis | # Update class attributes
|
159 | 12ef696f | Ilias Tsitsimpis | self.info("Astakos auth url is %s", self.clients.auth_url) |
160 | 12ef696f | Ilias Tsitsimpis | self.clients.astakos = AstakosClient(
|
161 | 12ef696f | Ilias Tsitsimpis | self.clients.auth_url, self.clients.token) |
162 | 12ef696f | Ilias Tsitsimpis | self.clients.astakos.CONNECTION_RETRY_LIMIT = self.clients.retry |
163 | 12ef696f | Ilias Tsitsimpis | |
164 | 12ef696f | Ilias Tsitsimpis | self.clients.compute_url = \
|
165 | 12ef696f | Ilias Tsitsimpis | self.clients.astakos.get_service_endpoints('compute')['publicURL'] |
166 | 12ef696f | Ilias Tsitsimpis | self.info("Cyclades url is %s", self.clients.compute_url) |
167 | 12ef696f | Ilias Tsitsimpis | self.clients.compute = ComputeClient(
|
168 | 12ef696f | Ilias Tsitsimpis | self.clients.compute_url, self.clients.token) |
169 | 12ef696f | Ilias Tsitsimpis | self.clients.compute.CONNECTION_RETRY_LIMIT = self.clients.retry |
170 | 4c52d5bf | Ilias Tsitsimpis | |
171 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos_url = self.clients.astakos.\ |
172 | 79a5c431 | Ilias Tsitsimpis | get_service_endpoints('object-store')['publicURL'] |
173 | 79a5c431 | Ilias Tsitsimpis | self.info("Pithos url is %s", self.clients.pithos_url) |
174 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos = PithosClient(
|
175 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos_url, self.clients.token) |
176 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos.CONNECTION_RETRY_LIMIT = self.clients.retry |
177 | 79a5c431 | Ilias Tsitsimpis | |
178 | 6f2b9836 | Ilias Tsitsimpis | # ----------------------------------
|
179 | 6f2b9836 | Ilias Tsitsimpis | # Loggers helper functions
|
180 | 4c52d5bf | Ilias Tsitsimpis | def log(self, msg, *args): |
181 | 4c52d5bf | Ilias Tsitsimpis | """Pass the section value to logger"""
|
182 | 4c52d5bf | Ilias Tsitsimpis | logger.log(self.suite_name, msg, *args)
|
183 | 4c52d5bf | Ilias Tsitsimpis | |
184 | 4c52d5bf | Ilias Tsitsimpis | def info(self, msg, *args): |
185 | 4c52d5bf | Ilias Tsitsimpis | """Pass the section value to logger"""
|
186 | 4c52d5bf | Ilias Tsitsimpis | logger.info(self.suite_name, msg, *args)
|
187 | 4c52d5bf | Ilias Tsitsimpis | |
188 | 4c52d5bf | Ilias Tsitsimpis | def debug(self, msg, *args): |
189 | 4c52d5bf | Ilias Tsitsimpis | """Pass the section value to logger"""
|
190 | 4c52d5bf | Ilias Tsitsimpis | logger.debug(self.suite_name, msg, *args)
|
191 | 4c52d5bf | Ilias Tsitsimpis | |
192 | 4c52d5bf | Ilias Tsitsimpis | def warning(self, msg, *args): |
193 | 4c52d5bf | Ilias Tsitsimpis | """Pass the section value to logger"""
|
194 | 4c52d5bf | Ilias Tsitsimpis | logger.warning(self.suite_name, msg, *args)
|
195 | 4c52d5bf | Ilias Tsitsimpis | |
196 | 4c52d5bf | Ilias Tsitsimpis | def error(self, msg, *args): |
197 | 4c52d5bf | Ilias Tsitsimpis | """Pass the section value to logger"""
|
198 | 4c52d5bf | Ilias Tsitsimpis | logger.error(self.suite_name, msg, *args)
|
199 | 4c52d5bf | Ilias Tsitsimpis | |
200 | 6f2b9836 | Ilias Tsitsimpis | # ----------------------------------
|
201 | 6f2b9836 | Ilias Tsitsimpis | # Helper functions that every testsuite may need
|
202 | 6f2b9836 | Ilias Tsitsimpis | def _get_uuid(self): |
203 | 6f2b9836 | Ilias Tsitsimpis | """Get our uuid"""
|
204 | 6f2b9836 | Ilias Tsitsimpis | authenticate = self.clients.astakos.authenticate()
|
205 | 6f2b9836 | Ilias Tsitsimpis | uuid = authenticate['access']['user']['id'] |
206 | 6f2b9836 | Ilias Tsitsimpis | self.info("User's uuid is %s", uuid) |
207 | 6f2b9836 | Ilias Tsitsimpis | return uuid
|
208 | 6f2b9836 | Ilias Tsitsimpis | |
209 | 6f2b9836 | Ilias Tsitsimpis | def _get_username(self): |
210 | 6f2b9836 | Ilias Tsitsimpis | """Get our User Name"""
|
211 | 6f2b9836 | Ilias Tsitsimpis | authenticate = self.clients.astakos.authenticate()
|
212 | 6f2b9836 | Ilias Tsitsimpis | username = authenticate['access']['user']['name'] |
213 | 6f2b9836 | Ilias Tsitsimpis | self.info("User's name is %s", username) |
214 | 6f2b9836 | Ilias Tsitsimpis | return username
|
215 | 6f2b9836 | Ilias Tsitsimpis | |
216 | fe15cd00 | Ilias Tsitsimpis | def _get_list_of_flavors(self, detail=False): |
217 | fe15cd00 | Ilias Tsitsimpis | """Get (detailed) list of flavors"""
|
218 | fe15cd00 | Ilias Tsitsimpis | if detail:
|
219 | fe15cd00 | Ilias Tsitsimpis | self.info("Getting detailed list of flavors") |
220 | fe15cd00 | Ilias Tsitsimpis | else:
|
221 | fe15cd00 | Ilias Tsitsimpis | self.info("Getting simple list of flavors") |
222 | fe15cd00 | Ilias Tsitsimpis | flavors = self.clients.compute.list_flavors(detail=detail)
|
223 | fe15cd00 | Ilias Tsitsimpis | return flavors
|
224 | fe15cd00 | Ilias Tsitsimpis | |
225 | 79a5c431 | Ilias Tsitsimpis | def _set_pithos_account(self, account): |
226 | 79a5c431 | Ilias Tsitsimpis | """Set the pithos account"""
|
227 | 79a5c431 | Ilias Tsitsimpis | assert account, "No pithos account was given" |
228 | 79a5c431 | Ilias Tsitsimpis | |
229 | 79a5c431 | Ilias Tsitsimpis | self.info("Setting pithos account to %s", account) |
230 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos.account = account
|
231 | 79a5c431 | Ilias Tsitsimpis | |
232 | 79a5c431 | Ilias Tsitsimpis | def _get_list_of_containers(self, account=None): |
233 | 79a5c431 | Ilias Tsitsimpis | """Get list of containers"""
|
234 | 79a5c431 | Ilias Tsitsimpis | if account is not None: |
235 | 79a5c431 | Ilias Tsitsimpis | self._set_pithos_account(account)
|
236 | 79a5c431 | Ilias Tsitsimpis | self.info("Getting list of containers") |
237 | 79a5c431 | Ilias Tsitsimpis | return self.clients.pithos.list_containers() |
238 | 79a5c431 | Ilias Tsitsimpis | |
239 | 79a5c431 | Ilias Tsitsimpis | def _create_pithos_container(self, container): |
240 | 79a5c431 | Ilias Tsitsimpis | """Create a pithos container
|
241 | 79a5c431 | Ilias Tsitsimpis |
|
242 | 79a5c431 | Ilias Tsitsimpis | If the container exists, nothing will happen
|
243 | 79a5c431 | Ilias Tsitsimpis |
|
244 | 79a5c431 | Ilias Tsitsimpis | """
|
245 | 79a5c431 | Ilias Tsitsimpis | assert container, "No pithos container was given" |
246 | 79a5c431 | Ilias Tsitsimpis | |
247 | 79a5c431 | Ilias Tsitsimpis | self.info("Creating pithos container %s", container) |
248 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos.container = container
|
249 | 79a5c431 | Ilias Tsitsimpis | self.clients.pithos.container_put()
|
250 | 79a5c431 | Ilias Tsitsimpis | |
251 | 4c52d5bf | Ilias Tsitsimpis | |
252 | 4c52d5bf | Ilias Tsitsimpis | # --------------------------------------------------------------------
|
253 | 12ef696f | Ilias Tsitsimpis | # Initialize Burnin
|
254 | 12ef696f | Ilias Tsitsimpis | def initialize(opts, testsuites): |
255 | 12ef696f | Ilias Tsitsimpis | """Initalize burnin
|
256 | 12ef696f | Ilias Tsitsimpis |
|
257 | 12ef696f | Ilias Tsitsimpis | Initialize our logger and burnin state
|
258 | 12ef696f | Ilias Tsitsimpis |
|
259 | 12ef696f | Ilias Tsitsimpis | """
|
260 | 12ef696f | Ilias Tsitsimpis | # Initialize logger
|
261 | 12ef696f | Ilias Tsitsimpis | global logger # Using global statement. pylint: disable-msg=C0103,W0603 |
262 | 12ef696f | Ilias Tsitsimpis | logger = Log(opts.log_folder, verbose=opts.verbose, |
263 | 0c1833c8 | Ilias Tsitsimpis | use_colors=opts.use_colors, in_parallel=False,
|
264 | 0c1833c8 | Ilias Tsitsimpis | quiet=opts.quiet) |
265 | 12ef696f | Ilias Tsitsimpis | |
266 | 12ef696f | Ilias Tsitsimpis | # Initialize clients
|
267 | 12ef696f | Ilias Tsitsimpis | Clients.auth_url = opts.auth_url |
268 | 12ef696f | Ilias Tsitsimpis | Clients.token = opts.token |
269 | 12ef696f | Ilias Tsitsimpis | |
270 | 12ef696f | Ilias Tsitsimpis | # Pass the rest options to BurninTests
|
271 | 79a5c431 | Ilias Tsitsimpis | BurninTests.use_ipv6 = opts.use_ipv6 |
272 | 79a5c431 | Ilias Tsitsimpis | BurninTests.action_timeout = opts.action_timeout |
273 | 79a5c431 | Ilias Tsitsimpis | BurninTests.action_warning = opts.action_warning |
274 | 79a5c431 | Ilias Tsitsimpis | BurninTests.query_interval = opts.query_interval |
275 | 79a5c431 | Ilias Tsitsimpis | BurninTests.run_id = SNF_TEST_PREFIX + \ |
276 | 79a5c431 | Ilias Tsitsimpis | datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d%H%M%S")
|
277 | 12ef696f | Ilias Tsitsimpis | |
278 | 12ef696f | Ilias Tsitsimpis | # Choose tests to run
|
279 | 12ef696f | Ilias Tsitsimpis | if opts.tests != "all": |
280 | 12ef696f | Ilias Tsitsimpis | testsuites = opts.tests |
281 | 12ef696f | Ilias Tsitsimpis | if opts.exclude_tests is not None: |
282 | 12ef696f | Ilias Tsitsimpis | testsuites = [tsuite for tsuite in testsuites |
283 | 12ef696f | Ilias Tsitsimpis | if tsuite not in opts.exclude_tests] |
284 | 12ef696f | Ilias Tsitsimpis | |
285 | 12ef696f | Ilias Tsitsimpis | return testsuites
|
286 | 12ef696f | Ilias Tsitsimpis | |
287 | 12ef696f | Ilias Tsitsimpis | |
288 | 12ef696f | Ilias Tsitsimpis | # --------------------------------------------------------------------
|
289 | 12ef696f | Ilias Tsitsimpis | # Run Burnin
|
290 | 0c1833c8 | Ilias Tsitsimpis | def run(testsuites, failfast=False, final_report=False): |
291 | 12ef696f | Ilias Tsitsimpis | """Run burnin testsuites"""
|
292 | 12ef696f | Ilias Tsitsimpis | global logger # Using global. pylint: disable-msg=C0103,W0603,W0602 |
293 | 12ef696f | Ilias Tsitsimpis | |
294 | 12ef696f | Ilias Tsitsimpis | success = True
|
295 | 12ef696f | Ilias Tsitsimpis | for tcase in testsuites: |
296 | 12ef696f | Ilias Tsitsimpis | tsuite = unittest.TestLoader().loadTestsFromTestCase(tcase) |
297 | 12ef696f | Ilias Tsitsimpis | results = tsuite.run(BurninTestResult()) |
298 | fe15cd00 | Ilias Tsitsimpis | |
299 | fe15cd00 | Ilias Tsitsimpis | was_success = was_successful(tcase.__name__, results.wasSuccessful()) |
300 | fe15cd00 | Ilias Tsitsimpis | success = success and was_success
|
301 | 0c1833c8 | Ilias Tsitsimpis | if failfast and not success: |
302 | 0c1833c8 | Ilias Tsitsimpis | break
|
303 | 12ef696f | Ilias Tsitsimpis | |
304 | 0c1833c8 | Ilias Tsitsimpis | # Are we going to print final report?
|
305 | 0c1833c8 | Ilias Tsitsimpis | if final_report:
|
306 | 0c1833c8 | Ilias Tsitsimpis | logger.print_logfile_to_stdout() |
307 | 12ef696f | Ilias Tsitsimpis | # Clean up our logger
|
308 | 12ef696f | Ilias Tsitsimpis | del(logger)
|
309 | 12ef696f | Ilias Tsitsimpis | |
310 | 12ef696f | Ilias Tsitsimpis | # Return
|
311 | 12ef696f | Ilias Tsitsimpis | return 0 if success else 1 |
312 | 12ef696f | Ilias Tsitsimpis | |
313 | 12ef696f | Ilias Tsitsimpis | |
314 | 12ef696f | Ilias Tsitsimpis | # --------------------------------------------------------------------
|
315 | 4c52d5bf | Ilias Tsitsimpis | # Helper functions
|
316 | 12ef696f | Ilias Tsitsimpis | def was_successful(tsuite, success): |
317 | 4c52d5bf | Ilias Tsitsimpis | """Handle whether a testsuite was succesful or not"""
|
318 | 4c52d5bf | Ilias Tsitsimpis | if success:
|
319 | 4c52d5bf | Ilias Tsitsimpis | logger.testsuite_success(tsuite) |
320 | 12ef696f | Ilias Tsitsimpis | return True |
321 | 4c52d5bf | Ilias Tsitsimpis | else:
|
322 | 4c52d5bf | Ilias Tsitsimpis | logger.testsuite_failure(tsuite) |
323 | 12ef696f | Ilias Tsitsimpis | return False |