| #!/bin/bash |
| |
| # Copyright 2013 Robin Mittal <robinmittal.it@gmail.com> |
| # Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com> |
| |
| # TODO test skip= for seekable and nonseekable input. |
| # TODO bs overrides ibs= and obs=, and disables block aggregation |
| |
| [ -f testing.sh ] && . testing.sh |
| |
| # 'dd' command, stderr prints redirecting to /dev/null |
| exec 2>/dev/null |
| |
| #testing "name" "command" "result" "infile" "stdin" |
| |
| # Test suffixed number parsing; `count` is representative. |
| testcmd "count=2" "if=input count=2 ibs=1" "hi" "high\n" "" |
| testcmd "count= 2" "if=input 'count= 2' ibs=1" "hi" "high\n" "" |
| toyonly testcmd "count=0x2" "if=input 'count=0x2' ibs=1" "hi" "high\n" "" |
| testcmd 'posix 2x3x4' "if=input count=2x3x4 ibs=1" \ |
| 'abcdefghijklmnopqrstuvwx' 'abcdefghijklmnopqrstuvwxyz' '' |
| testcmd "count=-2" "if=input 'count=-2' ibs=1 || echo errored" "errored\n" "" "" |
| |
| testcmd "if=(file)" "if=input" "I WANT\n" "I WANT\n" "" |
| testcmd "of=(file)" "of=file && cat file" "I WANT\n" "" "I WANT\n" |
| testcmd "if=file of=file" "if=input of=foo && cat foo && rm -f foo" \ |
| "I WANT\n" "I WANT\n" "" |
| testcmd "if=file | dd of=file" "if=input | dd of=foo && cat foo && rm -f foo" \ |
| "I WANT\n" "I WANT\n" "" |
| testcmd "(stdout)" '' "I WANT\n" "" "I WANT\n" |
| testcmd "sync,noerror" \ |
| "if=input of=outFile seek=8860 bs=1M conv=sync,noerror && |
| stat -c \"%s\" outFile && rm -f outFile" "9291431936\n" "I WANT\n" "" |
| testcmd "if=file of=(null)" "if=input of=/dev/null && echo 'yes'" "yes\n" \ |
| "I WANT\n" "" |
| testcmd "with if of bs" \ |
| "if=/dev/zero of=sda.txt bs=512 count=1 && |
| stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" "" |
| testcmd "with if of ibs obs" \ |
| "if=/dev/zero of=sda.txt ibs=512 obs=256 count=1 && |
| stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" "" |
| // TODO check block size of transactions |
| testcmd "with if of ibs obs count" \ |
| "if=/dev/zero of=sda.txt ibs=512 obs=256 count=3 && |
| stat -c '%s' sda.txt && rm -f sda.txt" "1536\n" "" "" |
| |
| ln -s input softlink |
| testcmd "if=softlink" "if=softlink" "I WANT\n" "I WANT\n" "" |
| rm -f softlink |
| |
| ln -s file softlink |
| testcmd "if=file of=softlink" "if=input of=softlink && |
| [ -f file -a -L softlink ] && cat softlink" "I WANT\n" "I WANT\n" "" |
| rm -f softlink file |
| |
| testcmd "if=file of=file (same file)" "if=input of=input && |
| [ -f input ] && cat input && echo 'yes'" "yes\n" "I WANT\n" "" |
| testcmd "same file notrunc" \ |
| "if=input of=input conv=notrunc && cat input" "I WANT\n" "I WANT\n" "" |
| testcmd "seek truncate" \ |
| 'of=input bs=3 count=2 seek=7 oflag=seek_bytes && cat input' \ |
| '1234567ABCDEF' '1234567890abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJK' |
| testcmd "seek notrunc" \ |
| 'of=input bs=3 count=2 seek=7 conv=notrunc oflag=seek_bytes && cat input' \ |
| '1234567ABCDEFdefghijklmnopqrstuvwxyz' '1234567890abcdefghijklmnopqrstuvwxyz'\ |
| 'ABCDEFGHIJK' |
| |
| testcmd "with ibs obs bs" "ibs=2 obs=5 bs=9" "I WANT\n" "" "I WANT\n" |
| testcmd "with ibs obs bs if" "ibs=2 obs=5 bs=9 if=input" "I WANT\n" "I WANT\n"\ |
| "" |
| |
| testcmd "with ibs obs count" "ibs=1 obs=1 count=1" "I" "" "I WANT\n" |
| testcmd "with ibs obs count if" "ibs=1 obs=1 count=3 if=input" "I W" "I WANT\n"\ |
| "" |
| |
| testcmd "with count" "count=1" "I WANT\n" "" "I WANT\n" |
| testcmd "with count if" "count=1 if=input" "I WANT\n" "I WANT\n" "" |
| |
| testcmd "with skip" "skip=0" "I WANT\n" "" "I WANT\n" |
| testcmd "with skip if" "skip=0 if=input" "I WANT\n" "I WANT\n" "" |
| |
| testcmd "with seek" "seek=0" "I WANT\n" "" "I WANT\n" |
| testcmd "with seek if" "seek=0 if=input" "I WANT\n" "I WANT\n" "" |
| |
| # Testing only 'notrunc', 'noerror', 'fsync', 'sync' |
| |
| testcmd "conv=notrunc" "conv=notrunc" "I WANT\n" "" "I WANT\n" |
| testcmd "conv=notrunc with IF" "conv=notrunc if=input" "I WANT\n" \ |
| "I WANT\n" "" |
| |
| testcmd "conv=noerror" "conv=noerror" "I WANT\n" "" "I WANT\n" |
| testcmd "conv=noerror with IF" "conv=noerror if=input" "I WANT\n" \ |
| "I WANT\n" "" |
| |
| testcmd "conv=fsync" "conv=fsync" "I WANT\n" "" "I WANT\n" |
| testcmd "conv=fsync with IF" "conv=fsync if=input" "I WANT\n" \ |
| "I WANT\n" "" |
| |
| testcmd "conv=sync" "conv=sync | head -n 1" "I WANT\n" "" "I WANT\n" |
| testcmd "conv=sync with IF" "conv=sync if=input | head -n 1" "I WANT\n" \ |
| "I WANT\n" "" |
| |
| # status=noxfer|none |
| testcmd "status=noxfer" "if=input status=noxfer ibs=1 2>&1" \ |
| "input\n6+0 records in\n0+1 records out\n" "input\n" "" |
| testcmd "status=none" "if=input status=none ibs=1 2>&1" \ |
| "input\n" "input\n" "" |
| |
| testing "seek stdout" "yes | dd bs=8 seek=2 count=1 > out && xxd -p out" \ |
| "00000000000000000000000000000000790a790a790a790a\n" "" "" |
| |
| # Duplicated options are fine. |
| testcmd "conv=sync,sync" "conv=sync,sync | head -n 1" "I WANT\n" "" "I WANT\n" |
| |
| # _bytes options |
| testcmd "iflag=count_bytes" "if=input count=2 ibs=4096 iflag=count_bytes" "hi"\ |
| "high" "" |
| testcmd "iflag=skip_bytes" "if=input skip=2 ibs=4096 iflag=skip_bytes" "gh" \ |
| "high" "" |
| testcmd "oflag=seek_bytes" \ |
| "if=input of=output seek=2 obs=4096 oflag=seek_bytes status=none && \ |
| xxd -p output" "000030313233\n" "0123" "" |
| |
| # The sleep decouples input blocks to force short reads for conv=sync to pad |
| testing 'sync padding ticks down count' \ |
| 'for i in one two three four five "$(seq 1 100)" |
| do echo "$i"; sleep .1; done | dd bs=1024 count=5 conv=sync | sha1sum' \ |
| '02dcf1f497ccbe940f57818dfc34f2d0def8b3f9 -\n' '' '' |