From d3e3c78051b18e3191d7c0c6cd34cdddb0027868 Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Tue, 19 Nov 2013 16:01:23 +0000 Subject: [PATCH] testmfs, testisofs: MFS format, ISO functionality testmfs: catch MFS format changes This test tests mkfs.mfs will generate the same FS image given the same input files. mkproto creates a proto file (normalizing directory entry order). The assumption is that a change in the output flags a tacit change in FS format, and that a FS format change will cause the image to change. . Changes to mkfs.mfs that innocently change the format can change the sha1 output in the script along with it. . The assumption is that corresponding versions of mkfs.mfs and MFS will always work together; otherwise a lot breaks (ramdisk etc.) . Therefore, as long as a generated FS image stays the same with the same input now, incompatible MFS changes will still be flagged, even if they work together with the current mkfs.mfs. testisofs: test ISO filesystem . to test isofs: prepare an ISO FS image using writeisofs, copy it to a RAM device, mount it using the iso9660fs server, compare the SHA1 contents of the files on the ISO with the inputs. . use su to run certain commands in the script as root run script: run shell script tests . they are installed without .sh so should be searched for as such . add diagnostic when tests are skipped Change-Id: I30daff58e1e43903dacf3c99996a4a0e7d819b6b --- test/Makefile | 2 +- test/run | 3 +- test/testisofs.sh | 67 +++++++++++++++++++++++++++++++++++++ test/testmfs.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 test/testisofs.sh create mode 100755 test/testmfs.sh diff --git a/test/Makefile b/test/Makefile index ffeda323e..0be26cab0 100644 --- a/test/Makefile +++ b/test/Makefile @@ -74,7 +74,7 @@ PROGS+= test${t} PROGS+= t10a t11a t11b t40a t40b t40c t40d t40e t40f t60a t60b \ t67a t67b t68a t68b -SCRIPTS+= run testinterp.sh testsh1.sh testsh2.sh +SCRIPTS+= run testinterp.sh testsh1.sh testsh2.sh testmfs.sh testisofs.sh .if ${MKPIC} == "yes" # Build them as dynamic executables by default if shared libraries diff --git a/test/run b/test/run index 453126e08..5d5ef23d6 100755 --- a/test/run +++ b/test/run @@ -25,7 +25,7 @@ alltests=" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \ 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \ 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \ 61 62 63 64 65 66 67 68 69 70 71 72 75 \ - sh1.sh sh2.sh interp.sh" + sh1 sh2 interp mfs isofs" tests_no=`expr 0` # test mmap only if enabled in sysenv @@ -147,6 +147,7 @@ do rm -f $out fi else + echo "${diagprefix}warning: skipping test$i" skipped=`expr $skipped + 1` fi done diff --git a/test/testisofs.sh b/test/testisofs.sh new file mode 100644 index 000000000..0118f390a --- /dev/null +++ b/test/testisofs.sh @@ -0,0 +1,67 @@ +# Create and verify a simple ISO filesystem +# +#!/bin/sh + +set -e + +echo -n "isofs test " + +ramdev=/dev/ram +mp=/mnt +testdir=isofstest +fsimage=isofsimage +contents=CONTENTS +out1=v1 +out2=v2 +rm -rf $testdir $fsimage $out1 $out2 + +if [ -d $testdir ] +then + echo "dir?" + exit 1 +fi + +mkdir -p $testdir $testdir/$contents + +if [ ! -d $testdir ] +then + echo "no dir?" + exit 1 +fi + +# Make some small & big & bigger files + +prevf=$testdir/$contents/FILE +echo "Test contents 123" >$prevf +for double in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do fn=$testdir/$contents/FN.$double + cat $prevf $prevf >$fn + prevf=$fn +done + +# Make an ISO filesystem image out of it +writeisofs -s0x0 -l MINIX $testdir $fsimage >/dev/null 2>&1 + +# umount previous things +su root -c "umount $ramdev >/dev/null 2>&1 || true" +su root -c "umount $mp >/dev/null 2>&1 || true" + +# Mount it on a RAM disk +su root -c "ramdisk 50000 $ramdev >/dev/null 2>&1" +su root -c "cp $fsimage $ramdev" +su root -c "mount -t isofs $ramdev $mp >/dev/null 2>&1" + +# compare contents +(cd $testdir/$contents && sha1 * | sort) >$out1 +(cd $mp/$contents && sha1 * | sort) >$out2 + +diff -u $out1 $out2 + +su root -c "umount $ramdev >/dev/null 2>&1" + +# cleanup +rm -rf $testdir $fsimage $out1 $out2 + +echo ok + +exit 0 diff --git a/test/testmfs.sh b/test/testmfs.sh new file mode 100755 index 000000000..f597a993f --- /dev/null +++ b/test/testmfs.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +# expected sha1sum of the FS image +expect=55d61f457204c206628c848771a1f9d75cfa3afa + +set -e + +# ownership matters for the proto file. +# the run script runs us with uid 2, gid 0. +if [ "`id -u`" != 2 -o "`id -g`" != 0 ] +then + echo "test script should be run with uid 2, gid 0." + exit 1 +fi + +echo -n "mfs test " + +testdir=fstest +protofile=proto +fsimage=fsimage +rm -rf $testdir $protofile $fsimage + +if [ -d $testdir ] +then + echo "dir?" + exit 1 +fi + +mkdir -p $testdir $testdir/contents $testdir/modes + +if [ ! -d $testdir ] +then + echo "no dir?" + exit 1 +fi + +# Make some small & big & bigger files + +prevf=$testdir/contents/file +echo "Test contents 123" >$prevf +for double in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do fn=$testdir/contents/fn.$double + cat $prevf $prevf >$fn + prevf=$fn +done + +# Make some files with various modes & mtimes + +for many in 0 1 2 3 4 5 6 7 8 9 +do for m1 in 0 1 2 3 4 5 6 7 + do for m2 in 0 1 2 3 4 5 6 7 + do for m3 in 0 1 2 3 4 5 6 7 + do + mode=${m1}${m2}${m3} + fn=$testdir/modes/m${mode}${many} + echo "$many $m1 $m2 $m3 $mode" > $fn + chmod $mode $fn + done + done + done +done + +# Make an MFS filesystem image out of it + +BS=4096 +BLOCKS=15000 +INODES=6000 +dd if=/dev/zero seek=$BLOCKS of=$fsimage count=1 bs=$BS >/dev/null 2>&1 + +# -s keeps modes +mkproto -s -b $BLOCKS -i $INODES $testdir >$protofile + +mkfs.mfs -T 1 -b $BLOCKS -i $INODES $fsimage $protofile >/dev/null 2>&1 +sum="`sha1 $fsimage | awk '{ print $4 }'`" + +if [ $sum != $expect ] +then + echo sum $sum is not expected $expect + exit 1 +fi + +echo ok + +exit 0 + -- 2.44.0