summaryrefslogtreecommitdiffstats
path: root/tests/ts/partx/partx
blob: 74600cbc208f4516ac1425babda9d7c0a8f992fd (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
#!/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"
TS_IMGDIR="$TS_TOPDIR/ts/blkid/images-pt"
PARTS=3

. $TS_TOPDIR/functions.sh

ts_init "$*"
ts_skip_nonroot

[ ! -x "$TS_CMD_PARTX" ] && ts_skip "partx disabled"

mkdir -p $TS_OUTDIR/images-pt
for img in $(ls $TS_IMGDIR/*.img.bz2 | sort); do
	name=$(basename $img .img.bz2)
	outimg=$TS_OUTDIR/images-pt/${name}.img

	ts_init_subtest $name

	bunzip2 < $img > $outimg

	$TS_CMD_PARTX $outimg &> $TS_OUTPUT
	ts_finalize_subtest
done


DEVICE=$(ts_scsi_debug_init dev_size_mb=50)

ts_init_subtest "addpart"
$TS_CMD_ADDPART ${DEVICE} 1 0 1
[ "$?" == 0 ] && echo OK &>$TS_OUTPUT || ts_die "Unable to add partition"a &>$TS_OUTPUT
ts_finalize_subtest

udevadm settle

ts_init_subtest "delpart"
$TS_CMD_DELPART ${DEVICE} 1
[ "$?" == 0 ] && echo OK >> $TS_OUTPUT 2>&1 || ts_die "Unable to remove partition" >> $TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle
rmmod scsi_debug &> /dev/null

DEVICE=$(ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS)
DEVNAME=$(basename $DEVICE)

ts_init_subtest "detect-parts"
$TS_CMD_PARTX --show $DEVICE &> $TS_OUTPUT
ts_finalize_subtest

udevadm settle

ts_init_subtest "delete-all"
#delete partinfo
$TS_CMD_PARTX --delete $DEVICE &> $TS_OUTPUT
[ $? -eq 0 ] && echo "partitions deleted" &> $TS_OUTPUT ||
    echo "Unable to delete partitions on $DEVICE" &> $TS_OUTPUT
ls -d "/sys/block/${DEVNAME}/${DEVNAME}*" 2>/dev/null && ts_die
ts_finalize_subtest

udevadm settle

ts_init_subtest "add-all"
#read DEVICE and restore the partinfo
$TS_CMD_PARTX --add $DEVICE &> $TS_OUTPUT
[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] &&
   echo "partitions added" >> $TS_OUTPUT 2>&1  ||
   echo "Unable to add partitions for $DEVICE" >> $TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "update-one"
#read DEVICE and update second partition
$TS_CMD_PARTX --update ${DEVICE}2 &> $TS_OUTPUT
[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] &&
   echo "partitions updated" >> $TS_OUTPUT 2>&1  ||
   echo "Unable to update 2nd partition for $DEVICE" >> $TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

ts_init_subtest "delete-one"
#remove last partition only
$TS_CMD_PARTX -d --nr -1 $DEVICE >> $TS_OUTPUT 2>&1
[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null |
wc -l) -eq $((PARTS-1)) ] &&
    echo "last partition removed" >> $TS_OUTPUT 2>&1 ||
    echo "Unable to remove a partition on $DEVICE" >> $TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle

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

udevadm settle

ts_init_subtest "add-existing"
#try adding an existing partition
$TS_CMD_PARTX -a --nr 1 $DEVICE &>/dev/null && echo "partx failed: re-added an existing partition" &> $TS_OUTPUT || echo "partx: OK" &> $TS_OUTPUT
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 $DEVICE
ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null && echo "Unable to delete partitions on $DEVICE" >> $TS_OUTPUT 2>&1 || echo "partitions deleted" >> $TS_OUTPUT 2>&1
$TS_CMD_PARTX -a --nr 0 $DEVICE
[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] && echo "partitions added" >> $TS_OUTPUT 2>&1 || echo "Failed to add $DEVICE partitions" >> $TS_OUTPUT 2>&1
ts_finalize_subtest

udevadm settle
rmmod scsi_debug
ts_finalize