1#!/bin/sh
2################################################################################
3##                                                                            ##
4## Copyright (c) International Business Machines  Corp., 2001                 ##
5## Author:       Manoj Iyer, manjo@mail.utexas.edu                            ##
6##                                                                            ##
7## This program is free software;  you can redistribute it and#or modify      ##
8## it under the terms of the GNU General Public License as published by       ##
9## the Free Software Foundation; either version 2 of the License, or          ##
10## (at your option) any later version.                                        ##
11##                                                                            ##
12## This program is distributed in the hope that it will be useful, but        ##
13## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
14## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
15## for more details.                                                          ##
16##                                                                            ##
17## You should have received a copy of the GNU General Public License          ##
18## along with this program;  if not, write to the Free Software               ##
19## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    ##
20##                                                                            ##
21################################################################################
22#
23# Description:  Test basic functionality of gzip and gunzip command
24#		- Test #1:  Test that gzip -r will travel directories and
25#			    compress all the files available.
26#
27#		- Test #2:  Test that gunzip -r will travel directories and
28#			    uncompress all the files available.
29#
30
31TCID=gzip
32TST_TOTAL=2
33. test.sh
34
35setup()
36{
37	tst_check_cmds gzip
38
39	tst_check_cmds gunzip
40
41	tst_tmpdir
42
43	tst_resm TINFO "INIT: Inititalizing tests"
44
45	ROD_SILENT mkdir -p tst_gzip.tmp
46}
47
48cleanup()
49{
50        tst_rmdir
51}
52
53cleanup_test()
54{
55	ROD_SILENT rm -rf tst_gzip.tmp/*
56}
57
58creat_dirnfiles()
59{
60	local numdirs=$2
61	local numfiles=$3
62	local dirname=$4
63	local dircnt=0
64	local fcnt=0
65
66	tst_resm TINFO "Test #$1: Creating $numdirs directories"
67	tst_resm TINFO "Test #$1: filling each dir with $numfiles files"
68	while [ $dircnt -lt $numdirs ]
69	do
70		dirname=$dirname/d.$dircnt
71		ROD_SILENT mkdir -p $dirname
72
73		fcnt=0
74		while [ $fcnt -lt $numfiles ]
75		do
76			ROD_SILENT touch $dirname/f.$fcnt
77			fcnt=$(($fcnt+1))
78		done
79		dircnt=$(($dircnt+1))
80	done
81}
82
83creat_expout()
84{
85	local numdir=$1
86	local numfile=$2
87	local dirname=$3
88	local ext=$4
89	local dircnt=0
90	local fcnt=0
91
92	echo "$dirname:"  1> tst_gzip.exp
93	echo "d.$dircnt"  1>> tst_gzip.exp
94	while [ $dircnt -lt $numdirs ]
95	do
96		dirname=$dirname/d.$dircnt
97		dircnt=$(($dircnt+1))
98		echo "$dirname:"  1>> tst_gzip.exp
99		if [ $dircnt -lt $numdirs ]
100		then
101			echo "d.$dircnt"  1>> tst_gzip.exp
102		fi
103		fcnt=0
104		while [ $fcnt -lt $numfiles ]
105		do
106			echo "f.$fcnt$ext " 1>> tst_gzip.exp
107			fcnt=$(($fcnt+1))
108		done
109		printf "\n\n" 1>> tst_gzip.exp
110	done
111}
112
113test01()
114{
115	numdirs=10
116	numfiles=10
117	dircnt=0
118	fcnt=0
119
120	tst_resm TINFO "Test #1: gzip -r will recursively compress contents" \
121			"of directory"
122
123	creat_dirnfiles 1 $numdirs $numfiles tst_gzip.tmp
124
125	gzip -r tst_gzip.tmp > tst_gzip.err 2>&1
126	if [ $? -ne 0 ]
127	then
128		cat tst_gzip.err
129		tst_brkm TFAIL "Test #1: gzip -r failed"
130	fi
131
132	tst_resm TINFO "Test #1: creating output file"
133	ls -R tst_gzip.tmp > tst_gzip.out 2>&1
134
135	tst_resm TINFO "Test #1: creating expected output file"
136	creat_expout $numdirs $numfiles tst_gzip.tmp .gz
137
138	tst_resm TINFO "Test #1: comparing expected out and actual" \
139			"output file"
140	diff -w -B tst_gzip.out tst_gzip.exp > tst_gzip.err 2>&1
141	if [ $? -ne 0 ]
142	then
143		cat tst_gzip.err
144		tst_resm TFAIL "Test #1: gzip failed"
145	else
146		tst_resm TINFO "Test #1: expected same as actual"
147		tst_resm TPASS "Test #1: gzip -r success"
148	fi
149}
150
151test02()
152{
153	numdirs=10
154	numfiles=10
155	dircnt=0
156	fcnt=0
157
158	tst_resm TINFO "Test #2: gunzip -r will recursively uncompress" \
159			"contents of directory"
160
161	creat_dirnfiles 2 $numdirs $numfiles tst_gzip.tmp
162
163	gzip -r tst_gzip.tmp > tst_gzip.err 2>&1
164	if [ $? -ne 0 ]
165	then
166		cat tst_gzip.err
167		tst_brkm TBROK "Test #2: compressing directory tst_gzip.tmp" \
168				"failed"
169	fi
170
171	gunzip -r tst_gzip.tmp > tst_gzip.err 2>&1
172	if [ $? -ne 0 ]
173	then
174		cat tst_gzip.err
175		tst_brkm TBROK "Test #2: uncompressing directory" \
176				" tst_gzip.tmp failed"
177		return $RC
178	fi
179
180	tst_resm TINFO "Test #2: creating output file"
181	ls -R tst_gzip.tmp > tst_gzip.out 2>&1
182
183	tst_resm TINFO "Test #2: creating expected output file"
184	creat_expout $numdirs $numfiles tst_gzip.tmp
185
186	tst_resm TINFO "Test #2: comparing expected out and actual output file"
187	diff -w -B tst_gzip.out tst_gzip.exp > tst_gzip.err 2>&1
188	if [ $? -ne 0 ]
189	then
190		cat tst_gzip.err
191		tst_resm TFAIL "Test #2: gunzip failed"
192	else
193		tst_resm TINFO "Test #2: expected same as actual"
194		tst_resm TPASS "Test #2: gunzip -r success"
195	fi
196}
197
198setup
199TST_CLEANUP=cleanup
200
201test01
202cleanup_test
203
204test02
205
206tst_exit
207