159 lines
4.9 KiB
Python
159 lines
4.9 KiB
Python
import pytest
|
|
|
|
from zfs_backup import ZFSPath
|
|
|
|
|
|
class TestZFSPath:
|
|
@pytest.mark.parametrize(
|
|
"elements",
|
|
[
|
|
["pool"],
|
|
["pool", "dataset1", "dataset2"],
|
|
],
|
|
)
|
|
def test__sanity_check_valid(self, elements):
|
|
ZFSPath._sanity_check(elements)
|
|
|
|
@pytest.mark.parametrize(
|
|
"elements",
|
|
[
|
|
[""],
|
|
["", "dataset1"],
|
|
["pool", "dataset1", ""],
|
|
["pool", "", "dataset2"],
|
|
],
|
|
)
|
|
def test__sanity_check_invalid(self, elements):
|
|
with pytest.raises(ValueError):
|
|
ZFSPath._sanity_check(elements)
|
|
|
|
@pytest.mark.parametrize(
|
|
"elements, snapshot_name, result",
|
|
[
|
|
[["pool"], None, ""],
|
|
[["pool", "dataset"], None, "dataset"],
|
|
[["pool", "dataset"], "snapshot", "dataset@snapshot"],
|
|
[
|
|
["pool", "dataset1", "dataset2"],
|
|
"snapshot",
|
|
"dataset1/dataset2@snapshot",
|
|
],
|
|
],
|
|
ids=[
|
|
"only pool",
|
|
"pool with one dataset",
|
|
"pool with dataset and snapshot",
|
|
"pool with two nested datasets and snapshot",
|
|
],
|
|
)
|
|
def test_name_without_pool(self, elements, snapshot_name, result):
|
|
instance = ZFSPath(elements, snapshot_name)
|
|
assert instance.name_without_pool == result
|
|
|
|
@pytest.mark.parametrize(
|
|
"elements, snapshot_name, result",
|
|
[
|
|
[["pool"], None, "pool"],
|
|
[["pool", "dataset"], None, "pool/dataset"],
|
|
[["pool", "dataset"], "snapshot", "pool/dataset@snapshot"],
|
|
[
|
|
["pool", "dataset1", "dataset2"],
|
|
"snapshot",
|
|
"pool/dataset1/dataset2@snapshot",
|
|
],
|
|
],
|
|
ids=[
|
|
"only pool",
|
|
"pool with one dataset",
|
|
"pool with dataset and snapshot",
|
|
"pool with two nested datasets and snapshot",
|
|
],
|
|
)
|
|
def test___repr__(self, elements, snapshot_name, result):
|
|
assert str(ZFSPath(elements, snapshot_name)) == result
|
|
|
|
@pytest.mark.parametrize(
|
|
"instance1, instance2, result",
|
|
[
|
|
[ZFSPath(["pool"]), ZFSPath(["pool"]), True],
|
|
[ZFSPath(["pool"]), ZFSPath(["tank"]), False],
|
|
[ZFSPath(["pool", "dataset"]), ZFSPath(["pool", "dataset"]), True],
|
|
[ZFSPath(["pool", "dataset"]), ZFSPath(["pool", "bla"]), False],
|
|
[
|
|
ZFSPath(["pool", "dataset"], "snapshot"),
|
|
ZFSPath(["pool", "dataset"], "snapshot"),
|
|
True,
|
|
],
|
|
[
|
|
ZFSPath(["pool", "dataset"], "snapshot"),
|
|
ZFSPath(["pool", "dataset"], "bla"),
|
|
False,
|
|
],
|
|
],
|
|
ids=[
|
|
"only pool equal",
|
|
"only pool not equal",
|
|
"dataset equal",
|
|
"dataset not equal",
|
|
"snapshot equal",
|
|
"snapshot not equal",
|
|
],
|
|
)
|
|
def test___eq__(self, instance1, instance2, result):
|
|
assert (instance1 == instance2) == result
|
|
|
|
@pytest.mark.parametrize(
|
|
"string, elements, snapshot_name",
|
|
[
|
|
["pool/dataset", ["pool", "dataset"], None],
|
|
["pool/dataset@snapshot", ["pool", "dataset"], "snapshot"],
|
|
[
|
|
"pool/dataset1/dataset2@snapshot",
|
|
["pool", "dataset1", "dataset2"],
|
|
"snapshot",
|
|
],
|
|
],
|
|
ids=[
|
|
"pool/dataset",
|
|
"pool/dataset@snapshot",
|
|
"pool/dataset1/dataset2@snapshot",
|
|
],
|
|
)
|
|
def test_from_string(self, string, elements, snapshot_name):
|
|
instance = ZFSPath.from_string(string)
|
|
assert instance._elements == elements
|
|
assert instance._snapshot_name == instance.snapshot_name == snapshot_name
|
|
|
|
@pytest.mark.parametrize(
|
|
"instance1, instance2",
|
|
[
|
|
[ZFSPath(["pool", "dataset"]), ZFSPath(["pool", "dataset"])],
|
|
[ZFSPath(["pool", "dataset"], "snapshot"), ZFSPath(["pool", "dataset"])],
|
|
],
|
|
ids=[
|
|
"pool with dataset",
|
|
"pool with dataset and snapshot",
|
|
],
|
|
)
|
|
def test_dataset(self, instance1, instance2):
|
|
assert instance1.dataset == instance2
|
|
|
|
@pytest.mark.parametrize(
|
|
"instance1, instance2",
|
|
[
|
|
[ZFSPath(["pool"]), ZFSPath(["tank"])],
|
|
[ZFSPath(["pool", "dataset"]), ZFSPath(["tank", "dataset"])],
|
|
[
|
|
ZFSPath(["pool", "dataset"], "snapshot"),
|
|
ZFSPath(["tank", "dataset"], "snapshot"),
|
|
],
|
|
],
|
|
ids=[
|
|
"pool",
|
|
"pool with dataset",
|
|
"pool with dataset and snapshot",
|
|
],
|
|
)
|
|
def test_replace_pool(self, instance1, instance2):
|
|
assert instance1.replace_pool(instance2.pool_name) == instance2
|