1#!/usr/local/bin/bash 2 3[ -f testing.sh ] && . testing.sh 4 5#testing "name" "command" "result" "infile" "stdin" 6 7touch empty 8echo "#!/bin/bash" > bash.script 9echo "#! /bin/bash" > bash.script2 10echo "#! /usr/bin/env python" > test.py 11echo "Hello, world!" > ascii 12echo "6465780a3033350038ca8f6ce910f94e" | xxd -r -p > android.dex 13ln -s $FILES/java.class symlink 14LINK=$(readlink symlink) 15ln -s $FILES/java.klass dangler 16BROKEN=$(readlink dangler) 17 18testing "directory" "file ." ".: directory\n" "" "" 19testing "empty" "file empty" "empty: empty\n" "" "" 20testing "bash.script" "file bash.script | grep -o ' script'" " script\n" "" "" 21testing "bash.script with spaces" "file bash.script2 | grep -o ' script'" " script\n" "" "" 22testing "env python script" "file test.py | egrep -o '(python|script)' | sort" \ 23 "python\nscript\n" "" "" 24testing "ascii" "file ascii" "ascii: ASCII text\n" "" "" 25testing "utf-8" \ 26 "file $FILES/utf8/japan.txt | egrep -o '(UTF-8|text)' | LANG=c sort" \ 27 "UTF-8\ntext\n" "" "" 28testing "java class" \ 29 "file $FILES/java.class | egrep -o '(Java class|version 53.0)'"\ 30 "Java class\nversion 53.0\n" "" "" 31testing "tar file" "file $FILES/tar/tar.tar | sed 's|$FILES/||'" \ 32 "tar/tar.tar: POSIX tar archive (GNU)\n" "" "" 33testing "gzip data" "file $FILES/tar/tar.tgz | grep -o 'gzip compressed data'" \ 34 "gzip compressed data\n" "" "" 35testing "bzip2 data" "file $FILES/tar/tar.tbz2 | sed 's|$FILES/||'" \ 36 "tar/tar.tbz2: bzip2 compressed data, block size = 900k\n" "" "" 37testing "7z file" "file $FILES/tar/tar.7z | sed 's|$FILES/||'" \ 38 "tar/tar.7z: 7-zip archive data, version 0.4\n" "" "" 39testing "zip file" \ 40 "file $FILES/zip/example.zip | egrep -o '(Zip archive data|at least v1.0 to extract)'" \ 41 "Zip archive data\nat least v1.0 to extract\n" "" "" 42echo R0lGODlhIAAgAMZHAAAAABYWFiYmJioqKi4uLjIy | base64 -d > gif 43testing "gif file" "file gif" "gif: GIF image data, version 89a, 32 x 32\n" "" "" 44rm -f gif 45 46# TODO: check in a genuine minimal .dex 47testing "Android .dex" "file android.dex | egrep -o '(dex file|version 035)'" \ 48 "dex file\nversion 035\n" "" "" 49 50# These actually test a lot of the ELF code: 32-/64-bit, arm/arm64, PT_INTERP, 51# the two kinds of NDK ELF note, BuildID, and stripped/not stripped. 52toyonly testing "Android NDK full ELF note" \ 53 "file $FILES/elf/ndk-elf-note-full | sed 's/^.*: //'" \ 54 "ELF shared object, 64-bit LSB arm64, dynamic (/system/bin/linker64), for Android 24, built by NDK r19b (5304403), BuildID=0c712b8af424d57041b85326f0000fadad38ee0a, not stripped\n" "" "" 55toyonly testing "Android NDK short ELF note" \ 56 "file $FILES/elf/ndk-elf-note-short | sed 's/^.*: //'" \ 57 "ELF shared object, 32-bit LSB arm, dynamic (/system/bin/linker), for Android 28, BuildID=da6a5f4ca8da163b9339326e626d8a3c, stripped\n" "" "" 58 59testing "broken symlink" "file dangler" "dangler: broken symbolic link to $BROKEN\n" "" "" 60testing "symlink" "file symlink" "symlink: symbolic link to $LINK\n" "" "" 61testing "symlink -h" "file -h symlink" "symlink: symbolic link to $LINK\n" "" "" 62testing "symlink -L" \ 63 "file -L symlink | egrep -o '(symlink:|Java class|version 53.0)'" \ 64 "symlink:\nJava class\nversion 53.0\n" "" "" 65 66# Some host versions say "-" some "/dev/stdin"... 67testing "- pipe" "cat $FILES/java.class | file - | egrep -o '(Java class|version 53.0)'" \ 68 "Java class\nversion 53.0\n" "" "" 69testing "- redirect" \ 70 "file - <$FILES/java.class | egrep -o '(Java class|version 53.0)'" \ 71 "Java class\nversion 53.0\n" "" "" 72 73zero_dev="1/5" 74[ "$(uname)" == "Darwin" ] && zero_dev="3/3" 75testing "/dev/zero" "file /dev/zero" "/dev/zero: character special ($zero_dev)\n" "" "" 76testing "- </dev/zero" "file - </dev/zero | grep -ow data" "data\n" "" "" 77 78rm empty bash.script bash.script2 test.py ascii android.dex 79