The branch stable/14 has been updated by se:

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

commit 2d3cd414d1cef4d8b33bc257cd803069805fb359
Author:     Stefan Eßer <[email protected]>
AuthorDate: 2026-05-29 15:52:05 +0000
Commit:     Stefan Eßer <[email protected]>
CommitDate: 2026-06-16 10:59:36 +0000

    tools/test/stress2/misc: Add msdosfs tests for surrogate pairs
    
    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.
    
    (cherry picked from commit aa029088ec130d71b406c4118346fbd933940826)
    (cherry picked from commit 11f23d7c078b319285727d277f05b6962280bcce)
    (cherry picked from commit 596dadbbb5a711477f811fed65a6c463801d16c5)
    (cherry picked from commit 3260c42c4183ac817cf08fcaa236d4d21b4fc0d2)
---
 tools/test/stress2/misc/msdos22.sh | 77 ++++++++++++++++++++++++++++++++++
 tools/test/stress2/misc/msdos23.sh | 77 ++++++++++++++++++++++++++++++++++
 tools/test/stress2/misc/msdos24.sh | 86 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 240 insertions(+)

diff --git a/tools/test/stress2/misc/msdos22.sh 
b/tools/test/stress2/misc/msdos22.sh
new file mode 100755
index 000000000000..f3a2110f13f1
--- /dev/null
+++ b/tools/test/stress2/misc/msdos22.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# Test file operations using long random file names consisting only of ASCII 
characters
+
+MDUNIT=10
+FS=/mnt
+LOCALE=C
+FILES=1000
+
+export LANG=$LOCALE
+
+randomfilename () {
+       name=""
+       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
+               testfiles="$testfiles
+$(randomfilename)"
+       done
+
+       testfiles=$(echo "$testfiles" | grep "." | sort -R | uniq)
+
+       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..fcaa90917235
--- /dev/null
+++ b/tools/test/stress2/misc/msdos23.sh
@@ -0,0 +1,77 @@
+#!/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=""
+       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
+               testfiles="$testfiles
+$(randomfilename)"
+       done
+
+       testfiles=$(echo "$testfiles" | grep "." | sort -R | uniq)
+
+       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..d16a869d3eea
--- /dev/null
+++ b/tools/test/stress2/misc/msdos24.sh
@@ -0,0 +1,86 @@
+#!/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=""
+       count=$(jot -r 1 10 3)
+       for r in $(jot -r $count 7 0); do
+               r=$(( r + 0 ))
+               case $(jot -r 1 3 1) in
+               1)
+                       emoji="\0360\0237\0230\020$r"
+                       c=$(echo -e $emoji)
+                       ;;
+               *)
+                       food="\0360\0237\0245\022$r"
+                       c=$(echo -e $food)
+                       ;;
+               esac
+               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
+               testfiles="$testfiles
+$(randomfilename)"
+       done
+
+       testfiles=$(echo "$testfiles" | grep "." | sort -R | uniq)
+
+       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

Reply via email to