Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 May 2026 16:15:53 +0000
From:      Stefa=?utf-8?Q?n E=C3=9Fer?= <se@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: aa029088ec13 - main - tools/test/stress2/misc: Add msdosfs tests (currently failing)
Message-ID:  <6a19bbb9.367da.25daf623@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by se:

URL: https://cgit.FreeBSD.org/src/commit/?id=aa029088ec130d71b406c4118346fbd933940826

commit aa029088ec130d71b406c4118346fbd933940826
Author:     Stefan Eßer <se@FreeBSD.org>
AuthorDate: 2026-05-29 15:52:05 +0000
Commit:     Stefan Eßer <se@FreeBSD.org>
CommitDate: 2026-05-29 16:15:33 +0000

    tools/test/stress2/misc: Add msdosfs tests (currently failing)
    
    Test msdos22.sh creates 1000 files with long random names consisting
    of only ASCII characters. The mount is performed without -L option,
    therefore no use of iconv to convert between character sets.
    
    Test msdos23.sh mixes some non-ASCII characters into the file names.
    The file system is therefore mounted with -L C.UTF-8 to include tests
    of the conversions between UTF-8 and UTF-16.
    
    Test msdos24.sh adds emojis to the names to test the (not yet
    committed) support of UTF-16 surrogate pairs in filenames.
    
    All 3 tests succeed with a small number of files (e.g., 10), but fail
    most of the time when testing with 1000 files.
    
    The tests have been added to all.exclude since they are expected to
    fail. They shall be enabled as regression tests, when the msdosfs code
    has been fixed.
---
 tools/test/stress2/misc/all.exclude |  3 ++
 tools/test/stress2/misc/msdos22.sh  | 79 ++++++++++++++++++++++++++++++++++++
 tools/test/stress2/misc/msdos23.sh  | 79 ++++++++++++++++++++++++++++++++++++
 tools/test/stress2/misc/msdos24.sh  | 80 +++++++++++++++++++++++++++++++++++++
 4 files changed, 241 insertions(+)

diff --git a/tools/test/stress2/misc/all.exclude b/tools/test/stress2/misc/all.exclude
index 9ec5bffde0f6..7109555c5508 100644
--- a/tools/test/stress2/misc/all.exclude
+++ b/tools/test/stress2/misc/all.exclude
@@ -39,6 +39,9 @@ mount7.sh		https://people.freebsd.org/~pho/stress/log/log0549.txt		20240912
 mlockall2.sh		Unrecoverable OOM killing seen					20190203
 mlockall6.sh		https://people.freebsd.org/~pho/stress/log/log0430.txt		20230403
 mlockall7.sh		Needs further investigation					20210123
+msdos22.sh		Waiting for fix							20260529
+msdos23.sh		Waiting for fix							20260529
+msdos24.sh		Waiting for fix							20260529
 msetdomain.sh		May change policy for random threads to domainset_fixed		20210104
 newfs4.sh		watchdog fired. newbuf (still seen 20240729)			20190225
 nfs10.sh		Double fault							20151013
