summary refs log tree commit diff
path: root/nixos/tests/blivet.nix
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-10-22 05:50:33 +0200
committeraszlig <aszlig@redmoonstudios.org>2014-10-22 08:22:58 +0200
commitcff26e2d384bb43022eaced9ca0682b4f671b1ab (patch)
tree526c154f15fe7882f9be07681e1df5bf07f61e62 /nixos/tests/blivet.nix
parent16371fce91709932df51d276aaac4f90dc004df2 (diff)
downloadnixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.tar
nixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.tar.gz
nixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.tar.bz2
nixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.tar.lz
nixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.tar.xz
nixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.tar.zst
nixlib-cff26e2d384bb43022eaced9ca0682b4f671b1ab.zip
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 <aszlig@redmoonstudios.org>
Diffstat (limited to 'nixos/tests/blivet.nix')
-rw-r--r--nixos/tests/blivet.nix85
1 files changed, 85 insertions, 0 deletions
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");
+  '';
+})