Blame SOURCES/0045-tests-t3310-flags.sh-Query-libparted-for-all-flags-t.patch

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