diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c997495b2..a24be3d59 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -243,8 +243,13 @@ jobs: # Start ssh-agent and add our key so paramiko can use the agent eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 + sudo python3 -m venv /opt/borgstore-venv + sudo /opt/borgstore-venv/bin/pip install -U pip setuptools wheel + sudo /opt/borgstore-venv/bin/pip install "borgstore[rest]" + sudo ln -sf /opt/borgstore-venv/bin/borgstore-server-rest /usr/local/bin/borgstore-server-rest # Export SFTP test URL for tox via GITHUB_ENV echo "BORG_TEST_SFTP_REPO=sftp://sftpuser@localhost:22/borg/sftp-repo" >> $GITHUB_ENV + echo "BORG_TEST_REST_REPO=rest://sftpuser@localhost:22/borg/rest-repo" >> $GITHUB_ENV - name: Install and configure MinIO S3 server (test only) if: ${{ runner.os == 'Linux' && !contains(matrix.toxenv, 'mypy') && !contains(matrix.toxenv, 'docs') }} diff --git a/src/borg/testsuite/archiver/remote_repo_test.py b/src/borg/testsuite/archiver/remote_repo_test.py index 294aa4b3a..2374a9436 100644 --- a/src/borg/testsuite/archiver/remote_repo_test.py +++ b/src/borg/testsuite/archiver/remote_repo_test.py @@ -10,6 +10,7 @@ from . import cmd, create_regular_file, RK_ENCRYPTION, assert_dirs_equal SFTP_URL = os.environ.get("BORG_TEST_SFTP_REPO") +REST_URL = os.environ.get("BORG_TEST_REST_REPO") S3_URL = os.environ.get("BORG_TEST_S3_REPO") @@ -57,6 +58,30 @@ def test_rclone_repo_basics(archiver, tmp_path): cmd(archiver, "repo-delete") +@pytest.mark.skipif(not REST_URL, reason="BORG_TEST_REST_REPO not set.") +def test_rest_repo_basics(archiver): + create_regular_file(archiver.input_path, "file1", size=100 * 1024) + create_regular_file(archiver.input_path, "file2", size=10 * 1024) + archiver.repository_location = REST_URL + archive_name = "test-archive" + cmd(archiver, "repo-create", RK_ENCRYPTION) + cmd(archiver, "create", archive_name, "input") + list_output = cmd(archiver, "repo-list") + assert archive_name in list_output + archive_list_output = cmd(archiver, "list", archive_name) + assert "input/file1" in archive_list_output + assert "input/file2" in archive_list_output + with changedir("output"): + cmd(archiver, "extract", archive_name) + assert_dirs_equal( + archiver.input_path, os.path.join(archiver.output_path, "input"), ignore_flags=True, ignore_xattrs=True + ) + cmd(archiver, "delete", "-a", archive_name) + list_output = cmd(archiver, "repo-list") + assert archive_name not in list_output + cmd(archiver, "repo-delete") + + @pytest.mark.skipif(not SFTP_URL, reason="BORG_TEST_SFTP_REPO not set.") def test_sftp_repo_basics(archiver): create_regular_file(archiver.input_path, "file1", size=100 * 1024)