#!/bin/bash


##############################################################
#
#  Copyright (c) International Business Machines  Corp., 2003
#
#  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        : exportfs.sh
#  USAGE       : exportfs.sh -h <nfs_server> -d <nfs_server_disk_partition>
#                            -t <server_fs_type>
#
#  DESCRIPTION : A script that will test exportfs on Linux system.
#  REQUIREMENTS:
#                1) NFS Server system with rsh enabled between client & server.
#                2) 100MB Disk partition on NFS server.
#
#  HISTORY     :
#      06/18/2003 Prakash Narayana (prakashn@us.ibm.com)
#
#  CODE COVERAGE: 7.1% - fs/exportfs (Total Coverage)
#                 7.1% - fs/exportfs/expfs.c
#
##############################################################


NFS_SERVER=""
REM_DISK_PART=""
FS_TYPE=""
MNT_POINT="/tmp/exportfs_$$"

USAGE="$0 -h <nfs_server> -d <nfs_server_disk_partition> -t <server_fs_type>"


##############################################################
#
# Make sure that uid=root is running this script.
# Validate the command line arguments.
# Make sure that NFS Server is up with rsh is enabled.
# Make sure that FS_TYPE package has been installed on NFS Server side.
# Make sure that FS_TYPE module is built into the kernel or loaded
# on NFS Server side.
#
##############################################################

if [ $UID != 0 ]
then
	echo "FAILED: Must have root access to execute this script"
	exit 1
fi

while getopts h:d:t: args
do
	case $args in
	h)	NFS_SERVER=$OPTARG ;;
	d)	REM_DISK_PART=$OPTARG ;;
	t)	FS_TYPE=$OPTARG ;;
	\?)	echo $USAGE ; exit 1 ;;
	esac
done

if [ -z "$NFS_SERVER" ]
then
	echo $USAGE
	echo "FAILED: NFS Server not specificed"
	exit 1
fi

if [ -z "$REM_DISK_PART" ]
then
	echo $USAGE
	echo "FAILED: NFS Server disk partition not specified"
	exit 1
fi

if [ -z "$FS_TYPE" ]
then
	echo $USAGE
	echo "FAILED: NFS Server file system type not specified"
	exit 1
fi

#
# How to check if it a valid block special device on NFS Server ???
# Add code here.


ping -c 2 -w 15 $NFS_SERVER 2>&1 >/dev/null
if [ $? != 0 ]
then
	echo "FAILED: ping $NFS_SERVER failed"
	exit 1
fi

rsh -n -l root $NFS_SERVER "ls -l /etc" 2>&1 >/dev/null
if [ $? != 0 ]
then
	echo "FAILED: rsh -n -l root $NFS_SERVER "ls -l /etc" failed"
	exit 1
fi

rsh -n -l root $NFS_SERVER "rpm -q -a | grep $FS_TYPE" | grep $FS_TYPE 2>&1 > /dev/null
if [ $? != 0 ]
then
	rsh -n -l root $NFS_SERVER "grep $FS_TYPE /etc/filesystems" | grep $FS_TYPE 2>&1 > /dev/null
	if [ $? != 0 ]
	then
		rsh -n -l root $NFS_SERVER "grep $FS_TYPE /proc/filesystems" | grep $FS_TYPE 2>&1 > /dev/null
		if [ $? != 0 ]
		then
			echo "FAILED: $FS_TYPE package is not installed or loaded on $NFS_SERVER"
			exit 1
		fi
	fi
fi

if [ "$FS_TYPE" = "reiserfs" ]
then
#	rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE --format 3.6 -f $REM_DISK_PART 2>&1 > /dev/null"
	rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE -f $REM_DISK_PART --format 3.6 2>&1 > /dev/null"
	echo "/sbin/mkfs -t $FS_TYPE --format 3.6 -f $REM_DISK_PART 2>&1 > /dev/null"
else
#	rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE $REM_DISK_PART 2>&1 > /dev/null"
	QUIETFLAG=
	if [ "$FS_TYPE" = "jfs" ]
	then
		QUIETFLAG="-q"
	fi
	rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE $QUIETFLAG $REM_DISK_PART 2>&1 > /dev/null"
	if [ $? != 0 ]
	then
		echo "FAILED: Could not /sbin/mkfs -t $FS_TYPE $REM_DISK_PART on $NFS_SERVER"
		exit 1
	fi
fi

rsh -n -l root $NFS_SERVER "mkdir -p -m 777 $MNT_POINT"
if [ $? != 0 ]
then
	echo "FAILED: Could not mkdir -p -m 777 $MNT_POINT on $NFS_SERVER"
	exit 1
fi

rsh -n -l root $NFS_SERVER "mount -t $FS_TYPE $REM_DISK_PART $MNT_POINT"
if [ $? != 0 ]
then
	echo "FAILED: Could not mount -t $FS_TYPE $REM_DISK_PART on $MNT_POINT"
	exit 1
fi

rsh -n -l root $NFS_SERVER "chmod 777 $MNT_POINT"
if [ $? != 0 ]
then
	echo "FAILED: Could not chmod 777 $MNT_POINT on $NFS_SERVER"
	exit 1
fi

rsh -n -l root $NFS_SERVER "/usr/sbin/exportfs -i -o no_root_squash,rw *:$MNT_POINT"
if [ $? != 0 ]
then
	rsh -n -l root $NFS_SERVER "umount $MNT_POINT"
	rsh -n -l root $NFS_SERVER "rm -rf $MNT_POINT"
	echo "FAILED: Could not export remote directory $MNT_POINT"
	exit 1
fi
sleep 15

# Here is the code coverage for fs/exportfs
#
mkdir -p -m 777 $MNT_POINT
mount -t nfs $NFS_SERVER:$MNT_POINT $MNT_POINT
if [ $? != 0 ]
then
	echo "FAILED: NFS mount failed"
	exit 1
fi

mkdir -p -m 777 $MNT_POINT/test_dir
echo "NFS mount of $FS_TYPE file system and I/O to NFS mount point generates the  fs/exportfs code coverage" > $MNT_POINT/test_dir/exportfs_coverage


#######################################################
#
# Just before exit, perform NFS CLIENT & SERVER cleanup
#
#######################################################

umount $MNT_POINT
rm -rf $MNT_POINT

rsh -n -l root $NFS_SERVER "/usr/sbin/exportfs -u :$MNT_POINT"
rsh -n -l root $NFS_SERVER "umount $MNT_POINT"
rsh -n -l root $NFS_SERVER "rm -rf $MNT_POINT"
echo "PASSED: $0 passed!"
exit 0
