1#!/bin/bash 2 3# Copyright 2013 Robin Mittal <robinmittal.it@gmail.com> 4# Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com> 5 6[ -f testing.sh ] && . testing.sh 7 8# 'dd' command, stderr prints redirecting to /dev/null 9opt="2>/dev/null" 10 11#testing "name" "command" "result" "infile" "stdin" 12 13# Test suffixed number parsing; `count` is representative. 14testing "count=2" "dd if=input count=2 ibs=1 $opt" "hi" "high\n" "" 15testing "count= 2" "dd if=input 'count= 2' ibs=1 $opt" "hi" "high\n" "" 16toyonly testing "count=0x2" "dd if=input 'count=0x2' ibs=1 $opt" "hi" \ 17 "high\n" "" 18testing "count=-2" "dd if=input 'count=-2' ibs=1 2>/dev/null || echo errored" "errored\n" "" "" 19 20testing "if=(file)" "dd if=input $opt" "I WANT\n" "I WANT\n" "" 21testing "of=(file)" "dd of=file $opt && cat file" "I WANT\n" "" "I WANT\n" 22testing "if=file of=file" "dd if=input of=foo $opt && cat foo && rm -f foo" \ 23 "I WANT\n" "I WANT\n" "" 24testing "if=file | dd of=file" "dd if=input $opt | dd of=foo $opt && 25 cat foo && rm -f foo" "I WANT\n" "I WANT\n" "" 26testing "(stdout)" "dd $opt" "I WANT\n" "" "I WANT\n" 27testing "sync,noerror" \ 28 "dd if=input of=outFile seek=8860 bs=1M conv=sync,noerror $opt && 29 stat -c \"%s\" outFile && rm -f outFile" "9291431936\n" "I WANT\n" "" 30testing "if=file of=(null)" \ 31 "dd if=input of=/dev/null $opt && echo 'yes'" "yes\n" "I WANT\n" "" 32testing "with if of bs" \ 33 "dd if=/dev/zero of=sda.txt bs=512 count=1 $opt && 34 stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" "" 35testing "with if of ibs obs" \ 36 "dd if=/dev/zero of=sda.txt ibs=512 obs=256 count=1 $opt && 37 stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" "" 38testing "with if of ibs obs count" \ 39 "dd if=/dev/zero of=sda.txt ibs=512 obs=256 count=3 $opt && 40 stat -c '%s' sda.txt && rm -f sda.txt" "1536\n" "" "" 41 42ln -s input softlink 43testing "if=softlink" "dd if=softlink $opt" "I WANT\n" "I WANT\n" "" 44unlink softlink 45 46ln -s file softlink 47testing "if=file of=softlink" "dd if=input of=softlink $opt && 48 [ -f file -a -L softlink ] && cat softlink" "I WANT\n" "I WANT\n" "" 49unlink softlink && rm -f file 50 51testing "if=file of=file (same file)" "dd if=input of=input $opt && 52 [ -f input ] && cat input && echo 'yes'" "yes\n" "I WANT\n" "" 53testing "same file notrunc" \ 54 "dd if=input of=input conv=notrunc $opt && cat input" \ 55 "I WANT\n" "I WANT\n" "" 56 57testing "with ibs obs bs" "dd ibs=2 obs=5 bs=9 $opt" "I WANT\n" "" "I WANT\n" 58testing "with ibs obs bs if" "dd ibs=2 obs=5 bs=9 if=input $opt" \ 59 "I WANT\n" "I WANT\n" "" 60 61testing "with ibs obs count" "dd ibs=1 obs=1 count=1 $opt" "I" "" "I WANT\n" 62testing "with ibs obs count if" "dd ibs=1 obs=1 count=3 if=input $opt" \ 63 "I W" "I WANT\n" "" 64 65testing "with count" "dd count=1 $opt" "I WANT\n" "" "I WANT\n" 66testing "with count if" "dd count=1 if=input $opt" "I WANT\n" "I WANT\n" "" 67 68testing "with skip" "dd skip=0 $opt" "I WANT\n" "" "I WANT\n" 69testing "with skip if" "dd skip=0 if=input $opt" "I WANT\n" "I WANT\n" "" 70 71testing "with seek" "dd seek=0 $opt" "I WANT\n" "" "I WANT\n" 72testing "with seek if" "dd seek=0 if=input $opt" "I WANT\n" "I WANT\n" "" 73 74# Testing only 'notrunc', 'noerror', 'fsync', 'sync' 75 76testing "conv=notrunc" "dd conv=notrunc $opt" "I WANT\n" "" "I WANT\n" 77testing "conv=notrunc with IF" "dd conv=notrunc if=input $opt" "I WANT\n" \ 78 "I WANT\n" "" 79 80testing "conv=noerror" "dd conv=noerror $opt" "I WANT\n" "" "I WANT\n" 81testing "conv=noerror with IF" "dd conv=noerror if=input $opt" "I WANT\n" \ 82 "I WANT\n" "" 83 84testing "conv=fsync" "dd conv=fsync $opt" "I WANT\n" "" "I WANT\n" 85testing "conv=fsync with IF" "dd conv=fsync if=input $opt" "I WANT\n" \ 86 "I WANT\n" "" 87 88testing "conv=sync" "dd conv=sync $opt | head -n 1" "I WANT\n" "" "I WANT\n" 89testing "conv=sync with IF" "dd conv=sync if=input $opt | head -n 1" "I WANT\n" \ 90 "I WANT\n" "" 91 92# status=noxfer|none 93testing "status=noxfer" "dd if=input status=noxfer ibs=1 2>&1" "input\n6+0 records in\n0+1 records out\n" "input\n" "" 94testing "status=none" "dd if=input status=none ibs=1 2>&1" "input\n" "input\n" "" 95 96testing "seek stdout" "yes 2> /dev/null | dd bs=8 seek=2 count=1 > out 2> /dev/null && xxd -p out" \ 97 "00000000000000000000000000000000790a790a790a790a\n" "" "" 98 99# Duplicated options are fine. 100testing "conv=sync,sync" "dd conv=sync,sync $opt | head -n 1" "I WANT\n" "" "I WANT\n" 101 102# _bytes options 103testing "iflag=count_bytes" \ 104 "dd if=input count=2 ibs=4096 iflag=count_bytes $opt" "hi" "high" "" 105testing "iflag=skip_bytes" \ 106 "dd if=input skip=2 ibs=4096 iflag=skip_bytes $opt" "gh" "high" "" 107testing "oflag=seek_bytes" \ 108 "dd if=input of=output seek=2 obs=4096 oflag=seek_bytes status=none && \ 109 xxd -p output" "000030313233\n" "0123" "" 110