You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

81 lines
3.0 KiB

#!/usr/bin/env bash
#
# Unit test for symlinks
# Run test on a test set e.g. an artificially created rootfs
#
SYMLINKS_BIN=../symlinks
ROOTFS_FOLDER=rootfs
ROOTFS_DANGLING_LINKS=3
TEST_FOLDER=$(dirname $0)
echo "* Running unit tests on $TEST_FOLDER/$ROOTFS_FOLDER"
###################################################################################################
# Simple test which should cover all test cases implemented in (generate-rootfs.sh):
#
# Test case #1: normal chained / cascaded symlinks in the case of software versioning
# Expected Result: do nothing, everything is fine here!
#
# Test case #2: absolute symlinks
# Expected result: change absolute symlinks into relative ones
#
# Test case #3: detect dangling symlinks as in the case of messed up library versioning
# Expected result: detect and delete all symlinks which are involved
#
# Test case #4: recursive mess of absolute symlinks
# Expected result: resolve all symlinks, at least after second run!
###################################################################################################
# let's run symlink against the just generated rootfs folder and see how it does:
# cd into rootfs folder first
cd $TEST_FOLDER/$ROOTFS_FOLDER
# call 'symlinks' to convert all absolute symlinks to relative ones with the following options:
# -v verbose
# -r recursive
# -c change absolute links into relative links
COUNT=0
while [ "$(../$SYMLINKS_BIN -verc . | grep absolute)" ]; do
COUNT=$((COUNT+1))
echo "Test run #$COUNT"
done
# call 'symlinks' again to get rid of the remaining dangling symlinks which could not be fixed
echo "Last run to fix the remaining dangling symlinks"
DANGLING_SYMLINKS_COUNT=$(../$SYMLINKS_BIN -verd . | grep dangling | wc -l)
echo "Removed $DANGLING_SYMLINKS_COUNT dangling links!"
if [ $DANGLING_SYMLINKS_COUNT -lt $ROOTFS_DANGLING_LINKS ]; then
echo "Detected and removed too less broken symlinks!"
elif [ $DANGLING_SYMLINKS_COUNT -gt $ROOTFS_DANGLING_LINKS ]; then
echo "Detected and removed too many broken symlinks!"
fi
# now let's look if there are broken symlinks left, 'find' offers some easy way to do that
BROKEN_SYMLINKS=$(find -L -type l)
# and also if there are still existing (maybe even working) absolute symlinks left
ABSOLUTE_SYMLINKS=$(find -type l -exec readlink {} \; | grep "^/")
if [ "$BROKEN_SYMLINKS" ] || [ "$ABSOLUTE_SYMLINKS" ]; then
echo "Test failed, program was not able to fix all symlink problems..."
if [ "$BROKEN_SYMLINKS" ]; then
echo "The following symlinks have not been fixed:"
for link in $BROKEN_SYMLINKS; do
echo -e "\t * $link -> $(readlink $link)"
done
fi
if [ "$ABSOLUTE_SYMLINKS" ]; then
echo "There are still (maybe even working) absolute symlinks left:"
for link in $ABSOLUTE_SYMLINKS; do
echo -e "\t * $link -> $(readlink $link)"
done
fi
else
echo "Test succeeded, it seems symlinks was able to solve all symlink problems!"
fi