#!/bin/ksh
#
# Script utilizing shUnit to do automated RHM code testing
#
# shUnit can be found at http://shunit.sourceforge.net/
#
# $Id$
#
Suite() {
#rhmhostlist tests
shuRegTest rhmhostlist_SingleEntry
shuRegTest rhmhostlist_MultipleEntry
shuRegTest rhmhostlist_ExtendedSingleEntry
shuRegTest rhmhostlist_ExtendedMultipleEntry
shuRegTest rhmhostlist_NoArgsError
shuRegTest rhmhostlist_HostNotInRHMError
shuRegTest rhmhostlist_Help
#rhmhostadd tests
shuRegTest rhmhostadd_SingleEntry
shuRegTest rhmhostadd_SingleEntryAvailabilityYes
shuRegTest rhmhostadd_SingleEntryAvailabilityNo
shuRegTest rhmhostadd_ShortNameError
shuRegTest rhmhostadd_Help
#rhmhostdel tests
shuRegTest rhmhostdel_SingleEntry
shuRegTest rhmhostdel_SingleEntryForced
shuRegTest rhmhostdel_HostNotInRHMError
shuRegTest rhmhostdel_Error
shuRegTest rhmhostdel_Help
#rhmhostclone tests
shuRegTest rhmhostclone_2ValidHosts
shuRegTest rhmhostclone_2ValidHostsForced
shuRegTest rhmhostclone_Host1HostNotInRHMError
shuRegTest rhmhostclone_Host2HostNotInRHMError
shuRegTest rhmhostclone_Error
shuRegTest rhmhostclone_Help
}
#Expected output:
#www.example.com
rhmhostlist_SingleEntry() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist www.example.com)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostlist" $?
assertContains '^www.example.com$' "$stdout"
}
#Expected output:
#example.com
#www.example.com
rhmhostlist_MultipleEntry() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist example.com)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostlist" $?
assertContains '^www.example.com$' "$stdout"
assertContains '^example.com$' "$stdout"
}
#Expected output:
#www.example.com cerberus 2010-04-05 21:51:41
rhmhostlist_ExtendedSingleEntry() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist -e www.example.com)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostlist" $?
assertContains '^www.example.com' "$stdout"
assertContains 'cerberus' "$stdout"
assertContains '2010-04-05' "$stdout"
assertContains '21:51:41' "$stdout"
}
#Expected output:
#example.com cerberus 2010-03-04 20:26:50
#www.example.com cerberus 2010-04-05 21:51:41
rhmhostlist_ExtendedMultipleEntry() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist -e example.com)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostlist" $?
assertContains '^www.example.com' "$stdout"
assertContains 'cerberus' "$stdout"
assertContains '2010-04-05' "$stdout"
assertContains '21:51:41' "$stdout"
assertContains '^example.com' "$stdout"
assertContains '2010-03-04' "$stdout"
assertContains '20:26:50' "$stdout"
}
#Expected output:
#ERROR: Incorrect number of arguments
#Usage: /Users/cerberus/rhm/bin/rhmhostlist [-e] [-h] <host regex>
#
# -e Extended listing. Include who added the host and when.
# -h This help.
# host regex POSIX compliant host regex.
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostlist_NoArgsError() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist)
[ $? -eq 1 ]
shuAssert "Expected exit code 1 with rhmhostlist" $?
assertContains '^ERROR: Incorrect number of arguments$' "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#No hosts matching rhm1.ginch.org in RHMDB.
#Usage: /Users/cerberus/rhm/bin/rhmhostlist [-e] [-h] <host regex>
#
# -e Extended listing. Include who added the host and when.
# -h This help.
# host regex POSIX compliant host regex.
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostlist_HostNotInRHMError() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist rhm1.ginch.org)
[ $? -eq 5 ]
shuAssert "Expected exit code 5 with rhmhostlist" $?
assertContains '^No hosts matching rhm1.ginch.org in' "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#Usage: /Users/cerberus/rhm/bin/rhmhostlist [-e] [-h] <host regex>
#Expected output:
#Usage: /Users/cerberus/rhm/bin/rhmhostlist [-e] [-h] <host regex>
#
# -e Extended listing. Include who added the host and when.
# -h This help.
# host regex POSIX compliant host regex.
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostlist_Help() {
stdout=$(${RHM_BIN_DIR}/rhmhostlist -h)
[ $? -eq 2 ]
shuAssert "Expected exit code 2 with rhmhostlist" $?
assertContains '^Usage:' "$stdout"
}
#Expected output:
#rhm1.ginch.org successfully added to rhmdb.
rhmhostadd_SingleEntry() {
stdout=$(${RHM_BIN_DIR}/rhmhostadd rhm1.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostadd" $?
assertContains '^rhm1.ginch.org successfully added to' "$stdout"
${RHM_BIN_DIR}/rhmhostdel -f rhm1.ginch.org
}
#Expected output:
#rhm1.ginch.org successfully added to rhmdb.
rhmhostadd_SingleEntryAvailabilityYes() {
stdout=$(${RHM_BIN_DIR}/rhmhostadd -a yes rhm1.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostadd" $?
assertContains '^rhm1.ginch.org successfully added to' "$stdout"
${RHM_BIN_DIR}/rhmhostdel -f rhm1.ginch.org
}
#Expected output:
#rhm1.ginch.org successfully added to rhmdb.
rhmhostadd_SingleEntryAvailabilityNo() {
stdout=$(${RHM_BIN_DIR}/rhmhostadd -a no rhm1.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostadd" $?
assertContains '^rhm1.ginch.org successfully added to' "$stdout"
${RHM_BIN_DIR}/rhmhostdel -f rhm1.ginch.org
}
#Expected output:
#ERROR: FQDN not given. Short name detected.
#Usage: /Users/cerberus/rhm/bin/rhmhostadd [-a yes|no] [-h] FQDN
#
# -a yes|no Set availability flag. Default is yes.
# -h This help.
# FQDN Fully Qualified Domain Name, IE: the full hostname.
#
#Note: FQDN must resolve to an IP address
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostadd_ShortNameError() {
stdout=$(${RHM_BIN_DIR}/rhmhostadd rhm1)
[ $? -eq 5 ]
shuAssert "Expected exit code 5 with rhmhostadd" $?
assertContains '^ERROR: FQDN not given. Short name detected.$' "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#Usage: /Users/cerberus/rhm/bin/rhmhostadd [-a yes|no] [-h] FQDN
#
# -a yes|no Set availability flag. Default is yes.
# -h This help.
# FQDN Fully Qualified Domain Name, IE: the full hostname.
#
#Note: FQDN must resolve to an IP address
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostadd_Help() {
stdout=$(${RHM_BIN_DIR}/rhmhostadd -h)
[ $? -eq 3 ]
shuAssert "Expected exit code 3 with rhmhostadd" $?
assertContains '^Usage:' "$stdout"
}
#Expected output:
#rhm1.ginch.org is to be deleted. Continue? (y/N)
rhmhostdel_SingleEntry() {
${RHM_BIN_DIR}/rhmhostadd rhm1.ginch.org > /dev/null
stdout=$(echo y | ${RHM_BIN_DIR}/rhmhostdel rhm1.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostadd" $?
assertContains 'rhm1.ginch.org is to be deleted. Continue? (y/N)' "$stdout"
}
#Expected output:
#[None, blank output]
rhmhostdel_SingleEntryForced() {
${RHM_BIN_DIR}/rhmhostadd rhm1.ginch.org > /dev/null
stdout=$(${RHM_BIN_DIR}/rhmhostdel -f rhm1.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostdel" $?
}
#Expected output:
#ERROR: rhm1.ginch.org is not in RHMDB. Can't remove what isn't there.
#Usage: /Users/cerberus/rhm/bin/rhmhostdel [-f] [-h] FQDN
#
# -f Force. Do not prompt for confirmation.
# -h This help.
# FQDN Fully Qualified Domain Name, IE: the full hostname.
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostdel_HostNotInRHMError() {
stdout=$(${RHM_BIN_DIR}/rhmhostdel rhm1.ginch.org)
[ $? -eq 6 ]
shuAssert "Expected exit code 6 with rhmhostdel" $?
assertContains "ERROR: rhm1.ginch.org is not in RHMDB. Can't remove what isn't there." "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#ERROR: Incorrect number of arguments
#Usage: /Users/cerberus/rhm/bin/rhmhostdel [-f] [-h] FQDN
#
# -f Force. Do not prompt for confirmation.
# -h This help.
# FQDN Fully Qualified Domain Name, IE: the full hostname.
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostdel_Error() {
stdout=$(${RHM_BIN_DIR}/rhmhostdel)
[ $? -eq 1 ]
shuAssert "Expected exit code 1 with rhmhostdel" $?
assertContains "ERROR: Incorrect number of arguments" "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#Usage: /Users/cerberus/rhm/bin/rhmhostdel [-f] [-h] FQDN
#
# -f Force. Do not prompt for confirmation.
# -h This help.
# FQDN Fully Qualified Domain Name, IE: the full hostname.
#
#RHM (Remote Host Manager)
#Version 0.2-beta11 9/4/11
rhmhostdel_Help() {
stdout=$(${RHM_BIN_DIR}/rhmhostdel -h)
[ $? -eq 2 ]
shuAssert "Expected exit code 2 with rhmhostdel" $?
assertContains '^Usage:' "$stdout"
}
#Expected output:
#
#rhm1.ginch.org is about to be cloned onto rhm2.ginch.org.
#
#Continue? (y/N) Adding test/tree/2#2 to rhm2.ginch.org...
#
#test/tree/2#2 successfully added to rhm2.ginch.org by cerberus on 2011-09-22 22:27:15.
#
#Adding test_tree_1#1 to rhm2.ginch.org...
#
#test_tree_1#1 successfully added to rhm2.ginch.org by cerberus on 2011-09-22 22:27:15.
#
#rhm2.ginch.org:
# test/tree/2#2
# test_tree_1#1
rhmhostclone_2ValidHosts() {
#Setup 2 hosts and 2 trees on 1 host.
${RHM_BIN_DIR}/rhmhostdel -f rhm1.ginch.org > /dev/null
${RHM_BIN_DIR}/rhmhostdel -f rhm2.ginch.org > /dev/null
${RHM_BIN_DIR}/rhmhostadd rhm1.ginch.org > /dev/null || exit 1
${RHM_BIN_DIR}/rhmhostadd rhm2.ginch.org > /dev/null || exit 1
${RHM_BIN_DIR}/rhmtreeadd -t test_tree_1 -v 1 rhm1.ginch.org > /dev/null || exit 1
${RHM_BIN_DIR}/rhmtreeadd -t test/tree/2 -v 2 rhm1.ginch.org > /dev/null || exit 1
stdout=$(echo y | ${RHM_BIN_DIR}/rhmhostclone rhm1.ginch.org rhm2.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostclone" $?
assertContains '^rhm1.ginch.org is about to be cloned onto rhm2.ginch.org.' "$stdout"
assertContains 'Continue? (y/N)' "$stdout"
assertContains 'Adding test_tree_1#1 to rhm2.ginch.org' "$stdout"
assertContains 'test_tree_1#1 successfully added to rhm2.ginch.org by' "$stdout"
assertContains 'Adding test/tree/2#2 to rhm2.ginch.org' "$stdout"
assertContains 'test/tree/2#2 successfully added to rhm2.ginch.org by' "$stdout"
#Clean up the target host
${RHM_BIN_DIR}/rhmtreedel -t all -y rhm2.ginch.org > /dev/null || exit 1
}
#Expected output:
#Adding test/tree/2#2 to rhm2.ginch.org...
#
#test/tree/2#2 successfully added to rhm2.ginch.org by cerberus on 2011-09-22 22:28:20.
#
#Adding test_tree_1#1 to rhm2.ginch.org...
#
#test_tree_1#1 successfully added to rhm2.ginch.org by cerberus on 2011-09-22 22:28:20.
#
#rhm2.ginch.org:
# test/tree/2#2
# test_tree_1#1
rhmhostclone_2ValidHostsForced() {
stdout=$(${RHM_BIN_DIR}/rhmhostclone -f rhm1.ginch.org rhm2.ginch.org)
[ $? -eq 0 ]
shuAssert "Expected exit code 0 with rhmhostclone" $?
assertContains 'Adding test_tree_1#1 to rhm2.ginch.org' "$stdout"
assertContains 'test_tree_1#1 successfully added to rhm2.ginch.org by' "$stdout"
assertContains 'Adding test/tree/2#2 to rhm2.ginch.org' "$stdout"
assertContains 'test/tree/2#2 successfully added to rhm2.ginch.org by' "$stdout"
#Clean up the target host
${RHM_BIN_DIR}/rhmtreedel -t all -y rhm2.ginch.org > /dev/null || exit 1
}
#Expected output:
#Both SRC and DST hosts must be in RHMDB.
#Usage: bin/rhmhostclone [-f] [-h] <SRC FQDN> <DST FQDN>
#...
rhmhostclone_Host1HostNotInRHMError() {
stdout=$(${RHM_BIN_DIR}/rhmhostclone rhm.ginch.org rhm2.ginch.org)
[ $? -eq 4 ]
shuAssert "Expected exit code 4 with rhmhostclone" $?
assertContains 'Both SRC and DST hosts must be in' "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#Both SRC and DST hosts must be in RHMDB.
#Usage: bin/rhmhostclone [-f] [-h] <SRC FQDN> <DST FQDN>
#...
rhmhostclone_Host2HostNotInRHMError() {
stdout=$(${RHM_BIN_DIR}/rhmhostclone rhm1.ginch.org rhm.ginch.org)
[ $? -eq 4 ]
shuAssert "Expected exit code 4 with rhmhostclone" $?
assertContains 'Both SRC and DST hosts must be in' "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#ERROR: Incorrect number of arguments
#Usage: ./rhmhostclone [-f] [-h] <SRC FQDN> <DST FQDN>
#
# -f Force. Bypass confirmation prompt.
# -h This help.
# SRC FQDN FQDN of the source host.
# DST FQDN FQDN of the target host.
#
#RHM (Remote Host Manager)
#Version 0.2-beta12 9/14/11
rhmhostclone_Error() {
stdout=$(${RHM_BIN_DIR}/rhmhostclone)
[ $? -eq 2 ]
shuAssert "Expected exit code 2 with rhmhostclone" $?
assertContains 'ERROR: Incorrect number of arguments' "$stdout"
assertContains '^Usage:' "$stdout"
}
#Expected output:
#Usage: ./rhmhostclone [-f] [-h] <SRC FQDN> <DST FQDN>
#
# -f Force. Bypass confirmation prompt.
# -h This help.
# SRC FQDN FQDN of the source host.
# DST FQDN FQDN of the target host.
#
#RHM (Remote Host Manager)
#Version 0.2-beta12 9/14/11
rhmhostclone_Help() {
stdout=$(${RHM_BIN_DIR}/rhmhostclone -h)
[ $? -eq 1 ]
shuAssert "Expected exit code 1 with rhmhostclone" $?
assertContains '^Usage:' "$stdout"
${RHM_BIN_DIR}/rhmhostdel -f rhm1.ginch.org > /dev/null
${RHM_BIN_DIR}/rhmhostdel -f rhm2.ginch.org > /dev/null
}
###
# Support functions, not part of specific testing
###
assertContains() {
expected_substring="$1"
actual_string="$2"
echo "$actual_string" | grep -q "$expected_substring"
shuAssert "Expected '$expected_substring'" $?
}
###
# main
###
RHM_BIN_DIR=~/rhmtest/bin
#Testing stuff shUnit
. ~/rhmtest/ShUnit/shUnit
shuStart Suite