Skip to content

Commit

Permalink
cleanup create_cmd
Browse files Browse the repository at this point in the history
  • Loading branch information
bigtedde committed Jul 13, 2023
1 parent b2d8210 commit 73c178d
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions src/borg/testsuite/archiver/create_cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,25 @@ def test_basic_functionality(archivers, request):
pytest.skip("test_basic_functionality seems incompatible with fakeroot and/or the binary.")
repo_location, input_path = archiver.repository_location, archiver.input_path
have_root = create_test_files(input_path)

# fork required to test show-rc output
output = cmd(
archiver, f"--repo={repo_location}", "rcreate", RK_ENCRYPTION, "--show-version", "--show-rc", fork=True
)
assert "borgbackup version" in output
assert "terminating with success status, rc 0" in output

cmd(archiver, f"--repo={repo_location}", "create", "--exclude-nodump", "test", "input")
output = cmd(archiver, f"--repo={repo_location}", "create", "--exclude-nodump", "--stats", "test.2", "input")
assert "Archive name: test.2" in output

with changedir("output"):
cmd(archiver, f"--repo={repo_location}", "extract", "test")

list_output = cmd(archiver, f"--repo={repo_location}", "rlist", "--short")
assert "test" in list_output
assert "test.2" in list_output

expected = [
"input",
"input/bdev",
Expand All @@ -94,10 +99,12 @@ def test_basic_functionality(archivers, request):
# remove the file we did not back up, so input and output become equal
expected.remove("input/flagfile") # this file is UF_NODUMP
os.remove(os.path.join("input", "flagfile"))

list_output = cmd(archiver, f"--repo={repo_location}", "list", "test", "--short")
for name in expected:
assert name in list_output
assert_dirs_equal("input", "output/input")

info_output = cmd(archiver, f"--repo={repo_location}", "info", "-a", "test")
item_count = 5 if has_lchflags else 6 # one file is UF_NODUMP
assert "Number of files: %d" % item_count in info_output
Expand All @@ -121,6 +128,7 @@ def filter(output):
def test_archived_paths(archivers, request):
archiver = request.getfixturevalue(archivers)
repo_location = archiver.repository_location

# As borg comes from the POSIX (Linux, UNIX) world, a lot of stuff assumes path separators
# to be slashes "/", e.g.: in archived items, for pattern matching.
# To make our lives easier and to support cross-platform extraction we always use slashes.
Expand All @@ -138,9 +146,11 @@ def test_archived_paths(archivers, request):
# "input" directory is recursed into, "input/test" is discovered and joined by borg's recursion.
# posix_path was directly given as a cli argument and should end up as archive_path in the borg archive.
expected_paths = sorted(["input", "input/test", archived_path])

# check path in archived items:
archive_list = cmd(archiver, f"--repo={repo_location}", "list", "test", "--short")
assert expected_paths == sorted([path for path in archive_list.splitlines() if path])

# check path in archived items (json):
archive_list = cmd(archiver, f"--repo={repo_location}", "list", "test", "--json-lines")
assert expected_paths == sorted([json.loads(line)["path"] for line in archive_list.splitlines() if line])
Expand Down Expand Up @@ -175,7 +185,7 @@ def test_unix_socket(archivers, request, monkeypatch):

cmd(archiver, f"--repo={repo_location}", "rcreate", RK_ENCRYPTION)
try:
with tempfile.TemporaryDirectory(prefix="input") as temp_dir:
with tempfile.TemporaryDirectory() as temp_dir:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind(os.path.join(temp_dir, "unix-socket"))
except PermissionError as err:
Expand All @@ -187,20 +197,20 @@ def test_unix_socket(archivers, request, monkeypatch):
sock.close()
with changedir("output"):
cmd(archiver, f"--repo={repo_location}", "extract", "test")
assert not os.path.exists("input/unix-socket")
print(f"{temp_dir}/unix-socket")
assert not os.path.exists(f"{temp_dir}/unix-socket")


@pytest.mark.skipif(not is_utime_fully_supported(), reason="cannot properly setup and execute test without utime")
@pytest.mark.skipif(
not is_birthtime_fully_supported(), reason="cannot properly setup and execute test without birth time"
)
@pytest.mark.skipif(not is_utime_fully_supported(), reason="cannot setup and execute test without utime")
@pytest.mark.skipif(not is_birthtime_fully_supported(), reason="cannot setup and execute test without birth time")
def test_nobirthtime(archivers, request):
archiver = request.getfixturevalue(archivers)
repo_location, input_path = archiver.repository_location, archiver.input_path
create_test_files(input_path)
birthtime, mtime, atime = 946598400, 946684800, 946771200
os.utime("input/file1", (atime, birthtime))
os.utime("input/file1", (atime, mtime))

cmd(archiver, f"--repo={repo_location}", "rcreate", RK_ENCRYPTION)
cmd(archiver, f"--repo={repo_location}", "create", "test", "input", "--nobirthtime")
with changedir("output"):
Expand Down

0 comments on commit 73c178d

Please sign in to comment.