From 450dbead63306b242e8159c85641698bddf6d19e Mon Sep 17 00:00:00 2001 From: Mike Fleetwood Date: Sat, 1 Oct 2016 16:40:16 +0100 Subject: [PATCH 45/53] tests: t3310-flags.sh: Query libparted for all flags to be tested Replace scanning the documentation for an incomplete list of flags with querying libparted for the complete list of supported flags via the added helper print-flags. Correct $ME -> $ME_ in the warning messages. Improve the warning messages by including the table type and flag name not correctly set or cleared. Plus minor changes: (1) use slightly longer variable name primary_or_name; (2) use longer test partition name PTNNAME; and (3) stop shortening parted unit command to u. Signed-off-by: Brian C. Lane --- tests/Makefile.am | 3 ++- tests/print-flags.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/t3310-flags.sh | 32 ++++++++++++++++-------------- 3 files changed, 75 insertions(+), 16 deletions(-) create mode 100644 tests/print-flags.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 6a06dce..a840304 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -92,7 +92,8 @@ EXTRA_DIST = \ init.cfg init.sh t-lib-helpers.sh gpt-header-munge \ gpt-header-move msdos-overlap -check_PROGRAMS = print-align print-max dup-clobber duplicate fs-resize +check_PROGRAMS = print-align print-flags print-max dup-clobber duplicate \ + fs-resize fs_resize_LDADD = \ $(top_builddir)/libparted/fs/libparted-fs-resize.la \ $(top_builddir)/libparted/libparted.la diff --git a/tests/print-flags.c b/tests/print-flags.c new file mode 100644 index 0000000..3176ca6 --- /dev/null +++ b/tests/print-flags.c @@ -0,0 +1,56 @@ +/* Print the available flags for a particular partition. */ + +#include +#include +#include +#include +#include "progname.h" + +int +main (int argc, char **argv) +{ + PedDevice *dev; + PedDisk *disk; + PedPartition *part; + + set_program_name (argv[0]); + + if (argc != 2 ) { + fprintf (stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + dev = ped_device_get(argv[1]); + if (!dev) { + fprintf (stderr, "Error: failed to create device %s\n", + argv[1]); + return EXIT_FAILURE; + } + if (!ped_device_open (dev)) { + fprintf (stderr, "Error: failed to open device %s\n", argv[1]); + return EXIT_FAILURE; + } + disk = ped_disk_new (dev); + if (!disk) { + fprintf (stderr, + "Error: failed to read partition table from device %s\n", + argv[1]); + return EXIT_FAILURE; + } + + part = ped_disk_get_partition (disk, 1); + if (!part) { + fprintf (stderr, + "Error: failed to get partition 1 from device %s\n", + argv[1]); + return EXIT_FAILURE; + } + + for (PedPartitionFlag flag = PED_PARTITION_FIRST_FLAG; + flag <= PED_PARTITION_LAST_FLAG; flag++) + { + if (ped_partition_is_flag_available (part, flag)) + puts (ped_partition_flag_get_name (flag)); + } + return EXIT_SUCCESS; +} diff --git a/tests/t3310-flags.sh b/tests/t3310-flags.sh index cb3024a..85a673a 100644 --- a/tests/t3310-flags.sh +++ b/tests/t3310-flags.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Exercise the exclusive, single-bit flags. +# Exercise partition flags. # Copyright (C) 2010-2014 Free Software Foundation, Inc. @@ -16,35 +16,37 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -. "${srcdir=.}/init.sh"; path_prepend_ ../parted +. "${srcdir=.}/init.sh"; path_prepend_ ../parted . ss=$sector_size_ dev=dev-file extract_flags() { - perl -nle '/^1:2048s:4095s:2048s::(?:P1)?:(.+);$/ and print $1' "$@" + perl -nle '/^1:2048s:4095s:2048s::(?:PTNNAME)?:(.+);$/ and print $1' "$@" } for table_type in msdos gpt; do - # Extract flag names of type $table_type from the texinfo documentation. case $table_type in - msdos) search_term=MS-DOS; pri_or_name=pri;; - gpt) search_term=GPT; pri_or_name=P1;; + gpt) primary_or_name='PTNNAME' + ;; + msdos) primary_or_name='primary' + ;; esac - flags=$(sed -n '/^@node set/,/^@node/p' \ - "$abs_top_srcdir/doc/parted.texi" \ - | perl -00 -ne \ - '/^\@item (\w+).*'"$search_term"'/s and print lc($1), "\n"') n_sectors=5000 dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1 parted -s $dev mklabel $table_type \ - mkpart $pri_or_name ext2 $((1*2048))s $((2*2048-1))s \ + mkpart $primary_or_name ext2 $((1*2048))s $((2*2048-1))s \ > out 2> err || fail=1 compare /dev/null out || fail=1 + # Query libparted for the available flags for this test partition. + flags=`print-flags $dev` \ + || { warn_ "$ME_: $table_type: failed to get available flags"; + fail=1; continue; } + for mode in on_only on_and_off ; do for flag in $flags; do @@ -53,18 +55,18 @@ for table_type in msdos gpt; do case $flag in boot|lba|hidden) continue;; esac # Turn on each flag, one at a time. - parted -m -s $dev set 1 $flag on u s print > raw 2> err || fail=1 + parted -m -s $dev set 1 $flag on unit s print > raw 2> err || fail=1 extract_flags raw > out grep -F "$flag" out \ - || { warn_ "$ME: flag not turned on: $(cat out)"; fail=1; } + || { warn_ "$ME_: $table_type: flag '$flag' not turned on: $(cat out)"; fail=1; } compare /dev/null err || fail=1 if test $mode = on_and_off; then # Turn it off - parted -m -s $dev set 1 $flag off u s print > raw 2> err || fail=1 + parted -m -s $dev set 1 $flag off unit s print > raw 2> err || fail=1 extract_flags raw > out grep -F "$flag" out \ - && { warn_ "$ME: flag not turned off: $(cat out)"; fail=1; } + && { warn_ "$ME_: $table_type: flag '$flag' not turned off: $(cat out)"; fail=1; } compare /dev/null err || fail=1 fi done -- 2.7.4