@REM ----------------------------------------------------------------------------------
@REM    This batch file excercises some basic functionality of a cluster using the
@REM    cluscli.exe tool.
@REM
@REM
@REM    Author: SriniG
@REM    History: 7-3-1996       First batch of tests
@REM ----------------------------------------------------------------------------------


@REM ----------------------------------------------------------------------------------
@REM    The following parameters should be set in the cmd shell in which this script is
@REM    run. They are:
@REM    (1) NAME_OF_CLUSTER
@REM    (2) NAME_OF_NODE1
@REM    (3) NAME_OF_NODE2
@REM    (4) NAME_OF_GROUP
@REM    (5) NAME_OF_RESOURCE1
@REM    (6) NAME_OF_RESOURCE2
@REM    (7) NAME_OF_RESOURCETYPE
@REM ----------------------------------------------------------------------------------

@setlocal

@if "%1"=="/?" goto USAGE
@if "%1"=="-?" goto USAGE


@REM We set the environment by calling the bvtenv.cmd which should be tailored accordingly
@if not exist .\bvtenv.cmd goto USAGE
@call bvtenv.cmd

@REM This is used for rename operations... the original names are restored
@set TEMP_NAME=XYZ123

@REM check if the required env variables are set

@if "%NAME_OF_CLUSTER%"=="" goto USAGE
@if "%NAME_OF_NODE1%"=="" goto USAGE
@if "%NAME_OF_NODE2%"=="" goto USAGE 
@if "%NAME_OF_GROUP%"=="" goto USAGE 
@if "%NAME_OF_RESOURCE1%"=="" goto USAGE 
@if "%NAME_OF_RESOURCE2%"=="" goto USAGE
@REM if "%NAME_OF_RESOURCETYPE%"=="" goto USAGE

@set STATS=1

@REM ----------------------------------------------------------------------------------
@REM Check the status of the two nodes
@REM ----------------------------------------------------------------------------------

cluscli -status -c %NAME_OF_CLUSTER% node %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1   & echo  ***************** BVT Failure %STATS% *****************

cluscli -status -c %NAME_OF_CLUSTER% node %NAME_OF_NODE2%
@if errorlevel 1 set /A STATS=%STATS% + 1   & echo  ***************** BVT Failure %STATS% *****************

@REM ----------------------------------------------------------------------------------
@REM Pause and resume each node in turn  
@REM ----------------------------------------------------------------------------------

cluscli -pause -c %NAME_OF_CLUSTER% node %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -resume -c %NAME_OF_CLUSTER% node %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -pause -c %NAME_OF_CLUSTER% node %NAME_OF_NODE2%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -resume -c %NAME_OF_CLUSTER% node %NAME_OF_NODE2%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM ----------------------------------------------------------------------------------
@REM Create a group, find status, enumerate, online, find status, offline, find status,
@REM rename, get params
@REM ----------------------------------------------------------------------------------

cluscli -create -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -status -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -enum -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -online -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -status -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -offline -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -status -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM Get params for this group 

cluscli -params -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP% 
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM Rename the group to temp and back again

cluscli -rename -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP% %TEMP_NAME%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -rename -c %NAME_OF_CLUSTER% group %TEMP_NAME% %NAME_OF_GROUP% 
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************


@REM ----------------------------------------------------------------------------------
@REM Move the group between the different nodes ... once with no node specified,
@REM twice with the two nodes specified, repeat with the group online
@REM ----------------------------------------------------------------------------------

cluscli -move -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -move -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%  %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -move -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%  %NAME_OF_NODE2%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM Bring the group online and do the same

cluscli -online -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -move -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -move -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%  %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -move -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%  %NAME_OF_NODE2%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM ----------------------------------------------------------------------------------
@REM Obtain the params associated with the resourctype
@REM ----------------------------------------------------------------------------------

cluscli -params -c %NAME_OF_CLUSTER% resourcetype %NAME_OF_RESOURCETYPE%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************


@REM ----------------------------------------------------------------------------------
@REM We create a resource %NAME_OF_RESOURCE1%, and do various operations on it.
@REM The resource is deleted at the end of this section.
@REM ----------------------------------------------------------------------------------

cluscli -create -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1% %NAME_OF_GROUP% %NAME_OF_RESOURCETYPE% -p :CommandLine "/k ECHO %NAME_OF_RESOURCE1%" -p :ImageName cmd.exe -p :CurrentDirectory %HOMEDRIVE%%HOMEPATH%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM get status of the resource

