use t_inetd with a ready message and avoid waiting a lot in non-root tests
authorKen Raeburn <raeburn@mit.edu>
Sat, 31 Jan 2009 04:39:34 +0000 (04:39 +0000)
committerKen Raeburn <raeburn@mit.edu>
Sat, 31 Jan 2009 04:39:34 +0000 (04:39 +0000)
Change t_inetd to print a ready message when it has started listening
on the indicated port number.

Look for this message in sample.exp rather than waiting an arbitrary
(and usually excessive) 2s each time for the inetd-mode tests.  Use
run_once to perform the standalone-mode test only once per test suite
invocation.

Change rsh and rcp tests to start the servers via t_inetd and avoid
excessive waiting at startup.

In some of my tests, this reduces the tests/dejagnu tests from taking
over 6 minutes to taking around 2 minutes.

(This does mean the server process will no longer have started up
before we launch the client, so it may be slower to respond, but it'll
still be faster than the 2s delay we used before even trying to
connect.)

We can probably eliminate the -D option code from krshd.c now.

The tests run as root (rlogin, telnet) still need updating.

ticket: 6355
target_version: 1.7
tags: pullup

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

src/tests/dejagnu/krb-standalone/rcp.exp
src/tests/dejagnu/krb-standalone/rsh.exp
src/tests/dejagnu/krb-standalone/sample.exp
src/tests/dejagnu/t_inetd.c

index 94ec240e63f99065826cec8eae1d0efce94785d0..ab6a2c993bc78192f61461d47f8dcbac6110577b 100644 (file)
@@ -36,7 +36,7 @@ if {![get_hostname] \
 
 proc start_rsh_daemon { } {
     global REALMNAME
-    global KRSHD
+    global KRSHD T_INETD
     global RCP
     global tmppwd
     global krshd_spawn_id
@@ -49,21 +49,20 @@ proc start_rsh_daemon { } {
     }
 
 
-    # The -D argument tells it to accept a single connection, so we
-    # don't need to use inetd.  The portbase+8 is the port to listen at.
-    #
     # The -L ENV_SET is for the I/S Athena brokeness in dot files where
     #  LD_LIBRARY_PATH will be overridden causing the "exec csh -c rcp ..." 
     #  to fail as the .cshrc is read in. We do not use the -f option as
     #  a users shell might be sh...
     #  Later a proper fix would be to have kshd exec rcp directly
     #   shell indirection...
-    spawn $KRSHD -k -c -D [expr 8 + $portbase] -P $tmppwd -S $tmppwd/srvtab -M $REALMNAME -L ENV_SET
+    spawn $T_INETD [expr 8 + $portbase] $KRSHD $KRSHD -k -c -P $tmppwd -S $tmppwd/srvtab -M $REALMNAME -L ENV_SET
     set krshd_spawn_id $spawn_id
     set krshd_pid [exp_pid]
 
-    # Give the rsh daemon a few seconds to get set up.
-    sleep 2
+    expect {
+       -ex "Ready!"    { }
+       eof             { error "couldn't start t_inetd helper" }
+    }
 }
 
 # A procedure to stop the rsh daemon.
index b7c02a2a7682f1f47886a01b7a3e297c8e9c182f..050a71c914d4596f98c7bc98f1496b385db08687 100644 (file)
@@ -35,20 +35,20 @@ if {![get_hostname] \
 
 proc start_rsh_daemon { option } {
     global REALMNAME
-    global KRSHD
+    global KRSHD T_INETD
     global tmppwd
     global krshd_spawn_id
     global krshd_pid
     global portbase
 
-    # The -D argument tells it to accept a single connection, so we
-    # don't need to use inetd.  The portbase+8 is the port to listen at.
-    spawn $KRSHD -k -c -D [expr 8 + $portbase] -S $tmppwd/srvtab -M $REALMNAME -A $option
+    spawn $T_INETD [expr 8 + $portbase] $KRSHD $KRSHD -k -c -S $tmppwd/srvtab -M $REALMNAME -A $option
     set krshd_spawn_id $spawn_id
     set krshd_pid [exp_pid]
 
-    # Give the rsh daemon a few seconds to get set up.
-    sleep 2
+    expect {
+       -ex "Ready!"    { }
+       eof             { error "couldn't start t_inetd helper" }
+    }
 }
 
 # A procedure to stop the rsh daemon.
index c19c49e918b5eccb8477c026d4697f388ddb8580..326f1848d47c6886a9f6afbe58d888cd138def3d 100644 (file)
@@ -47,6 +47,9 @@ proc start_sserver_daemon { inetd } {
            set sserver_spawn_id $spawn_id
 
            verbose "sserver_spawn is $sserver_spawn_id" 1
+
+           # Give sserver some time to start
+           sleep 2
     } else {
            # Start the sserver
            spawn $T_INETD [expr 8 + $portbase] $SSERVER sserver -S $tmppwd/srvtab
@@ -54,10 +57,12 @@ proc start_sserver_daemon { inetd } {
            set sserver_spawn_id $spawn_id
 
            verbose "sserver_spawn (t_inetd) is $sserver_spawn_id" 1
-    }
 
-    # Give sserver some time to start
-    sleep 2
+           expect {
+               -ex "Ready!"    { }
+               eof             { error "couldn't start t_inetd helper" }
+           }
+    }
 
     return 1
 }
@@ -171,17 +176,19 @@ proc doit { } {
        return
     }
 
-    if ![start_sserver_daemon 0 ] {
-       return 
-    }
+    run_once sample_standalone {
+       if ![start_sserver_daemon 0 ] {
+           return 
+       }
 
-    if ![test_sclient sclient] {
-       return
-    }
+       if ![test_sclient sclient] {
+           return
+       }
     
-    pass "sample - standalone"
+       pass "sample - standalone"
 
-    stop_check_sserver_daemon
+       stop_check_sserver_daemon
+    }
     
     if ![start_sserver_daemon 1 ] {
        return 
index 6dc91cbbe77ace04d662eb46e77008133a724c12..aa369d4f1e8caec64beabee18a91fcc9d51caaff 100644 (file)
@@ -110,6 +110,7 @@ main(argc, argv)
            exit(3);
        }
 
+       printf("Ready!\n");
        if ((acc = accept(sock, (struct sockaddr *)&f_inaddr,
                          &namelen)) == -1) {
            com_err(progname, errno, "accepting");