Home | History | Annotate | Line # | Download | only in ffs
Makefile revision 1.6.54.1
      1       1.6     jmc ##	$NetBSD: Makefile,v 1.6.54.1 2014/08/20 00:02:23 tls Exp $
      2       1.1  bouyer ##  Notes:
      3       1.1  bouyer ##    This set of tests creates a dummy directory tree in /tmp and
      4       1.1  bouyer ##    populates it with several files.  The test requires around 1100
      5       1.3    tron ##    inodes and 6.8MB. The test system needs to run a kernel with
      6       1.3    tron ##    FFS Endian Independent support (options FFS_EI) to be able to
      7       1.3    tron ##    perform this test.
      8       1.1  bouyer ##
      9       1.1  bouyer ##    This test verifies that newfs can create filesystems in both bytes
     10       1.1  bouyer ##    orders. For each byte order it is checked that:
     11       1.1  bouyer ##      - the kernel understands both filesystems created
     12       1.1  bouyer ##      - fsck_ffs can convert them from one byte order to the other
     13       1.1  bouyer ##      - dump handles properly the 'nodump' flag, an that restore can
     14       1.1  bouyer ##        properly restore the filesystem.
     15       1.1  bouyer ##
     16       1.2  bouyer ##    This is derived from work done by Brian Grayson, submitted in PR 6706.
     17       1.1  bouyer 
     18  1.6.54.1     tls .include <bsd.own.mk>
     19       1.5   lukem 
     20       1.1  bouyer TMPL=/tmp/ffstemplate
     21       1.1  bouyer TMPMP=/tmp/ffsregresstest_mount
     22       1.1  bouyer TMPIM=/var/tmp/ffsregresstest.im
     23       1.1  bouyer TMPREST=/tmp/restoreregress
     24       1.1  bouyer EN?= be
     25       1.1  bouyer DIGITS=0 1 2 3 4 5 6 7 8 9
     26       1.1  bouyer 
     27       1.1  bouyer VND?= vnd0
     28       1.1  bouyer BVND= /dev/${VND}
     29       1.1  bouyer CVND= /dev/r${VND}
     30       1.1  bouyer MPART?= a
     31       1.1  bouyer .if (${MACHINE_ARCH} == "i386")
     32       1.1  bouyer RPART?= d
     33       1.1  bouyer .else
     34       1.1  bouyer RPART?= c
     35       1.1  bouyer .endif
     36       1.1  bouyer 
     37       1.1  bouyer # As make is called recusively, and we may cd to ${OBJDIR}, we need to call make
     38       1.1  bouyer # with some variables propagated.
     39       1.1  bouyer SRCDIR?= ${.CURDIR}
     40       1.1  bouyer MAKECMD= ${MAKE} -f ${SRCDIR}/Makefile SRCDIR=${SRCDIR} EN=${EN} VND=${VND} MPART=${MPART} RPART=${RPART}
     41       1.1  bouyer 
     42       1.1  bouyer regress: template
     43       1.1  bouyer 	${MAKECMD} EN=be makeregress
     44       1.1  bouyer 	${MAKECMD} clean-tmpfs
     45       1.1  bouyer 	${MAKECMD} EN=le makeregress
     46       1.1  bouyer 	${MAKECMD} clean
     47       1.1  bouyer 
     48       1.1  bouyer makeregress: tmpfs
     49       1.1  bouyer 	${MAKECMD} dump
     50       1.1  bouyer 	${MAKECMD} fsck
     51       1.1  bouyer 	${MAKECMD} clean-dump;
     52       1.1  bouyer 
     53       1.1  bouyer clean: clean-tmpfs clean-template clean-dump
     54       1.1  bouyer clean-dump:
     55       1.1  bouyer 	@echo "***  Cleaning up ${TMPREST}."
     56       1.1  bouyer 	-rm -rf ${TMPREST}
     57       1.1  bouyer clean-tmpfs:
     58       1.1  bouyer 	@echo "***  Cleaning up ${TMPMP}."
     59       1.1  bouyer 	-umount ${TMPMP}
     60       1.1  bouyer 	-vnconfig -u ${BVND}${RPART}
     61       1.1  bouyer 	-rm -rf ${TMPMP} ${TMPIM}
     62       1.1  bouyer clean-template:
     63       1.1  bouyer 	@echo "***  Cleaning up ${TMPL}."
     64       1.1  bouyer 	-rm -rf ${TMPL}
     65       1.1  bouyer 
     66       1.1  bouyer cmp:
     67       1.1  bouyer 	diff -r -q ${TMPL} ${TMPMP}
     68       1.1  bouyer 
     69       1.1  bouyer dump:
     70       1.1  bouyer 	@echo "***  Testing dump nodump flag support."
     71       1.1  bouyer 	@#  First of all, estimate the size of a dump of just the tmpfs.
     72       1.5   lukem 	${HOST_SH} ${SRCDIR}/estimatecompare 2572 -S -h9 -0 ${CVND}${MPART}
     73       1.1  bouyer 
     74       1.1  bouyer 	@#  Now estimate the size, after honoring the nodump flag.
     75       1.5   lukem 	${HOST_SH} ${SRCDIR}/estimatecompare 347  -S -h0 -0 ${CVND}${MPART}
     76       1.1  bouyer 	@echo "***  Testing dump/restore support"
     77       1.1  bouyer 	mkdir ${TMPREST}
     78       1.1  bouyer 	dump -0 -h9 -B10000 -f - ${CVND}${MPART} | \
     79       1.1  bouyer 	    (cd ${TMPREST}; restore -rf -)
     80       1.1  bouyer 	@#restore should have created a restoresymtable file
     81       1.1  bouyer 	rm ${TMPREST}/restoresymtable
     82       1.1  bouyer 	diff -r -q ${TMPL} ${TMPREST}
     83       1.1  bouyer 
     84       1.1  bouyer fsck:
     85       1.1  bouyer 	@echo "*** checking fsck_ffs endian conversion."
     86       1.1  bouyer 	umount ${BVND}${MPART}
     87       1.1  bouyer .if (${EN} == le)
     88       1.1  bouyer 	fsck_ffs -B be -y ${CVND}${MPART}
     89       1.1  bouyer 	mount -o async ${BVND}${MPART} ${TMPMP}
     90       1.1  bouyer 	${MAKECMD} cmp
     91       1.1  bouyer 	umount ${BVND}${MPART}
     92       1.1  bouyer 	fsck_ffs -B le -y ${CVND}${MPART}
     93       1.1  bouyer 	mount -o async ${BVND}${MPART} ${TMPMP}
     94       1.1  bouyer 	${MAKECMD} cmp
     95       1.1  bouyer .else
     96       1.1  bouyer 	fsck_ffs -B le -y ${CVND}${MPART}
     97       1.1  bouyer 	mount -o async ${BVND}${MPART} ${TMPMP}
     98       1.1  bouyer 	${MAKECMD} cmp
     99       1.1  bouyer 	umount ${BVND}${MPART}
    100       1.1  bouyer 	fsck_ffs -B be -y ${CVND}${MPART}
    101       1.1  bouyer 	mount -o async ${BVND}${MPART} ${TMPMP}
    102       1.1  bouyer 	${MAKECMD} cmp
    103       1.1  bouyer .endif
    104       1.1  bouyer 
    105       1.1  bouyer tmpfs:
    106       1.1  bouyer 	@echo "***  Creating a dummy directory tree at ${TMPMP} monted on" \
    107       1.1  bouyer 	    "${TMPIM}, ${EN} byte order."
    108       1.1  bouyer 	dd if=/dev/zero of=${TMPIM} count=5860
    109       1.1  bouyer 	vnconfig -v ${BVND}${RPART} ${TMPIM}
    110       1.4    tron 	disklabel -f ${SRCDIR}/disktab -rw ${VND} floppy288
    111       1.1  bouyer 	newfs -B ${EN} -i 500 -b 8192 -f 1024 ${CVND}${MPART}
    112       1.1  bouyer 	mkdir ${TMPMP}
    113       1.1  bouyer 	mount -o async ${BVND}${MPART} ${TMPMP}
    114       1.1  bouyer 	# Arg, cp will give an error if the symlink is copied before its target
    115       1.1  bouyer 	-cp -Rp ${TMPL}/* ${TMPMP}
    116       1.1  bouyer 	${MAKECMD} cmp
    117       1.1  bouyer 
    118       1.1  bouyer template:
    119       1.1  bouyer 	mkdir ${TMPL}
    120       1.1  bouyer 	@# Create a directory with a 10K file, with the file marked nodump.
    121       1.1  bouyer 	mkdir ${TMPL}/nodumpfile
    122       1.1  bouyer 	jot -r -c -s '' -n 10240 > ${TMPL}/nodumpfile/10k 
    123       1.1  bouyer 	chflags nodump ${TMPL}/nodumpfile/10k
    124       1.1  bouyer 	@# And some ordinary 10k files.
    125       1.1  bouyer 	mkdir ${TMPL}/dumpfile
    126       1.1  bouyer 	TMPFS_DUMP=${TMPL}/dumpfile/dumpfile.10k; \
    127       1.1  bouyer 	for f in ${DIGITS}; do \
    128       1.1  bouyer 	  jot -r -c -s '' -n 10240 > $$TMPFS_DUMP.$$f; done;
    129       1.1  bouyer 	@# A subdir with a short and a long symbolic link in it
    130       1.1  bouyer 	mkdir ${TMPL}/dumpfile/subdir
    131       1.1  bouyer 	ln -s ../dumpfile.10k.0 ${TMPL}/dumpfile/subdir/link;
    132       1.1  bouyer 	ln -s ../dumpfile.10k.1 ${TMPL}/dumpfile/subdir/really_really_really_really_really_really_long_name_to_use_up_space.link;
    133       1.1  bouyer 	@# And now the same files, but in a dir marked nodump:
    134       1.1  bouyer 	mkdir ${TMPL}/nodumpdir
    135       1.1  bouyer 	chflags nodump ${TMPL}/nodumpdir
    136       1.1  bouyer 	TMPFS_1=${TMPL}/nodumpdir/10k; \
    137       1.1  bouyer 	  for f in ${DIGITS}; do  \
    138       1.1  bouyer 	      jot -r -c -s '' -n 10240 > $$TMPFS_1.$$f; \
    139       1.1  bouyer 	  done
    140       1.1  bouyer 	
    141       1.1  bouyer 	@# Also create a large directory that uses more than one direct block
    142       1.1  bouyer 	@# (so it has to be larger than 8K).
    143       1.1  bouyer 	@# Make sure one entry is for a deleted file, also.
    144       1.1  bouyer 	mkdir ${TMPL}/2blkdir
    145       1.1  bouyer 	TMPFS_1=${TMPL}/2blkdir; \
    146       1.1  bouyer 	  jot -r -c -s '' -n 10 > $$TMPFS_1/10b; \
    147       1.1  bouyer 	  for f in ${DIGITS}; do for g in ${DIGITS}; do \
    148       1.1  bouyer 	    jot -r -c -s '' -n 10 > \
    149       1.1  bouyer 	      $$TMPFS_1/really_really_really_really_really_really_long_name_to_use_up_space_$$f$$g ;\
    150       1.1  bouyer 	    done; done; \
    151       1.1  bouyer 	  rm $$TMPFS_1/10b
    152       1.1  bouyer 
    153       1.1  bouyer 	@# Now create a directory with at least one indirect block.
    154       1.1  bouyer 	@# On a FS with 8K blocks, we need at least 1 + 12*8192 bytes, or
    155       1.1  bouyer 	@#   98305 bytes, in the directory.  1000 files does the trick,
    156       1.1  bouyer 	@#   with the long filename below.
    157       1.1  bouyer 	mkdir ${TMPL}/indirblk
    158       1.1  bouyer 	chflags nodump ${TMPL}/indirblk
    159       1.1  bouyer 	TMPFS_1=${TMPL}/indirblk; \
    160       1.1  bouyer 	  jot -r -c -s '' -n 10 >  $$TMPFS_1/10b; \
    161       1.1  bouyer 	  for e in 0; do\
    162       1.1  bouyer 	  for f in ${DIGITS}; do for g in ${DIGITS}; do for h in ${DIGITS}; do \
    163       1.1  bouyer 	    jot -r -c -s '' -n 10 >  \
    164       1.1  bouyer 	      $$TMPFS_1/really_really_really_really_really_really_long_name_to_use_up_dir_entry_space$$e$$f$$g$$h ;\
    165       1.1  bouyer 	    done; done; done; done; \
    166       1.1  bouyer 	  rm $$TMPFS_1/10b
    167       1.1  bouyer 	@# ^---  As before, make sure at least one direntry is a deleted file.
    168