diff --git a/test/lvol/basic.sh b/test/lvol/basic.sh index 285e391cf..a3ebedab5 100755 --- a/test/lvol/basic.sh +++ b/test/lvol/basic.sh @@ -54,6 +54,67 @@ function test_construct_lvol() { rpc_cmd bdev_malloc_delete "$malloc_name" } +# create lvs + multiple lvols, verify their params +function test_construct_multi_lvols() { + # create an lvol store + malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS) + lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test) + + # create 4 lvols + lvol_size_mb=$(( LVS_DEFAULT_CAPACITY_MB / 4 )) + # round down lvol size to the nearest cluster size boundary + lvol_size_mb=$(( lvol_size_mb / LVS_DEFAULT_CLUSTER_SIZE_MB * LVS_DEFAULT_CLUSTER_SIZE_MB )) + lvol_size=$(( lvol_size_mb * 1024 * 1024 )) + for i in $(seq 1 4); do + lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" "lvol_test${i}" "$lvol_size_mb") + lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid") + + [ "$(jq -r '.[0].name' <<< "$lvol")" = "$lvol_uuid" ] + [ "$(jq -r '.[0].uuid' <<< "$lvol")" = "$lvol_uuid" ] + [ "$(jq -r '.[0].aliases[0]' <<< "$lvol")" = "lvs_test/lvol_test${i}" ] + [ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ] + [ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$(( lvol_size / MALLOC_BS ))" ] + done + + lvols=$(rpc_cmd bdev_get_bdevs | jq -r '[ .[] | select(.product_name == "Logical Volume") ]') + [ "$(jq length <<< "$lvols")" == "4" ] + + # remove all lvols + for i in $(seq 0 3); do + lvol_uuid=$(jq -r ".[$i].name" <<< "$lvols") + rpc_cmd bdev_lvol_delete "$lvol_uuid" + done + lvols=$(rpc_cmd bdev_get_bdevs | jq -r '[ .[] | select(.product_name == "Logical Volume") ]') + [ "$(jq length <<< "$lvols")" == "0" ] + + # create the same 4 lvols again and perform the same checks + for i in $(seq 1 4); do + lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" "lvol_test${i}" "$lvol_size_mb") + lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid") + + [ "$(jq -r '.[0].name' <<< "$lvol")" = "$lvol_uuid" ] + [ "$(jq -r '.[0].uuid' <<< "$lvol")" = "$lvol_uuid" ] + [ "$(jq -r '.[0].aliases[0]' <<< "$lvol")" = "lvs_test/lvol_test${i}" ] + [ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ] + [ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$(( lvol_size / MALLOC_BS ))" ] + done + + lvols=$(rpc_cmd bdev_get_bdevs | jq -r '[ .[] | select(.product_name == "Logical Volume") ]') + [ "$(jq length <<< "$lvols")" == "4" ] + + # clean up + for i in $(seq 0 3); do + lvol_uuid=$(jq -r ".[$i].name" <<< "$lvols") + rpc_cmd bdev_lvol_delete "$lvol_uuid" + done + lvols=$(rpc_cmd bdev_get_bdevs | jq -r '[ .[] | select(.product_name == "Logical Volume") ]') + [ "$(jq length <<< "$lvols")" == "0" ] + + rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid" + ! rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid" + rpc_cmd bdev_malloc_delete "$malloc_name" +} + $rootdir/app/spdk_tgt/spdk_tgt & spdk_pid=$! trap 'killprocess "$spdk_pid"; exit 1' SIGINT SIGTERM EXIT @@ -61,6 +122,7 @@ waitforlisten $spdk_pid run_lvol_test test_construct_lvs run_lvol_test test_construct_lvol +run_lvol_test test_construct_multi_lvols trap - SIGINT SIGTERM EXIT killprocess $spdk_pid diff --git a/test/lvol/lvol.sh b/test/lvol/lvol.sh index c781583b4..b7793cba3 100755 --- a/test/lvol/lvol.sh +++ b/test/lvol/lvol.sh @@ -21,7 +21,6 @@ function usage() { echo " --block-size Block size for this bdev" echo "-x set -x for script debug" echo " --test-cases= List test cases which will be run: - 51: 'construct_multi_logical_volumes_positive', 52: 'bdev_lvol_create_using_name_positive', 53: 'bdev_lvol_create_duplicate_names_positive', 100: 'construct_logical_volume_nonexistent_lvs_uuid', diff --git a/test/lvol/test_cases.py b/test/lvol/test_cases.py index 5f72e5aae..6cbf79e0f 100644 --- a/test/lvol/test_cases.py +++ b/test/lvol/test_cases.py @@ -111,7 +111,6 @@ def case_message(func): def inner(*args, **kwargs): test_name = { # bdev_lvol_create - positive tests - 51: 'construct_multi_logical_volumes_positive', 52: 'bdev_lvol_create_using_name_positive', 53: 'bdev_lvol_create_duplicate_names_positive', # bdev_lvol_create - negative tests @@ -311,50 +310,6 @@ class TestCases(object): lvs = self.c.bdev_lvol_get_lvstores(lvs_name)[0] return int(int(lvs['cluster_size']) / MEGABYTE) - @case_message - def test_case51(self): - """ - construct_multi_logical_volumes_positive - - Positive test for constructing a multi logical volumes. - Call bdev_lvol_create with correct lvol store UUID and - size is equal one quarter of the this bdev size. - """ - # Create malloc bdev - base_name = self.c.bdev_malloc_create(self.total_size, - self.block_size) - # Construct lvol store on correct, exisitng malloc bdev - uuid_store = self.c.bdev_lvol_create_lvstore(base_name, - self.lvs_name) - # Verify lvol store was created correctly - fail_count = self.c.check_bdev_lvol_get_lvstores(base_name, uuid_store, - self.cluster_size) - size = self.get_lvs_divided_size(4) - - # Repeat two times: - # - construct four lvol bdevs with 25% size of lvs size - # - verify if every lvol bdev was created correctly - # - delete four lvol bdevs - for j in range(2): - uuid_bdevs = [] - for i in range(4): - uuid_bdev = self.c.bdev_lvol_create(uuid_store, - self.lbd_name + str(i), - size) - uuid_bdevs.append(uuid_bdev) - fail_count += self.c.check_bdev_get_bdevs_methods(uuid_bdev, size) - - for uuid_bdev in uuid_bdevs: - self.c.bdev_lvol_delete(uuid_bdev) - - self.c.bdev_lvol_delete_lvstore(uuid_store) - self.c.bdev_malloc_delete(base_name) - - # Expected result: - # - calls successful, return code = 0 - # - no other operation fails - return fail_count - @case_message def test_case52(self): """