test/fs: Restructure file path specification to allow some flexibility
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v2 1/5 test/fs: Restructure file path specification to allow some flexibility
Instead of providing the full path, specify directory and filename separately. This allows to specify intermediate directories, required for some additional tests.
--- test/fs/fs-test.sh | 58 +++++++++++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 36 deletions(-)
test/fs/fs-test.sh +22 -36
@@ -135,22 +135,6 @@ function create_image() { fi } -# 1st parameter is the FS type: fat/ext4 -# 2nd parameter is the name of small file -# Returns filename which can be used for fat or ext4 for writing -function fname_for_write() { - case $1 in - ext4) - # ext4 needs absolute path name of file - echo /${2}.w - ;; - - *) - echo ${2}.w - ;; - esac -} - # 1st parameter is image file # 2nd parameter is file system type - fat/ext4 # 3rd parameter is name of small file
@@ -166,11 +150,14 @@ function test_image() { case "$2" in fat) + FPATH="" PREFIX="fat" WRITE="write" ;; ext4) + # ext4 needs absolute path + FPATH="/" PREFIX="ext4" WRITE="write" ;;
@@ -205,16 +192,15 @@ function test_image() { esac - if [ -z "$6" ]; then - FILE_WRITE=`fname_for_write $2 $3` - FILE_SMALL=$3 - FILE_BIG=$4 - else - FILE_WRITE=$6/`fname_for_write $2 $3` - FILE_SMALL=$6/$3 - FILE_BIG=$6/$4 + # sb always uses full path to mointpoint, irrespective of filesystem + if [ "$5" = "sb" ]; then + FPATH=${6}/ fi + FILE_WRITE=${3}.w + FILE_SMALL=$3 + FILE_BIG=$4 + # In u-boot commands, <interface> stands for host or hostfs # hostfs maps to the host fs. # host maps to the "sb bind" that we do
@@ -230,13 +216,13 @@ ${PREFIX}ls host${SUFFIX} $6 # sb size hostfs - $3 for hostfs commands. # 1MB is 0x0010 0000 # Test Case 2 - size of small file -${PREFIX}size host${SUFFIX} $FILE_SMALL +${PREFIX}size host${SUFFIX} ${FPATH}$FILE_SMALL printenv filesize setenv filesize # 2.5GB (1024*1024*2500) is 0x9C40 0000 # Test Case 3 - size of big file -${PREFIX}size host${SUFFIX} $FILE_BIG +${PREFIX}size host${SUFFIX} ${FPATH}$FILE_BIG printenv filesize setenv filesize
@@ -245,14 +231,14 @@ setenv filesize # Last two parameters are size and offset. # Test Case 4a - Read full 1MB of small file -${PREFIX}load host${SUFFIX} $addr $FILE_SMALL +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_SMALL printenv filesize # Test Case 4b - Read full 1MB of small file md5sum $addr \$filesize setenv filesize # Test Case 5a - First 1MB of big file -${PREFIX}load host${SUFFIX} $addr $FILE_BIG $length 0x0 +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_BIG $length 0x0 printenv filesize # Test Case 5b - First 1MB of big file md5sum $addr \$filesize
@@ -260,7 +246,7 @@ setenv filesize # fails for ext as no offset support # Test Case 6a - Last 1MB of big file -${PREFIX}load host${SUFFIX} $addr $FILE_BIG $length 0x9C300000 +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_BIG $length 0x9C300000 printenv filesize # Test Case 6b - Last 1MB of big file md5sum $addr \$filesize
@@ -268,7 +254,7 @@ setenv filesize # fails for ext as no offset support # Test Case 7a - One from the last 1MB chunk of 2GB -${PREFIX}load host${SUFFIX} $addr $FILE_BIG $length 0x7FF00000 +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_BIG $length 0x7FF00000 printenv filesize # Test Case 7b - One from the last 1MB chunk of 2GB md5sum $addr \$filesize
@@ -276,7 +262,7 @@ setenv filesize # fails for ext as no offset support # Test Case 8a - One from the start 1MB chunk from 2GB -${PREFIX}load host${SUFFIX} $addr $FILE_BIG $length 0x80000000 +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_BIG $length 0x80000000 printenv filesize # Test Case 8b - One from the start 1MB chunk from 2GB md5sum $addr \$filesize
@@ -284,7 +270,7 @@ setenv filesize # fails for ext as no offset support # Test Case 9a - One 1MB chunk crossing the 2GB boundary -${PREFIX}load host${SUFFIX} $addr $FILE_BIG $length 0x7FF80000 +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_BIG $length 0x7FF80000 printenv filesize # Test Case 9b - One 1MB chunk crossing the 2GB boundary md5sum $addr \$filesize
@@ -292,17 +278,17 @@ setenv filesize # Generic failure case # Test Case 10 - 2MB chunk from the last 1MB of big file -${PREFIX}load host${SUFFIX} $addr $FILE_BIG 0x00200000 0x9C300000 +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_BIG 0x00200000 0x9C300000 printenv filesize # # Read 1MB from small file -${PREFIX}load host${SUFFIX} $addr $FILE_SMALL +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_SMALL # Write it back to test the writes # Test Case 11a - Check that the write succeeded -${PREFIX}${WRITE} host${SUFFIX} $addr $FILE_WRITE \$filesize +${PREFIX}${WRITE} host${SUFFIX} $addr ${FPATH}$FILE_WRITE \$filesize mw.b $addr 00 100 -${PREFIX}load host${SUFFIX} $addr $FILE_WRITE +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_WRITE # Test Case 11b - Check md5 of written to is same as the one read from md5sum $addr \$filesize setenv filesize
Signature · 1 line
2.10.0
PATCH v2 1/5 test/fs: Restructure file path specification to allow some flexibility
Quoted 5 lines · Stefan Br?ns
Instead of providing the full path, specify directory and filename separately. This allows to specify intermediate directories, required for some additional tests.
Signed-off-by Stefan Br?ns <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/dcd8b462/attachment.sig>
PATCH v2 2/5 test/fs: remove use of undefined WRITE_FILE variable
In reply to a message not in the archiveThe write file is created from $SMALL_FILE by appending ".w" on all other occurences in the code.
--- test/fs/fs-test.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
test/fs/fs-test.sh +4 -6
@@ -470,9 +470,9 @@ function check_results() { # Check 1mb chunk write grep -A3 "Test Case 11a " "$1" | \ egrep -q '1048576 bytes written|update journal' - pass_fail "TC11: 1MB write to $5 - write succeeded" + pass_fail "TC11: 1MB write to $3.w - write succeeded" check_md5 "Test Case 11b " "$1" "$2" 1 \ - "TC11: 1MB write to $5 - content verified" + "TC11: 1MB write to $3.w - content verified" echo "** End $1" }
@@ -486,8 +486,7 @@ function test_fs_nonfs() { OUT_FILE="${OUT}.$1.${fs}.out" test_image $IMAGE $fs $SMALL_FILE $BIG_FILE $1 "" \ > ${OUT_FILE} 2>&1 - check_results $OUT_FILE $MD5_FILE_FS $SMALL_FILE $BIG_FILE \ - $WRITE_FILE + check_results $OUT_FILE $MD5_FILE_FS $SMALL_FILE $BIG_FILE TOTAL_FAIL=$((TOTAL_FAIL + FAIL)) TOTAL_PASS=$((TOTAL_PASS + PASS)) echo "Summary: PASS: $PASS FAIL: $FAIL"
@@ -537,8 +536,7 @@ for fs in ext4 fat; do sudo umount "$MOUNT_DIR" rmdir "$MOUNT_DIR" - check_results $OUT_FILE $MD5_FILE_FS $SMALL_FILE $BIG_FILE \ - $WRITE_FILE + check_results $OUT_FILE $MD5_FILE_FS $SMALL_FILE $BIG_FILE TOTAL_FAIL=$((TOTAL_FAIL + FAIL)) TOTAL_PASS=$((TOTAL_PASS + PASS)) echo "Summary: PASS: $PASS FAIL: $FAIL"
Signature · 1 line
2.10.0
PATCH v2 2/5 test/fs: remove use of undefined WRITE_FILE variable
Quoted 4 lines · Stefan Br?ns
The write file is created from $SMALL_FILE by appending ".w" on all other occurences in the code.
Signed-off-by Stefan Br?ns <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/17e2c36b/attachment.sig>
PATCH v2 3/5 test/fs: strip noise from filesystem code prior to checking results
In reply to a message not in the archiveext4 and fat code emit some diagnostic messages during command execution. These additional lines force a match window size which strictly is not necessary.
--- test/fs/fs-test.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)
test/fs/fs-test.sh +15 -11
@@ -386,7 +386,7 @@ check_md5() { # md5sum in u-boot has output of form: # md5 for 01000008 ... 01100007 ==> <md5> # the 7th field is the actual md5 - md5_src=`grep -A3 "$1" "$2" | grep "md5 for" | tr -d '\r'` + md5_src=`grep -A2 "$1" "$2" | grep "md5 for" | tr -d '\r'` md5_src=($md5_src) md5_src=${md5_src[6]}
@@ -431,45 +431,44 @@ function check_results() { pass_fail "TC3: size of $4" # Check read full mb of 1MB.file - grep -A6 "Test Case 4a " "$1" | grep -q "filesize=100000" + grep -A4 "Test Case 4a " "$1" | grep -q "filesize=100000" pass_fail "TC4: load of $3 size" check_md5 "Test Case 4b " "$1" "$2" 1 "TC4: load from $3" # Check first mb of 2.5GB.file - grep -A6 "Test Case 5a " "$1" | grep -q "filesize=100000" + grep -A4 "Test Case 5a " "$1" | grep -q "filesize=100000" pass_fail "TC5: load of 1st MB from $4 size" check_md5 "Test Case 5b " "$1" "$2" 2 "TC5: load of 1st MB from $4" # Check last mb of 2.5GB.file - grep -A6 "Test Case 6a " "$1" | grep -q "filesize=100000" + grep -A4 "Test Case 6a " "$1" | grep -q "filesize=100000" pass_fail "TC6: load of last MB from $4 size" check_md5 "Test Case 6b " "$1" "$2" 3 "TC6: load of last MB from $4" # Check last 1mb chunk of 2gb from 2.5GB file - grep -A6 "Test Case 7a " "$1" | grep -q "filesize=100000" + grep -A4 "Test Case 7a " "$1" | grep -q "filesize=100000" pass_fail "TC7: load of last 1mb chunk of 2GB from $4 size" check_md5 "Test Case 7b " "$1" "$2" 4 \ "TC7: load of last 1mb chunk of 2GB from $4" # Check first 1mb chunk after 2gb from 2.5GB file - grep -A6 "Test Case 8a " "$1" | grep -q "filesize=100000" + grep -A4 "Test Case 8a " "$1" | grep -q "filesize=100000" pass_fail "TC8: load 1st MB chunk after 2GB from $4 size" check_md5 "Test Case 8b " "$1" "$2" 5 \ "TC8: load 1st MB chunk after 2GB from $4" # Check 1mb chunk crossing the 2gb boundary from 2.5GB file - grep -A6 "Test Case 9a " "$1" | grep -q "filesize=100000" + grep -A4 "Test Case 9a " "$1" | grep -q "filesize=100000" pass_fail "TC9: load 1MB chunk crossing 2GB boundary from $4 size" check_md5 "Test Case 9b " "$1" "$2" 6 \ "TC9: load 1MB chunk crossing 2GB boundary from $4" # Check 2mb chunk from the last 1MB of 2.5GB file loads 1MB - grep -A6 "Test Case 10 " "$1" | grep -q "filesize=100000" + grep -A5 "Test Case 10 " "$1" | grep -q "filesize=100000" pass_fail "TC10: load 2MB from the last 1MB of $4 loads 1MB" # Check 1mb chunk write - grep -A3 "Test Case 11a " "$1" | \ - egrep -q '1048576 bytes written|update journal' + grep -A2 "Test Case 11a " "$1" | grep -q '1048576 bytes written' pass_fail "TC11: 1MB write to $3.w - write succeeded" check_md5 "Test Case 11b " "$1" "$2" 1 \ "TC11: 1MB write to $3.w - content verified"
@@ -486,7 +485,12 @@ function test_fs_nonfs() { OUT_FILE="${OUT}.$1.${fs}.out" test_image $IMAGE $fs $SMALL_FILE $BIG_FILE $1 "" \ > ${OUT_FILE} 2>&1 - check_results $OUT_FILE $MD5_FILE_FS $SMALL_FILE $BIG_FILE + # strip out noise from fs code + grep -v -e "File System is consistent\|update journal finished" \ + -e "reading .*\.file\|writing .*\.file.w" \ + < ${OUT_FILE} > ${OUT_FILE}_clean + check_results ${OUT_FILE}_clean $MD5_FILE_FS $SMALL_FILE \ + $BIG_FILE TOTAL_FAIL=$((TOTAL_FAIL + FAIL)) TOTAL_PASS=$((TOTAL_PASS + PASS)) echo "Summary: PASS: $PASS FAIL: $FAIL"
Signature · 1 line
2.10.0
PATCH v2 3/5 test/fs: strip noise from filesystem code prior to checking results
Quoted 5 lines · Stefan Br?ns
ext4 and fat code emit some diagnostic messages during command execution. These additional lines force a match window size which strictly is not necessary.
Signed-off-by Stefan Br?ns <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/49e34282/attachment.sig>
PATCH v2 4/5 test/fs: Check ext4 behaviour if dirent is first entry in directory block
In reply to a message not in the archiveThis is a regression test for a crash happening if the first dirent in the block matches. Code tried to access a predecessor entry which does not exist.
The crash happened for any block, but "." is always the first entry in the first directory block and thus easy to check for.
--- test/fs/fs-test.sh | 10 ++++++++++ 1 file changed, 10 insertions(+)
test/fs/fs-test.sh +10 -0
@@ -293,6 +293,12 @@ ${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_WRITE md5sum $addr \$filesize setenv filesize # + +# Next test case checks writing a file whose dirent +# is the first in the block, which is always true for "." +# The write should fail, but the lookup should work +# Test Case 12 - Check directory traversal +${PREFIX}${WRITE} host${SUFFIX} $addr ${FPATH}. 0x10 reset EOF
@@ -472,6 +478,10 @@ function check_results() { pass_fail "TC11: 1MB write to $3.w - write succeeded" check_md5 "Test Case 11b " "$1" "$2" 1 \ "TC11: 1MB write to $3.w - content verified" + + # Check lookup of 'dot' directory + grep -A4 "Test Case 12 " "$1" | grep -q 'Unable to write file' + pass_fail "TC12: 1MB write to . - write denied" echo "** End $1" }
Signature · 1 line
2.10.0
PATCH v2 4/5 test/fs: Check ext4 behaviour if dirent is first entry in directory block
Quoted 7 lines · Stefan Br?ns
This is a regression test for a crash happening if the first dirent in the block matches. Code tried to access a predecessor entry which does not exist.
The crash happened for any block, but "." is always the first entry in the first directory block and thus easy to check for.Signed-off-by Stefan Br?ns <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/18d0c925/attachment.sig>
PATCH v2 5/5 test/fs: Check writes using "." (same dir) relative path
In reply to a message not in the archive<path>/<fname> and <path>/./<fname> should reference the same file.
--- test/fs/fs-test.sh | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-)
test/fs/fs-test.sh +28 -1
@@ -299,6 +299,23 @@ setenv filesize # The write should fail, but the lookup should work # Test Case 12 - Check directory traversal ${PREFIX}${WRITE} host${SUFFIX} $addr ${FPATH}. 0x10 + +# Read 1MB from small file +${PREFIX}load host${SUFFIX} $addr ${FPATH}$FILE_SMALL +# Write it via "same directory", i.e. "." dirent +# Test Case 13a - Check directory traversal +${PREFIX}${WRITE} host${SUFFIX} $addr ${FPATH}./${FILE_WRITE}2 \$filesize +mw.b $addr 00 100 +${PREFIX}load host${SUFFIX} $addr ${FPATH}./${FILE_WRITE}2 +# Test Case 13b - Check md5 of written to is same as the one read from +md5sum $addr \$filesize +setenv filesize +mw.b $addr 00 100 +${PREFIX}load host${SUFFIX} $addr ${FPATH}${FILE_WRITE}2 +# Test Case 13c - Check md5 of written to is same as the one read from +md5sum $addr \$filesize +setenv filesize +# reset EOF
@@ -335,9 +352,10 @@ function create_files() { &> /dev/null fi - # Delete the small file which possibly is written as part of a + # Delete the small file copies which possibly are written as part of a # previous test. sudo rm -f "${MB1}.w" + sudo rm -f "${MB1}.w2" # Generate the md5sums of reads that we will test against small file dd if="${MB1}" bs=1M skip=0 count=1 2> /dev/null | md5sum > "$2"
@@ -482,6 +500,15 @@ function check_results() { # Check lookup of 'dot' directory grep -A4 "Test Case 12 " "$1" | grep -q 'Unable to write file' pass_fail "TC12: 1MB write to . - write denied" + + # Check directory traversal + grep -A2 "Test Case 13a " "$1" | grep -q '1048576 bytes written' + pass_fail "TC13: 1MB write to ./$3.w2 - write succeeded" + check_md5 "Test Case 13b " "$1" "$2" 1 \ + "TC13: 1MB read from ./$3.w2 - content verified" + check_md5 "Test Case 13c " "$1" "$2" 1 \ + "TC13: 1MB read from $3.w2 - content verified" + echo "** End $1" }
Signature · 1 line
2.10.0
PATCH v2 5/5 test/fs: Check writes using "." (same dir) relative path
Quoted 3 lines · Stefan Br?ns
<path>/<fname> and <path>/./<fname> should reference the same file.
Signed-off-by Stefan Br?ns <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160923/6a1d36b7/attachment.sig>