提交 aa7c36d7 编写于 作者: R Rudá Moura 提交者: Ruda Moura

avocado.test: export environment variables to tests.

Export environment variables to the running test.
Really effective when using drop-in tests, that can make use of shell
variables "AVOCADO_*".

Example:

Export variable AVOCADO_VERSION with the current version of Avocado,
then the drop-in test can use $AVOCADO_VERSION within, and so on.
Signed-off-by: NRuda Moura <rmoura@redhat.com>
上级 20d8fde5
...@@ -31,6 +31,7 @@ from avocado.utils import path ...@@ -31,6 +31,7 @@ from avocado.utils import path
from avocado.utils import process from avocado.utils import process
from avocado.utils.params import Params from avocado.utils.params import Params
from avocado import sysinfo from avocado import sysinfo
from avocado.version import VERSION
log = logging.getLogger("avocado.test") log = logging.getLogger("avocado.test")
...@@ -335,12 +336,24 @@ class Test(unittest.TestCase): ...@@ -335,12 +336,24 @@ class Test(unittest.TestCase):
self.status = 'PASS' self.status = 'PASS'
self.sysinfo_logger.end_test_hook() 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): def run_avocado(self, result=None):
""" """
Wraps the runTest metod, for execution inside the avocado runner. Wraps the runTest metod, for execution inside the avocado runner.
:result: Unused param, compatibiltiy with :class:`unittest.TestCase`. :result: Unused param, compatibiltiy with :class:`unittest.TestCase`.
""" """
self._setup_environment_variables()
start_time = time.time() start_time = time.time()
try: try:
self.runTest(result) self.runTest(result)
......
#!/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 <rmoura@redhat.com>
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()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册