Stability fixes for SR Tests and small fixes for running ONOS in docker
- move checkOptions to component driver
- use karafTimeout for SR tests
- Fix some docker options
- Make sure mn docker can resolve own hostname
- Fix config file ip format for DHCP relay app
Change-Id: I85e8c52384e0fb478462fa9bbaf0b31a599b632b
(cherry picked from commit 521ecde3f8d28288303ea11129faa0cfd86b9bcd)
diff --git a/TestON/drivers/common/cli/networkdriver.py b/TestON/drivers/common/cli/networkdriver.py
index 968973d..c151aab 100755
--- a/TestON/drivers/common/cli/networkdriver.py
+++ b/TestON/drivers/common/cli/networkdriver.py
@@ -53,11 +53,6 @@
super( NetworkDriver, self ).__init__()
self.graph = Graph()
- def checkOptions( self, var, defaultVar ):
- if var is None or var == "":
- return defaultVar
- return var
-
def connect( self, **connectargs ):
"""
Creates ssh handle for the SDN network "bench".
@@ -635,7 +630,7 @@
output = dstHost.checkFilter()
main.log.debug( output )
if output:
- #TODO: parse output?
+ # TODO: parse output?
packets = dstHost.readPackets()
for packet in packets.splitlines():
main.log.debug( packet )
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 7a0641e..72ed62c 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -58,15 +58,12 @@
self.handle = None
self.karafUser = None
self.karafPass = None
+ self.karafTimeout = None
+
self.dockerPrompt = None
self.graph = Graph()
super( OnosCliDriver, self ).__init__()
- def checkOptions( self, var, defaultVar ):
- if var is None or var == "":
- return defaultVar
- return var
-
def connect( self, **connectargs ):
"""
Creates ssh handle for ONOS cli.
@@ -85,10 +82,13 @@
self.karafPass = self.options[ key ]
elif key == "docker_prompt":
self.dockerPrompt = self.options[ key ]
+ elif key == "karaf_timeout":
+ self.karafTimeout = self.options[ key ]
self.home = self.checkOptions( self.home, "~/onos" )
self.karafUser = self.checkOptions( self.karafUser, self.user_name )
self.karafPass = self.checkOptions( self.karafPass, self.pwd )
self.dockerPrompt = self.checkOptions( self.dockerPrompt, "~/onos#" )
+ self.karafTimeout = self.checkOptions( self.karafTimeout, 7200000 )
for key in self.options:
if key == 'onosIp':
@@ -301,6 +301,7 @@
startCliCommand = "onos " + str( ONOSIp )
self.handle.sendline( startCliCommand )
tries = 0
+ setTimeout = False
while tries < 5:
i = self.handle.expect( [
self.karafPrompt,
@@ -308,14 +309,17 @@
pexpect.TIMEOUT ], onosStartTimeout )
if i == 0:
- main.log.info( str( ONOSIp ) + " CLI Started successfully" )
+ if setTimeout:
+ main.log.info( str( ONOSIp ) + " CLI Started successfully" )
+ return main.TRUE
if karafTimeout:
self.handle.sendline(
"config:property-set -p org.apache.karaf.shell\
sshIdleTimeout " +
- karafTimeout )
- self.handle.expect( self.karafPrompt )
- return main.TRUE
+ str( karafTimeout ) )
+ self.handle.expect( "closed by remote host" )
+ self.handle.sendline( startCliCommand )
+ setTimeout = True
elif i == 1:
main.log.info( str( ONOSIp ) + " CLI asking for password" )
main.log.debug( "Sending %s" % self.karafPass )
@@ -6739,8 +6743,6 @@
if not ready:
self.handle.expect( self.dockerPrompt )
time.sleep( 1 )
- #main.log.debug( "%s: It took %s tries for onos log folder to %sbe created" %
- # ( self.name, retries, "" if ready else "NOT " ) )
cmdList = []
cmdList.append( "apt-get update" )
diff --git a/TestON/drivers/common/cli/onosclusterdriver.py b/TestON/drivers/common/cli/onosclusterdriver.py
index 520250b..6ca91b7 100755
--- a/TestON/drivers/common/cli/onosclusterdriver.py
+++ b/TestON/drivers/common/cli/onosclusterdriver.py
@@ -96,11 +96,6 @@
self.nodes = []
super( OnosClusterDriver, self ).__init__()
- def checkOptions( self, var, defaultVar ):
- if var is None or var == "":
- return defaultVar
- return var
-
def connect( self, **connectargs ):
"""
Creates ssh handle for ONOS "bench".
@@ -126,10 +121,16 @@
self.useDocker = "True" == self.options[ key ]
elif key == "docker_prompt":
self.dockerPrompt = self.options[ key ]
+ elif key == "web_user":
+ self.webUser = self.options[ key ]
+ elif key == "web_pass":
+ self.webPass = self.options[ key ]
self.home = self.checkOptions( self.home, "~/onos" )
self.karafUser = self.checkOptions( self.karafUser, self.user_name )
self.karafPass = self.checkOptions( self.karafPass, self.pwd )
+ self.webUser = self.checkOptions( self.webUser, "onos" )
+ self.webPass = self.checkOptions( self.webPass, "rocks" )
prefix = self.checkOptions( prefix, "ONOS" )
self.useDocker = self.checkOptions( self.useDocker, False )
self.dockerPrompt = self.checkOptions( self.dockerPrompt, "~/onos#" )
@@ -250,7 +251,6 @@
main.componentDictionary[ name ][ 'host' ] = host
main.componentDictionary[name]['type'] = "OnosCliDriver"
main.componentDictionary[name]['connect_order'] = str( int( main.componentDictionary[name]['connect_order'] ) + 1 )
- main.log.debug( main.componentDictionary[name] )
def createCliComponent( self, name, host ):
"""
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 6b13e3a..18540f0 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -39,6 +39,11 @@
"""
self.name = None
self.home = None
+ self.maxNodes = None
+ self.karafUser = None
+ self.karafPass = None
+ self.webUser = None
+ self.webPass = None
self.handle = None
self.nicAddr = None
super( OnosDriver, self ).__init__()
@@ -55,26 +60,26 @@
for key in connectargs:
vars( self )[ key ] = connectargs[ key ]
- self.home = "~/onos"
- for key in self.options:
- if key == "home":
- self.home = self.options[ 'home' ]
- break
- if self.home is None or self.home == "":
- self.home = "~/onos"
-
self.name = self.options[ 'name' ]
# The 'nodes' tag is optional and it is not required in .topo file
for key in self.options:
- if key == "nodes":
+ if key == "home":
+ self.home = self.options[ 'home' ]
+ elif key == "nodes":
# Maximum number of ONOS nodes to run, if there is any
self.maxNodes = int( self.options[ 'nodes' ] )
- break
- self.maxNodes = None
+ elif key == "web_user":
+ self.webUser = self.options[ key ]
+ elif key == "web_pass":
+ self.webPass = self.options[ key ]
- if self.maxNodes is None or self.maxNodes == "":
- self.maxNodes = 100
+ self.home = self.checkOptions( self.home, "~/onos" )
+ self.maxNodes = self.checkOptions( self.maxNodes, 100 )
+ self.karafUser = self.checkOptions( self.karafUser, self.user_name )
+ self.karafPass = self.checkOptions( self.karafPass, self.pwd )
+ self.webUser = self.checkOptions( self.webUser, "onos" )
+ self.webPass = self.checkOptions( self.webPass, "rocks" )
# Grabs all OC environment variables based on max number of nodes
self.onosIps = {} # Dictionary of all possible ONOS ip
@@ -826,6 +831,8 @@
# on here.
appString = "export ONOS_APPS=" + appString
onosGroup = "export ONOS_GROUP=" + onosUser
+ onosWebUser = "export ONOS_WEB_USER=" + self.webUser
+ onosWebPass = "export ONOS_WEB_PASS=" + self.webPass
onosUser = "export ONOS_USER=" + onosUser
if useSSH:
onosUseSSH = "export ONOS_USE_SSH=true"
@@ -871,6 +878,8 @@
cellFile.write( appString + "\n" )
cellFile.write( onosGroup + "\n" )
cellFile.write( onosUser + "\n" )
+ cellFile.write( onosWebUser + "\n" )
+ cellFile.write( onosWebPass + "\n" )
if useSSH:
cellFile.write( onosUseSSH + "\n" )
cellFile.close()
@@ -2718,10 +2727,15 @@
for ip in onosIPs:
cmd += " " + str( ip )
self.handle.sendline( cmd )
- self.handle.expect( self.prompt, timeout=timeout )
- handle = self.handle.before
- main.log.debug( handle )
+ i = 0
+ while i == 0:
+ i = self.handle.expect( [ "Password", self.prompt ], timeout=timeout )
+ handle = self.handle.before
+ main.log.debug( "%s: %s" % ( self.name, handle ) )
+ if i == 0:
+ self.handle.sendline( self.pwd )
assert handle is not None, "Error in sendline"
+ assert "The requested URL returned error" not in handle, handle
assert "Command not found:" not in handle, handle
assert "Exception:" not in handle, handle
# Rename and move diags file to dstDir from /tmp
@@ -2730,7 +2744,7 @@
self.handle.sendline( "mv /tmp/onos-diags.tar.gz " + str( dstDir ) + "onos-diags" + str( suffix ) + ".tar.gz" )
self.handle.expect( self.prompt )
handle = self.handle.before
- main.log.debug( handle )
+ main.log.debug( "%s: %s" % ( self.name, handle ) )
assert handle is not None, "Error in sendline"
assert "No such file or directory" not in handle, handle
return main.TRUE
diff --git a/TestON/drivers/component.py b/TestON/drivers/component.py
index c3d3297..3585244 100644
--- a/TestON/drivers/component.py
+++ b/TestON/drivers/component.py
@@ -59,6 +59,11 @@
else:
raise error
+ def checkOptions( self, var, defaultVar ):
+ if var is None or var == "":
+ return defaultVar
+ return var
+
def connect( self ):
vars( main )[ self.name + 'log' ] = logging.getLogger( self.name )