import pytest import yaml from zettarepl.definition.definition import Definition from zettarepl.replication.task.task import ReplicationTask from zettarepl.observer import (ReplicationTaskStart, ReplicationTaskSnapshotStart, ReplicationTaskSnapshotProgress, ReplicationTaskSnapshotSuccess, ReplicationTaskDataProgress, ReplicationTaskSuccess) from zettarepl.utils.itertools import select_by_class from zettarepl.utils.test import transports, create_zettarepl, wait_replication_tasks_to_complete @pytest.mark.parametrize("transport", transports()) def test_replication_progress(transport): subprocess.call("zfs destroy -r data/src", shell=True) subprocess.call("zfs destroy -r data/dst", shell=True) subprocess.check_call("zfs create data/src", shell=True) subprocess.check_call("zfs create data/src/src1", shell=True) subprocess.check_call("zfs snapshot data/src/src1@2018-10-01_01-00", shell=True) subprocess.check_call( "dd if=/dev/urandom of=/mnt/data/src/src1/blob bs=1M count=1", shell=True) subprocess.check_call("zfs snapshot data/src/src1@2018-10-01_02-00", shell=True) subprocess.check_call("rm /mnt/data/src/src1/blob", shell=True)
# -*- coding=utf-8 -*- import subprocess import textwrap import pytest import yaml from zettarepl.utils.test import run_replication_test, transports @pytest.mark.parametrize("transport", transports(netcat=False, unprivileged=True)) def test_property_receive(transport): subprocess.call("zfs destroy -r data/src", shell=True) subprocess.call("zfs receive -A data/dst", shell=True) subprocess.call("zfs destroy -r data/dst", shell=True) transport["username"] = "******" subprocess.check_call("zfs create data/src", shell=True) subprocess.check_call("zfs snapshot -r data/src@2021-03-10_12-00", shell=True) subprocess.check_call("zfs set truenas:customproperty=1 data/src", shell=True) subprocess.check_call("zfs snapshot -r data/src@2021-03-10_12-01", shell=True) subprocess.check_call("zfs create data/dst", shell=True) subprocess.check_call("zfs create data/dst/dst", shell=True) subprocess.check_call("zfs allow user receive,create,mount data/dst/dst", shell=True)
auto: false retention-policy: none retries: 1 """)) error = run_replication_test(definition, success=False) assert "Refusing to overwrite existing data" in error.error @pytest.mark.parametrize("recursive", [False, True]) @pytest.mark.parametrize("exclude", [False, True]) @pytest.mark.parametrize("src_has_child", [False, True]) @pytest.mark.parametrize("dst_child_mounted", [False, True]) @pytest.mark.parametrize("dst_child_has_own_contents", [False, True]) @pytest.mark.parametrize("deeply_nested", [False, True]) @pytest.mark.parametrize("transport", transports(netcat=False)) def test_replicate_to_existing_dataset_structure(recursive, exclude, src_has_child, dst_child_mounted, dst_child_has_own_contents, deeply_nested, transport): if not recursive and exclude: return if dst_child_mounted and dst_child_has_own_contents: return subprocess.call("zfs destroy -r data/src", shell=True) subprocess.call("zfs receive -A data/dst", shell=True) subprocess.call("zfs destroy -r data/dst", shell=True) src = "data/src"
from zettarepl.definition.definition import Definition from zettarepl.snapshot.list import list_snapshots from zettarepl.replication.task.task import ReplicationTask from zettarepl.transport.local import LocalShell from zettarepl.utils.itertools import select_by_class from zettarepl.utils.test import transports, wait_replication_tasks_to_complete from zettarepl.zettarepl import Zettarepl @pytest.mark.parametrize("transport,properties", sum([ [ (transport, properties) for properties in [True, False] ] for transport in transports() ], [])) def test_push_replication(transport, properties): subprocess.call("zfs destroy -r data/src", shell=True) subprocess.call("zfs receive -A data/dst", shell=True) subprocess.call("zfs destroy -r data/dst", shell=True) subprocess.check_call("zfs create data/src", shell=True) subprocess.check_call("zfs set test:property=test-value data/src", shell=True) subprocess.check_call("zfs snapshot data/src@2018-10-01_01-00", shell=True) subprocess.check_call("zfs snapshot data/src@2018-10-01_02-00", shell=True) subprocess.check_call("zfs create data/dst", shell=True) definition = yaml.safe_load(textwrap.dedent("""\ timezone: "UTC"