import ./make-test.nix ({ pkgs, ... }: with pkgs.pythonPackages; rec { name = "blivet"; machine = { environment.systemPackages = [ pkgs.python blivet mock ]; boot.supportedFilesystems = [ "btrfs" "jfs" "reiserfs" "xfs" ]; virtualisation.memorySize = 768; }; debugBlivet = false; debugProgramCalls = false; pythonTestRunner = pkgs.writeText "run-blivet-tests.py" '' import sys import logging from unittest import TestLoader from unittest.runner import TextTestRunner ${pkgs.lib.optionalString debugProgramCalls '' blivet_program_log = logging.getLogger("program") blivet_program_log.setLevel(logging.DEBUG) blivet_program_log.addHandler(logging.StreamHandler(sys.stderr)) ''} ${pkgs.lib.optionalString debugBlivet '' blivet_log = logging.getLogger("blivet") blivet_log.setLevel(logging.DEBUG) blivet_log.addHandler(logging.StreamHandler(sys.stderr)) ''} runner = TextTestRunner(verbosity=2, failfast=False, buffer=False) result = runner.run(TestLoader().discover('tests/', pattern='*_test.py')) sys.exit(not result.wasSuccessful()) ''; blivetTest = pkgs.writeScript "blivet-test.sh" '' #!${pkgs.stdenv.shell} -e # Use the hosts temporary directory, because we have a tmpfs within the VM # and we don't want to increase the memory size of the VM for no reason. mkdir -p /tmp/xchg/bigtmp TMPDIR=/tmp/xchg/bigtmp export TMPDIR mkPythonPath() { nix-store -qR "$@" \ | sed -e 's|$|/lib/${pkgs.python.libPrefix}/site-packages|' } cp -Rd "${blivet.src}/tests" . # Skip SELinux tests rm -f tests/formats_test/selinux_test.py # Race conditions in growing/shrinking during resync rm -f tests/devicelibs_test/mdraid_* # Deactivate small BTRFS device test, because it fails with newer btrfsprogs sed -i -e '/^class *BTRFSAsRootTestCase3(/,/^[^ ]/ { /^class *BTRFSAsRootTestCase3(/d /^$/d /^ /d }' tests/devicelibs_test/btrfs_test.py # How on earth can these tests ever work even upstream? O_o sed -i -e '/def testDiskChunk[12]/,/^ *[^ ]/{n; s/^ */&return # /}' \ tests/partitioning_test.py # fix hardcoded temporary directory sed -i \ -e '1i import tempfile' \ -e 's|_STORE_FILE_PATH = .*|_STORE_FILE_PATH = tempfile.gettempdir()|' \ tests/loopbackedtestcase.py PYTHONPATH=".:$(mkPythonPath "${blivet}" "${mock}" | paste -sd :)" \ python "${pythonTestRunner}" ''; testScript = '' $machine->waitForUnit("multi-user.target"); $machine->succeed("${blivetTest}"); $machine->execute("rm -rf /tmp/xchg/bigtmp"); ''; })