* gssapi.exp: Rework significantly to deal with HP/UX lossage that
authorTom Yu <tlyu@mit.edu>
Tue, 4 Jul 2000 10:59:27 +0000 (10:59 +0000)
committerTom Yu <tlyu@mit.edu>
Tue, 4 Jul 2000 10:59:27 +0000 (10:59 +0000)
probably resulted from when either the client or the server wound
up blocking on tty output.  Abstract things a little more.  Remove
dead duplicate code that used to deal with "-v2".  Should figure
out why the "-v2" stuff disappeared mysteriously.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@12530 dc483132-0cff-0310-8789-dd5450dbe970

src/tests/dejagnu/krb-standalone/ChangeLog
src/tests/dejagnu/krb-standalone/gssapi.exp

index 649fb4387f97c606d190b65cd5569c46f1849378..acf80bece99c96bf1b0531e5e40cf26055d874fd 100644 (file)
@@ -1,3 +1,11 @@
+2000-07-04  Tom Yu  <tlyu@mit.edu>
+
+       * gssapi.exp: Rework significantly to deal with HP/UX lossage that
+       probably resulted from when either the client or the server wound
+       up blocking on tty output.  Abstract things a little more.  Remove
+       dead duplicate code that used to deal with "-v2".  Should figure
+       out why the "-v2" stuff disappeared mysteriously.
+
 2000-02-07  Tom Yu  <tlyu@mit.edu>
 
        * kadmin.exp: Use $KDESTROY -5 to deal with changed behavior.
index 8f932cb05578743e7b534a017a19e434004a26d0..fa717282e58e9f3ed8470e22477a1ff68819b820 100644 (file)
@@ -113,6 +113,81 @@ proc gss_restore_env { } {
     }
 }
 
