def rm_snaps(*snaps): for s in snaps: cmd.snapshot_rm(s) cmd.snapshot_purge() snap_info_list = cmd.snapshot_info() for s in snaps: assert s not in snap_info_list
def test_snapshot_rm(dev): # NOQA offset = 0 length = 128 snap1_data = common.random_string(length) common.verify_data(dev, offset, snap1_data) snap1 = cmd.snapshot_create() snap2_data = common.random_string(length) common.verify_data(dev, offset, snap2_data) snap2 = cmd.snapshot_create() snap3_data = common.random_string(length) common.verify_data(dev, offset, snap3_data) snap3 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 in snapList assert snap2 in snapList assert snap3 in snapList cmd.snapshot_rm(snap2) readed = read_dev(dev, offset, length) assert readed == snap3_data cmd.snapshot_revert(snap1) readed = read_dev(dev, offset, length) assert readed == snap1_data
def rm_snaps(snaps, url=cmd.CONTROLLER): for s in snaps: cmd.snapshot_rm(s, url) cmd.snapshot_purge(url) snap_info_list = cmd.snapshot_info(url) for s in snaps: assert s not in snap_info_list
def test_snapshot_rm_basic(dev): # NOQA existings = {} snap1 = Snapshot(dev, generate_random_data(existings)) snap2 = Snapshot(dev, generate_random_data(existings)) snap3 = Snapshot(dev, generate_random_data(existings)) info = cmd.snapshot_info() assert len(info) == 4 assert VOLUME_HEAD in info assert snap1.name in info assert snap2.name in info assert snap3.name in info cmd.snapshot_rm(snap2.name) cmd.snapshot_purge() info = cmd.snapshot_info() assert len(info) == 3 assert snap1.name in info assert snap3.name in info snap3.verify_checksum() snap2.verify_data() snap1.verify_data() cmd.snapshot_revert(snap1.name) snap3.refute_data() snap2.refute_data() snap1.verify_checksum()
def rm_snaps(url, snaps): for s in snaps: cmd.snapshot_rm(url, s) cmd.snapshot_purge(url) wait_for_purge_completion(url) snap_info_list = cmd.snapshot_info(url) for s in snaps: assert s not in snap_info_list
def test_snapshot_rm_basic( grpc_controller, # NOQA grpc_replica1, grpc_replica2): # NOQA address = grpc_controller.address dev = get_dev(grpc_replica1, grpc_replica2, grpc_controller) existings = {} snap1 = Snapshot(dev, generate_random_data(existings), address) snap2 = Snapshot(dev, generate_random_data(existings), address) snap3 = Snapshot(dev, generate_random_data(existings), address) info = cmd.snapshot_info(address) assert len(info) == 4 assert VOLUME_HEAD in info assert snap1.name in info assert snap2.name in info assert snap3.name in info cmd.snapshot_rm(address, snap2.name) cmd.snapshot_purge(address) wait_for_purge_completion(address) info = cmd.snapshot_info(address) assert len(info) == 3 assert snap1.name in info assert snap3.name in info snap3.verify_checksum() snap2.verify_data() snap1.verify_data() snapshot_revert_with_frontend(address, ENGINE_NAME, snap1.name) snap3.refute_data() snap2.refute_data() snap1.verify_checksum()
def test_snapshot_rm_basic(dev): # NOQA offset = 0 length = 128 snap1_data = common.random_string(length) common.verify_data(dev, offset, snap1_data) snap1 = cmd.snapshot_create() snap2_data = common.random_string(length) common.verify_data(dev, offset, snap2_data) snap2 = cmd.snapshot_create() snap3_data = common.random_string(length) common.verify_data(dev, offset, snap3_data) snap3 = cmd.snapshot_create() info = cmd.snapshot_info() assert len(info) == 4 assert VOLUME_HEAD in info assert snap1 in info assert snap2 in info assert snap3 in info cmd.snapshot_rm(snap2) cmd.snapshot_purge() info = cmd.snapshot_info() assert len(info) == 3 assert snap1 in info assert snap3 in info readed = read_dev(dev, offset, length) assert readed == snap3_data cmd.snapshot_revert(snap1) readed = read_dev(dev, offset, length) assert readed == snap1_data
def test_snapshot_rm_rolling(dev): # NOQA offset = 0 length = 128 snap1_data = common.random_string(length) common.verify_data(dev, offset, snap1_data) snap1 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 in snapList cmd.snapshot_rm(snap1) snap2_data = common.random_string(length) common.verify_data(dev, offset, snap2_data) snap2 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 not in snapList assert snap2 in snapList # this should trigger real deletion of snap1 cmd.snapshot_rm(snap2) snap3_data = common.random_string(length) common.verify_data(dev, offset, snap3_data) snap3 = cmd.snapshot_create() snap4_data = common.random_string(length) common.verify_data(dev, offset, snap4_data) snap4 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 not in snapList assert snap2 not in snapList assert snap3 in snapList assert snap4 in snapList output = cmd.snapshot_info() info = json.loads(output) assert info[snap3]["size"] == "4096" assert info[snap4]["size"] == "4096" # this should trigger real deletion of snap2 and snap3 cmd.snapshot_rm(snap3) readed = read_dev(dev, offset, length) assert readed == snap4_data
def test_snapshot_rm_rolling(dev): # NOQA offset = 0 length = 128 snap1_data = common.random_string(length) common.verify_data(dev, offset, snap1_data) snap1 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 in snapList cmd.snapshot_rm(snap1) snap2_data = common.random_string(length) common.verify_data(dev, offset, snap2_data) snap2 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 not in snapList assert snap2 in snapList # this should trigger real deletion of snap1 cmd.snapshot_rm(snap2) snap3_data = common.random_string(length) common.verify_data(dev, offset, snap3_data) snap3 = cmd.snapshot_create() snap4_data = common.random_string(length) common.verify_data(dev, offset, snap4_data) snap4 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 not in snapList assert snap2 not in snapList assert snap3 in snapList assert snap4 in snapList # this should trigger real deletion of snap2 and snap3 cmd.snapshot_rm(snap3) readed = read_dev(dev, offset, length) assert readed == snap4_data
def test_snapshot_rm_rolling(dev): # NOQA offset = 0 length = 128 snap1_data = common.random_string(length) common.verify_data(dev, offset, snap1_data) snap1 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 in snapList cmd.snapshot_rm(snap1) # cannot do anything because it's the parent of volume head cmd.snapshot_purge() snap2_data = common.random_string(length) common.verify_data(dev, offset, snap2_data) snap2 = cmd.snapshot_create() info = cmd.snapshot_info() assert len(info) == 3 assert snap1 in info assert info[snap1]["removed"] is True assert snap2 in info assert info[snap2]["removed"] is False cmd.snapshot_rm(snap2) # this should trigger the deletion of snap1 cmd.snapshot_purge() snap3_data = common.random_string(length) common.verify_data(dev, offset, snap3_data) snap3 = cmd.snapshot_create() snap4_data = common.random_string(length) common.verify_data(dev, offset, snap4_data) snap4 = cmd.snapshot_create() snap5_data = common.random_string(length) common.verify_data(dev, offset, snap5_data) snap5 = cmd.snapshot_create() snapList = cmd.snapshot_ls() assert snap1 not in snapList assert snap2 not in snapList assert snap3 in snapList assert snap4 in snapList assert snap5 in snapList info = cmd.snapshot_info() assert len(info) == 5 assert snap1 not in info assert snap2 in info assert info[snap2]["removed"] is True assert snap3 in info assert info[snap3]["size"] == "4096" assert snap4 in info assert info[snap4]["size"] == "4096" assert snap5 in info assert info[snap5]["size"] == "4096" cmd.snapshot_rm(snap3) cmd.snapshot_rm(snap4) cmd.snapshot_rm(snap5) # this should trigger the deletion of snap2 - snap4 # and snap5 marked as removed cmd.snapshot_purge() info = cmd.snapshot_info() assert len(info) == 2 assert snap1 not in info assert snap2 not in info assert snap3 not in info assert snap4 not in info assert snap5 in info assert info[snap5]["removed"] is True assert info[snap5]["size"] == "4096" readed = read_dev(dev, offset, length) assert readed == snap5_data
def test_snapshot_tree_basic(dev): # NOQA offset = 0 length = 128 snap, data = snapshot_tree_build(dev, offset, length) cmd.snapshot_revert(snap["1b"]) cmd.snapshot_rm(snap["0a"]) cmd.snapshot_rm(snap["0b"]) cmd.snapshot_rm(snap["1c"]) cmd.snapshot_rm(snap["2a"]) cmd.snapshot_rm(snap["2b"]) cmd.snapshot_rm(snap["2c"]) cmd.snapshot_rm(snap["3a"]) cmd.snapshot_rm(snap["3b"]) cmd.snapshot_rm(snap["3c"]) cmd.snapshot_purge() # the result should looks like this # snap["0b"](r) -> snap["0c"] # \-> snap["1a"] -> snap["1b"] -> head info = cmd.snapshot_info() assert len(info) == 5 assert snap["0b"] in info assert info[snap["0b"]]["parent"] == "" assert len(info[snap["0b"]]["children"]) == 2 assert snap["0c"] in info[snap["0b"]]["children"] assert snap["1a"] in info[snap["0b"]]["children"] assert info[snap["0b"]]["removed"] is True assert snap["0c"] in info assert info[snap["0c"]]["parent"] == snap["0b"] assert info[snap["0c"]]["children"] == [] assert snap["1a"] in info assert info[snap["1a"]]["parent"] == snap["0b"] assert info[snap["1a"]]["children"] == [snap["1b"]] assert snap["1b"] in info assert info[snap["1b"]]["parent"] == snap["1a"] assert info[snap["1b"]]["children"] == [VOLUME_HEAD] assert VOLUME_HEAD in info assert info[VOLUME_HEAD]["parent"] == snap["1b"] snapshot_tree_verify_node(dev, offset, length, snap, data, "0b") snapshot_tree_verify_node(dev, offset, length, snap, data, "0c") snapshot_tree_verify_node(dev, offset, length, snap, data, "1a") snapshot_tree_verify_node(dev, offset, length, snap, data, "1b")
def test_snapshot_tree_basic( grpc_controller, # NOQA grpc_replica1, grpc_replica2): # NOQA address = grpc_controller.address dev = get_dev(grpc_replica1, grpc_replica2, grpc_controller) offset = 0 length = 128 snap, data = snapshot_tree_build(dev, address, ENGINE_NAME, offset, length) snapshot_revert_with_frontend(address, ENGINE_NAME, snap["1b"]) cmd.snapshot_rm(address, snap["0a"]) cmd.snapshot_rm(address, snap["0b"]) cmd.snapshot_rm(address, snap["1c"]) cmd.snapshot_rm(address, snap["2a"]) cmd.snapshot_rm(address, snap["2b"]) cmd.snapshot_rm(address, snap["2c"]) cmd.snapshot_rm(address, snap["3a"]) cmd.snapshot_rm(address, snap["3b"]) cmd.snapshot_rm(address, snap["3c"]) cmd.snapshot_purge(address) wait_for_purge_completion(address) # the result should looks like this # snap["0b"](r) -> snap["0c"] # \-> snap["1a"] -> snap["1b"] -> head info = cmd.snapshot_info(address) assert len(info) == 5 assert snap["0b"] in info assert info[snap["0b"]]["parent"] == "" assert len(info[snap["0b"]]["children"]) == 2 assert snap["0c"] in info[snap["0b"]]["children"] assert snap["1a"] in info[snap["0b"]]["children"] assert info[snap["0b"]]["removed"] is True assert snap["0c"] in info assert info[snap["0c"]]["parent"] == snap["0b"] assert not info[snap["0c"]]["children"] assert snap["1a"] in info assert info[snap["1a"]]["parent"] == snap["0b"] assert snap["1b"] in info[snap["1a"]]["children"] assert snap["1b"] in info assert info[snap["1b"]]["parent"] == snap["1a"] assert VOLUME_HEAD in info[snap["1b"]]["children"] assert VOLUME_HEAD in info assert info[VOLUME_HEAD]["parent"] == snap["1b"] snapshot_tree_verify_node(dev, address, ENGINE_NAME, offset, length, snap, data, "0b") snapshot_tree_verify_node(dev, address, ENGINE_NAME, offset, length, snap, data, "0c") snapshot_tree_verify_node(dev, address, ENGINE_NAME, offset, length, snap, data, "1a") snapshot_tree_verify_node(dev, address, ENGINE_NAME, offset, length, snap, data, "1b")
def test_snapshot_rm_rolling( grpc_controller, # NOQA grpc_replica1, grpc_replica2): # NOQA address = grpc_controller.address dev = get_dev(grpc_replica1, grpc_replica2, grpc_controller) existings = {} snap1 = Snapshot(dev, generate_random_data(existings), address) snapList = cmd.snapshot_ls(address) assert snap1.name in snapList cmd.snapshot_rm(address, snap1.name) # cannot do anything because it's the parent of volume head cmd.snapshot_purge(address) wait_for_purge_completion(address) snap2 = Snapshot(dev, generate_random_data(existings), address) info = cmd.snapshot_info(address) assert len(info) == 3 assert snap1.name in info assert snap2.name in info assert info[snap1.name]["removed"] is True assert info[snap2.name]["removed"] is False cmd.snapshot_rm(address, snap2.name) # this should trigger the deletion of snap1 cmd.snapshot_purge(address) wait_for_purge_completion(address) snap2.verify_checksum() snap1.verify_data() snap3 = Snapshot(dev, generate_random_data(existings), address) snap4 = Snapshot(dev, generate_random_data(existings), address) snap5 = Snapshot(dev, generate_random_data(existings), address) snapList = cmd.snapshot_ls(address) assert snap1.name not in snapList assert snap2.name not in snapList assert snap3.name in snapList assert snap4.name in snapList assert snap5.name in snapList info = cmd.snapshot_info(address) assert len(info) == 5 assert snap1.name not in info assert snap2.name in info assert snap3.name in info assert snap4.name in info assert snap5.name in info assert info[snap2.name]["removed"] is True cmd.snapshot_rm(address, snap3.name) cmd.snapshot_rm(address, snap4.name) cmd.snapshot_rm(address, snap5.name) # this should trigger the deletion of snap2 - snap4 # and snap5 marked as removed cmd.snapshot_purge(address) wait_for_purge_completion(address) info = cmd.snapshot_info(address) assert len(info) == 2 assert snap1.name not in info assert snap2.name not in info assert snap3.name not in info assert snap4.name not in info assert snap5.name in info assert info[snap5.name]["removed"] is True snap5.verify_checksum() snap4.verify_data() snap3.verify_data() snap2.verify_data() snap1.verify_data()
def test_snapshot_rm_rolling(dev): # NOQA existings = {} snap1 = Snapshot(dev, generate_random_data(existings)) snapList = cmd.snapshot_ls() assert snap1.name in snapList cmd.snapshot_rm(snap1.name) # cannot do anything because it's the parent of volume head cmd.snapshot_purge() snap2 = Snapshot(dev, generate_random_data(existings)) info = cmd.snapshot_info() assert len(info) == 3 assert snap1.name in info assert snap2.name in info assert info[snap1.name]["removed"] is True assert info[snap2.name]["removed"] is False cmd.snapshot_rm(snap2.name) # this should trigger the deletion of snap1 cmd.snapshot_purge() snap2.verify_checksum() snap1.verify_data() snap3 = Snapshot(dev, generate_random_data(existings)) snap4 = Snapshot(dev, generate_random_data(existings)) snap5 = Snapshot(dev, generate_random_data(existings)) snapList = cmd.snapshot_ls() assert snap1.name not in snapList assert snap2.name not in snapList assert snap3.name in snapList assert snap4.name in snapList assert snap5.name in snapList info = cmd.snapshot_info() assert len(info) == 5 assert snap1.name not in info assert snap2.name in info assert snap3.name in info assert snap4.name in info assert snap5.name in info assert info[snap2.name]["removed"] is True cmd.snapshot_rm(snap3.name) cmd.snapshot_rm(snap4.name) cmd.snapshot_rm(snap5.name) # this should trigger the deletion of snap2 - snap4 # and snap5 marked as removed cmd.snapshot_purge() info = cmd.snapshot_info() assert len(info) == 2 assert snap1.name not in info assert snap2.name not in info assert snap3.name not in info assert snap4.name not in info assert snap5.name in info assert info[snap5.name]["removed"] is True snap5.verify_checksum() snap4.verify_data() snap3.verify_data() snap2.verify_data() snap1.verify_data()