Exemple #1
0
 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))
Exemple #2
0
 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))
Exemple #3
0
 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))
Exemple #4
0
 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))
Exemple #5
0
 def _init_sysinfo(self, job_logdir):
     if self.sysinfo is None:
         basedir = path.init_dir(job_logdir, 'sysinfo')
         self.sysinfo = sysinfo.SysInfo(basedir=basedir)
Exemple #6
0
    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)