Merge pull request #407 from cdburkard/patches/baresshd_waitListening
wait for sshd to start in baresshd example
This commit is contained in:
@@ -4,9 +4,10 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
from mininet.node import Host
|
from mininet.node import Host
|
||||||
from mininet.util import ensureRoot
|
from mininet.util import ensureRoot, waitListening
|
||||||
|
|
||||||
ensureRoot()
|
ensureRoot()
|
||||||
|
timeout = 5
|
||||||
|
|
||||||
print "*** Creating nodes"
|
print "*** Creating nodes"
|
||||||
h1 = Host( 'h1' )
|
h1 = Host( 'h1' )
|
||||||
@@ -33,5 +34,10 @@ cmd = '/usr/sbin/sshd -o UseDNS=no -u0 -o "Banner /tmp/%s.banner"' % h1.name
|
|||||||
if len( sys.argv ) > 1:
|
if len( sys.argv ) > 1:
|
||||||
cmd += ' ' + ' '.join( sys.argv[ 1: ] )
|
cmd += ' ' + ' '.join( sys.argv[ 1: ] )
|
||||||
h1.cmd( cmd )
|
h1.cmd( cmd )
|
||||||
|
listening = waitListening( server=h1, port=22, timeout=timeout )
|
||||||
|
|
||||||
|
if listening:
|
||||||
print "*** You may now ssh into", h1.name, "at", h1.IP()
|
print "*** You may now ssh into", h1.name, "at", h1.IP()
|
||||||
|
else:
|
||||||
|
print ( "*** Warning: after %s seconds, %s is not listening on port 22"
|
||||||
|
% ( timeout, h1.name ) )
|
||||||
|
|||||||
@@ -6,21 +6,18 @@ Tests for baresshd.py
|
|||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
import pexpect
|
import pexpect
|
||||||
from time import sleep
|
|
||||||
from mininet.clean import cleanup, sh
|
from mininet.clean import cleanup, sh
|
||||||
|
|
||||||
class testBareSSHD( unittest.TestCase ):
|
class testBareSSHD( unittest.TestCase ):
|
||||||
|
|
||||||
opts = [ '\(yes/no\)\?', 'Welcome to h1', 'refused', pexpect.EOF, pexpect.TIMEOUT ]
|
opts = [ 'Welcome to h1', pexpect.EOF, pexpect.TIMEOUT ]
|
||||||
|
|
||||||
def connected( self ):
|
def connected( self ):
|
||||||
"Log into ssh server, check banner, then exit"
|
"Log into ssh server, check banner, then exit"
|
||||||
p = pexpect.spawn( 'ssh 10.0.0.1 -i /tmp/ssh/test_rsa exit' )
|
p = pexpect.spawn( 'ssh 10.0.0.1 -o StrictHostKeyChecking=no -i /tmp/ssh/test_rsa exit' )
|
||||||
while True:
|
while True:
|
||||||
index = p.expect( self.opts )
|
index = p.expect( self.opts )
|
||||||
if index == 0:
|
if index == 0:
|
||||||
p.sendline( 'yes' )
|
|
||||||
elif index == 1:
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@@ -37,18 +34,23 @@ class testBareSSHD( unittest.TestCase ):
|
|||||||
cmd = ( 'python -m mininet.examples.baresshd '
|
cmd = ( 'python -m mininet.examples.baresshd '
|
||||||
'-o AuthorizedKeysFile=/tmp/ssh/authorized_keys '
|
'-o AuthorizedKeysFile=/tmp/ssh/authorized_keys '
|
||||||
'-o StrictModes=no' )
|
'-o StrictModes=no' )
|
||||||
sh( cmd )
|
p = pexpect.spawn( cmd )
|
||||||
|
runOpts = [ 'You may now ssh into h1 at 10.0.0.1',
|
||||||
|
'after 5 seconds, h1 is not listening on port 22',
|
||||||
|
pexpect.EOF, pexpect.TIMEOUT ]
|
||||||
|
while True:
|
||||||
|
index = p.expect( runOpts )
|
||||||
|
if index == 0:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.tearDown()
|
||||||
|
self.fail( 'sshd failed to start in host h1' )
|
||||||
|
|
||||||
def testSSH( self ):
|
def testSSH( self ):
|
||||||
"Simple test to verify that we can ssh into h1"
|
"Simple test to verify that we can ssh into h1"
|
||||||
result = False
|
result = False
|
||||||
# try to connect up to 3 times; sshd can take a while to start
|
# try to connect up to 3 times; sshd can take a while to start
|
||||||
for _ in range( 3 ):
|
|
||||||
result = self.connected()
|
result = self.connected()
|
||||||
if result:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
sleep( 1 )
|
|
||||||
self.assertTrue( result )
|
self.assertTrue( result )
|
||||||
|
|
||||||
def tearDown( self ):
|
def tearDown( self ):
|
||||||
|
|||||||
+5
-3
@@ -543,7 +543,8 @@ def ensureRoot():
|
|||||||
return
|
return
|
||||||
|
|
||||||
def waitListening( client=None, server='127.0.0.1', port=80, timeout=None ):
|
def waitListening( client=None, server='127.0.0.1', port=80, timeout=None ):
|
||||||
"Wait until server is listening on port"
|
"""Wait until server is listening on port.
|
||||||
|
returns True if server is listening"""
|
||||||
run = ( client.cmd if client else
|
run = ( client.cmd if client else
|
||||||
partial( quietRun, shell=True ) )
|
partial( quietRun, shell=True ) )
|
||||||
if not run( 'which telnet' ):
|
if not run( 'which telnet' ):
|
||||||
@@ -554,12 +555,13 @@ def waitListening( client=None, server='127.0.0.1', port=80, timeout=None ):
|
|||||||
time = 0
|
time = 0
|
||||||
while 'Connected' not in run( cmd ):
|
while 'Connected' not in run( cmd ):
|
||||||
if timeout:
|
if timeout:
|
||||||
|
print time
|
||||||
if time >= timeout:
|
if time >= timeout:
|
||||||
error( 'could not connect to %s on port %d\n'
|
error( 'could not connect to %s on port %d\n'
|
||||||
% ( server, port ) )
|
% ( server, port ) )
|
||||||
break
|
return False
|
||||||
output('waiting for', server,
|
output('waiting for', server,
|
||||||
'to listen on port', port, '\n')
|
'to listen on port', port, '\n')
|
||||||
sleep( .5 )
|
sleep( .5 )
|
||||||
time += .5
|
time += .5
|
||||||
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user