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