diff --git a/avocado/test.py b/avocado/test.py index b28e97157c69d22f4b338cf5fa692ebac9db40af..a3c797c6b803d8be08b71218b4b11bda0c114a1e 100644 --- a/avocado/test.py +++ b/avocado/test.py @@ -31,6 +31,7 @@ from avocado.utils import path from avocado.utils import process from avocado.utils.params import Params from avocado import sysinfo +from avocado.version import VERSION log = logging.getLogger("avocado.test") @@ -335,12 +336,24 @@ class Test(unittest.TestCase): self.status = 'PASS' self.sysinfo_logger.end_test_hook() + def _setup_environment_variables(self): + os.environ['AVOCADO_VERSION'] = VERSION + os.environ['AVOCADO_TEST_BASEDIR'] = self.basedir + os.environ['AVOCADO_TEST_DATADIR'] = self.datadir + os.environ['AVOCADO_TEST_WORKDIR'] = self.workdir + os.environ['AVOCADO_TEST_SRCDIR'] = self.srcdir + os.environ['AVOCADO_TEST_LOGDIR'] = self.logdir + os.environ['AVOCADO_TEST_LOGFILE'] = self.logfile + os.environ['AVOCADO_TEST_OUTPUTDIR'] = self.outputdir + os.environ['AVOCADO_TEST_SYSINFODIR'] = self.sysinfodir + def run_avocado(self, result=None): """ Wraps the runTest metod, for execution inside the avocado runner. :result: Unused param, compatibiltiy with :class:`unittest.TestCase`. """ + self._setup_environment_variables() start_time = time.time() try: self.runTest(result) diff --git a/selftests/all/functional/avocado/export_variables_tests.py b/selftests/all/functional/avocado/export_variables_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..fc6f9dabefd8d5b1f43d60c1cdcf59a539bd17ba --- /dev/null +++ b/selftests/all/functional/avocado/export_variables_tests.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# See LICENSE for more details. +# +# Copyright: Red Hat Inc. 2014 +# Author: Ruda Moura + +import os +import sys +import shutil +import tempfile +import unittest + +# simple magic for using scripts within a source tree +basedir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', '..', '..') +basedir = os.path.abspath(basedir) +if os.path.isdir(os.path.join(basedir, 'avocado')): + sys.path.append(basedir) + +from avocado.version import VERSION +from avocado.utils import process + +SCRIPT_CONTENT = """#!/bin/sh +echo "Avocado Version: $AVOCADO_VERSION" +echo "Avocado Test basedir: $AVOCADO_TEST_BASEDIR" +echo "Avocado Test datadir: $AVOCADO_TEST_DATADIR" +echo "Avocado Test workdir: $AVOCADO_TEST_WORKDIR" +echo "Avocado Test srcdir: $AVOCADO_TEST_SRCDIR" +echo "Avocado Test logdir: $AVOCADO_TEST_LOGDIR" +echo "Avocado Test logfile: $AVOCADO_TEST_LOGFILE" +echo "Avocado Test outputdir: $AVOCADO_TEST_OUTPUTDIR" +echo "Avocado Test sysinfodir: $AVOCADO_TEST_SYSINFODIR" + +test "$AVOCADO_VERSION" = "{version}" -a \ + -d "$AVOCADO_TEST_BASEDIR" -a \ + -d "$AVOCADO_TEST_WORKDIR" -a \ + -d "$AVOCADO_TEST_SRCDIR" -a \ + -d "$AVOCADO_TEST_LOGDIR" -a \ + -f "$AVOCADO_TEST_LOGFILE" -a \ + -d "$AVOCADO_TEST_OUTPUTDIR" -a \ + -d "$AVOCADO_TEST_SYSINFODIR" +""".format(version=VERSION) + + +class EnvironmentVariablesTest(unittest.TestCase): + + def setUp(self): + self.base_logdir = tempfile.mkdtemp(prefix='avocado_env_vars_functional') + self.script = os.path.join(self.base_logdir, 'version.sh') + with open(self.script, 'w') as script_obj: + script_obj.write(SCRIPT_CONTENT) + os.chmod(self.script, 0775) + + def test_environment_vars(self): + os.chdir(basedir) + cmd_line = './scripts/avocado run %s' % self.script + result = process.run(cmd_line, ignore_status=True) + expected_rc = 0 + self.assertEqual(result.exit_status, expected_rc, + "Avocado did not return rc %d:\n%s" % + (expected_rc, result)) + + def tearDown(self): + if os.path.isdir(self.base_logdir): + shutil.rmtree(self.base_logdir, ignore_errors=True) + + +if __name__ == '__main__': + unittest.main()