mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
a860a167d8
fstests only supports Linux, so get rid of this unnecessary predicate. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
153 lines
3.9 KiB
Bash
Executable File
153 lines
3.9 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0+
|
|
# Copyright (c) 2019, Oracle and/or its affiliates. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. 504
|
|
#
|
|
# Create a filesystem label with emoji and confusing unicode characters
|
|
# to make sure that these special things actually work on xfs. In
|
|
# theory it should allow this (labels are a sequence of arbitrary bytes)
|
|
# even if the user implications are horrifying.
|
|
#
|
|
seq=`basename "$0"`
|
|
seqres="$RESULT_DIR/$seq"
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -f $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
_supported_fs xfs
|
|
_require_scratch_nocheck
|
|
_require_xfs_io_command 'label'
|
|
|
|
echo "Silence is golden."
|
|
|
|
want_scrub=
|
|
_check_xfs_scrub_does_unicode "$SCRATCH_MNT" "$SCRATCH_DEV" && want_scrub=yes
|
|
|
|
filter_scrub() {
|
|
grep 'Unicode' | sed -e 's/^.*Duplicate/Duplicate/g'
|
|
}
|
|
|
|
maybe_scrub() {
|
|
test "$want_scrub" = "yes" || return
|
|
|
|
output="$(LC_ALL="C.UTF-8" ${XFS_SCRUB_PROG} -v -n "${SCRATCH_MNT}" 2>&1)"
|
|
echo "xfs_scrub output:" >> $seqres.full
|
|
echo "$output" >> $seqres.full
|
|
echo "$output" >> $tmp.scrub
|
|
}
|
|
|
|
testlabel() {
|
|
local label="$(echo -e "$1")"
|
|
local expected_label="label = \"$label\""
|
|
|
|
echo "Formatting label '$1'." >> $seqres.full
|
|
# First, let's see if we can recover the label when we set it
|
|
# with mkfs.
|
|
_scratch_mkfs -L "$label" >> $seqres.full 2>&1
|
|
_scratch_mount >> $seqres.full 2>&1
|
|
blkid -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
|
|
blkid -d -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
|
|
|
|
# Did it actually stick?
|
|
local actual_label="$($XFS_IO_PROG -c label $SCRATCH_MNT)"
|
|
echo "$actual_label" >> $seqres.full
|
|
|
|
if [ "${actual_label}" != "${expected_label}" ]; then
|
|
echo "Saw '${expected_label}', expected '${actual_label}'."
|
|
fi
|
|
maybe_scrub
|
|
_scratch_unmount
|
|
|
|
# Now let's try setting the label online to see what happens.
|
|
echo "Setting label '$1'." >> $seqres.full
|
|
_scratch_mkfs >> $seqres.full 2>&1
|
|
_scratch_mount >> $seqres.full 2>&1
|
|
$XFS_IO_PROG -c "label -s $label" $SCRATCH_MNT >> $seqres.full
|
|
blkid -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
|
|
blkid -d -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
|
|
_scratch_cycle_mount
|
|
|
|
# Did it actually stick?
|
|
local actual_label="$($XFS_IO_PROG -c label $SCRATCH_MNT)"
|
|
echo "$actual_label" >> $seqres.full
|
|
|
|
if [ "${actual_label}" != "${expected_label}" ]; then
|
|
echo "Saw '${expected_label}'; expected '${actual_label}'."
|
|
fi
|
|
maybe_scrub
|
|
_scratch_unmount
|
|
}
|
|
|
|
# Simple test
|
|
testlabel "simple"
|
|
|
|
# Two different renderings of the same label
|
|
testlabel "caf\xc3\xa9.fs"
|
|
testlabel "cafe\xcc\x81.fs"
|
|
|
|
# Arabic code point can expand into a muuuch longer series
|
|
testlabel "xfs_\xef\xb7\xba.fs"
|
|
|
|
# Fake slash?
|
|
testlabel "urk\xc0\xafmoo"
|
|
|
|
# Emoji: octopus butterfly owl giraffe
|
|
testlabel "\xf0\x9f\xa6\x91\xf0\x9f\xa6\x8b\xf0\x9f\xa6\x89"
|
|
|
|
# unicode rtl widgets too...
|
|
testlabel "mo\xe2\x80\xaegnp.txt"
|
|
testlabel "motxt.png"
|
|
|
|
# mixed-script confusables
|
|
testlabel "mixed_t\xce\xbfp"
|
|
testlabel "mixed_top"
|
|
|
|
# single-script spoofing
|
|
testlabel "a\xe2\x80\x90b.fs"
|
|
testlabel "a-b.fs"
|
|
|
|
testlabel "dz_dze.fs"
|
|
testlabel "dz_\xca\xa3e.fs"
|
|
|
|
# symbols
|
|
testlabel "_Rs.fs"
|
|
testlabel "_\xe2\x82\xa8.fs"
|
|
|
|
# zero width joiners
|
|
testlabel "moocow.fs"
|
|
testlabel "moo\xe2\x80\x8dcow.fs"
|
|
|
|
# combining marks
|
|
testlabel "\xe1\x80\x9c\xe1\x80\xad\xe1\x80\xaf.fs"
|
|
testlabel "\xe1\x80\x9c\xe1\x80\xaf\xe1\x80\xad.fs"
|
|
|
|
# fake dotdot entry
|
|
testlabel ".\xe2\x80\x8d"
|
|
testlabel "..\xe2\x80\x8d"
|
|
|
|
# Did scrub choke on anything?
|
|
if [ "$want_scrub" = "yes" ]; then
|
|
grep -q "^Warning.*gnp.txt.*suspicious text direction" $tmp.scrub || \
|
|
echo "No complaints about direction overrides?"
|
|
grep -q "^Warning.*control characters" $tmp.scrub || \
|
|
echo "No complaints about control characters?"
|
|
fi
|
|
|
|
# success, all done
|
|
status=0
|
|
exit
|