From 460f3ce503bdef043ff6d64b7778442092c75cdf Mon Sep 17 00:00:00 2001 From: "Bryant G. Duffy-Ly" Date: Mon, 24 Jan 2022 14:48:14 -0600 Subject: [PATCH] Add unit tests for retention Signed-off-by: Bryant G. Duffy-Ly [zab@versity.com: refactored for retention, added test cases] Signed-off-by: Zach Brown --- tests/golden/retention-basic | 28 +++++++++++++++++ tests/sequence | 1 + tests/tests/retention-basic.sh | 57 ++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 tests/golden/retention-basic create mode 100644 tests/tests/retention-basic.sh diff --git a/tests/golden/retention-basic b/tests/golden/retention-basic new file mode 100644 index 00000000..05d2c495 --- /dev/null +++ b/tests/golden/retention-basic @@ -0,0 +1,28 @@ +== setting retention on dir fails +attr_x ioctl failed on '/mnt/test/test/retention-basic': Invalid argument (22) +scoutfs: set-attr-x failed: Invalid argument (22) +== set retention +== get-attr-x shows retention +1 +== unpriv can't clear retention +attr_x ioctl failed on '/mnt/test/test/retention-basic/file-1': Operation not permitted (1) +scoutfs: set-attr-x failed: Operation not permitted (1) +== can set hidden scoutfs xattr in retention +== setting user. xattr fails in retention +setfattr: /mnt/test/test/retention-basic/file-1: Operation not permitted +== file deletion fails in retention +rm: cannot remove '/mnt/test/test/retention-basic/file-1': Operation not permitted +== file rename fails in retention +mv: cannot move '/mnt/test/test/retention-basic/file-1' to '/mnt/test/test/retention-basic/file-2': Operation not permitted +== file write fails in retention +date: write error: Operation not permitted +== file truncate fails in retention +truncate: failed to truncate '/mnt/test/test/retention-basic/file-1' at 0 bytes: Operation not permitted +== setattr fails in retention +touch: setting times of '/mnt/test/test/retention-basic/file-1': Operation not permitted +== clear retention +== file write +== file rename +== setattr +== xattr deletion +== cleanup diff --git a/tests/sequence b/tests/sequence index c47d41aa..448f0473 100644 --- a/tests/sequence +++ b/tests/sequence @@ -18,6 +18,7 @@ enospc.sh srch-safe-merge-pos.sh srch-basic-functionality.sh simple-xattr-unit.sh +retention-basic.sh totl-xattr-tag.sh lock-refleak.sh lock-shrink-consistency.sh diff --git a/tests/tests/retention-basic.sh b/tests/tests/retention-basic.sh new file mode 100644 index 00000000..60a5b544 --- /dev/null +++ b/tests/tests/retention-basic.sh @@ -0,0 +1,57 @@ +t_require_commands scoutfs touch rm setfattr + +touch "$T_D0/file-1" + +echo "== setting retention on dir fails" +scoutfs set-attr-x -t 1 "$T_D0" 2>&1 | t_filter_fs + +echo "== set retention" +scoutfs set-attr-x -t 1 "$T_D0/file-1" + +echo "== get-attr-x shows retention" +scoutfs get-attr-x -t "$T_D0/file-1" + +echo "== unpriv can't clear retention" +setpriv --ruid=12345 --euid=12345 scoutfs set-attr-x -t 0 "$T_D0/file-1" 2>&1 | t_filter_fs + +echo "== can set hidden scoutfs xattr in retention" +setfattr -n scoutfs.hide.srch.retention_test -v val "$T_D0/file-1" + +echo "== setting user. xattr fails in retention" +setfattr -n user.retention_test -v val "$T_D0/file-1" 2>&1 | t_filter_fs + +echo "== file deletion fails in retention" +rm -f "$T_D0/file-1" 2>&1 | t_filter_fs + +echo "== file rename fails in retention" +mv $T_D0/file-1 $T_D0/file-2 2>&1 | t_filter_fs + +echo "== file write fails in retention" +date >> $T_D0/file-1 + +echo "== file truncate fails in retention" +truncate -s 0 $T_D0/file-1 2>&1 | t_filter_fs + +echo "== setattr fails in retention" +touch $T_D0/file-1 2>&1 | t_filter_fs + +echo "== clear retention" +scoutfs set-attr-x -t 0 "$T_D0/file-1" + +echo "== file write" +date >> $T_D0/file-1 + +echo "== file rename" +mv $T_D0/file-1 $T_D0/file-2 +mv $T_D0/file-2 $T_D0/file-1 + +echo "== setattr" +touch $T_D0/file-1 2>&1 | t_filter_fs + +echo "== xattr deletion" +setfattr -x scoutfs.hide.srch.retention_test "$T_D0/file-1" + +echo "== cleanup" +rm -f "$T_D0/file-1" + +t_pass