time_kinit: Rewrite to make more readable
authorKai Blin <kai@samba.org>
Wed, 9 Sep 2009 07:33:26 +0000 (09:33 +0200)
committerKai Blin <kai@samba.org>
Wed, 9 Sep 2009 07:33:26 +0000 (09:33 +0200)
Split out useful helper functions and settings to separate files.

settings.sh [new file with mode: 0644]
time_kinit.sh
utils.sh [new file with mode: 0644]

diff --git a/settings.sh b/settings.sh
new file mode 100644 (file)
index 0000000..8d61867
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+DATE=date
+BC=bc
+SED=sed
+DATE_FORMATSTR="+%s.%N"
+
+KINIT=kinit
+# MIT krb < 1.6
+KINIT_PARAM_OLD="--password-file=STDIN"
+# MIT krb >= 1.6
+KINIT_PARAM_NEW=""
+
+KDESTROY=kdestroy
+SEQ=seq
+
+NEW_KRB5CCNAME=/tmp/ad_test_ccname
+
index f069e95e6f13831680cea6284543af924f779d75..43481003ff9ef6d586ff68f22224c5231a271855 100644 (file)
@@ -1,42 +1,45 @@
 #!/bin/bash
 
-TIME=time
-# MIT krb < 1.6
-KINIT="kinit --password-file=STDIN"
-# MIT krb >= 1.6
-# KINIT="kinit"
-KDESTROY=kdestroy
-DATE=date
-SEQ=seq
+# Iterations are set per test, so more time-consuming tests can be run less
+# often
+ITERATIONS=100
 
-PRINCIPAL="${1}"
-PASSWORD="${2}"
+source `dirname $0`/utils.sh
 
-OLD_KRB5CCNAME="${KRB5CCNAME}"
-KRB5CCNAME=/tmp/ad_test_ccname
-export KRB5CCNAME
+set_up () {
+       set_krb_env
+       setup_kinit
+}
 
-START_TIME=`${DATE} "+%s.%N"`
+tear_down () {
+       restore_krb_env
+}
 
-for i in `${SEQ} 1 100`; do
+set_up
+
+PRINCIPAL=$( get_principal $1)
+PASSWORD=$( get_password $1)
+
+START_TIME=$( start_timer )
+
+for i in $(${SEQ} 1 $ITERATIONS); do
        echo ${PASSWORD} | ${KINIT} ${PRINCIPAL} > /dev/null
        if [ $? -ne 0 ]; then
-               echo "kinit returned an error\n"
+               echo "kinit returned an error"
                exit 1
        fi
        ${KDESTROY}
 done
 
-END_TIME=`${DATE} "+%s.%N"`
+STOP_TIME=$( stop_timer )
 
-TOTAL_TIME=$(echo "scale=9;$END_TIME - $START_TIME"| bc)
+TOTAL_TIME=$( total_time $START_TIME $STOP_TIME )
 
-echo "Total time: $TOTAL_TIME"
+echo "Total time: ${TOTAL_TIME}s"
 
-LOGINS_PER_MINUTE=$(echo "scale=2; 60 * 100 / $TOTAL_TIME" | bc)
+LOGINS_PER_MINUTE=$(iterations_per_minute $START_TIME $STOP_TIME $ITERATIONS)
 
 echo "Performed $LOGINS_PER_MINUTE kinit/kdestroy cycles per minute"
 
-KRB5CCNAME="${OLD_KRB5CCNAME}"
-export KRB5CCNAME
+tear_down
 
diff --git a/utils.sh b/utils.sh
new file mode 100644 (file)
index 0000000..f487637
--- /dev/null
+++ b/utils.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+source `dirname $0`/settings.sh
+
+start_timer () {
+       START_TIME=$( ${DATE} ${DATE_FORMATSTR} )
+       echo "$START_TIME"
+}
+
+stop_timer () {
+       STOP_TIME=$( ${DATE} ${DATE_FORMATSTR} )
+       echo "$STOP_TIME"
+}
+
+total_time () {
+       START_TIME=$1
+       END_TIME=$2
+       TOTAL_TIME=$( echo "scale=9;$STOP_TIME - $START_TIME" | ${BC} )
+       echo "$TOTAL_TIME"
+}
+
+iterations_per_minute () {
+       START_TIME=$1
+       STOP_TIME=$2
+       TOTAL_RUNS=$3
+       
+       TOTAL_TIME=$( total_time $START_TIME $STOP_TIME )
+       
+       ITER_PER_MIN=$( echo "scale=2; 60 * $TOTAL_RUNS / $TOTAL_TIME" | ${BC} )
+       echo "$ITER_PER_MIN"
+}
+
+get_principal () {
+       PRINCIPAL=$( echo $1 | ${SED} -e "s/\(.*\)%.*/\1/" )
+       echo "$PRINCIPAL"
+}
+
+get_password () {
+       PASSWORD=$( echo $1 | ${SED} -e "s/.*%\(.*\)/\1/" )
+       echo "$PASSWORD"
+}
+
+get_realm () {
+       REALM=$( echo $1 | ${SED} -e "s/.*@\(.*\)%.*/\1/" )
+       echo "$REALM"
+}
+
+get_nt_dom () {
+       NT_DOM=$( echo $1 | ${SED} -e "s/.*@\(.*\)\..*/\1/" )
+       echo "$NT_DOM"
+}
+
+set_krb_env () {
+       OLD_KRB5CCNAME="${KRB5CCNAME}"
+       KRB5CCNAME="${NEW_KRB5CCNAME}"
+       export KRB5CCNAME
+}
+
+restore_krb_env () {
+       KRB5CCNAME="${OLD_KRB5CCNAME}"
+       export KRB5CCNAME
+}
+
+setup_kinit () {
+       ${KINIT} --invalid 2>&1 | grep -q -- "${KINIT_PARAM_OLD}"
+       if [ $? -eq 0 ]; then
+               KINIT="${KINIT} ${KINIT_PARAM_OLD}"
+       else
+               KINIT="${KINIT} ${KINIT_PARAM_NEW}"
+       fi
+}
+