From ac932250f8baf23a4ffff9ee82842a0259f4c4cf Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 31 Jan 2020 16:10:03 -0800 Subject: chattr.test: fix tests. Cope with all the extra flags added recently, and ignore random stuff from the environment like extents and encryption. Tested on a cloud Android emulator with f2fs. --- tests/chattr.test | 142 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 57 deletions(-) diff --git a/tests/chattr.test b/tests/chattr.test index 04005a7a..24d5cb6c 100755 --- a/tests/chattr.test +++ b/tests/chattr.test @@ -4,86 +4,109 @@ #testing "name" "command" "result" "infile" "stdin" -if [ "$(id -u)" -ne 0 ] -then +if [ "$(id -u)" -ne 0 ]; then echo "$SHOWSKIP: chattr (not root)" return 2>/dev/null exit fi -# chattr - Testcases +function clean() +{ + # We don't know whether the fs will have extents (e, typically true on the + # desktop) or be encrypted (E, typically true on Android), so strip out both + # the long and short forms of those. + # We also don't want to rely on chattr(1) to set a known version number or + # project number, so blank out any numbers. + sed 's/, Encrypted//' | \ + sed 's/-E-/---/' | \ + sed 's/, Extents//' | \ + sed 's/-e-/---/' | \ + sed -E 's/[0-9]+/_/g' +} mkdir testattr IN="cd testattr" OUT="cd .." _t="abcdefghijklmnopqrstuvwxyz" -testing "[-/+]i FILE[write]" "$IN && echo "$_t" > testFile && - chattr +i testFile && lsattr testFile && echo "$_t" > testFile; - chattr -i testFile; rm -rf testFile; $OUT " "----i-------- testFile\n" "" "" -testing "[-/+]i FILE[re-write]" "$IN && echo "$_t" > testFile && - chattr +i testFile && echo \"$_t\" > testFile || chattr -i testFile && - echo \"$_t\" > testFile && lsattr testFile; rm -rf testFile; $OUT" \ - "------------- testFile\n" "" "" -testing "[-/+]i FILE[append]" "$IN && echo "$_t" > testFile && - chattr +i testFile && echo \"$_t\" >> testFile || lsattr testFile && - chattr -i testFile; rm -rf testFile; $OUT" "----i-------- testFile\n" "" "" -testing "[-/+]i FILE[move]" "$IN && echo "$_t" > testFile && - chattr +i testFile && mv testFile testFile1 || lsattr testFile && - chattr -i testFile; rm -rf testFile; $OUT" "----i-------- testFile\n" "" "" -testing "[-/+]i FILE[delete]" "$IN && echo "$_t" > testFile && - chattr +i testFile && rm -f testFile || lsattr testFile && - chattr -i testFile; rm -rf testFile; $OUT" "----i-------- testFile\n" "" "" +_empty="--------------------" + +# 'i' -- immutable +_i="----i---------------" +testing "[-/+]i FILE[write]" "$IN && touch testFile && + chattr +i testFile && lsattr testFile | clean && + date > testFile 2>/dev/null; chattr -i testFile; + rm -rf testFile; $OUT " "$_i testFile\n" "" "" +testing "[-/+]i FILE[re-write]" "$IN && touch testFile && + chattr +i testFile && date > testFile 2>/dev/null || + chattr -i testFile && date > testFile 2>/dev/null && + lsattr testFile | clean; rm -rf testFile 2>/dev/null; $OUT" \ + "$_empty testFile\n" "" "" +testing "[-/+]i FILE[append]" "$IN && date > testFile && + chattr +i testFile && date >> testFile 2>/dev/null || + lsattr testFile | clean && chattr -i testFile; rm -rf testFile; $OUT" \ + "$_i testFile\n" "" "" +testing "[-/+]i FILE[move]" "$IN && date > testFile && + chattr +i testFile && mv testFile testFile1 2>/dev/null || + lsattr testFile | clean && chattr -i testFile; rm -rf testFile; $OUT" \ + "$_i testFile\n" "" "" +testing "[-/+]i FILE[delete]" "$IN && touch testFile && chattr +i testFile && + rm -f testFile 2>/dev/null || lsattr testFile | clean && + chattr -i testFile; rm -rf testFile; $OUT" "$_i testFile\n" "" "" testing "[-/+]i FILE[read]" "$IN && echo "$_t" > testFile && - chattr +i testFile && cat testFile && lsattr testFile && - chattr -i testFile; rm -rf testFile; $OUT" "$_t\n----i-------- testFile\n" "" "" + chattr +i testFile && cat testFile && lsattr testFile | clean && + chattr -i testFile; rm -rf testFile; $OUT" "$_t\n$_i testFile\n" "" "" + +# 'a' --- append-only +_a="-----a--------------" testing "[-/+]a FILE[write]" "$IN && echo "$_t" > testFile && - chattr +a testFile && echo $_t > testFile || lsattr testFile && - chattr -a testFile; rm -rf testFile; $OUT" "-----a------- testFile\n" "" "" + chattr +a testFile && echo $_t > testFile || lsattr testFile | clean && + chattr -a testFile; rm -rf testFile; $OUT" "$_a testFile\n" "" "" testing "[-/+]a FILE[re-write]" "$IN && echo "$_t" > testFile && - chattr +a testFile && echo $_t > testFile || lsattr testFile && + chattr +a testFile && echo $_t > testFile || lsattr testFile | clean && chattr -a testFile && echo $_t > testFile && cat testFile && - lsattr testFile; rm -rf testFile; - $OUT" "-----a------- testFile\n$_t\n------------- testFile\n" "" "" + lsattr testFile | clean; rm -rf testFile; + $OUT" "$_a testFile\n$_t\n$_empty testFile\n" "" "" testing "[-/+]a FILE[append]" "$IN && echo "$_t" > testFile && chattr +a testFile && echo $_t >> testFile && cat testFile && - lsattr testFile && chattr -a testFile; rm -rf testFile; $OUT" \ - "$_t\n$_t\n-----a------- testFile\n" "" "" + lsattr testFile | clean && chattr -a testFile; rm -rf testFile; $OUT" \ + "$_t\n$_t\n$_a testFile\n" "" "" testing "[-/+]a FILE[move]" "$IN && echo "$_t" > testFile && - chattr +a testFile && mv testFile testFile1 || lsattr testFile && - chattr -a testFile; rm -rf testFile; $OUT" "-----a------- testFile\n" "" "" + chattr +a testFile && mv testFile testFile1 || + lsattr testFile | clean && chattr -a testFile; rm -rf testFile; $OUT" \ + "$_a testFile\n" "" "" testing "[-/+]a FILE[delete]" "$IN && echo "$_t" > testFile && - chattr +a testFile && rm -f testFile || lsattr testFile && - chattr -a testFile; rm -rf testFile; $OUT" "-----a------- testFile\n" "" "" + chattr +a testFile && rm -f testFile || lsattr testFile | clean && + chattr -a testFile; rm -rf testFile; $OUT" "$_a testFile\n" "" "" testing "[-/+]a FILE[read]" "$IN && echo "$_t" > testFile && - chattr +a testFile && cat testFile && lsattr testFile && chattr -a testFile; - rm -rf testFile; $OUT" "$_t\n-----a------- testFile\n" "" "" + chattr +a testFile && cat testFile && lsattr testFile | clean && + chattr -a testFile; rm -rf testFile; $OUT" "$_t\n$_a testFile\n" "" "" for attr in "A" "a" "c" "D" "d" "i" "j" "s" "S" "t" "T" "u" do testing "[-/+]$attr FILE" "$IN && echo "$_t" > testFile && chattr +$attr testFile && cat testFile && chattr -$attr testFile && - lsattr testFile; rm -rf testFile; $OUT" "$_t\n------------- testFile\n" "" "" + lsattr testFile | clean; rm -rf testFile; $OUT" "$_t\n$_empty testFile\n" "" "" done for attr in "A" "a" "c" "D" "d" "i" "j" "s" "S" "t" "T" "u" do testing "-$attr FILE" "$IN && echo "$_t" > testFile && chattr -$attr testFile && - cat testFile && lsattr testFile; rm -rf testFile; $OUT" "$_t\n------------- testFile\n" "" "" + cat testFile && lsattr testFile | clean; rm -rf testFile; $OUT" "$_t\n$_empty testFile\n" "" "" done testing "[-/+]AacDdijsStTu FILE" "$IN && echo "$_t" > testFile && chattr +AacDdijsStTu testFile && cat testFile && chattr -AacDdijsStTu testFile && - lsattr testFile; rm -rf testFile; $OUT" "$_t\n------------- testFile\n" "" "" + lsattr testFile | clean; rm -rf testFile; $OUT" "$_t\n$_empty testFile\n" "" "" testing "[-/+]AacDdijsStTu(random) FILE" \ "$IN && echo "$_t" > testFile && chattr +AacDdijsStTu testFile && cat testFile && chattr -A testFile && chattr -a testFile && chattr -c testFile && chattr -D testFile && chattr -d testFile && chattr -i testFile && chattr -j testFile && chattr -s testFile && chattr -S testFile && chattr -t testFile && - chattr -T testFile && chattr -u testFile && lsattr testFile && + chattr -T testFile && chattr -u testFile && lsattr testFile | clean && chattr -AacDdijsStTu testFile; rm -rf testFile; $OUT" \ - "$_t\n------------- testFile\n" "" "" + "$_t\n$_empty testFile\n" "" "" testing "[-/+]AacDdijsStTu FILE*" "$IN && echo "$_t" > testFile && echo "$_t" > testFile1 && echo "$_t" > testFile2 && echo "$_t" > testFile3 && @@ -92,42 +115,47 @@ testing "[-/+]AacDdijsStTu FILE*" "$IN && echo "$_t" > testFile8 && echo "$_t" > testFile9 && echo "$_t" > testFile10 && echo "$_t" > testFile11 && chattr +AacDdijsStTu testFile* && - cat testFile9 && chattr -AacDdijsStTu testFile* && lsattr testFile*; rm -rf testFile*; $OUT" \ - "$_t\n------------- testFile\n------------- testFile1\n------------- testFile10\n------------- testFile11\n------------- testFile2\n------------- testFile3\n------------- testFile4\n------------- testFile5\n------------- testFile6\n------------- testFile7\n------------- testFile8\n------------- testFile9\n" "" "" + cat testFile9 && chattr -AacDdijsStTu testFile* && + lsattr testFile* | clean; rm -rf testFile*; $OUT" \ + "$_t\n$_empty testFile\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n$_empty testFile_\n" "" "" + +# 'A' --- no-atime +_A="-------A------------" +# 's' --- secure erase +_s="s-------------------" testing "[-/+]AacDdijsStTu(random) FILE*" \ "$IN && echo "$_t" > testFile && chattr +AacDdijsStTu testFile* && cat testFile && chattr -A testFile* && chattr -a testFile* && chattr -c testFile* && chattr -D testFile* && chattr -d testFile* && chattr -i testFile* && chattr -j testFile* && chattr -s testFile* && chattr -S testFile* && chattr -t testFile* && - chattr -T testFile* && chattr -u testFile* && lsattr testFile; + chattr -T testFile* && chattr -u testFile* && lsattr testFile | clean; rm -rf testFile; $OUT" \ - "$_t\n------------- testFile\n" "" "" + "$_t\n$_empty testFile\n" "" "" testing "[-/+]i FILE[write]" \ "$IN && echo "$_t" > testFile && chattr +i testFile && - echo \"$_t\" > testFile || lsattr testFile && chattr -i testFile; - rm -rf testFile; $OUT" "----i-------- testFile\n" "" "" + echo \"$_t\" > testFile || lsattr testFile | clean && chattr -i testFile; + rm -rf testFile; $OUT" "$_i testFile\n" "" "" testing "[-/+]A FILE[write]" \ "$IN && echo "$_t" > testFile && chattr +A testFile && - echo \"$_t\" > testFile && lsattr testFile && chattr -A testFile; - rm -rf testFile; $OUT" "-------A----- testFile\n" "" "" + echo \"$_t\" > testFile && lsattr testFile | clean && chattr -A testFile; + rm -rf testFile; $OUT" "$_A testFile\n" "" "" testing "[-/+]s FILE[write]" \ "$IN && echo "$_t" > testFile && chattr +s testFile && - echo \"$_t\" > testFile && lsattr testFile && chattr -s testFile - rm -rf testFile; $OUT" "s------------ testFile\n" "" "" -testing "-v version FILE[write]" \ + echo \"$_t\" > testFile && lsattr testFile | clean && chattr -s testFile + rm -rf testFile; $OUT" "$_s testFile\n" "" "" +NOSPACE=1 testing "-v version FILE[write]" \ "$IN && echo "$_t" > testFile && chattr -v 1234 testFile && echo \"$_t\" > testFile && - lsattr -v testFile; rm -rf testFile" \ - " 1234 ------------- testFile\n" "" "" + lsattr -v testFile | clean; rm -rf testFile" \ + "_ $_empty testFile\n" "" "" -_a="-------A-----" -testing "-R [-/+]a FILE" "$IN && touch aa && chattr -R +A aa && lsattr aa && - chattr -R -A aa; rm -rf aa; $OUT" "$_a aa\n" "" "" +testing "-R [-/+]a FILE" "$IN && touch aa && chattr -R +A aa && + lsattr aa | clean && chattr -R -A aa; rm -rf aa; $OUT" "$_A aa\n" "" "" testing "-R [-/+]a FILE.." "$IN && touch aa bb && - chattr -R +A aa bb && lsattr aa bb && - chattr -R -A aa bb; rm -rf aa bb; $OUT" "$_a aa\n$_a bb\n" "" "" + chattr -R +A aa bb && lsattr aa bb | clean && + chattr -R -A aa bb; rm -rf aa bb; $OUT" "$_A aa\n$_A bb\n" "" "" # Clean up rm -rf testattr -- cgit v1.2.3