Files
swupd-server/test/test_hardlink.sh
Patrick McCarty 6c438ca96f Initial commit
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2016-02-24 10:00:31 -08:00

90 lines
2.4 KiB
Bash
Executable File

#! /bin/bash
# This creates a bunch of files, all with the same content, and with various
# combinations of xaddrs. It lists them with their inode numbers, then runs
# hardlink on them, and then lists them with inodes again. Since name of each
# file corresponds to is xattrs, you can easily see if expected linking is
# indeed happening.
TMPDIR=$(mktemp -d /tmp/hardlinktest-XXXXXX)
makeFile() {
local argC=$#
local fName=${1}-File
shift 1; (( argC = $argC - 1 ))
local nameValPairs=$*
while (( $argC >= 1 )) ; do
if (( $argC == 1 )) ; then
fName=${fName}-${1}
shift 1; (( argC = $argC - 1 ))
else
if [[ -z $2 ]] ; then
fName=${fName}-${1}
else
fName=${fName}-${1}:${2}
fi
shift 2; (( argC = $argC - 2 ))
fi;
done
echo "must have some content else can't set xattrs" > $TMPDIR/$fName
setXattrs $fName $nameValPairs
}
setXattrs() {
local argC=$#
local fName=${1}
shift 1; (( argC = $argC - 1 ))
local nameValPairs=$*
while (( $argC >= 1 )) ; do
if (( $argC == 1 )) ; then
setfattr -n user.$1 $TMPDIR/$fName
shift 1; (( argC = $argC - 1 ))
else
if [[ -z $2 ]] ; then
setfattr -n user.$1 $TMPDIR/$fName
else
setfattr -n user.$1 -v $2 $TMPDIR/$fName
fi
shift 2; (( argC = $argC - 2 ))
fi;
done
}
for prefix in A B ; do
makeFile $prefix
makeFile $prefix XXX XXX
makeFile $prefix XXX
makeFile $prefix XXX XXX YYY YYY
makeFile $prefix YYY YYY XXX XXX
makeFile $prefix XXX "" YYY YYY
makeFile $prefix XXX XXX YYY
makeFile $prefix XXX "" YYY
makeFile $prefix YYY "" XXX
makeFile $prefix XXX XXX YYY YYY ZZZ ZZZ
makeFile $prefix YYY YYY XXX XXX ZZZ ZZZ
makeFile $prefix ZZZ ZZZ YYY YYY XXX XXX
makeFile $prefix XXX XXXXXXXXXX YYY YYYYYYYY ZZZ ZZZ
makeFile $prefix YYY YYYYYYYY XXX XXXXXXXXXX ZZZ ZZZ
makeFile $prefix ZZZ ZZZ YYY YYYYYYYY XXX XXXXXXXXXX
makeFile $prefix AA V BB V CC V DD V
makeFile $prefix AAAAAAAAAA V BBBBBBBBBB V
done
pushd $TMPDIR > /dev/null
getfattr -d *
ls -1i | sort
popd > /dev/null
hardlink $TMPDIR --ignore-time --respect-xattrs --maximize
pushd $TMPDIR > /dev/null
ls -1i | sort
popd > /dev/null
rm -rf $TMPDIR