• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2################################################################################
3##                                                                            ##
4## Copyright (c) International Business Machines  Corp., 2001                 ##
5##  Author: Manoj Iyer, manjo@mail.utexas.edu                                 ##
6## Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz>                          ##
7##                                                                            ##
8## This program is free software;  you can redistribute it and#or modify      ##
9## it under the terms of the GNU General Public License as published by       ##
10## the Free Software Foundation; either version 2 of the License, or          ##
11## (at your option) any later version.                                        ##
12##                                                                            ##
13## This program is distributed in the hope that it will be useful, but        ##
14## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
15## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
16## for more details.                                                          ##
17##                                                                            ##
18## You should have received a copy of the GNU General Public License          ##
19## along with this program;  if not, write to the Free Software Foundation,   ##
20## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           ##
21##                                                                            ##
22################################################################################
23#
24# Creates, lists and extracts an plain, gzip and bzip tar archive.
25#
26
27TST_CNT=6
28TST_TESTFUNC=do_test
29TST_NEEDS_TMPDIR=1
30TST_NEEDS_CMDS="gzip bzip2"
31
32. tst_test.sh
33
34TAR_FILES="file1 file2 file3"
35
36check_listing()
37{
38	local i
39	local verbose=$1
40	shift
41
42	if [ -z "$verbose" ]; then
43		if [ -s tar.out ]; then
44			tst_res TFAIL "Tar produced unexpected output"
45			cat tar.out
46		else
47			tst_res TPASS "Tar produced no output"
48		fi
49
50		return
51	fi
52
53	if [ $(wc -l < tar.out) != $# ]; then
54		tst_res TFAIL "Unexpected number of lines in tar.out"
55		cat tar.out
56		return
57	fi
58
59	for i in $@; do
60		if ! grep -q $i tar.out; then
61			tst_res TFAIL "File $i missing in listing"
62			return
63		fi
64	done
65
66	tst_res TPASS "Listing in tar.out is correct"
67}
68
69check_content()
70{
71	local fname="$1"
72	local verbose="$2"
73	shift 2
74
75	EXPECT_PASS tar t${verbose}f "$fname" \> tar.out
76	check_listing v $@
77}
78
79check_files()
80{
81	for i in $@; do
82		if ! [ -f $i ]; then
83			tst_res TFAIL "Missing file $i in extracted archive"
84			cat tar.out
85			return
86		fi
87	done
88
89	tst_res TPASS "Files were uncompressed correctly"
90}
91
92check_extraction()
93{
94	local fname="$1"
95	local verbose="$2"
96	shift 2
97
98	EXPECT_PASS tar x${verbose}f $fname \> tar.out
99	check_listing "${verbose}" $@
100	check_files $@
101	ROD rm $@
102}
103
104test_tar()
105{
106	local comp="$1"
107	local verbose="$2"
108	local fname="$3"
109	local i
110
111	# Create archive
112	ROD touch $TAR_FILES
113	EXPECT_PASS tar c${verbose}f$comp $fname $TAR_FILES \> tar.out
114	check_listing "$verbose" $TAR_FILES
115
116	# Diff filesystem against the archive, should be the same at this point
117	EXPECT_PASS tar d${verbose}f $fname \> tar.out
118	check_listing "$verbose" $TAR_FILES
119
120	ROD rm $TAR_FILES
121
122	# Check content listing
123	check_content $fname "$verbose" $TAR_FILES
124
125	# Check decompression
126	check_extraction $fname "$verbose" $TAR_FILES
127
128	# Append to an archive, only possible for uncompressed archive
129	if [ -z "$comp" ]; then
130		ROD touch file4
131		EXPECT_PASS tar r${verbose}f $fname file4 \> tar.out
132		check_listing "$verbose" file4
133		check_content $fname "$verbose" $TAR_FILES file4
134		ROD rm file4
135
136		check_extraction $fname "$verbose" $TAR_FILES file4
137	fi
138
139	ROD rm $fname
140}
141
142do_test()
143{
144	case $1 in
145	1) test_tar ""  "v" "test.tar";;
146	2) test_tar "z" "v" "test.tar.gz";;
147	3) test_tar "j" "v" "test.tar.bz2";;
148	4) test_tar ""  ""  "test.tar";;
149	5) test_tar "z" ""  "test.tar.gz";;
150	6) test_tar "j" ""  "test.tar.bz2";;
151	esac
152}
153
154tst_run
155