summaryrefslogblamecommitdiffstats
path: root/tests/ts/partx/partx
blob: 54aef8bbb7096ae0ffe8dcd91657be06d437ff20 (plain) (tree)
1
2
3
4
5
6




                                                   
                                  














                                                                      
       



                         
               
 
                                                    

                             











                                                
 
                                           





                                                                                       
              





                                                                                                     
              
                             
 

                                                            

                              
                                          

                   

              







                                                               

              







                                                                                
              









                                                                     

              




                                                                                                                                    

              




                                                                                                                                                  

              







                                                                                                                                                                                         
              
                
           
#!/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="$(dirname $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 "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