xref: /spdk/test/lvol/rename.sh (revision eb53c23236cccb6b698b7ca70ee783da1c574b5f)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2019 Intel Corporation
4#  All rights reserved.
5#
6testdir=$(readlink -f $(dirname $0))
7rootdir=$(readlink -f $testdir/../..)
8source $rootdir/test/common/autotest_common.sh
9source $rootdir/test/lvol/common.sh
10
11# Positive test for lvol store and lvol bdev rename.
12function test_rename_positive() {
13	malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
14	lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
15	bdev_name=("lvol_test"{0..3})
16	bdev_aliases=("lvs_test/lvol_test"{0..3})
17
18	# Calculate size and create two lvol bdevs on top
19	lvol_size_mb=$(round_down $((LVS_DEFAULT_CAPACITY_MB / 4)))
20	lvol_size=$((lvol_size_mb * 1024 * 1024))
21
22	# Create 4 lvol bdevs on top of previously created lvol store
23	bdev_uuids=()
24	for i in "${!bdev_name[@]}"; do
25		lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" "${bdev_name[i]}" "$lvol_size_mb")
26		lvol=$(rpc_cmd bdev_get_bdevs -b $lvol_uuid)
27		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid" ]
28		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
29		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
30		[ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases[i]}'"]')" ]
31		bdev_uuids+=("$lvol_uuid")
32	done
33
34	# Rename lvol store and check if lvol store name and
35	# lvol bdev aliases were updated properly
36	new_lvs_name="lvs_new"
37	bdev_aliases=("$new_lvs_name/lvol_test"{0..3})
38
39	rpc_cmd bdev_lvol_rename_lvstore lvs_test "$new_lvs_name"
40
41	lvs=$(rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid")
42
43	# verify it's there
44	[ "$(jq -r '.[0].uuid' <<< "$lvs")" = "$lvs_uuid" ]
45	[ "$(jq -r '.[0].name' <<< "$lvs")" = "$new_lvs_name" ]
46	[ "$(jq -r '.[0].base_bdev' <<< "$lvs")" = "$malloc_name" ]
47
48	# verify some of its parameters
49	cluster_size=$(jq -r '.[0].cluster_size' <<< "$lvs")
50	[ "$cluster_size" = "$LVS_DEFAULT_CLUSTER_SIZE" ]
51	total_clusters=$(jq -r '.[0].total_data_clusters' <<< "$lvs")
52	[ "$((total_clusters * cluster_size))" = "$LVS_DEFAULT_CAPACITY" ]
53
54	for i in "${!bdev_uuids[@]}"; do
55		lvol=$(rpc_cmd bdev_get_bdevs -b "${bdev_uuids[i]}")
56		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid" ]
57		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
58		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
59		[ "$(jq -r '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases[i]}'"]')" ]
60	done
61
62	# Now try to rename the bdevs using their uuid as "old_name"
63	# Verify that all bdev names were successfully updated
64	bdev_names=("lbd_new"{0..3})
65	new_bdev_aliases=()
66	for bdev_name in "${bdev_names[@]}"; do
67		new_bdev_aliases+=("$new_lvs_name/$bdev_name")
68	done
69	for i in "${!bdev_names[@]}"; do
70		rpc_cmd bdev_lvol_rename "${bdev_aliases[i]}" "${bdev_names[i]}"
71		lvol=$(rpc_cmd bdev_get_bdevs -b "${bdev_uuids[i]}")
72		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid" ]
73		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
74		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
75		[ "$(jq -r '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${new_bdev_aliases[i]}'"]')" ]
76	done
77
78	# Clean up
79	for bdev in "${new_bdev_aliases[@]}"; do
80		rpc_cmd bdev_lvol_delete "$bdev"
81	done
82	rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
83	rpc_cmd bdev_malloc_delete "$malloc_name"
84	check_leftover_devices
85}
86
87# Negative test case for lvol store rename.
88# Check that error is returned when trying to rename not existing lvol store.
89# Check that error is returned when trying to rename to a name which is already
90# used by another lvol store.
91function test_rename_lvs_negative() {
92	# Call bdev_lvol_rename_lvstore with name pointing to not existing lvol store
93	rpc_cmd bdev_lvol_rename_lvstore NOTEXIST WHATEVER && false
94
95	# Construct two malloc bdevs
96	malloc_name1=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
97	malloc_name2=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
98
99	# Create lvol store on each malloc bdev
100	lvs_uuid1=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name1" lvs_test1)
101	lvs_uuid2=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name2" lvs_test2)
102
103	# Create lists with lvol bdev names and aliases for later use
104	bdev_names_1=("lvol_test_1_"{0..3})
105	bdev_names_2=("lvol_test_2_"{0..3})
106	bdev_aliases_1=("lvs_test1/lvol_test_1_"{0..3})
107	bdev_aliases_2=("lvs_test2/lvol_test_2_"{0..3})
108
109	# Calculate size and create two lvol bdevs on top
110	lvol_size_mb=$(round_down $((LVS_DEFAULT_CAPACITY_MB / 4)))
111	lvol_size=$((lvol_size_mb * 1024 * 1024))
112
113	# # Create 4 lvol bdevs on top of each lvol store
114	bdev_uuids_1=()
115	bdev_uuids_2=()
116	for i in "${!bdev_names_1[@]}"; do
117		lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid1" "${bdev_names_1[i]}" "$lvol_size_mb")
118		lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
119		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid1" ]
120		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
121		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
122		[ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_1[i]}'"]')" ]
123		bdev_uuids_1+=("$lvol_uuid")
124
125		lvol_uuid=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid2" "${bdev_names_2[i]}" "$lvol_size_mb")
126		lvol=$(rpc_cmd bdev_get_bdevs -b "$lvol_uuid")
127		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid2" ]
128		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
129		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
130		[ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_2[i]}'"]')" ]
131		bdev_uuids_2+=("$lvol_uuid")
132	done
133
134	# Call bdev_lvol_rename_lvstore on first lvol store and try to change its name to
135	# the same name as used by second lvol store
136	rpc_cmd bdev_lvol_rename_lvstore lvs_test1 lvs_test2 && false
137
138	# Verify that names of lvol stores and lvol bdevs did not change
139	lvs=$(rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid1")
140	[ "$(jq -r '.[0].uuid' <<< "$lvs")" = "$lvs_uuid1" ]
141	[ "$(jq -r '.[0].name' <<< "$lvs")" = "lvs_test1" ]
142	[ "$(jq -r '.[0].base_bdev' <<< "$lvs")" = "$malloc_name1" ]
143	[ "$(jq -r '.[0].cluster_size' <<< "$lvs")" = "$LVS_DEFAULT_CLUSTER_SIZE" ]
144	lvs=$(rpc_cmd bdev_lvol_get_lvstores -u "$lvs_uuid2")
145	[ "$(jq -r '.[0].uuid' <<< "$lvs")" = "$lvs_uuid2" ]
146	[ "$(jq -r '.[0].name' <<< "$lvs")" = "lvs_test2" ]
147	[ "$(jq -r '.[0].base_bdev' <<< "$lvs")" = "$malloc_name2" ]
148	[ "$(jq -r '.[0].cluster_size' <<< "$lvs")" = "$LVS_DEFAULT_CLUSTER_SIZE" ]
149
150	for i in "${!bdev_uuids_1[@]}"; do
151		lvol=$(rpc_cmd bdev_get_bdevs -b "${bdev_uuids_1[i]}")
152		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid1" ]
153		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
154		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
155		[ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_1[i]}'"]')" ]
156
157		lvol=$(rpc_cmd bdev_get_bdevs -b "${bdev_uuids_2[i]}")
158		[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid2" ]
159		[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
160		[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
161		[ "$(jq '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["'${bdev_aliases_2[i]}'"]')" ]
162	done
163
164	# Clean up
165	for bdev in "${bdev_aliases_1[@]}" "${bdev_aliases_2[@]}"; do
166		rpc_cmd bdev_lvol_delete "$bdev"
167	done
168	rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid1"
169	rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid2"
170	rpc_cmd bdev_malloc_delete "$malloc_name1"
171	rpc_cmd bdev_malloc_delete "$malloc_name2"
172	check_leftover_devices
173}
174
175# Negative test case for lvol bdev rename.
176# Check that error is returned when trying to rename not existing lvol bdev
177# Check that error is returned when trying to rename to a name which is already
178# used by another lvol bdev.
179function test_lvol_rename_negative() {
180	# Call bdev_lvol_rename with name pointing to not existing lvol bdev
181	rpc_cmd bdev_lvol_rename NOTEXIST WHATEVER && false
182
183	malloc_name=$(rpc_cmd bdev_malloc_create $MALLOC_SIZE_MB $MALLOC_BS)
184	lvs_uuid=$(rpc_cmd bdev_lvol_create_lvstore "$malloc_name" lvs_test)
185
186	# Calculate lvol bdev size
187	lvol_size_mb=$(round_down $((LVS_DEFAULT_CAPACITY_MB / 2)))
188	lvol_size=$((lvol_size_mb * 1024 * 1024))
189
190	# Create two lvol bdevs on top of previously created lvol store
191	lvol_uuid1=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test1 "$lvol_size_mb")
192	lvol_uuid2=$(rpc_cmd bdev_lvol_create -u "$lvs_uuid" lvol_test2 "$lvol_size_mb")
193
194	# Call bdev_lvol_rename on first lvol bdev and try to change its name to
195	# the same name as used by second lvol bdev
196	rpc_cmd bdev_lvol_rename lvol_test1 lvol_test2 && false
197
198	# Verify that lvol bdev still have the same names as before
199	lvol=$(rpc_cmd bdev_get_bdevs -b $lvol_uuid1)
200	[ "$(jq -r '.[0].driver_specific.lvol.lvol_store_uuid' <<< "$lvol")" = "$lvs_uuid" ]
201	[ "$(jq -r '.[0].block_size' <<< "$lvol")" = "$MALLOC_BS" ]
202	[ "$(jq -r '.[0].num_blocks' <<< "$lvol")" = "$((lvol_size / MALLOC_BS))" ]
203	[ "$(jq -r '.[0].aliases|sort' <<< "$lvol")" = "$(jq '.|sort' <<< '["lvs_test/lvol_test1"]')" ]
204
205	rpc_cmd bdev_lvol_delete lvs_test/lvol_test1
206	rpc_cmd bdev_lvol_delete lvs_test/lvol_test2
207	rpc_cmd bdev_lvol_delete_lvstore -u "$lvs_uuid"
208	rpc_cmd bdev_malloc_delete "$malloc_name"
209	check_leftover_devices
210}
211
212$SPDK_BIN_DIR/spdk_tgt &
213spdk_pid=$!
214trap 'killprocess "$spdk_pid"; exit 1' SIGINT SIGTERM EXIT
215waitforlisten $spdk_pid
216
217run_test "test_rename_positive" test_rename_positive
218run_test "test_rename_lvs_negative" test_rename_lvs_negative
219run_test "test_lvol_rename_negative" test_lvol_rename_negative
220
221trap - SIGINT SIGTERM EXIT
222killprocess $spdk_pid
223