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