[parted-devel] [PATCH v2 1/8] tests: t3310-flags.sh: Query libparted for all flags to be tested

Mike Fleetwood mike.fleetwood at googlemail.com
Sat Oct 1 15:40:16 UTC 2016


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.
---
 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 <config.h>
+#include <parted/parted.h>
+#include <stdio.h>
+#include <stdlib.h>
+#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 <device>\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 <http://www.gnu.org/licenses/>.
 
-. "${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
-- 
1.7.1




More information about the parted-devel mailing list