SAMPstatTemplate2 with driver modifications
Change-Id: I324b060d9d30e5cf26131a4a83bfbe101c5f6ec2
diff --git a/TestON/drivers/common/api/controller/onosrestdriver.py b/TestON/drivers/common/api/controller/onosrestdriver.py
index a9676a9..50e4847 100644
--- a/TestON/drivers/common/api/controller/onosrestdriver.py
+++ b/TestON/drivers/common/api/controller/onosrestdriver.py
@@ -75,7 +75,7 @@
main.log.exception( "Error parsing jsonObject" )
return None
- def send( self, ip, port, url, base="/onos/v1", method="GET",
+ def send( self, url, base="/onos/v1", method="GET",
query=None, data=None, debug=False ):
"""
Arguments:
@@ -94,6 +94,9 @@
# TODO: should we maybe just pass kwargs straight to response?
# TODO: Do we need to allow for other protocols besides http?
# ANSWER: Not yet, but potentially https with certificates
+ ip = self.ip_address
+ port = self.port
+
try:
path = "http://" + str( ip ) + ":" + str( port ) + base + url
if self.user_name and self.pwd:
@@ -137,7 +140,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip, port, url="/intents" )
+ response = self.send( url="/intents" )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -185,7 +188,7 @@
port = self.port
# NOTE: REST url requires the intent id to be in decimal form
query = "/" + str( appId ) + "/" + str( intentId )
- response = self.send( ip, port, url="/intents" + query )
+ response = self.send( url="/intents" + query )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -248,7 +251,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip, port, url="/applications" )
+ response = self.send( url="/applications" )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -291,7 +294,7 @@
"from topo file" )
port = self.port
query = "/" + str( appName ) + "/active"
- response = self.send( ip, port, method="POST",
+ response = self.send( method="POST",
url="/applications" + query )
if response:
output = response[ 1 ]
@@ -347,7 +350,7 @@
"from topo file" )
port = self.port
query = "/" + str( appName ) + "/active"
- response = self.send( ip, port, method="DELETE",
+ response = self.send( method="DELETE",
url="/applications" + query )
if response:
output = response[ 1 ]
@@ -401,7 +404,7 @@
"from topo file" )
port = self.port
query = "/" + project + str( appName )
- response = self.send( ip, port, url="/applications" + query )
+ response = self.send( url="/applications" + query )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -451,9 +454,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip,
- port,
- method="POST",
+ response = self.send( method="POST",
url="/intents",
data=json.dumps( intentJson ) )
if response:
@@ -603,9 +604,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip,
- port,
- method="POST",
+ response = self.send( method="POST",
url="/intents",
data=json.dumps( intentJson ) )
if response:
@@ -644,9 +643,7 @@
port = self.port
# NOTE: REST url requires the intent id to be in decimal form
query = "/" + str( appId ) + "/" + str( int( intentId, 16 ) )
- response = self.send( ip,
- port,
- method="DELETE",
+ response = self.send( method="DELETE",
url="/intents" + query )
if response:
if 200 <= response[ 0 ] <= 299:
@@ -747,7 +744,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip, port, url="/hosts" )
+ response = self.send( url="/hosts" )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -793,7 +790,7 @@
"from topo file" )
port = self.port
query = "/" + mac + "/" + vlan
- response = self.send( ip, port, url="/hosts" + query )
+ response = self.send( url="/hosts" + query )
if response:
# NOTE: What if the person wants other values? would it be better
# to have a function that gets a key and return a value instead?
@@ -832,7 +829,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip, port, url="/topology" )
+ response = self.send( url="/topology" )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -869,7 +866,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip, port, url="/devices" )
+ response = self.send( url="/devices" )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -1032,7 +1029,7 @@
main.log.warn( "No port given, reverting to port " +
"from topo file" )
port = self.port
- response = self.send( ip, port, url="/flows" )
+ response = self.send( url="/flows" )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -1075,7 +1072,7 @@
if flowId:
url += "/" + str( int( flowId ) )
print url
- response = self.send( ip, port, url=url )
+ response = self.send( url=url )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -1123,9 +1120,7 @@
"from topo file" )
port = self.port
url = "/flows/" + deviceId
- response = self.send( ip,
- port,
- method="POST",
+ response = self.send( method="POST",
url=url,
data=json.dumps( flowJson ) )
if response:
@@ -1292,9 +1287,7 @@
port = self.port
# NOTE: REST url requires the intent id to be in decimal form
query = "/" + str( deviceId ) + "/" + str( int( flowId ) )
- response = self.send( ip,
- port,
- method="DELETE",
+ response = self.send( method="DELETE",
url="/flows" + query )
if response:
if 200 <= response[ 0 ] <= 299:
@@ -1365,7 +1358,7 @@
url += "/" + subjectKey
if configKey:
url += "/" + configKey
- response = self.send( ip, port, url=url )
+ response = self.send( url=url )
if response:
if 200 <= response[ 0 ] <= 299:
output = response[ 1 ]
@@ -1415,8 +1408,7 @@
url += "/" + subjectKey
if configKey:
url += "/" + configKey
- response = self.send( ip, port,
- method="POST",
+ response = self.send( method="POST",
url=url,
data=json.dumps( cfgJson ) )
if response:
@@ -1462,8 +1454,7 @@
url += "/" + subjectKey
if configKey:
url += "/" + configKey
- response = self.send( ip, port,
- method="DELETE",
+ response = self.send( method="DELETE",
url=url )
if response:
if 200 <= response[ 0 ] <= 299:
@@ -1667,9 +1658,7 @@
"from topo file" )
port = self.port
url = "/flows/"
- response = self.send( ip,
- port,
- method="POST",
+ response = self.send( method="POST",
url=url,
data=json.dumps( batch ) )
#main.log.info("Post response is: ", str(response[0]))
@@ -1712,9 +1701,7 @@
port = self.port
# NOTE: REST url requires the intent id to be in decimal form
- response = self.send( ip,
- port,
- method="DELETE",
+ response = self.send( method="DELETE",
url="/flows/",
data = json.dumps(batch) )
if response:
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index c7ae79b..b487096 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -301,6 +301,87 @@
main.cleanup()
main.exit()
+ def startCellCli( self, karafTimeout="",
+ commandlineTimeout=10, onosStartTimeout=60 ):
+ """
+ Start CLI on onos ecll handle.
+
+ karafTimeout is an optional argument. karafTimeout value passed
+ by user would be used to set the current karaf shell idle timeout.
+ Note that when ever this property is modified the shell will exit and
+ the subsequent login would reflect new idle timeout.
+ Below is an example to start a session with 60 seconds idle timeout
+ ( input value is in milliseconds ):
+
+ tValue = "60000"
+
+ Note: karafTimeout is left as str so that this could be read
+ and passed to startOnosCli from PARAMS file as str.
+ """
+
+ try:
+ self.handle.sendline( "" )
+ x = self.handle.expect( [
+ "\$", "onos>" ], commandlineTimeout)
+
+ if x == 1:
+ main.log.info( "ONOS cli is already running" )
+ return main.TRUE
+
+ # Wait for onos start ( -w ) and enter onos cli
+ self.handle.sendline( "/opt/onos/bin/onos" )
+ i = self.handle.expect( [
+ "onos>",
+ pexpect.TIMEOUT ], onosStartTimeout )
+
+ if i == 0:
+ main.log.info( self.name + " CLI Started successfully" )
+ if karafTimeout:
+ self.handle.sendline(
+ "config:property-set -p org.apache.karaf.shell\
+ sshIdleTimeout " +
+ karafTimeout )
+ self.handle.expect( "\$" )
+ self.handle.sendline( "/opt/onos/bin/onos" )
+ self.handle.expect( "onos>" )
+ return main.TRUE
+ else:
+ # If failed, send ctrl+c to process and try again
+ main.log.info( "Starting CLI failed. Retrying..." )
+ self.handle.send( "\x03" )
+ self.handle.sendline( "/opt/onos/bin/onos" )
+ i = self.handle.expect( [ "onos>", pexpect.TIMEOUT ],
+ timeout=30 )
+ if i == 0:
+ main.log.info( self.name + " CLI Started " +
+ "successfully after retry attempt" )
+ if karafTimeout:
+ self.handle.sendline(
+ "config:property-set -p org.apache.karaf.shell\
+ sshIdleTimeout " +
+ karafTimeout )
+ self.handle.expect( "\$" )
+ self.handle.sendline( "/opt/onos/bin/onos" )
+ self.handle.expect( "onos>" )
+ return main.TRUE
+ else:
+ main.log.error( "Connection to CLI " +
+ self.name + " timeout" )
+ return main.FALSE
+
+ except TypeError:
+ main.log.exception( self.name + ": Object not as expected" )
+ return None
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ main.log.error( self.name + ": " + self.handle.before )
+ main.cleanup()
+ main.exit()
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanup()
+ main.exit()
+
def log( self, cmdStr, level="" ):
"""
log the commands in the onos CLI.
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 8572131..1aed954 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -795,7 +795,7 @@
handleMore = self.handle.before
cell_result = handleBefore + handleAfter + handleMore
- print cell_result
+ #print cell_result
if( re.search( "No such cell", cell_result ) ):
main.log.error( "Cell call returned: " + handleBefore +
handleAfter + handleMore )
@@ -2253,3 +2253,39 @@
return localhost
except Exception:
main.log.exception( "Uncaught exception" )
+
+ def startBasicONOS(self, nodeList, opSleep = 60, onosStartupSleep = 60):
+
+ '''
+ Start onos cluster with defined nodes, but only with drivers app
+
+ '''
+ import time
+
+ self.createCellFile( self.ip_address,
+ "temp",
+ self.ip_address,
+ "drivers",
+ nodeList )
+
+ main.log.info( self.name + ": Apply cell to environment" )
+ cellResult = self.setCell( "temp" )
+ verifyResult = self.verifyCell()
+
+ main.log.info( self.name + ": Creating ONOS package" )
+ packageResult = self.onosPackage( opTimeout=opSleep )
+
+ main.log.info( self.name + ": Installing ONOS package" )
+ for nd in nodeList:
+ self.onosInstall( node=nd )
+
+ main.log.info( self.name + ": Starting ONOS service" )
+ time.sleep( onosStartupSleep )
+
+ onosStatus = True
+ for nd in nodeList:
+ onosStatus = onosStatus & self.isup( node = nd )
+ #print "onosStatus is: " + str( onosStatus )
+
+ return main.TRUE if onosStatus else main.FALSE
+