#!/bin/sh
################################################################################
##                                                                            ##
## Copyright (c) International Business Machines  Corp., 2001                 ##
##                                                                            ##
## 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    ##
##                                                                            ##
################################################################################
#
#
# File :        cpio_test.sh
#
# Description:  Test basic functionality of cpio command
#				- Test #1:  cpio -o can create an archive.
#
# Author:       Manoj Iyer, manjo@mail.utexas.edu
#
# History:      Jan 30 2003 - Created - Manoj Iyer.
#
# Function:		init
#
# Description:	- Check if command cpio is available.
#               - Create temprary directory, and temporary files.
#               - Initialize environment variables.
#
# Return		- zero on success
#               - non zero on failure. return value from commands ($RC)
init()
{

	RC=0				# Return code from commands.
	export TST_TOTAL=1	# total numner of tests in this file.
	export TCID=cpio	# this is the init function.
	export TST_COUNT=0	# init identifier,

	if [ -z "$LTPTMP" -a -z "$TMPBASE" ]
	then
		LTPTMP=/tmp
	else
		LTPTMP=$TMPBASE
	fi
	if [ -z "$LTPBIN" -a -z "$LTPROOT" ]
	then
		LTPBIN=./
	else
		LTPBIN=$LTPROOT/testcases/bin
	fi


	$LTPBIN/tst_resm TINFO "INIT: Inititalizing tests."

	which cpio > $LTPTMP/tst_cpio.err 2>&1 || RC=$?
	if [ $RC -ne 0 ]
	then
		$LTPBIN/tst_brk TBROK $LTPTMP/tst_cpio.err NULL \
			"Test #1: cpio command does not exist. Reason:"
		return $RC
	fi

	mkdir -p $LTPTMP/tst_cpio.tmp > $LTPTMP/tst_cpio.err 2>&1 || RC=$?
	if [ $RC -ne 0 ]
	then
		$LTPBIN/tst_brk TBROK $LTPTMP/tst_cpio.err NULL \
			"Test #1: failed creating temp directory. Reason:"
		return $RC
	fi

	for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
	do
		touch $LTPTMP/tst_cpio.tmp/$i > $LTPTMP/tst_cpio.err 2>&1 || RC=$?
		if [ $RC -ne 0 ]
		then
			$LTPBIN/tst_brk TBROK $LTPTMP/tst_cpio.err NULL \
				"Test #1: failed creating temp directory. Reason:"
			return $RC
		fi
	done
	return $RC
}

# Function:		clean
#
# Description	- Remove all temorary directories and file.s
#
# Return		- NONE
clean()
{
	export TCID=cpio	# this is the init function.
	export TST_COUNT=0	# init identifier,

	$LTPBIN/tst_resm TINFO "CLEAN cleaning up before return"
	rm -fr $LTPTMP/tst_cpio* > /dev/null 2>&1
	return
}


# Function:		test01
#
# Description	- Test #1: Test that cpio -o will create a cpio archive.
#
# Return		- zero on success
#               - non zero on failure. return value from commands ($RC)

test01()
{
	RC=0				# Return value from commands.
	export TCID=cpio01	# Name of the test case.
	export TST_COUNT=1	# Test number.

	$LTPBIN/tst_resm TINFO "Test #1: cpio -o will create an archive."

	find  $LTPTMP/tst_cpio.tmp/ -type f | cpio -o > $LTPTMP/tst_cpio.out \
		2>$LTPTMP/tst_cpio.err || RC=$?
	if [ $RC -ne 0 ]
	then
		 $LTPBIN/tst_res TFAIL $LTPTMP/tst_cpio.err \
			"Test #1: creating cpio archive failed. Reason:"
		return $RC
	else
		if [ -f $LTPTMP/tst_cpio.out ]
		then
			file $LTPTMP/tst_cpio.out > $LTPTMP/tst_cpio.err 2>&1 || RC=$?
			if [ $? -ne 0 ]
			then
				$LTPBIN/tst_res TFAIL $LTPTMP/tst_cpio.err	\
				"Test #1: bad output, not cpio format. Reason:"
				return $RC
			fi
		else
			 $LTPBIN/tst_resm TFAIL "Test #1: did not create cpio file."
			 return $RC
		fi
	fi
	return $RC
}


# Function:		main
#
# Description:	- Execute all tests, report results.
#
# Exit:			- zero on success
# 				- non-zero on failure.


TFAILCNT=0			# Set TFAILCNT to 0, increment on failure.
RC=0				# Return code from tests.

init || exit $RC	# Exit if initializing testcases fails.

test01 || RC=$?		# Test #1
if [ $RC -eq 0 ]
then
	$LTPBIN/tst_resm TPASS "Test #1: cpio created an archive"
else
		 TFAILCNT=$(( $TFAILCNT+1 ))
fi

clean				# clean up before returning

exit $TFAILCNT