Skip to content

Commit

Permalink
Merge pull request #63 from ThomasWaldmann/tests-use-store-create
Browse files Browse the repository at this point in the history
refactor Store tests, add Store.set_levels method
  • Loading branch information
ThomasWaldmann authored Sep 28, 2024
2 parents 5465678 + d84a645 commit 970947f
Show file tree
Hide file tree
Showing 3 changed files with 158 additions and 132 deletions.
7 changes: 5 additions & 2 deletions src/borgstore/store.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ class Store:
def __init__(self, url: Optional[str] = None, backend: Optional[BackendBase] = None, levels: Optional[dict] = None):
self.url = url
levels = levels if levels else {}
# we accept levels as a dict, but we rather want a list of (namespace, levels) tuples, longest namespace first:
self.levels = [entry for entry in sorted(levels.items(), key=lambda item: len(item[0]), reverse=True)]
self.set_levels(levels)
if backend is None and url is not None:
backend = get_backend(url)
if backend is None:
Expand All @@ -61,6 +60,10 @@ def __init__(self, url: Optional[str] = None, backend: Optional[BackendBase] = N
def __repr__(self):
return f"<Store(url={self.url!r}, levels={self.levels!r})>"

def set_levels(self, levels: dict) -> None:
# we accept levels as a dict, but we rather want a list of (namespace, levels) tuples, longest namespace first:
self.levels = [entry for entry in sorted(levels.items(), key=lambda item: len(item[0]), reverse=True)]

def create(self) -> None:
self.backend.create()

Expand Down
18 changes: 11 additions & 7 deletions tests/test_backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,21 @@
from borgstore.constants import ROOTNS, TMP_SUFFIX


def get_posixfs_test_backend(tmp_path):
return PosixFS(tmp_path / "store")


@pytest.fixture()
def posixfs_backend_created(tmp_path):
be = PosixFS(tmp_path / "store")
be = get_posixfs_test_backend(tmp_path)
be.create()
try:
yield be
finally:
be.destroy()


def _get_sftp_backend():
def get_sftp_test_backend():
# export BORGSTORE_TEST_SFTP_URL="sftp://user@host:port/home/user/borgstore/temp-store"
# needs an authorized key loaded into the ssh agent. pytest works, tox doesn't.
url = os.environ.get("BORGSTORE_TEST_SFTP_URL")
Expand All @@ -45,7 +49,7 @@ def _get_sftp_backend():
def check_sftp_available():
"""in some test environments, get_sftp_backend() does not result in a working sftp backend"""
try:
be = _get_sftp_backend()
be = get_sftp_test_backend()
be.create() # first sftp activity happens here
except Exception:
return False # use "raise" here for debugging sftp store issues
Expand All @@ -54,7 +58,7 @@ def check_sftp_available():
return True


def _get_rclone_backend():
def get_rclone_test_backend():
# To use a specific RCLONE backend
# export BORGSTORE_TEST_RCLONE_URL="rclone://remote:path"
# otherwise this will run an rclone backend in a temporary directory on local disk
Expand All @@ -70,7 +74,7 @@ def _get_rclone_backend():
def check_rclone_available():
"""in some test environments, get_rclone_backend() does not result in a working rclone backend"""
try:
be = _get_rclone_backend()
be = get_rclone_test_backend()
be.create() # first rclone activity happens here
except Exception as e:
print(f"Rclone backend create failed {repr(e)}")
Expand All @@ -86,7 +90,7 @@ def check_rclone_available():

@pytest.fixture(scope="function")
def sftp_backend_created():
be = _get_sftp_backend()
be = get_sftp_test_backend()
be.create()
try:
yield be
Expand All @@ -96,7 +100,7 @@ def sftp_backend_created():

@pytest.fixture(scope="function")
def rclone_backend_created():
be = _get_rclone_backend()
be = get_rclone_test_backend()
be.create()
try:
yield be
Expand Down
Loading

0 comments on commit 970947f

Please sign in to comment.