mirror of https://github.com/brandt/symlinks.git
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
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
|
|
|
|
|