summaryrefslogtreecommitdiffstats
path: root/tools/test-virt-df.sh
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2010-03-30 16:14:09 +0100
committerRichard Jones <rjones@redhat.com>2010-03-30 16:14:09 +0100
commit29c78cc979297b95407a5956b4caa34240a2f5a8 (patch)
tree0db9bceb10601595628ffaba1e59302016da0abd /tools/test-virt-df.sh
parentfc5fbd460aa0aaf6bb65ca5fa1be59345f4f079f (diff)
downloadlibguestfs-29c78cc979297b95407a5956b4caa34240a2f5a8.tar.gz
libguestfs-29c78cc979297b95407a5956b4caa34240a2f5a8.tar.xz
libguestfs-29c78cc979297b95407a5956b4caa34240a2f5a8.zip
virt-df: Match output with native (coreutils) 'df' command (RHBZ#578123).
This commit fixes the 'Use%' field in the output so it matches what coreutils' 'df' command would print. Firstly we change the calculation to use the space available to root, not the space available to non-root. This means it matches what 'df' when run as root in the guest would show. Secondly we display this rounded up to the next whole percent (ie. using ceil), which is also what 'df' does. Thirdly we change the regression test so it tests this. Note that even with these changes you are not guaranteed to get precisely the same figures from inside and outside the guest, as it depends on how quiescent the guest is and how recently the superblock was synced. Thanks: Rita Wu
Diffstat (limited to 'tools/test-virt-df.sh')
-rwxr-xr-xtools/test-virt-df.sh36
1 files changed, 31 insertions, 5 deletions
diff --git a/tools/test-virt-df.sh b/tools/test-virt-df.sh
index 8e610632..a7b50b8f 100755
--- a/tools/test-virt-df.sh
+++ b/tools/test-virt-df.sh
@@ -4,13 +4,10 @@ export LANG=C
set -e
# Run virt-df.
-output=$(./virt-df test.img -h)
-
-# The output will be slightly different from one machine to another.
-# So just do some tests to make sure it looks reasonable.
+output=$(./virt-df test.img)
# Check title is the first line.
-if [[ ! $output =~ ^Filesystem[[:space:]]+Size[[:space:]]+Used[[:space:]]+Available[[:space:]]+Use% ]]; then
+if [[ ! $output =~ ^Filesystem.* ]]; then
echo "$0: error: no title line"
exit 1
fi
@@ -44,3 +41,32 @@ if [[ ! $output =~ test.img:/dev/[hsv]da1 ]]; then
echo "$0: error: filesystem /dev/VG/sda1 was not found"
exit 1
fi
+
+# This is what df itself prints for these filesystems (determined
+# by running the test image under virt-rescue):
+#
+# ><rescue> df -h
+# Filesystem Size Used Avail Use% Mounted on
+# /dev/dm-1 31M 28K 30M 1% /sysroot/lv1
+# /dev/dm-2 31M 395K 29M 2% /sysroot/lv2
+# /dev/dm-3 62M 144K 59M 1% /sysroot/lv3
+# ><rescue> df -i
+# Filesystem Inodes IUsed IFree IUse% Mounted on
+# /dev/dm-1 8192 11 8181 1% /sysroot/lv1
+# /dev/dm-2 8192 11 8181 1% /sysroot/lv2
+# /dev/dm-3 16384 11 16373 1% /sysroot/lv3
+# ><rescue> df
+# Filesystem 1K-blocks Used Available Use% Mounted on
+# /dev/dm-1 31728 28 30064 1% /sysroot/lv1
+# /dev/dm-2 31729 395 29696 2% /sysroot/lv2
+# /dev/dm-3 63472 144 60052 1% /sysroot/lv3
+#
+# Only test plain 'df' output at the moment (XXX).
+
+if [ "$(echo "$output" | sort | awk '/VG.LV[123]/ { print $2 " " $3 " " $4 " " $5 }')" != \
+"31728 28 30064 1%
+31729 395 29696 2%
+63472 144 60052 1%" ]; then
+ echo "$0: error: output of virt-df did not match expected (df) output"
+ exit 1
+fi