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