summaryrefslogtreecommitdiffstats
path: root/tests/ts/partx/partx
blob: b21dc44efa57313ad1ffa54a7c8f68bcd7f1efda (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/bin/bash

#
# Copyright (C) 2010 Davidlohr Bueso <dave@gnu.org>
#
# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#

TS_TOPDIR="${0%/*}/../.."
TS_DESC="partitions probing"
PARTS=3

. $TS_TOPDIR/functions.sh
ts_init "$*"

ts_check_test_command "$TS_CMD_PARTX"
ts_check_test_command "$TS_CMD_ADDPART"
ts_check_test_command "$TS_CMD_DELPART"

ts_skip_nonroot

shopt -s nullglob

function check_partition_count
{
	# this function needs shopt -s nullglob
	local cnt_want=$1
	local devname=$(basename $TS_DEVICE)
	local parts=(/sys/block/${devname}/${devname}*)
	local cnt_have=${#parts[@]}

	if [ $cnt_have -eq $cnt_want ]; then
		return 0
	fi
	echo "error: expected $cnt_want partitions, have $cnt_have" >&2
	echo "${parts[@]}" >&2
	return 1
}

# set global variable TS_DEVICE
ts_scsi_debug_init dev_size_mb=50

ts_init_subtest "addpart"
{
	$TS_CMD_ADDPART ${TS_DEVICE} 1 0 1 &&
		echo OK ||
		echo "Unable to add partition"
	check_partition_count 1
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "delpart"
{
	$TS_CMD_DELPART ${TS_DEVICE} 1 &&
		echo OK ||
		echo "Unable to remove partition"
	check_partition_count 0
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

ts_scsi_debug_rmmod

# set global variable TS_DEVICE
ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS

ts_init_subtest "detect-parts"
{
	$TS_CMD_PARTX --show $TS_DEVICE &&
		echo OK ||
		echo "Unable to list partitions"
	check_partition_count $PARTS
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "delete-all"
#delete partinfo
{
	$TS_CMD_PARTX --delete $TS_DEVICE &&
		echo "partitions deleted" ||
		echo "Unable to delete partitions on $TS_DEVICE"
	check_partition_count 0
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "add-all"
#read TS_DEVICE and restore the partinfo
{
	$TS_CMD_PARTX --add $TS_DEVICE &&
		echo "partitions added" ||
		echo "Unable to add partitions for $TS_DEVICE"
	check_partition_count $PARTS
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "update-one"
#read TS_DEVICE and update second partition
{
	$TS_CMD_PARTX --update ${TS_DEVICE}2 &&
		echo "partitions updated" ||
		echo "Unable to update 2nd partition for $TS_DEVICE"
	check_partition_count $PARTS
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "delete-one"
#remove last partition only
{
	$TS_CMD_PARTX -d --nr -1 $TS_DEVICE &&
		echo "last partition removed" ||
		echo "Unable to remove a partition on $TS_DEVICE"
	check_partition_count $((PARTS-1))
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "delete-non-existent"
#attempt to remove it again
{
	$TS_CMD_PARTX -d --nr $PARTS $TS_DEVICE &&
		echo "partx failed: removed non-existing partition" ||
		echo "partx: OK"
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "add-existing"
#try adding an existing partition
{
	$TS_CMD_PARTX -a --nr 1 $TS_DEVICE 2>/dev/null &&
		echo "partx failed: re-added an existing partition" ||
		echo "partx: OK"
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "change-by-range"
# {-a|-d} --nr 0 should handle all partitions
{
	$TS_CMD_PARTX -d --nr 0 $TS_DEVICE &&
		echo "partitions deleted" ||
		echo "Unable to delete partitions on $TS_DEVICE"
	check_partition_count 0
	$TS_CMD_PARTX -a --nr 0 $TS_DEVICE &&
		echo "partitions added" ||
		echo "Failed to add $TS_DEVICE partitions"
	check_partition_count $PARTS
} >$TS_OUTPUT 2>&1
ts_finalize_subtest

ts_finalize