nixpkgs-suyu/nixos/tests/blivet.nix
aszlig 75efdc6502
nixos/tests/blivet: Fix btrfs-related tests
The loopback-based tests use a storage size of 102400 blocks (one block
is 1024 bytes), which doesn't seem to fit for btrfs volumes in recent
btrfs versions. I'm setting this to 409600 (400 MB) now so that it
should be enough for later versions in case they need even more space
for subvolumes.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2016-09-07 16:32:12 +02:00

87 lines
2.8 KiB
Nix

import ./make-test.nix ({ pkgs, ... }: with pkgs.pythonPackages; rec {
name = "blivet";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ aszlig ];
};
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
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()|' \
-e 's|DEFAULT_STORE_SIZE = .*|DEFAULT_STORE_SIZE = 409600|' \
tests/loopbackedtestcase.py
PYTHONPATH=".:$(< "${pkgs.stdenv.mkDerivation {
name = "blivet-pythonpath";
buildInputs = [ blivet mock ];
buildCommand = "echo \"$PYTHONPATH\" > \"$out\"";
}}")" python "${pythonTestRunner}"
'';
testScript = ''
$machine->waitForUnit("multi-user.target");
$machine->succeed("${blivetTest}");
$machine->execute("rm -rf /tmp/xchg/bigtmp");
'';
})