From 35db02d253cb4ef4e278fa59d2781b4cabca575a Mon Sep 17 00:00:00 2001 From: Pawel Kaminski Date: Tue, 10 Dec 2019 11:59:42 -0500 Subject: [PATCH] test/lvol: rewrite rename_lvs_nonexistent and rename_lvs_EEXIST to bash Change-Id: Ida7b005e62d8798333ba57e9b1ef2e9f9ae81fb7 Signed-off-by: Pawel Kaminski Signed-off-by: Michal Berger Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/700 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki --- test/lvol/lvol.sh | 2 - test/lvol/rename.sh | 89 +++++++++++++++++++++++++++++ test/lvol/test_cases.py | 122 ---------------------------------------- 3 files changed, 89 insertions(+), 124 deletions(-) diff --git a/test/lvol/lvol.sh b/test/lvol/lvol.sh index e2742776c..21426e923 100755 --- a/test/lvol/lvol.sh +++ b/test/lvol/lvol.sh @@ -35,8 +35,6 @@ function usage() { 653: 'thin_provisioning_resize', 654: 'thin_overprovisioning', 655: 'thin_provisioning_filling_disks_less_than_lvs_size', - 801: 'rename_lvs_nonexistent', - 802: 'rename_lvs_EEXIST', 803: 'bdev_lvol_rename_nonexistent', 804: 'bdev_lvol_rename_EEXIST', 850: 'clear_method_none', diff --git a/test/lvol/rename.sh b/test/lvol/rename.sh index 47773febf..e929f4129 100755 --- a/test/lvol/rename.sh +++ b/test/lvol/rename.sh @@ -81,12 +81,101 @@ function test_rename_positive() { check_leftover_devices } +# Negative test case for lvol store rename. +# Check that error is returned when trying to rename not existing lvol store. +# Check that error is returned when trying to rename to a name which is already +# used by another lvol store. +function test_rename_lvs_negative() { + # Call bdev_lvol_rename_lvstore with name pointing to not existing lvol store + rpc_cmd bdev_lvol_rename_lvstore NOTEXIST WHATEVER && false + + # Construct two malloc bdevs + malloc_name1=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS) + malloc_name2=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS) + + # Create lvol store on each malloc bdev + lvs_uuid1=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name1" lvs_test1) + lvs_uuid2=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name2" lvs_test2) + + # Create lists with lvol bdev names and aliases for later use + bdev_names_1=("lvol_test_1_"{0..3}) + bdev_names_2=("lvol_test_2_"{0..3}) + bdev_aliases_1=("lvs_test1/lvol_test_1_"{0..3}) + bdev_aliases_2=("lvs_test2/lvol_test_2_"{0..3}) + + # Calculate size and create two lvol bdevs on top + lvol_size_mb=$( round_down $(( LVS_DEFAULT_CAPACITY_MB / 4 )) ) + lvol_size=$(( lvol_size_mb * 1024 * 1024 )) + + # # Create 4 lvol bdevs on top of each lvol store + bdev_uuids_1=() + bdev_uuids_2=() + for i in "${!bdev_names_1[@]}"; do + lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid1" "${bdev_names_1[i]}" "$lvol_size_mb") + lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid") + [ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid1" ] + [ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ] + [ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$(( lvol_size / MALLOC_BS ))" ] + [ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_1[i]}'"]')" ] + bdev_uuids_1+=("$lvol_uuid") + + lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid2" "${bdev_names_2[i]}" "$lvol_size_mb") + lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid") + [ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid2" ] + [ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ] + [ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$(( lvol_size / MALLOC_BS ))" ] + [ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_2[i]}'"]')" ] + bdev_uuids_2+=("$lvol_uuid") + done + + # Call bdev_lvol_rename_lvstore on first lvol store and try to change its name to + # the same name as used by second lvol store + rpc_cmd bdev_lvol_rename_lvstore lvs_test1 lvs_test2 && false + + # Verify that names of lvol stores and lvol bdevs did not change + lvs=$(rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid1") + [ "$(jq -r '.[0].uuid' <<< "$lvs")" = "$lvs_uuid1" ] + [ "$(jq -r '.[0].name' <<< "$lvs")" = "lvs_test1" ] + [ "$(jq -r '.[0].base_bdev' <<< "$lvs")" = "$malloc_name1" ] + [ "$(jq -r '.[0].cluster_size' <<< "$lvs")" = "$LVS_DEFAULT_CLUSTER_SIZE" ] + lvs=$(rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid2") + [ "$(jq -r '.[0].uuid' <<< "$lvs")" = "$lvs_uuid2" ] + [ "$(jq -r '.[0].name' <<< "$lvs")" = "lvs_test2" ] + [ "$(jq -r '.[0].base_bdev' <<< "$lvs")" = "$malloc_name2" ] + [ "$(jq -r '.[0].cluster_size' <<< "$lvs")" = "$LVS_DEFAULT_CLUSTER_SIZE" ] + + for i in "${!bdev_uuids_1[@]}"; do + lvol=$(rpc_cmd bdev_get_bdevs -b "${bdev_uuids_1[i]}") + [ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid1" ] + [ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ] + [ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$(( lvol_size / MALLOC_BS ))" ] + [ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_1[i]}'"]')" ] + + lvol=$(rpc_cmd bdev_get_bdevs -b "${bdev_uuids_2[i]}") + [ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid2" ] + [ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ] + [ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$(( lvol_size / MALLOC_BS ))" ] + [ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_2[i]}'"]')" ] + done + + # Clean up + for bdev in "${bdev_aliases_1[@]}" "${bdev_alisaes_2[@]}"; do + rpc_cmd bdev_lvol_delete "$bdev" + done + rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid1" + rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid2" + rpc_cmd bdev_malloc_delete "$malloc_name1" + rpc_cmd bdev_malloc_delete "$malloc_name2" + check_leftover_devices +} + $rootdir/app/spdk_tgt/spdk_tgt & spdk_pid=$! trap 'killprocess "$spdk_pid"; exit 1' SIGINT SIGTERM EXIT waitforlisten $spdk_pid run_test "test_rename_positive" test_rename_positive +run_test "test_rename_lvs_negative" test_rename_lvs_negative trap - SIGINT SIGTERM EXIT killprocess $spdk_pid diff --git a/test/lvol/test_cases.py b/test/lvol/test_cases.py index aa34232c1..afdf45991 100644 --- a/test/lvol/test_cases.py +++ b/test/lvol/test_cases.py @@ -126,8 +126,6 @@ def case_message(func): 654: 'thin_overprovisioning', 655: 'thin_provisioning_filling_disks_less_than_lvs_size', # logical volume rename tests - 801: 'rename_lvs_nonexistent', - 802: 'rename_lvs_EEXIST', 803: 'bdev_lvol_rename_nonexistent', 804: 'bdev_lvol_rename_EEXIST', # logical volume clear_method test @@ -973,126 +971,6 @@ class TestCases(object): # - no other operation fails return fail_count - @case_message - def test_case801(self): - """ - rename_lvs_nonexistent - - Negative test case for lvol store rename. - Check that error is returned when trying to rename not existing lvol store. - """ - fail_count = 0 - # Call bdev_lvol_rename_lvstore with name pointing to not existing lvol store - if self.c.bdev_lvol_rename_lvstore("NOTEXIST", "WHATEVER") == 0: - fail_count += 1 - - # Expected results: - # - bdev_lvol_rename_lvstore return code != 0 - # - no other operation fails - return fail_count - - @case_message - def test_case802(self): - """ - rename_lvs_EEXIST - - Negative test case for lvol store rename. - Check that error is returned when trying to rename to a name which is already - used by another lvol store. - """ - fail_count = 0 - - lvs_name_1 = "lvs_1" - lvs_name_2 = "lvs_2" - - # Create lists with lvol bdev names and aliases for later use - bdev_names_1 = ["lvol_1_" + str(i) for i in range(4)] - bdev_aliases_1 = ["/".join([lvs_name_1, name]) for name in bdev_names_1] - bdev_uuids_1 = [] - bdev_names_2 = ["lvol_2_" + str(i) for i in range(4)] - bdev_aliases_2 = ["/".join([lvs_name_2, name]) for name in bdev_names_2] - bdev_uuids_2 = [] - - # Construct two malloc bdevs - base_bdev_1 = self.c.bdev_malloc_create(self.total_size, - self.block_size) - base_bdev_2 = self.c.bdev_malloc_create(self.total_size, - self.block_size) - - # Create lvol store on each malloc bdev - lvs_uuid_1 = self.c.bdev_lvol_create_lvstore(base_bdev_1, - lvs_name_1) - fail_count += self.c.check_bdev_lvol_get_lvstores(base_bdev_1, - lvs_uuid_1, - self.cluster_size, - lvs_name_1) - lvs_uuid_2 = self.c.bdev_lvol_create_lvstore(base_bdev_2, - lvs_name_2) - fail_count += self.c.check_bdev_lvol_get_lvstores(base_bdev_2, - lvs_uuid_2, - self.cluster_size, - lvs_name_2) - - # Create 4 lvol bdevs on top of each lvol store - bdev_size_1 = self.get_lvs_divided_size(4, lvs_name_1) - bdev_size_2 = self.get_lvs_divided_size(4, lvs_name_2) - for name, alias in zip(bdev_names_1, bdev_aliases_1): - uuid = self.c.bdev_lvol_create(lvs_uuid_1, - name, - bdev_size_1) - fail_count += self.c.check_bdev_get_bdevs_methods(uuid, - bdev_size_1, - alias) - bdev_uuids_1.append(uuid) - for name, alias in zip(bdev_names_2, bdev_aliases_2): - uuid = self.c.bdev_lvol_create(lvs_uuid_2, - name, - bdev_size_2) - fail_count += self.c.check_bdev_get_bdevs_methods(uuid, - bdev_size_2, - alias) - bdev_uuids_2.append(uuid) - - # Call bdev_lvol_rename_lvstore on first lvol store and try to change its name to - # the same name as used by second lvol store - if self.c.bdev_lvol_rename_lvstore(lvs_name_1, lvs_name_2) == 0: - fail_count += 1 - - # Verify that names of lvol stores and lvol bdevs did not change - fail_count += self.c.check_bdev_lvol_get_lvstores(base_bdev_1, - lvs_uuid_1, - self.cluster_size, - lvs_name_1) - fail_count += self.c.check_bdev_lvol_get_lvstores(base_bdev_2, - lvs_uuid_2, - self.cluster_size, - lvs_name_2) - - for name, alias, uuid in zip(bdev_names_1, bdev_aliases_1, bdev_uuids_1): - fail_count += self.c.check_bdev_get_bdevs_methods(uuid, - bdev_size_1, - alias) - - for name, alias, uuid in zip(bdev_names_2, bdev_aliases_2, bdev_uuids_2): - fail_count += self.c.check_bdev_get_bdevs_methods(uuid, - bdev_size_2, - alias) - - # Clean configuration - for lvol_uuid in bdev_uuids_1 + bdev_uuids_2: - fail_count += self.c.bdev_lvol_delete(lvol_uuid) - fail_count += self.c.bdev_lvol_delete_lvstore(lvs_uuid_1) - fail_count += self.c.bdev_lvol_delete_lvstore(lvs_uuid_2) - fail_count += self.c.bdev_malloc_delete(base_bdev_1) - fail_count += self.c.bdev_malloc_delete(base_bdev_2) - - # Expected results: - # - bdev_lvol_rename_lvstore return code != 0; not possible to rename to already - # used name - # - no other operation fails - - return fail_count - @case_message def test_case803(self): """