From 1833a876ae2497b2bd915b9e1a8f364cef66272e Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sun, 12 Oct 2008 10:40:22 +0200 Subject: tests: df: avoid test failure when using mawk * tests/df/total-awk: Rewrite to use $PERL, not $AWK. mawk can't even count above 2^31. Reported by Ed Avis. http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/14792/focus=14802 * tests/df/total-verify: Rename from total-awk. * tests/Makefile.am (TESTS): Reflect renaming. --- tests/Makefile.am | 2 +- tests/df/total-awk | 80 --------------------------------------------------- tests/df/total-verify | 64 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 81 deletions(-) delete mode 100755 tests/df/total-awk create mode 100755 tests/df/total-verify (limited to 'tests') diff --git a/tests/Makefile.am b/tests/Makefile.am index e0377cc32..7a523a5db 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -285,7 +285,7 @@ TESTS = \ dd/skip-seek2 \ dd/unblock-sync \ df/total \ - df/total-awk \ + df/total-verify \ du/2g \ du/8gb \ du/basic \ diff --git a/tests/df/total-awk b/tests/df/total-awk deleted file mode 100755 index a10a03daf..000000000 --- a/tests/df/total-awk +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -# Ensure "df --total" computes well summary statistics - -# Copyright (C) 2008 Free Software Foundation, Inc. - -# This program 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 3 of the License, or -# (at your option) any later version. - -# This program 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. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -if test "$VERBOSE" = yes; then - set -x - ls --version -fi - -. $srcdir/test-lib.sh - -fail=0 - -# Don't let a different umask perturb the results. -umask 22 - -echo ' -BEGIN { - total = 0 - used = 0 - available = 0 -} -{ - if (NR==1 || $0==$1 || $0~/^total +(-?[0-9]+|-) +(-?[0-9]+|-) +(-?[0-9]+|-) +-?[0-9]+%$/) - next - if ($1~/^[0-9]/) - { - total += $1 - used += $2 - available += $3 - } - else - { - total += $2 - used += $3 - available += $4 - } -} -END { - print total - print used - print available -} -' > compute_sum.awk || fail=1 - -echo ' -/^total +(-?[0-9]+|-) +(-?[0-9]+|-) +(-?[0-9]+|-) +-?[0-9]+%$/ { - print $2; - print $3; - print $4 -} -' > parse_total.awk || fail=1 - -# Use --block-size=512 to keep df from printing rounded-to-kilobyte -# numbers which wouldn't necessarily add up to the displayed total. -df --block-size=512 --total |tee tmp || fail=1 -$AWK -f compute_sum.awk tmp > out1 || fail=1 -$AWK -f parse_total.awk tmp > out2 || fail=1 -compare out1 out2 || fail=1 - -df -i --block-size=512 --total |tee tmp || fail=1 -$AWK -f compute_sum.awk tmp > out1 || fail=1 -$AWK -f parse_total.awk tmp > out2 || fail=1 -compare out1 out2 || fail=1 - -Exit $fail diff --git a/tests/df/total-verify b/tests/df/total-verify new file mode 100755 index 000000000..5b5856586 --- /dev/null +++ b/tests/df/total-verify @@ -0,0 +1,64 @@ +#!/bin/sh +# Ensure "df --total" computes accurate totals + +# Copyright (C) 2008 Free Software Foundation, Inc. + +# This program 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 3 of the License, or +# (at your option) any later version. + +# This program 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. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +if test "$VERBOSE" = yes; then + set -x + ls --version +fi + +. $srcdir/test-lib.sh + +cat <<\EOF > check-df || framework_failure +my ($total, $used, $avail) = (0, 0, 0); +while (<>) + { + $. == 1 + and next; # skip first (header) line + # Recognize df output lines like these: + # /dev/sdc1 0 0 0 - /c + # tmpfs 1536000 12965 1523035 1% /tmp + # total 5285932 787409 4498523 15% + /^(.*?) +(-?\d+|-) +(-?\d+|-) +(-?\d+|-) +(?:- |[0-9]+%)(.*)$/ + or die "$0: invalid input line\n: $_"; + if ($1 eq 'total' && $5 eq '') + { + $total == $2 or die "$total != $2"; + $used == $3 or die "$used != $3"; + $avail == $4 or die "$avail != $4"; + my $line = <>; + defined $line + and die "$0: extra line(s) after totals\n"; + exit 0; + } + $total += $2 unless $2 eq '-'; + $used += $3 unless $3 eq '-'; + $avail += $4 unless $4 eq '-'; + } +die "$0: missing line of totals\n"; +EOF + +# Use --block-size=512 to keep df from printing rounded-to-kilobyte +# numbers which wouldn't necessarily add up to the displayed total. +df --total -P --block-size=512 |tee space || framework_failure +df --total -i -P |tee inode || framework_failure + +fail=0 +$PERL -f check-df space || fail=1 +$PERL -f check-df inode || fail=1 + +Exit $fail -- cgit v1.2.3-70-g09d2