Просмотр исходного кода

move disk full tests to own module

Thomas Waldmann 2 лет назад
Родитель
Сommit
8aaad71439
2 измененных файлов с 88 добавлено и 81 удалено
  1. 0 81
      src/borg/testsuite/archiver/__init__.py
  2. 88 0
      src/borg/testsuite/archiver/disk_full.py

+ 0 - 81
src/borg/testsuite/archiver/__init__.py

@@ -3,7 +3,6 @@ import errno
 import io
 import io
 import json
 import json
 import os
 import os
-import random
 import shutil
 import shutil
 import socket
 import socket
 import stat
 import stat
@@ -134,86 +133,6 @@ def cmd(request):
     return exec_fn
     return exec_fn
 
 
 
 
-"""
-test_disk_full is very slow and not recommended to be included in daily testing.
-for this test, an empty, writable 16MB filesystem mounted on DF_MOUNT is required.
-for speed and other reasons, it is recommended that the underlying block device is
-in RAM, not a magnetic or flash disk.
-
-assuming /tmp is a tmpfs (in memory filesystem), one can use this:
-dd if=/dev/zero of=/tmp/borg-disk bs=16M count=1
-mkfs.ext4 /tmp/borg-disk
-mkdir /tmp/borg-mount
-sudo mount /tmp/borg-disk /tmp/borg-mount
-
-if the directory does not exist, the test will be skipped.
-"""
-DF_MOUNT = "/tmp/borg-mount"
-
-
-@pytest.mark.skipif(not os.path.exists(DF_MOUNT), reason="needs a 16MB fs mounted on %s" % DF_MOUNT)
-def test_disk_full(cmd):
-    def make_files(dir, count, size, rnd=True):
-        shutil.rmtree(dir, ignore_errors=True)
-        os.mkdir(dir)
-        if rnd:
-            count = random.randint(1, count)
-            if size > 1:
-                size = random.randint(1, size)
-        for i in range(count):
-            fn = os.path.join(dir, "file%03d" % i)
-            with open(fn, "wb") as f:
-                data = os.urandom(size)
-                f.write(data)
-
-    with environment_variable(BORG_CHECK_I_KNOW_WHAT_I_AM_DOING="YES"):
-        mount = DF_MOUNT
-        assert os.path.exists(mount)
-        repo = os.path.join(mount, "repo")
-        input = os.path.join(mount, "input")
-        reserve = os.path.join(mount, "reserve")
-        for j in range(100):
-            shutil.rmtree(repo, ignore_errors=True)
-            shutil.rmtree(input, ignore_errors=True)
-            # keep some space and some inodes in reserve that we can free up later:
-            make_files(reserve, 80, 100000, rnd=False)
-            rc, out = cmd(f"--repo={repo}", "rcreate")
-            if rc != EXIT_SUCCESS:
-                print("rcreate", rc, out)
-            assert rc == EXIT_SUCCESS
-            try:
-                success, i = True, 0
-                while success:
-                    i += 1
-                    try:
-                        make_files(input, 20, 200000)
-                    except OSError as err:
-                        if err.errno == errno.ENOSPC:
-                            # already out of space
-                            break
-                        raise
-                    try:
-                        rc, out = cmd("--repo=%s" % repo, "create", "test%03d" % i, input)
-                        success = rc == EXIT_SUCCESS
-                        if not success:
-                            print("create", rc, out)
-                    finally:
-                        # make sure repo is not locked
-                        shutil.rmtree(os.path.join(repo, "lock.exclusive"), ignore_errors=True)
-                        os.remove(os.path.join(repo, "lock.roster"))
-            finally:
-                # now some error happened, likely we are out of disk space.
-                # free some space so we can expect borg to be able to work normally:
-                shutil.rmtree(reserve, ignore_errors=True)
-            rc, out = cmd(f"--repo={repo}", "rlist")
-            if rc != EXIT_SUCCESS:
-                print("rlist", rc, out)
-            rc, out = cmd(f"--repo={repo}", "check", "--repair")
-            if rc != EXIT_SUCCESS:
-                print("check", rc, out)
-            assert rc == EXIT_SUCCESS
-
-
 def checkts(ts):
 def checkts(ts):
     # check if the timestamp is in the expected format
     # check if the timestamp is in the expected format
     assert datetime.strptime(ts, ISO_FORMAT + "%z")  # must not raise
     assert datetime.strptime(ts, ISO_FORMAT + "%z")  # must not raise

