github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/integration/data/test_backup.py (about)

     1  import subprocess
     2  
     3  import pytest
     4  
     5  import cmd
     6  import common
     7  from common import dev, backing_dev  # NOQA
     8  from common import read_dev, read_from_backing_file, BACKUP_DEST
     9  
    10  VOLUME_NAME = 'test-volume'
    11  VOLUME_SIZE = str(4 * 1024 * 1024)  # 4M
    12  
    13  
    14  def test_backup(dev):  # NOQA
    15      offset = 0
    16      length = 128
    17  
    18      snap1_data = common.random_string(length)
    19      common.verify_data(dev, offset, snap1_data)
    20      snap1 = cmd.snapshot_create()
    21  
    22      backup1 = cmd.backup_create(snap1, BACKUP_DEST)
    23      backup1_info = cmd.backup_inspect(backup1)
    24      assert backup1_info["BackupURL"] == backup1
    25      assert backup1_info["VolumeName"] == VOLUME_NAME
    26      assert backup1_info["VolumeSize"] == VOLUME_SIZE
    27      assert snap1 in backup1_info["SnapshotName"]
    28  
    29      snap2_data = common.random_string(length)
    30      common.verify_data(dev, offset, snap2_data)
    31      snap2 = cmd.snapshot_create()
    32  
    33      backup2 = cmd.backup_create(snap2, BACKUP_DEST)
    34      backup2_info = cmd.backup_inspect(backup2)
    35      assert backup2_info["BackupURL"] == backup2
    36      assert backup2_info["VolumeName"] == VOLUME_NAME
    37      assert backup2_info["VolumeSize"] == VOLUME_SIZE
    38      assert snap2 in backup2_info["SnapshotName"]
    39  
    40      snap3_data = common.random_string(length)
    41      common.verify_data(dev, offset, snap3_data)
    42      snap3 = cmd.snapshot_create()
    43  
    44      backup3 = cmd.backup_create(snap3, BACKUP_DEST)
    45      backup3_info = cmd.backup_inspect(backup3)
    46      assert backup3_info["BackupURL"] == backup3
    47      assert backup3_info["VolumeName"] == VOLUME_NAME
    48      assert backup3_info["VolumeSize"] == VOLUME_SIZE
    49      assert snap3 in backup3_info["SnapshotName"]
    50  
    51      cmd.backup_restore(backup3)
    52      readed = read_dev(dev, offset, length)
    53      assert readed == snap3_data
    54  
    55      cmd.backup_rm(backup3)
    56      with pytest.raises(subprocess.CalledProcessError):
    57          cmd.backup_restore(backup3)
    58      with pytest.raises(subprocess.CalledProcessError) as e:
    59          cmd.backup_inspect(backup3)
    60          assert 'cannot find' in str(e.value)
    61  
    62      cmd.backup_restore(backup1)
    63      readed = read_dev(dev, offset, length)
    64      assert readed == snap1_data
    65  
    66      cmd.backup_rm(backup1)
    67      with pytest.raises(subprocess.CalledProcessError):
    68          cmd.backup_restore(backup1)
    69      with pytest.raises(subprocess.CalledProcessError) as e:
    70          cmd.backup_inspect(backup1)
    71          assert 'cannot find' in str(e.value)
    72  
    73      cmd.backup_restore(backup2)
    74      readed = read_dev(dev, offset, length)
    75      assert readed == snap2_data
    76  
    77      cmd.backup_rm(backup2)
    78      with pytest.raises(subprocess.CalledProcessError):
    79          cmd.backup_restore(backup2)
    80      with pytest.raises(subprocess.CalledProcessError) as e:
    81          cmd.backup_inspect(backup2)
    82          assert 'cannot find' in str(e.value)
    83  
    84  
    85  def test_backup_with_backing_file(backing_dev):  # NOQA
    86      dev = backing_dev  # NOQA
    87  
    88      offset = 0
    89      length = 256
    90  
    91      snap0 = cmd.snapshot_create()
    92      before = read_dev(dev, offset, length)
    93      assert before != ""
    94  
    95      exists = read_from_backing_file(offset, length)
    96      assert before == exists
    97  
    98      backup0 = cmd.backup_create(snap0, BACKUP_DEST)
    99      backup0_info = cmd.backup_inspect(backup0)
   100      assert backup0_info["BackupURL"] == backup0
   101      assert backup0_info["VolumeName"] == VOLUME_NAME
   102      assert backup0_info["VolumeSize"] == VOLUME_SIZE
   103      assert snap0 in backup0_info["SnapshotName"]
   104  
   105      test_backup(dev)
   106  
   107      cmd.backup_restore(backup0)
   108      after = read_dev(dev, offset, length)
   109      assert before == after
   110  
   111      cmd.backup_rm(backup0)
   112      with pytest.raises(subprocess.CalledProcessError):
   113          cmd.backup_restore(backup0)
   114      with pytest.raises(subprocess.CalledProcessError) as e:
   115          cmd.backup_inspect(backup0)
   116          assert 'cannot find' in str(e.value)
   117  
   118  
   119  def test_backup_hole_with_backing_file(backing_dev):  # NOQA
   120      dev = backing_dev  # NOQA
   121  
   122      offset1 = 512
   123      length1 = 256
   124  
   125      offset2 = 640
   126      length2 = 256
   127  
   128      boundary_offset = 0
   129      boundary_length = 4100  # just pass 4096 into next 4k
   130  
   131      hole_offset = 2 * 1024 * 1024
   132      hole_length = 1024
   133  
   134      snap1_data = common.random_string(length1)
   135      common.verify_data(dev, offset1, snap1_data)
   136      snap1 = cmd.snapshot_create()
   137  
   138      boundary_data_backup1 = read_dev(dev, boundary_offset, boundary_length)
   139      hole_data_backup1 = read_dev(dev, hole_offset, hole_length)
   140      backup1 = cmd.backup_create(snap1, BACKUP_DEST)
   141  
   142      snap2_data = common.random_string(length2)
   143      common.verify_data(dev, offset2, snap2_data)
   144      snap2 = cmd.snapshot_create()
   145  
   146      boundary_data_backup2 = read_dev(dev, boundary_offset, boundary_length)
   147      hole_data_backup2 = read_dev(dev, hole_offset, hole_length)
   148      backup2 = cmd.backup_create(snap2, BACKUP_DEST)
   149  
   150      cmd.backup_restore(backup1)
   151      readed = read_dev(dev, boundary_offset, boundary_length)
   152      assert readed == boundary_data_backup1
   153      readed = read_dev(dev, hole_offset, hole_length)
   154      assert readed == hole_data_backup1
   155  
   156      cmd.backup_restore(backup2)
   157      readed = read_dev(dev, boundary_offset, boundary_length)
   158      assert readed == boundary_data_backup2
   159      readed = read_dev(dev, hole_offset, hole_length)
   160      assert readed == hole_data_backup2