From cff26e2d384bb43022eaced9ca0682b4f671b1ab Mon Sep 17 00:00:00 2001 From: aszlig Date: Wed, 22 Oct 2014 05:50:33 +0200 Subject: nixos: Add VM test for blivet. I'm really not sure whether these tests are actually run upstream, because there are quite a few oddities which either are my fault by just missing something important or upstream really doesn't bother to run those tests. One example of this are testDiskChunk1 and testDiskChunk2, which create two non-existing partitions and tries to allocate them. Now, in allocatePartitions(), the partedPartition attributes are reset to None and shortly afterwards a for loop is expecting it to be NOT None. So, for now I'm disabling these tests and will see if we stumble on them during work on nixpart 1.0, so we're really sure whether it's my fault or a real bug in blivet. Signed-off-by: aszlig --- nixos/tests/blivet.nix | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 nixos/tests/blivet.nix (limited to 'nixos/tests/blivet.nix') diff --git a/nixos/tests/blivet.nix b/nixos/tests/blivet.nix new file mode 100644 index 000000000000..acaf4fec614f --- /dev/null +++ b/nixos/tests/blivet.nix @@ -0,0 +1,85 @@ +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"); + ''; +}) -- cgit 1.4.1