#!/bin/sh
################################################################################
## ##
## Copyright (c) International Business Machines Corp., 2001 ##
## Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz> ##
## ##
## This program is free software; you can redistribute it and#or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation; either version 2 of the License, or ##
## (at your option) any later version. ##
## ##
## This program is distributed in the hope that it will be useful, but ##
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ##
## for more details. ##
## ##
## You should have received a copy of the GNU General Public License ##
## along with this program; if not, write to the Free Software Foundation, ##
## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ##
## ##
################################################################################
#
# This program tests the file command. The tests are aimed at
# testing if the file command can recognize some of the commonly
# used file formats like, tar, tar.gz, rpm, C, ASCII, ELF etc.
#
TST_CNT=20
TST_SETUP=setup
TST_TESTFUNC=do_test
TST_NEEDS_TMPDIR=1
TST_NEEDS_CMDS="readelf"
. tst_test.sh
setup()
{
case $(readelf -h /bin/sh) in
*Data:*"big endian"*) TEST_ARCH=MSB;;
*Data:*"little endian"*) TEST_ARCH=LSB;;
*) tst_brk TBROK "Failed to determine CPU endianess";;
esac
}
file_test()
{
local fname="$1"
local fpath
local i
shift
if ! [ -f "$fname" ]; then
fpath="$TST_DATAROOT/$fname"
else
fpath="$fname"
fi
EXPECT_PASS file "$fpath" \> file.out
while [ $# -gt 0 ]; do
if grep -q "$1" file.out; then
break
fi
shift
done
if [ $# -gt 0 ]; then
tst_res TPASS "$fname: recognized as $1"
else
tst_res TFAIL "$fname: was not recognized"
cat file.out
fi
}
do_test()
{
case $1 in
1) file_test in.txt "ASCII text";;
2) file_test in.bash "Bourne-Again shell script";;
3) file_test in.sh "POSIX shell script, ASCII text executable" \
"POSIX shell script text executable" \
"POSIX shell script text" \
"Bourne shell script text executable";;
4) file_test in.ksh "Korn shell script";;
5) file_test in.csh "C shell script";;
6) file_test in.c "ASCII C program text" "C source, ASCII text";;
7) file_test in.pl "[pP]erl script, ASCII text executable" \
"[pP]erl script text executable" \
"a /usr/bin/perl script text";;
8) file_test in.py "[pP]ython3\{0,1\} script, ASCII text executable" \
"[pP]ython3\{0,1\} script text executable";;
9) file_test in.m4 "M4 macro processor script, ASCII text" \
"ASCII M4 macro language pre-processor text";;
10) file_test in "ELF .*-bit $TEST_ARCH executable, .*" \
"ELF .*-bit $TEST_ARCH shared object, .*";;
11) file_test in.ar "current ar archive";;
12) file_test in.tar "tar archive";;
13) file_test in.tar.gz "gzip compressed data, .*";;
14) file_test in.tar.bz2 "bzip2 compressed data, .*";;
15) file_test in.src.rpm "RPM v3 src" "RPM v3.0 src";;
16) file_test in.jpg "JPEG image data";;
17) file_test in.png "PNG image data";;
18) file_test in.wav "RIFF (little-endian) data, WAVE audio, Microsoft PCM";;
19) file_test in.mp3 "MPEG ADTS, layer III";;
20) file_test in.zip "Zip archive data";;
esac
}
tst_run