FS/test.bash
2025-06-15 20:46:49 +00:00

87 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
set -e
mnt=/mnt/test
sudo mount -t libfs none "$mnt"
fail() {
echo "FAIL: $1" >&2
exit 1
}
check_mode() {
[ "$(stat -c '%a' "$1")" = "$2" ] || fail "$1 mode != $2"
}
check_owner() {
[ "$(stat -c '%U' "$1")" = "$2" ] || fail "$1 owner != $2"
}
check_fail() {
set +e
"$@"
status=$?
set -e
[ "$status" -ne 0 ] || fail "Expected failure: $*"
}
# 2. Права на директории
check_mode "$mnt/books" 1777
check_mode "$mnt/authors" 777
# 3. Удаление/переименование books
check_fail rmdir "$mnt/books"
check_fail mv "$mnt/books" "$mnt/b"
# 4. Создание файла
sudo touch "$mnt/books/f1"
echo "data" | sudo tee "$mnt/books/f1" > /dev/null
[ "$(cat "$mnt/books/f1")" = "data" ] || fail "f1 content mismatch"
# 5. mkdir и mkfifo в books
check_fail mkdir "$mnt/books/dir"
check_fail mkfifo "$mnt/books/fifo"
# 6. mkdir в authors
mkdir "$mnt/authors/u1"
check_mode "$mnt/authors/u1" 1777
# 7. Переименование и удаление чужого каталога
check_fail mv "$mnt/authors/u1" "$mnt/authors/u1-renamed"
check_fail rmdir "$mnt/authors/u1-renamed"
# 8. ссылки в authors
ln "$mnt/books/f1" "$mnt/authors/u1/link1"
check_fail ln -s "$mnt/books/f1" "$mnt/authors/u1/symlink"
check_fail touch "$mnt/authors/u1/new.txt"
check_fail mkdir "$mnt/authors/u1/dir1"
# 9. удаление файла — должна исчезнуть ссылка
sudo rm "$mnt/books/f1"
[ ! -e "$mnt/authors/u1/link1" ] || fail "link1 not removed after f1 deletion"
# 10. пересоздание f1 — ссылка не должна появиться
sudo touch "$mnt/books/f1"
[ ! -e "$mnt/authors/u1/link1" ] || fail "link1 appeared after f1 recreated"
# 11. удалить только ссылку
sudo touch "$mnt/books/f2"
ln "$mnt/books/f2" "$mnt/authors/u1/link2"
rm "$mnt/authors/u1/link2"
[ -e "$mnt/books/f2" ] || fail "f2 removed with link2"
# 12. удалить файл после удаления ссылки
ln "$mnt/books/f2" "$mnt/authors/u1/link2"
rm "$mnt/authors/u1/link2"
sudo rm "$mnt/books/f2"
# 13. remount check
sudo umount "$mnt"
sudo mount -t libfs none "$mnt"
check_mode "$mnt/books" 1777
check_mode "$mnt/authors" 777
echo "All tests passed."