Added support for pre- and post-test CLI scripts.

This commit is contained in:
Bob Lantz
2010-08-17 00:02:31 -07:00
parent 9de7873bc8
commit e3a1fbb047
2 changed files with 33 additions and 12 deletions
+28 -10
View File
@@ -17,6 +17,7 @@ import sys
import time import time
from mininet.clean import cleanup from mininet.clean import cleanup
from mininet.cli import CLI
from mininet.log import lg, LEVELS, info from mininet.log import lg, LEVELS, info
from mininet.net import Mininet, init from mininet.net import Mininet, init
from mininet.node import KernelSwitch, Host, Controller, ControllerParams, NOX from mininet.node import KernelSwitch, Host, Controller, ControllerParams, NOX
@@ -50,9 +51,11 @@ CONTROLLERS = { 'ref': Controller,
'none': lambda name: None } 'none': lambda name: None }
# optional tests to run # optional tests to run
TESTS = [ 'cli', 'build', 'pingAll', 'pingPair', 'iperf', 'all', 'iperfUdp', TESTS = [ 'cli', 'build', 'pingall', 'pingpair', 'iperf', 'all', 'iperfudp',
'none' ] 'none' ]
ALTSPELLING = { 'pingall': 'pingAll', 'pingpair': 'pingPair',
'iperfudp': 'iperfUdp', 'iperfUDP': 'iperfUdp' }
def buildTopo( topo ): def buildTopo( topo ):
"Create topology from string with format (object, arg1, arg2,...)." "Create topology from string with format (object, arg1, arg2,...)."
@@ -99,6 +102,7 @@ class MininetRunner( object ):
def __init__( self ): def __init__( self ):
"Init." "Init."
self.options = None self.options = None
self.args = None # May be used someday for more CLI scripts
self.validate = None self.validate = None
self.parseArgs() self.parseArgs()
@@ -170,9 +174,14 @@ class MininetRunner( object ):
opts.add_option( '--port', type='int', default=6633, opts.add_option( '--port', type='int', default=6633,
help='[port integer for a listening remote' help='[port integer for a listening remote'
' controller]' ) ' controller]' )
opts.add_option( '--inNamespace', action='store_true', opts.add_option( '--innamespace', action='store_true',
default=False, help='sw and ctrl in namespace?' ) default=False, help='sw and ctrl in namespace?' )
self.options = opts.parse_args()[ 0 ] opts.add_option( '--pre', type='string', default=None,
help='[CLI script to run before tests]' )
opts.add_option( '--post', type='string', default=None,
help='[CLI script to run after tests]' )
self.options, self.args = opts.parse_args()
def setup( self ): def setup( self ):
"Setup and validate environment." "Setup and validate environment."
@@ -209,7 +218,7 @@ class MininetRunner( object ):
self.validate( self.options ) self.validate( self.options )
controllerParams = ControllerParams( '10.0.0.0', 8 ) controllerParams = ControllerParams( '10.0.0.0', 8 )
inNamespace = self.options.inNamespace inNamespace = self.options.innamespace
xterms = self.options.xterms xterms = self.options.xterms
mac = self.options.mac mac = self.options.mac
arp = self.options.arp arp = self.options.arp
@@ -217,20 +226,29 @@ class MininetRunner( object ):
inNamespace=inNamespace, inNamespace=inNamespace,
xterms=xterms, autoSetMacs=mac, xterms=xterms, autoSetMacs=mac,
autoStaticArp=arp ) autoStaticArp=arp )
if self.options.pre:
CLI( mn, script=self.options.pre )
test = self.options.test test = self.options.test
test = ALTSPELLING.get( test, test )
mn.start()
if test == 'none': if test == 'none':
mn.start() pass
mn.stop()
elif test == 'cli':
mn.interact()
elif test == 'all': elif test == 'all':
mn.start() mn.start()
mn.ping() mn.ping()
mn.iperf() mn.iperf()
mn.stop() elif test == 'cli':
CLI( mn )
elif test != 'build': elif test != 'build':
mn.run( getattr( mn, test ) ) getattr( mn, test )()
if self.options.post:
CLI( mn, script=self.options.post )
mn.stop()
elapsed = float( time.time() - start ) elapsed = float( time.time() - start )
info( 'completed in %0.3f seconds\n' % elapsed ) info( 'completed in %0.3f seconds\n' % elapsed )
+5 -2
View File
@@ -40,7 +40,7 @@ class CLI( Cmd ):
prompt = 'mininet> ' prompt = 'mininet> '
def __init__( self, mininet, stdin=sys.stdin ): def __init__( self, mininet, stdin=sys.stdin, script=None ):
self.mn = mininet self.mn = mininet
self.nodelist = self.mn.controllers + self.mn.switches + self.mn.hosts self.nodelist = self.mn.controllers + self.mn.switches + self.mn.hosts
self.nodemap = {} # map names to Node objects self.nodemap = {} # map names to Node objects
@@ -50,9 +50,12 @@ class CLI( Cmd ):
self.stdin = stdin self.stdin = stdin
self.inPoller = poll() self.inPoller = poll()
self.inPoller.register( stdin ) self.inPoller.register( stdin )
self.inputFile = None self.inputFile = script
Cmd.__init__( self ) Cmd.__init__( self )
info( '*** Starting CLI:\n' ) info( '*** Starting CLI:\n' )
if self.inputFile:
self.do_source( self.inputFile )
return
while True: while True:
try: try:
# Make sure no nodes are still waiting # Make sure no nodes are still waiting