87 lines
2.2 KiB
Bash
Executable File
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." |