#!/bin/sh
################################################################################
## ##
## Copyright (c) International Business Machines Corp., 2001 ##
## Author: Manoj Iyer, manjo@mail.utexas.edu ##
## 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 ##
## ##
################################################################################
#
# Creates, lists and extracts an plain, gzip and bzip tar archive.
#
TST_CNT=6
TST_TESTFUNC=do_test
TST_NEEDS_TMPDIR=1
TST_NEEDS_CMDS="gzip bzip2"
. tst_test.sh
TAR_FILES="file1 file2 file3"
check_listing()
{
local i
local verbose=$1
shift
if [ -z "$verbose" ]; then
if [ -s tar.out ]; then
tst_res TFAIL "Tar produced unexpected output"
cat tar.out
else
tst_res TPASS "Tar produced no output"
fi
return
fi
if [ $(wc -l < tar.out) != $# ]; then
tst_res TFAIL "Unexpected number of lines in tar.out"
cat tar.out
return
fi
for i in $@; do
if ! grep -q $i tar.out; then
tst_res TFAIL "File $i missing in listing"
return
fi
done
tst_res TPASS "Listing in tar.out is correct"
}
check_content()
{
local fname="$1"
local verbose="$2"
shift 2
EXPECT_PASS tar t${verbose}f "$fname" \> tar.out
check_listing v $@
}
check_files()
{
for i in $@; do
if ! [ -f $i ]; then
tst_res TFAIL "Missing file $i in extracted archive"
cat tar.out
return
fi
done
tst_res TPASS "Files were uncompressed correctly"
}
check_extraction()
{
local fname="$1"
local verbose="$2"
shift 2
EXPECT_PASS tar x${verbose}f $fname \> tar.out
check_listing "${verbose}" $@
check_files $@
ROD rm $@
}
test_tar()
{
local comp="$1"
local verbose="$2"
local fname="$3"
local i
# Create archive
ROD touch $TAR_FILES
EXPECT_PASS tar c${verbose}f$comp $fname $TAR_FILES \> tar.out
check_listing "$verbose" $TAR_FILES
# Diff filesystem against the archive, should be the same at this point
EXPECT_PASS tar d${verbose}f $fname \> tar.out
check_listing "$verbose" $TAR_FILES
ROD rm $TAR_FILES
# Check content listing
check_content $fname "$verbose" $TAR_FILES
# Check decompression
check_extraction $fname "$verbose" $TAR_FILES
# Append to an archive, only possible for uncompressed archive
if [ -z "$comp" ]; then
ROD touch file4
EXPECT_PASS tar r${verbose}f $fname file4 \> tar.out
check_listing "$verbose" file4
check_content $fname "$verbose" $TAR_FILES file4
ROD rm file4
check_extraction $fname "$verbose" $TAR_FILES file4
fi
ROD rm $fname
}
do_test()
{
case $1 in
1) test_tar "" "v" "test.tar";;
2) test_tar "z" "v" "test.tar.gz";;
3) test_tar "j" "v" "test.tar.bz2";;
4) test_tar "" "" "test.tar";;
5) test_tar "z" "" "test.tar.gz";;
6) test_tar "j" "" "test.tar.bz2";;
esac
}
tst_run