+proc run_client {test tkfile client} {
+    global env
+    global hostname
+    global GSSCLIENT
+    global spawn_id
+    global gss_server_spawn_id
+    global REALMNAME
+
+    set env(KRB5CCNAME) $tkfile
+    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
+    verbose "spawning gssclient, identity=$client"
+    spawn $GSSCLIENT -port 5556 $hostname gssservice@$hostname "message from $client"
+    set got_client 0
+    set got_server 0
+    expect_after {
+       -i $spawn_id
+       timeout {
+           if {!$got_client} {
+               verbose -log "client timeout"
+               fail $test
+               catch "expect_after"
+               return
+           }
+       }
+       eof {
+           if {!$got_client} {
+               verbose -log "client eof"
+               fail $test
+               catch "expect_after"
+               return
+           }
+       }
+       -i $gss_server_spawn_id
+       timeout {
+           if {!$got_server} {
+               verbose -log "server timeout"
+               fail $test
+               catch "expect_after"
+               return
+           }
+       }
+       eof {
+           if {!$got_server} {
+               verbose -log "server eof"
+               fail $test
+               catch "expect_after"
+               return
+           }
+       }
+    }
+    expect {
+       -i $gss_server_spawn_id
+       "Accepted connection: \"$client@$REALMNAME\"" exp_continue
+       "Received message: \"message from $client\"" {
+           set got_server 1
+           if {!$got_client} {
+               exp_continue
+           }
+       }
+       -i $spawn_id
+       "Signature verified" {
+           set got_client 1
+           if {!$got_server} {
+               exp_continue
+           }
+       }
+    }
+    catch "expect_after"
+    if ![check_exit_status $test] {
+       # check_exit_staus already calls fail for us
+       return
+    }
+    pass $test
+}
+
 proc doit { } {
     global REALMNAME
     global env
@@ -133,70 +208,59 @@ proc doit { } {
 
     # Start up the kerberos and kadmind daemons.
     if ![start_kerberos_daemons 0] {
-       fail gsstest
-       return
+       perror "failed to start kerberos daemons"
     }
 
     # Use kadmin to add a key for us.
     if ![add_kerberos_key gsstest0 0] {
-       fail gsstest
-       return
+       perror "failed to set up gsstest0 key"
     }
 
     # Use kadmin to add a key for us.
     if ![add_kerberos_key gsstest1 0] {
-       fail gsstest
-       return
+       perror "failed to set up gsstest1 key"
     }
 
     # Use kadmin to add a key for us.
     if ![add_kerberos_key gsstest2 0] {
-       fail gsstest
-       return
+       perror "failed to set up gsstest2 key"
     }
 
     # Use kadmin to add a key for us.
     if ![add_kerberos_key gsstest3 0] {
-       fail gsstest
-       return
+       perror "faild to set up gsstest3 key"
     }
 
     # Use kadmin to add a service key for us.
     if ![add_random_key gssservice/$hostname 0] {
-       fail gsstest
-       return
+       perror "failed to set up gssservice/$hostname key"
     }
 
     # Use kdb5_edit to create a srvtab entry for gssservice
     if ![setup_srvtab 0 gssservice] {
-       fail gsstest
-       return
+       perror "failed to set up gssservice srvtab"
     }
 
     catch "exec rm -f $tmppwd/gss_tk_0 $tmppwd/gss_tk_1 $tmppwd/gss_tk_2 $tmppwd/gss_tk_3"
 
     # Use kinit to get a ticket.
     if ![our_kinit gsstest0 gsstest0$KEY $tmppwd/gss_tk_0] {
-       fail gsstest
-       return
+       perror "failed to kinit gsstest0"
     }
 
     # Use kinit to get a ticket.
     if ![our_kinit gsstest1 gsstest1$KEY $tmppwd/gss_tk_1] {
-       fail gsstest
-       return
+       perror "failed to kinit gsstest1"
     }
 
     # Use kinit to get a ticket.
     if ![our_kinit gsstest2 gsstest2$KEY $tmppwd/gss_tk_2] {
-       fail gsstest
-       return
+       perror "failed to kinit gsstest2"
     }
 
     # Use kinit to get a ticket.
     if ![our_kinit gsstest3 gsstest3$KEY $tmppwd/gss_tk_3] {
-       fail gsstest
-       return
+       perror "failed to kinit gsstest3"
     }
 
     #
@@ -219,377 +283,30 @@ proc doit { } {
     spawn $GSSSERVER -port 5556 gssservice@$hostname
     set gss_server_pid [exp_pid]
     set gss_server_spawn_id $spawn_id
-    catch "exec sleep 4"
-
-    # Start the client with client identity 0
-    set env(KRB5CCNAME) $tmppwd/gss_tk_0
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5556 $hostname gssservice@$hostname "message from gsstest0"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest0@$REALMNAME\""
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest0\""
-    catch "expect_after"
-    if ![check_exit_status gssclient0] {
-       fail gssclient0
-       return
-    }
-    pass gssclient0
-
-    # Start the client with client identity 1
-    set env(KRB5CCNAME) $tmppwd/gss_tk_1
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5556 $hostname gssservice@$hostname "message from gsstest1"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest1@$REALMNAME\""
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest1\""
-    catch "expect_after"
-    if ![check_exit_status gssclient1] {
-       fail gssclient1
-       return
-    }
-    pass gssclient1
-
-    # Start the client with client identity 2
-    set env(KRB5CCNAME) $tmppwd/gss_tk_2
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5556 $hostname gssservice@$hostname "message from gsstest2"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest2@$REALMNAME\""
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest2\""
-    catch "expect_after"
-    if ![check_exit_status gssclient2] {
-       fail gssclient2
-       return
-    }
-    pass gssclient2
-
-    # Start the client with client identity 3
-    set env(KRB5CCNAME) $tmppwd/gss_tk_3
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5556 $hostname gssservice@$hostname "message from gsstest3"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail "gssclient3 (server timeout)"
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail "gssclient3 (server eof)"
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest3@$REALMNAME\""
-    # Drain some output from the verbose client side.  Otherwise, this
-    # test sometimes fails under HP-UX.
-    expect -i $spawn_id "\"gsstest3@KRBTEST.COM\" to \"gssservice"
-    expect -i $spawn_id "Mechanism { * } supports * name"
-
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest3\""
-    catch "expect_after"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail "gssclient3 (timeout)"
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail "gssclient3 (eof)"
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    if ![check_exit_status gssclient3] {
-       fail "gssclient3 (exit status)"
-       return
-    }
-    pass gssclient3
-
-    stop_gss_server
-
-    # Try some V2 services.
-    # Now start the gss-server.
-    spawn $GSSSERVER -port 5557 gssservice@$hostname
-    set gss_server_pid [exp_pid]
-    set gss_server_spawn_id $spawn_id
-    catch "exec sleep 4"
+    sleep 2
 
-    # Start the client with client identity 0
-    set env(KRB5CCNAME) $tmppwd/gss_tk_0
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5557 $hostname gssservice@$hostname "message from gsstest0"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient0
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest0@$REALMNAME\""
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest0\""
-    catch "expect_after"
-    if ![check_exit_status gssclient0] {
-       fail gssclient0
-       return
-    }
-    pass gssclient0
-
-    # Start the client with client identity 1
-    set env(KRB5CCNAME) $tmppwd/gss_tk_1
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5557 $hostname gssservice@$hostname "message from gsstest1"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient1
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest1@$REALMNAME\""
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest1\""
-    catch "expect_after"
-    if ![check_exit_status gssclient1] {
-       fail gssclient1
-       return
-    }
-    pass gssclient1
-
-    # Start the client with client identity 2
-    set env(KRB5CCNAME) $tmppwd/gss_tk_2
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5557 $hostname gssservice@$hostname "message from gsstest2"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient2
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest2@$REALMNAME\""
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest2\""
-    catch "expect_after"
-    if ![check_exit_status gssclient2] {
-       fail gssclient2
-       return
-    }
-    pass gssclient2
-
-    # Start the client with client identity 3
-    set env(KRB5CCNAME) $tmppwd/gss_tk_3
-    verbose "KRB5CCNAME=$env(KRB5CCNAME)"
-    spawn $GSSCLIENT -port 5557 $hostname gssservice@$hostname "message from gsstest3"
-    expect_after {
-       -i $gss_server_spawn_id
-       timeout {
-           fail gssclient3
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient3
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $gss_server_spawn_id "Accepted connection: \"gsstest3@$REALMNAME\""
-
-    # Drain some output from the verbose client side.  Otherwise, this
-    # test sometimes fails under HP-UX.
-    expect -i $spawn_id "\"gsstest3@KRBTEST.COM\" to \"gssservice"
-    expect -i $spawn_id "Mechanism { * } supports * name"
-
-    expect -i $gss_server_spawn_id "Received message: \"message from gsstest3\""
-    catch "expect_after"
-    expect_after {
-       -i $spawn_id
-       timeout {
-           fail gssclient3
-           catch "expect_after"
-           return
-       }
-       eof {
-           fail gssclient3
-           catch "expect_after"
-           return
-       }
-    }
-    expect -i $spawn_id "Signature verified"
-    catch "expect_after"
-    if ![check_exit_status gssclient3] {
-       fail gssclient3
-       return
-    }
-    pass gssclient3
+    run_client gssclient0 $tmppwd/gss_tk_0 gssclient0
+    run_client gssclient1 $tmppwd/gss_tk_1 gssclient1
+    run_client gssclient2 $tmppwd/gss_tk_2 gssclient2
+    run_client gssclient3 $tmppwd/gss_tk_3 gssclient3
 
     stop_gss_server
     gss_restore_env
 
     if ![our_kdestroy $tmppwd/gss_tk_0] {
-       fail gsstest
-       return
+       perror "failed kdestroy gss_tk_0" 0
     }
 
     if ![our_kdestroy $tmppwd/gss_tk_1] {
-       fail gsstest
-       return
+       perror "failed kdestroy gss_tk_1" 0
     }
 
     if ![our_kdestroy $tmppwd/gss_tk_2] {
-       fail gsstest
-       return
+       perror "failed kdestroy gss_tk_2" 0
     }
 
     if ![our_kdestroy $tmppwd/gss_tk_3] {
-       fail gsstest
-       return
+       perror "failed kdestroy gss_tk_3" 0
     }
 
     catch "exec rm -f $tmppwd/gss_tk_0 $tmppwd/gss_tk_1 $tmppwd/gss_tk_2 $tmppwd/gss_tk_3"
@@ -604,7 +321,6 @@ gss_restore_env
 stop_kerberos_daemons
 
 if { $status != 0 } {
-    send_error "ERROR: error in gssapi.exp\n"
-    send_error "$msg\n"
-    exit 1
+    perror "error in gssapi.exp" 0
+    perror $msg 0
 }