diff --git a/tools/test-findif.sh b/tools/test-findif.sh index bea3d5883..37f3d7152 100755 --- a/tools/test-findif.sh +++ b/tools/test-findif.sh @@ -1,231 +1,231 @@ #!/bin/sh # Easy peasy test for findif, configuration via direct edit... # Jan Pokorny set -u COLOR=0 if [ -t 1 ] && echo -e foo | grep -qvE "^-e"; then COLOR=1 else COLOR=0 fi ok () { [ $COLOR -eq 1 ] \ && echo -en "[\033[32m OK \033[0m]" \ || echo -n "[ OK ]" echo " $@" } fail () { [ $COLOR -eq 1 ] \ && echo -en "[\033[31mFAIL\033[0m]" \ || echo -n "[FAIL]" echo " $@" } info () { [ $COLOR -eq 1 ] \ && echo -e "\033[34m$@\033[0m" \ || echo "$@" } mimic_return () { return $1; } verbosely () { echo $1; $1; } PRG=./findif SCRIPT=../heartbeat/findif.sh SCRIPT_CMD="$(head -n1 ${SCRIPT} | sed 's|#!||') \ -c \"source ${SCRIPT}; findif\"" CMD="${PRG}" DUMMY_USER=test-findif # carefully selected to fit TEST-NET-2 # http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses DUMMY_IP=198.51.100.1 DUMMY_NM=255.255.255.0 # derived DUMMY_IP_13=$(echo $DUMMY_IP | cut -d. -f1-3) DUMMY_IP_4=$( echo $DUMMY_IP | cut -d. -f4 ) DUMMY_NM_13=$(echo $DUMMY_NM | cut -d. -f1-3) DUMMY_NM_4=$( echo $DUMMY_NM | cut -d. -f4 ) TEST_DATA=\ " # 1-9: valid cases, invalid cases: 10-19: ip, 20-29: netmask bits, 30-39: netmask # OCF_RESKEY_ip, OCF_RESKEY_cidr_netmask, ret, exp_dev, exp_nm, exp_bc # 1) loopback 127.0.0.1, , 0, lo, 255.0.0.0, 127.255.255.255 # 2) DUMMY_IP+1 ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), , 0, dummy0, 255.255.255.0, ${DUMMY_IP_13}.255 # 3) DUMMY_IP+1, explicit netmask bits ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), 24, 0, dummy0, 255.255.255.0, ${DUMMY_IP_13}.255 # 4) DUMMY_IP+1, explicit netmask ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), ${DUMMY_NM}, 0, dummy0, 255.255.255.0, ${DUMMY_IP_13}.255 # # 10) *invalid* ip (missing last item in quad) ${DUMMY_IP_13}., , 6, NA, NA, NA # 11) *invalid* ip (random string) foobar, , 6, NA, NA, NA # 20) DUMMY_IP+1, explicit *invalid* netmask bits (33) ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), 33 , 6, NA, NA, NA # 21) DUMMY_IP+1, explicit *invalid* netmask bits (-1) ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), -1 , 6, NA, NA, NA # 22) DUMMY_IP+1, explicit *invalid* netmask bits (random string) ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), foobar , 6, NA, NA, NA # 30) DUMMY_IP+1, explicit *invalid* netmask (missing last item in quad) ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), ${DUMMY_NM_13}. , 6, NA, NA, NA - # 30) DUMMY_IP+1, explicit *invalid* netmask (random string containing dot) + # 31) DUMMY_IP+1, explicit *invalid* netmask (random string containing dot) ${DUMMY_IP_13}.$((DUMMY_IP_4 + 1)), foo.bar , 6, NA, NA, NA " die() { echo "$@" exit } warn() { echo "$@" } setup() { if [ "$(uname -o)" != "GNU/Linux" ]; then die "Only tested with Linux, feel free to edit the condition." fi if [ "${CMD}" = "${PRG}" ]; then [ -x ${PRG} ] || die "Forgot to compile ${PRG} for me to test?" fi if [ $(id -u) -ne 0 ]; then die "Due to (unobtrusive) juggling with routing, run as root." fi if ! useradd -M ${DUMMY_USER} 2>/dev/null; then die "Cannot add user ${DUMMY_USER} for testing purposes." fi if lsmod | grep -q "^dummy[ ]\+"; then warn "Looks like you already use dummy network device." else modprobe dummy || die "No dummy kernel module (per name) at hand." fi if ! ifconfig dummy0 ${DUMMY_IP} netmask ${DUMMY_NM}; then die "Cannot ifconfig dummy0" fi } teardown() { userdel ${DUMMY_USER} || warn "Cannot kick user ${DUMMY_USER} out." rmmod dummy || warn "Cannot kick dummy kernel module out." } proceed() { err_cnt=0 echo "${TEST_DATA}" | while read curline; do if echo "${curline}" | grep -qv -e '^[ \t]*#' -e '^$'; then err_this=0 curline="$(echo "${curline}" | tr '\t' ' ' | tr -s ' ')" info "$(echo "${lastline}" | sed 's|^#|------|')" ip="$(echo "${curline}" | cut -d, -f1 | sed 's|^ *||g')" mask="$(echo "${curline}" | cut -d, -f2 | sed 's|^ *||g')" exp_ec="$(echo "${curline}" | cut -d, -f3 | sed 's|^ *||g')" exp_dev="$(echo "${curline}" | cut -d, -f4 | sed 's|^ *||g')" exp_nm="$(echo "${curline}" | cut -d, -f5 | sed 's|^ *||g')" exp_bc="$(echo "${curline}" | cut -d, -f6 | sed 's|^ *||g')" #echo "${ip}, ${mask}, ${exp_ret}, ${exp_dev}, ${exp_nm}" env="OCF_RESKEY_ip=${ip} OCF_RESKEY_cidr_netmask=${mask}" echo "${env}" res="$(su ${DUMMY_USER} -c "${env} ${CMD} 2>&1")" got_ec=$? res="$(echo "${res}" | tr '\t' ' ' | tr -s ' ')" res_check= echo "${res}" | while read res_line; do echo "${res_line}" | grep -q "^[a-z0-9]\+ netmask" if [ $? -ne 0 ]; then echo "${res_line}" | grep -q "Copyright Alan Robertson" \ && break echo "${res_line}" elif [ -z "${res_check}" ]; then res_check="${res_line}" else warn "More than one line with results." fi done if [ "${got_ec}" != "${exp_ec}" ]; then warn "FAIL exit code: ${got_ec} vs ${exp_ec}" let err_this+=1 fi if [ -n "$res_check" ]; then got_dev="$(echo "${res_check}" | cut -d' ' -f1)" got_nm="$(echo "${res_check}" | cut -d' ' -f3)" got_bc="$(echo "${res_check}" | cut -d' ' -f5)" #echo "${got_dev}, ${got_nm}, ${got_bc}" if [ "${got_dev}" != "${exp_dev}" ]; then warn "FAIL device: ${got_dev} vs ${exp_dev}" let err_this+=1 fi if [ "${got_nm}" != "${exp_nm}" ]; then warn "FAIL netmask: ${got_nm} vs ${exp_nm}" let err_this+=1 fi if [ "${got_bc}" != "${exp_bc}" ]; then warn "FAIL broadcast: ${got_bc} vs ${exp_bc}" let err_this+=1 fi fi if [ $err_this -eq 0 ]; then ok else fail let err_cnt+=1 fi fi lastline="${curline}" mimic_return $err_cnt # workaround separate process limitation done err_cnt=$? echo "--- TOTAL ---" [ $err_cnt -eq 0 ] && ok || fail $err_cnt return $err_cnt } if [ $# -ge 1 ]; then while true; do case $1 in --script) CMD="${SCRIPT_CMD}" [ $# -eq 1 ] && break ;; setup|proceed|teardown) verbosely $1 ret=$? [ $ret -ne 0 ] && exit $ret ;; *) echo "usage: ./$0 [--script] [setup|proceed|teardown]" exit 0 ;; esac [ $# -eq 1 ] && exit 0 shift done fi verbosely setup verbosely proceed ret=$? verbosely teardown exit $ret