Daniel P. Berrangé <[email protected]> writes:
> The build/tests/functional subdirectories are consuming huge amounts
> of disk space.
>
> Split the location for scratch files into a 'scratch' sub-directory,
> separate from log files, and delete it upon completion of each test.
> The new env variable QEMU_TEST_KEEP_SCRATCH can be set to preserve
> this scratch dir for debugging access if required.
>
> Signed-off-by: Daniel P. Berrangé <[email protected]>
> ---
> docs/devel/testing/functional.rst | 6 ++++++
> tests/functional/qemu_test/testcase.py | 14 +++++++++-----
> 2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/docs/devel/testing/functional.rst
> b/docs/devel/testing/functional.rst
> index bf6f1bb81e..6b5d0c5b98 100644
> --- a/docs/devel/testing/functional.rst
> +++ b/docs/devel/testing/functional.rst
> @@ -65,6 +65,12 @@ to the QEMU binary that should be used for the test, for
> example::
> $ export QEMU_TEST_QEMU_BINARY=$PWD/qemu-system-x86_64
> $ python3 ../tests/functional/test_file.py
>
> +The test framework will automatically purge any scratch files created during
> +the tests. If needing to debug a failed test, it is possible to keep these
> +files around on disk by setting ```QEMU_TEST_KEEP_SCRATCH=1``` as an env
> +variable. Any preserved files will be deleted the next time the test is run
> +without this variable set.
> +
> Overview
> --------
>
> diff --git a/tests/functional/qemu_test/testcase.py
> b/tests/functional/qemu_test/testcase.py
> index 411978b5ef..b9418e2ac0 100644
> --- a/tests/functional/qemu_test/testcase.py
> +++ b/tests/functional/qemu_test/testcase.py
> @@ -13,8 +13,9 @@
>
> import logging
> import os
> -import subprocess
> import pycotap
> +import shutil
> +import subprocess
> import sys
> import unittest
> import uuid
> @@ -40,11 +41,12 @@ def setUp(self, bin_prefix):
> self.assertIsNotNone(self.qemu_bin, 'QEMU_TEST_QEMU_BINARY must be
> set')
> self.arch = self.qemu_bin.split('-')[-1]
>
> - self.workdir = os.path.join(BUILD_DIR, 'tests/functional', self.arch,
> - self.id())
> + self.outputdir = os.path.join(BUILD_DIR, 'tests', 'functional',
> + self.arch, self.id())
I don't think you need save self.outputdir as only self.logdir is used
by the other functions.
> + self.workdir = os.path.join(self.outputdir, 'scratch')
> os.makedirs(self.workdir, exist_ok=True)
>
> - self.logdir = self.workdir
> + self.logdir = self.outputdir
> self.log_filename = os.path.join(self.logdir, 'base.log')
> self.log = logging.getLogger('qemu-test')
> self.log.setLevel(logging.DEBUG)
> @@ -56,6 +58,8 @@ def setUp(self, bin_prefix):
> self.log.addHandler(self._log_fh)
>
> def tearDown(self):
> + if "QEMU_TEST_KEEP_SCRATCH" not in os.environ:
> + shutil.rmtree(self.workdir)
> self.log.removeHandler(self._log_fh)
>
> def main():
> @@ -108,7 +112,7 @@ def setUp(self):
>
> console_log = logging.getLogger('console')
> console_log.setLevel(logging.DEBUG)
> - self.console_log_name = os.path.join(self.workdir, 'console.log')
> + self.console_log_name = os.path.join(self.logdir, 'console.log')
> self._console_log_fh = logging.FileHandler(self.console_log_name,
> mode='w')
> self._console_log_fh.setLevel(logging.DEBUG)
Otherwise:
Reviewed-by: Alex Bennée <[email protected]>
--
Alex Bennée
Virtualisation Tech Lead @ Linaro