cluscli -status -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM bring resource online

cluscli -online -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM bring resource offline

cluscli -offline -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM enum resource 

cluscli -enum -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************


@REM BUG BUG Delete owner and addowner functionality not implemented yet

@goto SKIPowner

@REM addowner and deleteowner

cluscli -addowner -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1% %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -deleteowner -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1% %NAME_OF_NODE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

:SKIPowner

@REM rename the resource to temp name and back

cluscli -rename -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1% %TEMP_NAME%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -rename -c %NAME_OF_CLUSTER% resource %TEMP_NAME% %NAME_OF_RESOURCE1% 
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM get the params associated with the resource

cluscli -params -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1% 
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************
                                                           
@REM delete the resource

cluscli -delete -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************


@REM ----------------------------------------------------------------------------------
@REM We create two resources %NAME_OF_RESOURCE1%, %NAME_OF_RESOURCE2%
@REM and do various dependency operations on it.
@REM The resources are deleted at the end of this section.
@REM ----------------------------------------------------------------------------------

cluscli -create -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1% %NAME_OF_GROUP% %NAME_OF_RESOURCETYPE% -p :CommandLine "/k ECHO %NAME_OF_RESOURCE1%" -p :ImageName cmd.exe -p :CurrentDirectory %HOMEDRIVE%%HOMEPATH%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -create -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE2% %NAME_OF_GROUP% %NAME_OF_RESOURCETYPE% -p :CommandLine "/k ECHO %NAME_OF_RESOURCE2%" -p :ImageName cmd.exe -p :CurrentDirectory %HOMEDRIVE%%HOMEPATH%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM make resource2 depend upon resource1

cluscli -adddepend -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE2%  %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM bring resource1 online

cluscli -online -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM bring resource2 offline

cluscli -offline -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE2%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM bring resource1 offline

cluscli -offline -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM remove resource2 dependency upon resource1

cluscli -deletedepend -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE2%  %NAME_OF_RESOURCE1%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

@REM ----------------------------------------------------------------------------------
@REM We try to rename the cluster to the temp name and back to the original, BUG-BUG:
@REM Need to change after cluster naming issues are resolved
@REM ----------------------------------------------------------------------------------
@REM  BUG BUG Not able to restore Cluster name so don't do it...

@goto skipclusname
cluscli -rename -c %NAME_OF_CLUSTER% cluster %TEMP_NAME%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************

cluscli -rename -c %TEMP_NAME% cluster %NAME_OF_CLUSTER%
@if errorlevel 1 set /A STATS=%STATS% + 1  & echo  ***************** BVT Failure %STATS% *****************
:skipclusname

:cleanup
@echo.
@echo.
@echo Cleaning up ...............................
@echo.
cluscli -delete -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE1%
@if errorlevel 1 echo !!!! WARNING: Could not delete resource %NAME_OF_RESOURCE1% !!!!
cluscli -delete -c %NAME_OF_CLUSTER% resource %NAME_OF_RESOURCE2%
@if errorlevel 1 echo !!!! WARNING: Could not delete resource %NAME_OF_RESOURCE2% !!!!
cluscli -delete -c %NAME_OF_CLUSTER% group %NAME_OF_GROUP%
@if errorlevel 1 echo !!!! WARNING: Could not delete resource %NAME_OF_GROUP% !!!!
@goto EXIT

:USAGE

@echo Usage: %0
@echo   The following environment variables should be set in the file bvtenv.cmd
@echo   (The file should be placed in the same dir from which clusbvt is run.)
@echo   They are:
@echo    (1) NAME_OF_CLUSTER
@echo    (2) NAME_OF_NODE1
@echo    (3) NAME_OF_NODE2
@echo    (4) NAME_OF_GROUP
@echo    (5) NAME_OF_RESOURCE1
@echo    (6) NAME_OF_RESOURCE2
@echo    (7) NAME_OF_RESOURCETYPE
@echo    The clustername, nodenames and resource type should be valid entities.
@echo    The group, resource1 and resource2 should not exist i.e. they get deleted
@echo    at the end of the run
@goto END
    

:EXIT
@set /A STATS=%STATS% - 1
@echo.
@echo.
@echo *******************************************************************************
@echo No. of BVT Tests failed = %STATS%
@echo *******************************************************************************
@echo.
@echo.
:END
@endlocal