summary refs log tree commit diff
path: root/pkgs/tools/backup/duplicity
diff options
context:
space:
mode:
authorMatthew Glazar <strager.nds@gmail.com>2019-05-03 17:16:54 -0700
committerMatthew Glazar <strager.nds@gmail.com>2019-06-03 09:14:40 -0700
commit071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1 (patch)
tree926c5ae263e2fe4f9c53e64cc4c7701e7a2332b2 /pkgs/tools/backup/duplicity
parentcdf234714b6fad65ecd56da20e1cab6681772ed5 (diff)
downloadnixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.tar
nixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.tar.gz
nixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.tar.bz2
nixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.tar.lz
nixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.tar.xz
nixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.tar.zst
nixpkgs-071167e6a93ef8e8aa9a2a29d81aadb68db1a8e1.zip
duplicity: enable tests
* Install required tool dependencies ('tar', 'rdiff', etc.)
* Run installed duplicity instead of source tree duplicity
* Fix shebang of scripts in testing/overrides/bin/
* Disable some unhelpful developer-only tests
* Disable a test broken on Linux (root cause unknown)
* Work around low file descriptor soft limit for Darwin builders
Diffstat (limited to 'pkgs/tools/backup/duplicity')
-rw-r--r--pkgs/tools/backup/duplicity/default.nix48
-rw-r--r--pkgs/tools/backup/duplicity/gnutar-in-test.patch18
-rw-r--r--pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch10
-rw-r--r--pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch13
4 files changed, 81 insertions, 8 deletions
diff --git a/pkgs/tools/backup/duplicity/default.nix b/pkgs/tools/backup/duplicity/default.nix
index b5accb3b82b..360fef6df38 100644
--- a/pkgs/tools/backup/duplicity/default.nix
+++ b/pkgs/tools/backup/duplicity/default.nix
@@ -1,4 +1,8 @@
-{ stdenv, fetchurl, python2Packages, librsync, ncftp, gnupg, rsync, makeWrapper }:
+{ stdenv, fetchurl, python2Packages, librsync, ncftp, gnupg
+, gnutar
+, par2cmdline
+, utillinux
+, rsync, makeWrapper }:
 
 python2Packages.buildPythonApplication rec {
   name = "duplicity-${version}";
@@ -8,16 +12,26 @@ python2Packages.buildPythonApplication rec {
     url = "https://code.launchpad.net/duplicity/${stdenv.lib.versions.majorMinor version}-series/${version}/+download/${name}.tar.gz";
     sha256 = "0j37dgyji36hvb5dbzlmh5rj83jwhni02yq16g6rd3hj8f7qhdn2";
   };
+  patches = [
+    ./gnutar-in-test.patch
+    ./use-installed-scripts-in-test.patch
+  ] ++ stdenv.lib.optionals stdenv.isLinux [
+    ./linux-disable-timezone-test.patch
+  ];
 
   buildInputs = [ librsync makeWrapper python2Packages.wrapPython ];
   propagatedBuildInputs = with python2Packages; [
     boto cffi cryptography ecdsa enum idna pygobject3 fasteners
     ipaddress lockfile paramiko pyasn1 pycrypto six
   ];
-  checkInputs = with python2Packages; [ lockfile mock pexpect ];
-
-  # lots of tests are failing, although we get a little further now with the bits in preCheck
-  doCheck = false;
+  checkInputs = [
+    gnupg  # Add 'gpg' to PATH.
+    gnutar  # Add 'tar' to PATH.
+    librsync  # Add 'rdiff' to PATH.
+    par2cmdline  # Add 'par2' to PATH.
+  ] ++ stdenv.lib.optionals stdenv.isLinux [
+    utillinux  # Add 'setsid' to PATH.
+  ] ++ (with python2Packages; [ lockfile mock pexpect ]);
 
   postInstall = ''
     wrapProgram $out/bin/duplicity \
@@ -27,12 +41,30 @@ python2Packages.buildPythonApplication rec {
   '';
 
   preCheck = ''
-    patchShebangs testing
+    wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
 
-    substituteInPlace testing/__init__.py \
-      --replace 'mkdir testfiles' 'mkdir -p testfiles'
+    # Add 'duplicity' to PATH for tests.
+    # Normally, 'setup.py test' adds 'build/scripts-2.7/' to PATH before running
+    # tests. However, 'build/scripts-2.7/duplicity' is not wrapped, so its
+    # shebang is incorrect and it fails to run inside Nix' sandbox.
+    # In combination with use-installed-scripts-in-test.patch, make 'setup.py
+    # test' use the installed 'duplicity' instead.
+    PATH="$out/bin:$PATH"
+
+    # Don't run developer-only checks (pep8, etc.).
+    export RUN_CODE_TESTS=0
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    # Work around the following error when running tests:
+    # > Max open files of 256 is too low, should be >= 1024.
+    # > Use 'ulimit -n 1024' or higher to correct.
+    ulimit -n 1024
   '';
 
+  # TODO: Fix test failures on macOS 10.13:
+  #
+  # > OSError: out of pty devices
+  doCheck = !stdenv.isDarwin;
+
   meta = with stdenv.lib; {
     description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
     homepage = https://www.nongnu.org/duplicity;
diff --git a/pkgs/tools/backup/duplicity/gnutar-in-test.patch b/pkgs/tools/backup/duplicity/gnutar-in-test.patch
new file mode 100644
index 00000000000..b2820feb019
--- /dev/null
+++ b/pkgs/tools/backup/duplicity/gnutar-in-test.patch
@@ -0,0 +1,18 @@
+--- a/testing/functional/test_restart.py
++++ b/testing/functional/test_restart.py
+@@ -323,14 +323,7 @@ class RestartTestWithoutEncryption(RestartTest):
+         https://launchpad.net/bugs/929067
+         """
+
+-        if platform.system().startswith('Linux'):
+-            tarcmd = "tar"
+-        elif platform.system().startswith('Darwin'):
+-            tarcmd = "gtar"
+-        elif platform.system().endswith('BSD'):
+-            tarcmd = "gtar"
+-        else:
+-            raise Exception("Platform %s not supported by tar/gtar." % platform.platform())
++        tarcmd = "tar"
+
+         # Intial normal backup
+         self.backup("full", "testfiles/blocktartest")
diff --git a/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch b/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
new file mode 100644
index 00000000000..b5e6df18a15
--- /dev/null
+++ b/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
@@ -0,0 +1,10 @@
+--- a/testing/unit/test_statistics.py
++++ b/testing/unit/test_statistics.py
+@@ -59,6 +59,7 @@ class StatsObjTest(UnitTestCase):
+         s1 = StatsDeltaProcess()
+         assert s1.get_stat('SourceFiles') == 0
+
++    @unittest.skip("Broken on Linux in Nix' build environment")
+     def test_get_stats_string(self):
+         """Test conversion of stat object into string"""
+         s = StatsObj()
diff --git a/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch b/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
new file mode 100644
index 00000000000..191808abc63
--- /dev/null
+++ b/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
@@ -0,0 +1,13 @@
+--- a/setup.py
++++ b/setup.py
+@@ -92,10 +92,6 @@ class TestCommand(test):
+                 except Exception:
+                     pass
+
+-        os.environ['PATH'] = "%s:%s" % (
+-            os.path.abspath(build_scripts_cmd.build_dir),
+-            os.environ.get('PATH'))
+-
+         test.run(self)
+
+     def run_tests(self):