def test_logger_job_hooks(self): jobdir = os.path.join(self.tmpdir, 'job') sysinfo_logger = sysinfo.SysInfo(basedir=jobdir) sysinfo_logger.start_job_hook() self.assertTrue(os.path.isdir(jobdir)) self.assertGreaterEqual(len(os.listdir(jobdir)), 1, "Job does not have 'pre' dir") job_predir = os.path.join(jobdir, 'pre') self.assertTrue(os.path.isdir(job_predir)) sysinfo_logger.end_job_hook() job_postdir = os.path.join(jobdir, 'post') self.assertTrue(os.path.isdir(job_postdir))
def test_logger_job(self): jobdir = os.path.join(self.tmpdir.name, "job") sysinfo_logger = sysinfo.SysInfo(basedir=jobdir) sysinfo_logger.start() self.assertTrue(os.path.isdir(jobdir)) self.assertGreaterEqual( len(os.listdir(jobdir)), 1, "Job does not have 'pre' dir" ) job_predir = os.path.join(jobdir, "pre") self.assertTrue(os.path.isdir(job_predir)) sysinfo_logger.end() job_postdir = os.path.join(jobdir, "post") self.assertTrue(os.path.isdir(job_postdir))
def test_logger_test(self): testdir = os.path.join(self.tmpdir.name, 'job', 'test1') sysinfo_logger = sysinfo.SysInfo(basedir=testdir) sysinfo_logger.start() self.assertTrue(os.path.isdir(testdir)) self.assertGreaterEqual(len(os.listdir(testdir)), 1, "Test does not have 'pre' dir") test_predir = os.path.join(testdir, 'pre') self.assertTrue(os.path.isdir(test_predir)) sysinfo_logger.end() self.assertGreaterEqual(len(os.listdir(testdir)), 2, "Test does not have 'pre' dir") test_postdir = os.path.join(testdir, 'post') self.assertTrue(os.path.isdir(test_postdir))
def test_logger_test_hooks(self): testdir = os.path.join(self.tmpdir, 'job', 'test1') sysinfo_logger = sysinfo.SysInfo(basedir=testdir) sysinfo_logger.start_test_hook() self.assertTrue(os.path.isdir(testdir)) self.assertGreaterEqual(len(os.listdir(testdir)), 1, "Test does not have 'pre' dir") test_predir = os.path.join(testdir, 'pre') self.assertTrue(os.path.isdir(test_predir)) # By default, there are no pre test files self.assertEqual(len(os.listdir(test_predir)), 0, "Test pre dir is not empty") sysinfo_logger.end_test_hook() self.assertGreaterEqual(len(os.listdir(testdir)), 2, "Test does not have 'pre' dir") job_postdir = os.path.join(testdir, 'post') self.assertTrue(os.path.isdir(job_postdir)) # By default, there are no post test files self.assertLess(len(os.listdir(job_postdir)), 3, "Post dir can contain 0-2 files depending on whether " "sys messages are obtainable or not:\n%s" % os.listdir(job_postdir))
def _init_sysinfo(self, job_logdir): if self.sysinfo is None: basedir = path.init_dir(job_logdir, 'sysinfo') self.sysinfo = sysinfo.SysInfo(basedir=basedir)
def __init__(self, methodName='test', name=None, params=None, base_logdir=None, config=None, runner_queue=None, tags=None): """ Initializes the test. :param methodName: Name of the main method to run. For the sake of compatibility with the original unittest class, you should not set this. :param name: Pretty name of the test name. For normal tests, written with the avocado API, this should not be set. This is reserved for internal Avocado use, such as when running random executables as tests. :type name: :class:`avocado.core.test.TestID` :param base_logdir: Directory where test logs should go. If None provided a temporary directory will be created. :param config: the job configuration, usually set by command line options and argument parsing :type config: dict """ self.__phase = 'INIT' def record_and_warn(*args, **kwargs): """ Record call to this function and log warning """ if not self.__log_warn_used: self.__log_warn_used = True return original_log_warn(*args, **kwargs) if name is not None: self.__name = name else: self.__name = TestID(0, self.__class__.__name__) self.__tags = tags self._config = config or settings.as_dict() self.__base_logdir = base_logdir self.__base_logdir_tmp = None if self.__base_logdir is None: prefix = 'avocado_test_' self.__base_logdir_tmp = tempfile.TemporaryDirectory(prefix=prefix) self.__base_logdir = self.__base_logdir_tmp.name if self._config.get("run.test_runner") == 'nrunner': logdir = self.__base_logdir self.__logdir = logdir else: self.__base_logdir = os.path.join(self.__base_logdir, 'test-results') logdir = os.path.join(self.__base_logdir, self.name.str_filesystem) if os.path.exists(logdir): raise exceptions.TestSetupFail("Log dir already exists, this " "should never happen: %s" % logdir) self.__logdir = utils_path.init_dir(logdir) self.__logfile = os.path.join(self.logdir, 'debug.log') self._stdout_file = os.path.join(self.logdir, 'stdout') self._stderr_file = os.path.join(self.logdir, 'stderr') self._output_file = os.path.join(self.logdir, 'output') self._logging_handlers = {} self.__outputdir = utils_path.init_dir(self.logdir, 'data') self.__sysinfo_enabled = self._config.get('sysinfo.collect.per_test', False) if self.__sysinfo_enabled: self.__sysinfodir = utils_path.init_dir(self.logdir, 'sysinfo') self.__sysinfo_logger = sysinfo.SysInfo(basedir=self.__sysinfodir) self.__log = LOG_JOB original_log_warn = self.log.warning self.__log_warn_used = False self.log.warn = self.log.warning = record_and_warn # Initialized by _start_logging and terminated by _stop_logging self._file_handler = None self.log.info('INIT %s', self.name) paths = ['/test/*'] if params is None: params = [] elif isinstance(params, tuple): params, paths = params[0], params[1] self.__params = parameters.AvocadoParams(params, paths, self.__log.name) default_timeout = getattr(self, "timeout", None) self.timeout = self.params.get("timeout", default=default_timeout) self.__status = None self.__fail_reason = None self.__fail_class = None self.__traceback = None # Are initialized lazily self.__cache_dirs = None self.__base_tmpdir = None self.__workdir = None self.__running = False self.paused = False self.paused_msg = '' self.__runner_queue = runner_queue self.log.debug("Test metadata:") if self.filename: self.log.debug(" filename: %s", self.filename) try: teststmpdir = self.teststmpdir except EnvironmentError: pass else: self.log.debug(" teststmpdir: %s", teststmpdir) unittest.TestCase.__init__(self, methodName=methodName) TestData.__init__(self)