Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
# -*- 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"
Ejemplo n.º 4
0
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"