+ 88 - 0
src/borg/testsuite/archiver/disk_full.py

@@ -0,0 +1,88 @@
+"""
+test_disk_full is very slow and not recommended to be included in daily testing.
+for this test, an empty, writable 16MB filesystem mounted on DF_MOUNT is required.
+for speed and other reasons, it is recommended that the underlying block device is
+in RAM, not a magnetic or flash disk.
+
+assuming /tmp is a tmpfs (in memory filesystem), one can use this:
+dd if=/dev/zero of=/tmp/borg-disk bs=16M count=1
+mkfs.ext4 /tmp/borg-disk
+mkdir /tmp/borg-mount
+sudo mount /tmp/borg-disk /tmp/borg-mount
+
+if the directory does not exist, the test will be skipped.
+"""
+import errno
+import os
+import random
+import shutil
+
+import pytest
+
+from ...constants import *  # NOQA
+from . import cmd, environment_variable
+
+DF_MOUNT = "/tmp/borg-mount"
+
+
+@pytest.mark.skipif(not os.path.exists(DF_MOUNT), reason="needs a 16MB fs mounted on %s" % DF_MOUNT)
+def test_disk_full(cmd):
+    def make_files(dir, count, size, rnd=True):
+        shutil.rmtree(dir, ignore_errors=True)
+        os.mkdir(dir)
+        if rnd:
+            count = random.randint(1, count)
+            if size > 1:
+                size = random.randint(1, size)
+        for i in range(count):
+            fn = os.path.join(dir, "file%03d" % i)
+            with open(fn, "wb") as f:
+                data = os.urandom(size)
+                f.write(data)
+
+    with environment_variable(BORG_CHECK_I_KNOW_WHAT_I_AM_DOING="YES"):
+        mount = DF_MOUNT
+        assert os.path.exists(mount)
+        repo = os.path.join(mount, "repo")
+        input = os.path.join(mount, "input")
+        reserve = os.path.join(mount, "reserve")
+        for j in range(100):
+            shutil.rmtree(repo, ignore_errors=True)
+            shutil.rmtree(input, ignore_errors=True)
+            # keep some space and some inodes in reserve that we can free up later:
+            make_files(reserve, 80, 100000, rnd=False)
+            rc, out = cmd(f"--repo={repo}", "rcreate")
+            if rc != EXIT_SUCCESS:
+                print("rcreate", rc, out)
+            assert rc == EXIT_SUCCESS
+            try:
+                success, i = True, 0
+                while success:
+                    i += 1
+                    try:
+                        make_files(input, 20, 200000)
+                    except OSError as err:
+                        if err.errno == errno.ENOSPC:
+                            # already out of space
+                            break
+                        raise
+                    try:
+                        rc, out = cmd("--repo=%s" % repo, "create", "test%03d" % i, input)
+                        success = rc == EXIT_SUCCESS
+                        if not success:
+                            print("create", rc, out)
+                    finally:
+                        # make sure repo is not locked
+                        shutil.rmtree(os.path.join(repo, "lock.exclusive"), ignore_errors=True)
+                        os.remove(os.path.join(repo, "lock.roster"))
+            finally:
+                # now some error happened, likely we are out of disk space.
+                # free some space so we can expect borg to be able to work normally:
+                shutil.rmtree(reserve, ignore_errors=True)
+            rc, out = cmd(f"--repo={repo}", "rlist")
+            if rc != EXIT_SUCCESS:
+                print("rlist", rc, out)
+            rc, out = cmd(f"--repo={repo}", "check", "--repair")
+            if rc != EXIT_SUCCESS:
+                print("check", rc, out)
+            assert rc == EXIT_SUCCESS