xref: /freebsd/tools/test/stress2/misc/msdos23.sh (revision 11f23d7c078b319285727d277f05b6962280bcce)
1#!/bin/sh
2
3# Test file operations using random file names containing non-ASCII characters
4
5MDUNIT=10
6FS=/mnt
7LOCALE=C.UTF-8
8FILES=1000
9
10export LANG=$LOCALE
11
12randomfilename () {
13	name=""
14	count=$(jot -r 1 10 3)
15	for r in $(jot -r $count 7 0); do
16		r=$(( r + 0 ))
17		c='·'
18		if [ $r -gt 0 ]; then
19			for i in $(jot $r); do
20				name="$name$i"
21			done
22		fi
23		count=$(( count - 1 ))
24		if [ "$count" -gt 0 ]; then
25			name="$name$c"
26		fi
27	done
28	echo "$name"
29}
30
31(
32	set -e
33
34	mdconfig -u $MDUNIT -t malloc -s 512m
35	newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1
36	mkdir -p $FS
37	mount_msdosfs -L $LOCALE /dev/md$MDUNIT $FS
38
39	mkdir -p $FS/test
40	cd $FS/test
41
42	for i in $(jot $FILES); do
43		testfiles="$testfiles
44$(randomfilename)"
45	done
46
47	testfiles=$(echo "$testfiles" | grep "." | sort -R | uniq)
48
49	for f in $testfiles; do
50		echo "$f" > $f
51	done
52	for f in $(echo "$testfiles" | sort -R); do
53		cp $f $f.tmp
54	done
55	for f in $(echo "$testfiles" | sort -R); do
56		mv $f.tmp $f
57	done
58	for f in $(echo "$testfiles" | sort -R); do
59		rm $f
60	done
61)
62
63failed=$?
64
65cd
66
67[ "$failed" -ne 0 ] && ls $FS/test
68
69umount /dev/md$MDUNIT
70
71#[ "$failed" -ne 0 ] && hd /dev/md$MDUNIT > /tmp/msdos23.dump
72
73fsck_msdosfs -y /dev/md$MDUNIT
74
75mdconfig -d -u $MDUNIT 2>/dev/null
76
77exit $failed
78