import distro import getpass import jinja2 import json import logging import os import platform import sys import time import report from report import testSession as testSessionBase from unittest import jsonlog from unittest.test import equivalency_chk from config import APP_NAME as ROOT_LOGGER_NAME logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__) DELAY_SET_GET = 0.15 DELAY_FLASH = 0.75 STATES_SW = (True, False) STATES_BR = (0, 20, 40, 60, 80, 100) STATES_CT = (0, 2, 4, 6, 8, 10) STATES_TEMP = (15., 20., 25., 30.) def set_precondition(tLogger, list_of_device_key_value_wait_pairs): expectation = [] for device, key, value, wait in list_of_device_key_value_wait_pairs: expectation.append(value) logger.info("Setting %s to %s", repr(device.get_name(key)), repr(value)) device.set(key, value) if wait is True: time.sleep(DELAY_SET_GET) time.sleep(DELAY_SET_GET) result = [] for device, key, value, wait in list_of_device_key_value_wait_pairs: result.append(device.get(key)) equivalency_chk(result, expectation, tLogger, "Test prepare state") class testSession(testSessionBase): def __init__(self, mqtt_client, tcel=report.TCEL_FULL): self.mqtt_client = mqtt_client self.full_test_data = {} param = { jsonlog.TRUN_EXEC_LVL: tcel, 'interpreter': 'python'+sys.version.split(" ")[0] } super().__init__(['__unittest__', ROOT_LOGGER_NAME], **param) # Get testobject information self.mqtt_client.add_callback('__info__', self.__test_object_information__) self.mqtt_client.send('__info__', json.dumps(None)) def __set_base_data__(self, **kwargs): self.full_test_data[jsonlog.MAIN_KEY_SYSTEM_INFO] = self.__system_info__() self.full_test_data[jsonlog.MAIN_KEY_TESTOBJECT_INFO] = {"Name": "-"} self.full_test_data[jsonlog.MAIN_KEY_UNITTEST_INFO] = self.__unittest_information__() self.full_test_data[jsonlog.MAIN_KEY_SPECIFICATION] = self.__specification__() self.full_test_data[jsonlog.MAIN_KEY_LOST_SOULS] = {} self.full_test_data[jsonlog.MAIN_KEY_TESTRUNS] = [] return super().__set_base_data__(**kwargs) def __system_info__(self): system_info = {} system_info[jsonlog.SYSI_ARCHITECTURE] = platform.architecture()[0] system_info[jsonlog.SYSI_MACHINE] = platform.machine() system_info[jsonlog.SYSI_HOSTNAME] = platform.node() system_info[jsonlog.SYSI_DISTRIBUTION] = distro.name() + " " + distro.version() + " (" + distro.codename() + ")" system_info[jsonlog.SYSI_SYSTEM] = platform.system() system_info[jsonlog.SYSI_KERNEL] = platform.release() + ' (%s)' % platform.version() system_info[jsonlog.SYSI_USERNAME] = getpass.getuser() system_info[jsonlog.SYSI_PATH] = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) return system_info def __test_object_information__(self, client, userdata, message): data = json.loads(message.payload) if data is not None: self.full_test_data[jsonlog.MAIN_KEY_TESTOBJECT_INFO]['Name'] = data.get("app_name", "-") self.full_test_data[jsonlog.MAIN_KEY_TESTOBJECT_INFO]['Version'] = data.get("version", {}).get("readable", "-") self.full_test_data[jsonlog.MAIN_KEY_TESTOBJECT_INFO]['Git URL'] = data.get("git", {}).get("url", "-") self.full_test_data[jsonlog.MAIN_KEY_TESTOBJECT_INFO]['Git REF'] = data.get("git", {}).get("ref", "-") def __unittest_information__(self): return {} def __specification__(self): return {} def __finalise__(self): self.full_test_data[jsonlog.MAIN_KEY_LOST_SOULS][jsonlog.LOST_ITEMLIST] = [] self.full_test_data[jsonlog.MAIN_KEY_LOST_SOULS][jsonlog.LOST_TESTCASELIST] = self["uid_list_sorted"][:] self.full_test_data[jsonlog.MAIN_KEY_TESTRUNS].append(self) def export_results_to(self, template_file, path): self.__finalise__() # # Export json testrun data # with open(os.path.join(path, "testrun.json"), "w") as fh: fh.write(json.dumps(self.full_test_data, indent=4)) # # Export jinja templated data # template_path = os.path.dirname(template_file) template_filename = os.path.basename(template_file) jenv = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path)) template = jenv.get_template(template_filename) with open(os.path.join(path, "testrun.tex"), "w") as fh: fh.write(template.render(data=self.full_test_data))