#!/bin/bash

export NFS_TMP="$HOME/systemtap-sts-nfs-share-and-mount-tmpdir"

nfs_service()
{
	local ret
	local status="$1"
	local OS_VER="$2"

	if [[ "$OS_VER" != "RHEL9" && "$OS_VER" != "RHEL8" && "$OS_VER" != "RHEL7" && "$OS_VER" != "RHEL6" && "$OS_VER" != "RHEL5" ]]; then
		echo "Error: $OS_VER not supported."
		return 1
	fi

	case "$status" in
	restart)
		ps -ef | grep "nfsd" | grep -v grep > /dev/null 2>&1
		if [ $? -eq 0 ]; then
			echo "nfsd already running!!"
			return 0
		fi

		if [[ "$2" == "RHEL7" || "$2" == "RHEL8" || "$2" == "RHEL9" ]]; then
			/bin/systemctl restart nfs-server.service
			ret=$?
		else
			/etc/init.d/nfs restart
			ret=$?
		fi
		;;
	stop)
		if [[ "$2" == "RHEL7" || "$2" == "RHEL8" || "$2" == "RHEL9" ]]; then
			/bin/systemctl stop nfs-server.service
			ret=$?
		else
			/etc/init.d/nfs stop
			ret=$?
		fi
		;;
	*)
		echo "Error: nfs_service [stop|restart]"
		ret=1
		;;
	esac

	return $ret
}

clean_nfs_env()
{
	umount "$NFS_TMP"/sts_mount
	/usr/sbin/exportfs -u 127.0.0.1:"$NFS_TMP"/sts_share
	rm -rf "$NFS_TMP"
	nfs_service stop $1
	if [ $? -ne 0 ]; then
		return 1
	else
		echo "Info: The nfs env for test clean successfully."
		return 0
	fi
}

create_nfs_env()
{
	nfs_service restart $1
	if [ $? -ne 0 ]; then
		return 1
	fi

	sleep 1

	mkdir -p "$NFS_TMP"/sts_share
	mkdir -p "$NFS_TMP"/sts_mount

	/usr/sbin/exportfs -i -o 'rw,async,no_root_squash' 127.0.0.1:"$NFS_TMP"/sts_share
	mount -t nfs 127.0.0.1:"$NFS_TMP"/sts_share "$NFS_TMP"/sts_mount

	return 0
}

if [ $# -gt 2 ]; then
	echo "Usage: test-for-nfs [-c] OS_VERSION"
	exit 1
fi

case "$1" in
-c)
	clean_nfs_env $2
        ret=$?
	if [ $ret -ne 0 ]; then
		echo "Error: cleaning the nfs env for test failed."
	fi
        ;;
*)
	if [ ! -z "$1" ]; then
		create_nfs_env $1
        	ret=$?
		if [ $ret -eq 0 ]; then
			echo "Info: The nfs env for test create successfully."
		else
			echo "Error: creating the nfs env for test failed."
		fi
	else
		echo "Usage: test-for-nfs [-c] OS_VERSION"
        	ret=1
	fi
        ;;
esac

exit $ret
