OSDN Git Service

basename: fix segfault on null input; add tests
[android-x86/external-toybox.git] / tests / dd.test
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
9 opt="2>/dev/null"
10
11 #testing "name" "command" "result" "infile" "stdin"
12
13 testing "if=(file)" "dd if=input $opt" "I WANT\n" "I WANT\n" ""
14 testing "of=(file)" "dd of=file $opt && cat file" "I WANT\n" "" "I WANT\n"
15 testing "if=file of=file" "dd if=input of=foo $opt && cat foo && rm -f foo" \
16   "I WANT\n" "I WANT\n" ""
17 testing "if=file | dd of=file" "dd if=input $opt | dd of=foo $opt &&
18    cat foo && rm -f foo" "I WANT\n" "I WANT\n" ""
19 testing "(stdout)" "dd $opt" "I WANT\n" "" "I WANT\n"
20 testing "sync,noerror" \
21   "dd if=input of=outFile seek=8860 bs=1M conv=sync,noerror $opt &&
22    stat -c \"%s\" outFile && rm -f outFile" "9291431936\n" "I WANT\n" ""
23 testing "if=file of=(null)" \
24   "dd if=input of=/dev/null $opt && echo 'yes'" "yes\n" "I WANT\n" ""
25 testing "with if of bs" \
26   "dd if=/dev/zero of=sda.txt bs=512 count=1 $opt &&
27    stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" ""
28 testing "with if of ibs obs" \
29   "dd if=/dev/zero of=sda.txt ibs=512 obs=256 count=1 $opt &&
30    stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" ""
31 testing "with if of ibs obs count" \
32   "dd if=/dev/zero of=sda.txt ibs=512 obs=256 count=3 $opt &&
33    stat -c '%s' sda.txt && rm -f sda.txt" "1536\n" "" ""
34
35 ln -s input softlink
36 testing "if=softlink" "dd if=softlink $opt" "I WANT\n" "I WANT\n" ""
37 unlink softlink
38
39 ln -s file softlink
40 testing "if=file of=softlink" "dd if=input of=softlink $opt &&
41    [ -f file -a -L softlink ] && cat softlink" "I WANT\n" "I WANT\n" ""
42 unlink softlink && rm -f file
43
44 testing "if=file of=file (same file)" "dd if=input of=input $opt &&
45    [ -f input ] && cat input && echo 'yes'" "yes\n" "I WANT\n" ""
46
47 testing "with ibs obs bs" "dd ibs=2 obs=5 bs=9 $opt" "I WANT\n" "" "I WANT\n"
48 testing "with ibs obs bs if" "dd ibs=2 obs=5 bs=9 if=input $opt" \
49   "I WANT\n" "I WANT\n" ""
50
51 testing "with ibs obs count" "dd ibs=1 obs=1 count=1 $opt" "I" "" "I WANT\n"
52 testing "with ibs obs count if" "dd ibs=1 obs=1 count=3 if=input $opt" \
53   "I W" "I WANT\n" ""
54
55 testing "with count" "dd count=1 $opt" "I WANT\n" "" "I WANT\n"
56 testing "with count if" "dd count=1 if=input $opt" "I WANT\n" "I WANT\n" ""
57
58 testing "with skip" "dd skip=0 $opt" "I WANT\n" "" "I WANT\n"
59 testing "with skip if" "dd skip=0 if=input $opt" "I WANT\n" "I WANT\n" ""
60
61 testing "with seek" "dd seek=0 $opt" "I WANT\n" "" "I WANT\n"
62 testing "with seek if" "dd seek=0 if=input $opt" "I WANT\n" "I WANT\n" ""
63
64 # These type of conv is not supported in toybox: 'ascii', 'ebcdic', 'ibm',
65 # 'block', 'unblock', 'nocreat', 'notronc', 'lcase', 'ucase', 'excl', 'swab'
66
67 # Testing only 'notrunc', 'noerror', 'fsync', 'sync'
68
69 testing "conv=notrunc" "dd conv=notrunc $opt" "I WANT\n" "" "I WANT\n"
70 testing "conv=notrunc with IF" "dd conv=notrunc if=input $opt" "I WANT\n" \
71   "I WANT\n" ""
72
73 testing "conv=noerror" "dd conv=noerror $opt" "I WANT\n" "" "I WANT\n"
74 testing "conv=noerror with IF" "dd conv=noerror if=input $opt" "I WANT\n" \
75   "I WANT\n" ""
76
77 testing "conv=fsync" "dd conv=fsync $opt" "I WANT\n" "" "I WANT\n"
78 testing "conv=fsync with IF" "dd conv=fsync if=input $opt" "I WANT\n" \
79   "I WANT\n" ""
80
81 testing "conv=sync" "dd conv=sync $opt | head -n 1" "I WANT\n" "" "I WANT\n"
82 testing "conv=sync with IF" "dd conv=sync if=input $opt | head -n 1" "I WANT\n" \
83   "I WANT\n" ""