def st_image_created(opts): test_handler, conn = opts['test_handler'], opts['conn'] try: result = conn.image.get_image(test_handler.current_result) if not result: raise StateMonitorException('image result None') print('image %s created' % result.id) database.logs_add('st_image', 'image created', test_handler.test_id) except openstack.exceptions.InvalidRequest: database.logs_add('st_image', 'image invalid request', test_handler.test_id) raise StateMonitorException('image invalid request')
def st_flavor_created(opts): test_handler, conn = opts['test_handler'], opts['conn'] try: result = conn.compute.get_flavor(test_handler.current_result) if not result: raise StateMonitorException('flavor result None') print('flavor %s created' % result.id) database.logs_add('st_flavor', 'flavor created', test_handler.test_id) except openstack.exceptions.InvalidRequest: database.logs_add('st_flavor', 'flavor invalid request', test_handler.test_id) raise StateMonitorException('flavor invalid request ')
def st_server_deleted(opts): test_handler, conn = opts['test_handler'], opts['conn'] try: result = conn.compute.get_server(test_handler.instances['server_test']) print(_dump_invalid_server_status(result)) database.logs_add('st_server', _dump_invalid_server_status(result), test_handler.test_id) raise StateMonitorException('invalid server state') except openstack.exceptions.ResourceNotFound: print('server deleted') pass except openstack.exceptions.InvalidRequest: raise StateMonitorException('server deleting invalid request')
def st_server_started(opts): test_handler, conn = opts['test_handler'], opts['conn'] try: result = conn.compute.get_server(test_handler.instances['server_test']) if result and result.status and result.status.lower() == 'error': raise ServerErrorStatusException() if result.status.lower() == 'active': print('server started %s' % result.id) else: print(_dump_invalid_server_status(result)) database.logs_add('st_server', _dump_invalid_server_status(result), test_handler.test_id) raise StateMonitorException('invalid server state') except openstack.exceptions.InvalidRequest: raise StateMonitorException('server starting invalid request')
def st_volume_created(opts): test_handler, conn = opts['test_handler'], opts['conn'] try: result = conn.block_storage.get_volume(test_handler.current_result) if not result: raise StateMonitorException('volume result None') if result.status == 'available': print('volume %s created' % result.id) database.logs_add('st_volume', 'volume created', test_handler.test_id) else: raise StateMonitorException('invalid volume status %s' % result.status) except openstack.exceptions.InvalidRequest: database.logs_add('st_volume', 'volume invalid request', test_handler.test_id) raise StateMonitorException('volume invalid request')
def run(self): while self._test_handler.status != TestHandler.STOPPED: print('[%02d] state-monitor waiting test execution' % self._test_handler.iteration_number) with self._test_handler.execution_cv: self._test_handler.statem_ev.set() self._test_handler.execution_cv.wait() if self._test_handler.status == TestHandler.STOPPED: continue print('[%02d] state-monitor states' % self._test_handler.iteration_number) try: result = self.func() print('[%02d] state-monitor result = %s' % (self._test_handler.iteration_number, str(result))) database.logs_add('state_monitor', 'result = %s' % str(result), self._test_handler.test_id) except Exception as monitor_exc: self._test_handler.exceptions.append(monitor_exc) self._test_handler.execution_cv.notify() self._test_handler.execution_cv.wait() print('state-monitor stopped')
def wrapped_function(*args, **kwargs): status_ok = False exc = None counter = 0 prev_msg_list = [] opts = kwargs['opts'] opts['conn'] = openstack.connect(cloud=opts['cloud']) start_time = datetime.datetime.now() try: while not status_ok and counter < times: _st_try_log_states(opts, prev_msg_list) try: function(*args, **kwargs) status_ok = True exc = None except StateMonitorException as state_exc: status_ok = False exc = state_exc time.sleep(interval) except openstack.exceptions.SDKException as sdk_exception: status_ok = False exc = sdk_exception time.sleep(interval) counter = counter + 1 except ErrorStatusException as exc: status_ok = False exc = exc time.sleep(interval) except Exception as generic: status_ok = False exc = exc time.sleep(interval) if 'test_handler' in opts: end_time = datetime.datetime.now() secs = (end_time - start_time).total_seconds() msg = 'test status: %s, time: %s, error: %s' % ( 'PASS' if status_ok else 'FAIL', '%s secs' % secs, repr(exc) if not status_ok else 'NO_ERROR') database.logs_add('tests_events', msg, opts['test_handler'].test_id) _st_try_log_states(opts, prev_msg_list) return status_ok, exc
def st_server_created(opts): test_handler, conn = opts['test_handler'], opts['conn'] try: result = conn.compute.get_server(test_handler.current_result) if not result: raise StateMonitorException('server result None') if result.status and result.status.lower() == 'error': raise ServerErrorStatusException() if result.status and result.status.lower() == 'active': print('server state %s' % result.status.lower()) database.logs_add( 'st_server', 'correct server state %s' % result.status.lower(), test_handler.test_id) else: print( 'invalid server state (status=%s, task=%s, power=%s, vm=%s)' % (result.status.lower(), result.task_state, str(result.power_state), result.vm_state)) database.logs_add( 'st_server', 'invalid server state (status=%s, task_state=%s, power_state=%s, vm_state=%s)' % (result.status, result.task_state, result.power_state, result.vm_state), test_handler.test_id) raise StateMonitorException('invalid server state') except openstack.exceptions.InvalidRequest: database.logs_add('st_server', 'invalid server request', test_handler.test_id) raise StateMonitorException('server invalid request')
def run(self): self._test_handler.status = TestHandler.STARTED self._test_handler.start_iteration_counting() for test, index in zip(self._test_handler.tests, range(len(self._test_handler.tests))): it_id = database.it_add(self._test_handler.test_id, test.event) if index in self._test_handler.targets: mode = 'injection' else: mode = 'classic' database.test_change_mode(self._test_handler.test_id, mode) database.it_register_mode(it_id, mode) self._test_handler.statem_ev.wait() self._test_handler.statem_ev.clear() print('[%02d] run test' % self._test_handler.iteration_number) database.logs_add('test_runner', 'running input of number %d' % self._test_handler.iteration_number, self._test_handler.test_id) self._test_handler.current_test = test try: database.logs_add('tests_events', 'run event %s' % test.event, self._test_handler.test_id) self._test_handler.current_result = test.func() except Exception as func_exc: self._test_handler.exceptions.append(func_exc) self._test_handler.status = TestHandler.STOPPED with self._test_handler.execution_cv: self._test_handler.execution_cv.notify() break with self._test_handler.execution_cv: self._test_handler.execution_cv.notify() print('[%02d] execution waiting states completion' % self._test_handler.iteration_number) self._test_handler.execution_cv.wait() self._test_handler.status = TestHandler.STARTED if test != self._test_handler.tests[-1] and not \ self._test_handler.has_errors else TestHandler.STOPPED self._test_handler.execution_cv.notify() self._test_handler.increment_iteration_by_one() print('test-execution finished') database.test_set_errors(self._test_handler.test_id, len(self._test_handler.exceptions) > 0) with self._test_handler.completion_cv: self._test_handler.completion_cv.notify() self._test_handler.stop_iteration_counting()
def _st_try_log_states(opts, prev_msg_list): if 'test_handler' in opts: test_handler = opts['test_handler'] if 'server_test' in test_handler.instances: server_test = test_handler.instances['server_test'] test_id = test_handler.test_id conn = opts['conn'] try: result = conn.compute.get_server(server_test) if result: msg = _tests_events_log_state( result, test_id, prev_msg_list[-1] if prev_msg_list else None) prev_msg_list.append(msg) except openstack.exceptions.InvalidRequest: pass except openstack.exceptions.HttpException: pass except openstack.exceptions.ResourceNotFound: msg = 'server not found' if not prev_msg_list or msg != prev_msg_list[-1]: database.logs_add('tests_events', msg, test_id) prev_msg_list.append(msg)
def _tests_events_log_state(result, test_id, last_msg=None): msg = 'power=%s, vm=%s, task=%s, status=%s' % ( result.power_state, result.vm_state, result.task_state, result.status) if msg != last_msg: database.logs_add('tests_events', msg, test_id) return msg