xref: /aosp_15_r20/external/toybox/tests/file.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Workertest_line() {
8*cf5a6c84SAndroid Build Coastguard Worker  ONE="$1"; shift; TWO="\"$FILES\"/$1 | sed 's/^.*: //'"; shift
9*cf5a6c84SAndroid Build Coastguard Worker  testcmd "$ONE" "$TWO" "$@"
10*cf5a6c84SAndroid Build Coastguard Worker}
11*cf5a6c84SAndroid Build Coastguard Worker
12*cf5a6c84SAndroid Build Coastguard Workerln -s "$FILES"/java.class symlink
13*cf5a6c84SAndroid Build Coastguard WorkerLINK=$(readlink symlink)
14*cf5a6c84SAndroid Build Coastguard Workerln -s "$FILES"/java.klass dangler
15*cf5a6c84SAndroid Build Coastguard WorkerBROKEN=$(readlink dangler)
16*cf5a6c84SAndroid Build Coastguard Worker
17*cf5a6c84SAndroid Build Coastguard Workermkdir directory
18*cf5a6c84SAndroid Build Coastguard Workertesting "directory" "file ." ".: directory\n" "" ""
19*cf5a6c84SAndroid Build Coastguard Workerrmdir directory
20*cf5a6c84SAndroid Build Coastguard Workertouch empty
21*cf5a6c84SAndroid Build Coastguard Workertesting "empty" "file empty" "empty: empty\n" "" ""
22*cf5a6c84SAndroid Build Coastguard Workerrm -f empty
23*cf5a6c84SAndroid Build Coastguard Worker
24*cf5a6c84SAndroid Build Coastguard Workertesting "script" "file input | grep -o ' script'" " script\n" "#!/bin/bash\n" ""
25*cf5a6c84SAndroid Build Coastguard Workertesting "script with spaces" "file input | grep -o ' script'" " script\n" \
26*cf5a6c84SAndroid Build Coastguard Worker  "#!  /bin/bash\n" ""
27*cf5a6c84SAndroid Build Coastguard Workertesting "env script" "file input | egrep -o '(python|script)' | sort" \
28*cf5a6c84SAndroid Build Coastguard Worker  "python\nscript\n" "#! /usr/bin/env python\n" ""
29*cf5a6c84SAndroid Build Coastguard Workertesting "ascii" "file input" "input: ASCII text\n" "Hello, world!\n" ""
30*cf5a6c84SAndroid Build Coastguard Workertesting "utf-8" \
31*cf5a6c84SAndroid Build Coastguard Worker  "file \"$FILES\"/utf8/japan.txt | egrep -o '(UTF-8|text)' | LANG=c sort" \
32*cf5a6c84SAndroid Build Coastguard Worker  "UTF-8\ntext\n" "" ""
33*cf5a6c84SAndroid Build Coastguard Worker
34*cf5a6c84SAndroid Build Coastguard Worker# TODO each of these has multiple options we could test
35*cf5a6c84SAndroid Build Coastguard Workertesting "java class" \
36*cf5a6c84SAndroid Build Coastguard Worker  "file \"$FILES\"/java.class | egrep -o '(Java class|version 53.0)'"\
37*cf5a6c84SAndroid Build Coastguard Worker  "Java class\nversion 53.0\n" "" ""
38*cf5a6c84SAndroid Build Coastguard Worker
39*cf5a6c84SAndroid Build Coastguard Workerecho "cafebabe000000020100000700000003000040000000d9300000000e0100000c8000000200014000000098500000000e" | xxd -r -p > universal
40*cf5a6c84SAndroid Build Coastguard Workertestcmd "mach-o universal" "universal" \
41*cf5a6c84SAndroid Build Coastguard Worker  "universal: Mach-O universal binary with 2 architectures: [x86_64] [arm64]\n" "" ""
42*cf5a6c84SAndroid Build Coastguard Workerrm universal
43*cf5a6c84SAndroid Build Coastguard Worker
44*cf5a6c84SAndroid Build Coastguard Workertest_line "tar file" "tar/tar.tar" "POSIX tar archive (GNU)\n" "" ""
45*cf5a6c84SAndroid Build Coastguard Workertesting "gzip data" "file \"$FILES\"/tar/tar.tgz | grep -o 'gzip compressed data'" \
46*cf5a6c84SAndroid Build Coastguard Worker    "gzip compressed data\n" "" ""
47*cf5a6c84SAndroid Build Coastguard Workertest_line "bzip2 data" "tar/tar.tbz2" \
48*cf5a6c84SAndroid Build Coastguard Worker  "bzip2 compressed data, block size = 900k\n" "" ""
49*cf5a6c84SAndroid Build Coastguard Workertest_line "7z file" "tar/tar.7z" "7-zip archive data, version 0.4\n" "" ""
50*cf5a6c84SAndroid Build Coastguard Workertesting "zip file" \
51*cf5a6c84SAndroid Build Coastguard Worker  "file $FILES/zip/example.zip | egrep -o '(Zip archive data|at least v1.0 to extract)'" \
52*cf5a6c84SAndroid Build Coastguard Worker    "Zip archive data\nat least v1.0 to extract\n" "" ""
53*cf5a6c84SAndroid Build Coastguard Worker
54*cf5a6c84SAndroid Build Coastguard Workerecho R0lGODlhIAAgAMZHAAAAABYWFiYmJioqKi4uLjIy | base64 -d > gif
55*cf5a6c84SAndroid Build Coastguard Workertesting "gif file" "file gif" "gif: GIF image data, version 89a, 32 x 32\n" "" ""
56*cf5a6c84SAndroid Build Coastguard Workerrm -f gif
57*cf5a6c84SAndroid Build Coastguard Worker
58*cf5a6c84SAndroid Build Coastguard Worker# TODO: check in a genuine minimal .dex
59*cf5a6c84SAndroid Build Coastguard Worker
60*cf5a6c84SAndroid Build Coastguard Workerecho "6465780a3033350038ca8f6ce910f94e" | xxd -r -p > android.dex
61*cf5a6c84SAndroid Build Coastguard Workertesting "Android .dex" "file android.dex | egrep -o '(dex file|version 035)'" \
62*cf5a6c84SAndroid Build Coastguard Worker  "dex file\nversion 035\n" "" ""
63*cf5a6c84SAndroid Build Coastguard Workerrm -f android.dex
64*cf5a6c84SAndroid Build Coastguard Worker
65*cf5a6c84SAndroid Build Coastguard Worker# These actually test a lot of the ELF code: 32-/64-bit, arm/arm64, PT_INTERP,
66*cf5a6c84SAndroid Build Coastguard Worker# the two kinds of NDK ELF note, BuildID, and stripped/not stripped.
67*cf5a6c84SAndroid Build Coastguard Workertoyonly test_line "Android NDK full ELF note" "elf/ndk-elf-note-full" \
68*cf5a6c84SAndroid Build Coastguard Worker    "ELF shared object, 64-bit LSB arm64, dynamic (/system/bin/linker64), for Android 24, built by NDK r19b (5304403), BuildID=0c712b8af424d57041b85326f0000fadad38ee0a, not stripped\n" "" ""
69*cf5a6c84SAndroid Build Coastguard Workertoyonly test_line "Android NDK short ELF note" "elf/ndk-elf-note-short" \
70*cf5a6c84SAndroid Build Coastguard Worker    "ELF shared object, 32-bit LSB arm, EABI5, soft float, dynamic (/system/bin/linker), for Android 28, BuildID=da6a5f4ca8da163b9339326e626d8a3c, stripped\n" "" ""
71*cf5a6c84SAndroid Build Coastguard Workertoyonly test_line "ELF static fdpic" "elf/fdstatic" \
72*cf5a6c84SAndroid Build Coastguard Worker    "ELF executable (fdpic), 32-bit MSB sh, static, stripped\n" "" ""
73*cf5a6c84SAndroid Build Coastguard Workerecho -ne '\x7fELF\00000000000000000000000000000000000000000000' > bad-bits
74*cf5a6c84SAndroid Build Coastguard Workertesting "ELF bad bits" "file bad-bits" "bad-bits: ELF (bad type 12336), (bad class -1) (bad endian 48) unknown arch 12336\n" "" ""
75*cf5a6c84SAndroid Build Coastguard Workerrm -f bad-bits
76*cf5a6c84SAndroid Build Coastguard Worker
77*cf5a6c84SAndroid Build Coastguard Workertesting "broken symlink" "file dangler" "dangler: broken symbolic link to $BROKEN\n" "" ""
78*cf5a6c84SAndroid Build Coastguard Workertesting "symlink" "file symlink" "symlink: symbolic link to $LINK\n" "" ""
79*cf5a6c84SAndroid Build Coastguard Workertesting "symlink -h" "file -h symlink" "symlink: symbolic link to $LINK\n" "" ""
80*cf5a6c84SAndroid Build Coastguard Workertesting "symlink -L" \
81*cf5a6c84SAndroid Build Coastguard Worker  "file -L symlink | egrep -o '(symlink:|Java class|version 53.0)'" \
82*cf5a6c84SAndroid Build Coastguard Worker  "symlink:\nJava class\nversion 53.0\n" "" ""
83*cf5a6c84SAndroid Build Coastguard Worker
84*cf5a6c84SAndroid Build Coastguard Worker# Some host versions say "-" some "/dev/stdin"...
85*cf5a6c84SAndroid Build Coastguard Workertesting "- pipe" "cat $FILES/java.class | file - | egrep -o '(Java class|version 53.0)'" \
86*cf5a6c84SAndroid Build Coastguard Worker  "Java class\nversion 53.0\n" "" ""
87*cf5a6c84SAndroid Build Coastguard Workertesting "- redirect" \
88*cf5a6c84SAndroid Build Coastguard Worker  "file - <$FILES/java.class | egrep -o '(Java class|version 53.0)'" \
89*cf5a6c84SAndroid Build Coastguard Worker  "Java class\nversion 53.0\n" "" ""
90*cf5a6c84SAndroid Build Coastguard Worker
91*cf5a6c84SAndroid Build Coastguard Workerzero_dev="1/5"
92*cf5a6c84SAndroid Build Coastguard Worker[ "$(uname)" == "Darwin" ] && zero_dev="3/3"
93*cf5a6c84SAndroid Build Coastguard Workertesting "/dev/zero" "file /dev/zero" "/dev/zero: character special ($zero_dev)\n" "" ""
94*cf5a6c84SAndroid Build Coastguard Workertesting "- </dev/zero" "file - </dev/zero | grep -ow data" "data\n" "" ""
95*cf5a6c84SAndroid Build Coastguard Worker
96*cf5a6c84SAndroid Build Coastguard Workertestcmd 'ar' 'input | grep -o " ar archive"' ' ar archive\n' \
97*cf5a6c84SAndroid Build Coastguard Worker  "$(echo -e '!<arch>\nhello/          0           0     0     644     6         `\nworld')\n" ""
98*cf5a6c84SAndroid Build Coastguard Workertestcmd 'cpio' 'input' 'input: ASCII cpio archive (SVR4 with no CRC)\n' \
99*cf5a6c84SAndroid Build Coastguard Worker  '07070103344745000081A4000003E800' ''
100*cf5a6c84SAndroid Build Coastguard Worker
101*cf5a6c84SAndroid Build Coastguard Worker#TODO block fifo socket
102*cf5a6c84SAndroid Build Coastguard Worker#can't stat (unopenable)
103*cf5a6c84SAndroid Build Coastguard Worker#file
104*cf5a6c84SAndroid Build Coastguard Worker#  readerror
105*cf5a6c84SAndroid Build Coastguard Worker#  elf
106*cf5a6c84SAndroid Build Coastguard Worker#  png (grayscale, color RGB, indexed color, grayscale with alpha, color RGBA
107*cf5a6c84SAndroid Build Coastguard Worker#    X x X x-bit/{non-}interlaced
108*cf5a6c84SAndroid Build Coastguard Worker#  gif87
109*cf5a6c84SAndroid Build Coastguard Worker#  jpeg
110*cf5a6c84SAndroid Build Coastguard Worker#  xz
111*cf5a6c84SAndroid Build Coastguard Worker#  Ogg (buncha types)
112*cf5a6c84SAndroid Build Coastguard Worker#  wav audio (buncha types)
113*cf5a6c84SAndroid Build Coastguard Worker#  truetype font/collection
114*cf5a6c84SAndroid Build Coastguard Worker#  Opentype font
115*cf5a6c84SAndroid Build Coastguard Worker#  LLVM IR bitcode
116*cf5a6c84SAndroid Build Coastguard Worker#  PEM certificate
117*cf5a6c84SAndroid Build Coastguard Worker#  pe32
118*cf5a6c84SAndroid Build Coastguard Worker#  BMP
119*cf5a6c84SAndroid Build Coastguard Worker#  Linux perf
120*cf5a6c84SAndroid Build Coastguard Worker#  Android sparse image file
121*cf5a6c84SAndroid Build Coastguard Worker#  Android boot image
122*cf5a6c84SAndroid Build Coastguard Worker#  Android DTB/DTBO
123*cf5a6c84SAndroid Build Coastguard Worker#  Android Binary XML
124*cf5a6c84SAndroid Build Coastguard Worker#  #! shell script
125