diff --git a/tools/test/stress2/misc/msdos22.sh b/tools/test/stress2/misc/msdos22.sh
new file mode 100755
index 000000000000..158a52a7aa7b
--- /dev/null
+++ b/tools/test/stress2/misc/msdos22.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+# Test file operations using long random file names consisting only of ASCII characters
+
+MDUNIT=10
+FS=/mnt
+LOCALE=C.UTF-8
+FILES=1000
+
+export LANG=$LOCALE
+
+randomfilename () {
+	name="f"
+	count=$(jot -r 1 10 3)
+	for r in $(jot -r $count 7 0); do
+		r=$(( r + 0 ))
+		c='_'
+		if [ $r -gt 0 ]; then
+			for i in $(jot $r); do
+				name="$name$i"
+			done
+		fi
+		count=$(( count - 1 ))
+		if [ "$count" -gt 0 ]; then
+			name="$name$c"
+		fi
+	done
+	echo "$name"
+}
+
+(
+	set -e
+
+	mdconfig -u $MDUNIT -t malloc -s 512m
+	newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1
+	mkdir -p $FS
+	mount_msdosfs /dev/md$MDUNIT $FS
+
+	mkdir -p $FS/test
+	cd $FS/test
+
+	for i in $(jot $FILES); do
+		newfile=$(randomfilename)
+		case $testfiles in
+		*"$newfile"*) continue;;
+		esac
+		testfiles="$(randomfilename)
+$testfiles"
+	done
+
+	for f in $testfiles; do
+		echo "$f" > $f
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		cp $f $f.tmp
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		mv $f.tmp $f
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		rm $f
+	done
+)
+
+failed=$?
+
+cd
+
+[ "$failed" -ne 0 ] && ls $FS/test
+
+umount /dev/md$MDUNIT
+
+#[ "$failed" -ne 0 ] && hd /dev/md$MDUNIT > /tmp/msdos22.dump
+
+fsck_msdosfs -y /dev/md$MDUNIT
+
+mdconfig -d -u $MDUNIT 2>/dev/null
+
+exit $failed
diff --git a/tools/test/stress2/misc/msdos23.sh b/tools/test/stress2/misc/msdos23.sh
new file mode 100755
index 000000000000..18982c34f68b
--- /dev/null
+++ b/tools/test/stress2/misc/msdos23.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+# Test file operations using random file names containing non-ASCII characters
+
+MDUNIT=10
+FS=/mnt
+LOCALE=C.UTF-8
+FILES=1000
+
+export LANG=$LOCALE
+
+randomfilename () {
+	name="f"
+	count=$(jot -r 1 10 3)
+	for r in $(jot -r $count 7 0); do
+		r=$(( r + 0 ))
+		c='·'
+		if [ $r -gt 0 ]; then
+			for i in $(jot $r); do
+				name="$name$i"
+			done
+		fi
+		count=$(( count - 1 ))
+		if [ "$count" -gt 0 ]; then
+			name="$name$c"
+		fi
+	done
+	echo "$name"
+}
+
+(
+	set -e
+
+	mdconfig -u $MDUNIT -t malloc -s 512m
+	newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1
+	mkdir -p $FS
+	mount_msdosfs -L $LOCALE /dev/md$MDUNIT $FS
+
+	mkdir -p $FS/test
+	cd $FS/test
+
+	for i in $(jot $FILES); do
+		newfile=$(randomfilename)
+		case $testfiles in
+		*"$newfile"*) continue;;
+		esac
+		testfiles="$(randomfilename)
+$testfiles"
+	done
+
+	for f in $testfiles; do
+		echo "$f" > $f
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		cp $f $f.tmp
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		mv $f.tmp $f
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		rm $f
+	done
+)
+
+failed=$?
+
+cd
+
+[ "$failed" -ne 0 ] && ls $FS/test
+
+umount /dev/md$MDUNIT
+
+#[ "$failed" -ne 0 ] && hd /dev/md$MDUNIT > /tmp/msdos23.dump
+
+fsck_msdosfs -y /dev/md$MDUNIT
+
+mdconfig -d -u $MDUNIT 2>/dev/null
+
+exit $failed
diff --git a/tools/test/stress2/misc/msdos24.sh b/tools/test/stress2/misc/msdos24.sh
new file mode 100755
index 000000000000..195c4ba8d9b9
--- /dev/null
+++ b/tools/test/stress2/misc/msdos24.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+# Test file operations using long random file names containing UTF-16 surrogate pairs
+
+MDUNIT=10
+FS=/mnt
+LOCALE=C.UTF-8
+FILES=1000
+
+export LANG=$LOCALE
+
+randomfilename () {
+	name="f"
+	count=$(jot -r 1 10 3)
+	for r in $(jot -r $count 7 0); do
+		r=$(( r + 0 ))
+		emoji="\0360\0237\0230\020$r"
+		c=$(echo -e $emoji)
+		if [ $r -gt 0 ]; then
+			for i in $(jot $r); do
+				name="$name$i"
+			done
+		fi
+		count=$(( count - 1 ))
+		if [ "$count" -gt 0 ]; then
+			name="$name$c"
+		fi
+	done
+	echo "$name"
+}
+
+(
+	set -e
+
+	mdconfig -u $MDUNIT -t malloc -s 512m
+	newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1
+	mkdir -p $FS
+	mount_msdosfs -L $LOCALE /dev/md$MDUNIT $FS
+
+	mkdir -p $FS/test
+	cd $FS/test
+
+	for i in $(jot $FILES); do
+		newfile=$(randomfilename)
+		case $testfiles in
+		*"$newfile"*) continue;;
+		esac
+		testfiles="$(randomfilename)
+$testfiles"
+	done
+
+	for f in $testfiles; do
+		echo "$f" > $f
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		cp $f $f.tmp
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		mv $f.tmp $f
+	done
+	for f in $(echo "$testfiles" | sort -R); do
+		rm $f
+	done
+)
+
+failed=$?
+
+cd
+
+[ "$failed" -ne 0 ] && ls $FS/test
+
+umount /dev/md$MDUNIT
+
+#[ "$failed" -ne 0 ] && hd /dev/md$MDUNIT > /tmp/msdos24.dump
+
+fsck_msdosfs -y /dev/md$MDUNIT
+
+mdconfig -d -u $MDUNIT 2>/dev/null
+
+exit $failed


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a19bbb9.367da.25daf623>