Commit 35db02d2 authored by Pawel Kaminski's avatar Pawel Kaminski Committed by Tomasz Zawadzki
Browse files

test/lvol: rewrite rename_lvs_nonexistent and rename_lvs_EEXIST to bash



Change-Id: Ida7b005e62d8798333ba57e9b1ef2e9f9ae81fb7
Signed-off-by: default avatarPawel Kaminski <pawelx.kaminski@intel.com>
Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/700


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent 48a373f4
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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',
+89 −0
Original line number Diff line number Diff line
@@ -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
+0 −122
Original line number Diff line number Diff line
@@ -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):
        """