class FUNCgroup: | |
def __init__( self ): | |
self.default = '' | |
def CASE1( self, main ): | |
import os | |
import imp | |
""" | |
- Construct tests variables | |
- GIT ( optional ) | |
- Checkout ONOS master branch | |
- Pull latest ONOS code | |
- Building ONOS ( optional ) | |
- Install ONOS package | |
- Build ONOS package | |
""" | |
main.case( "Constructing test variables and building ONOS package" ) | |
main.step( "Constructing test variables" ) | |
# Test variables | |
main.testOnDirectory = os.path.dirname( os.getcwd() ) | |
main.cellName = main.params[ 'ENV' ][ 'cellName' ] | |
main.apps = main.params[ 'ENV' ][ 'cellApps' ] | |
gitBranch = main.params[ 'GIT' ][ 'branch' ] | |
gitPull = main.params[ 'GIT' ][ 'pull' ] | |
main.ONOSport = main.params[ 'CTRL' ][ 'port' ] | |
main.dependencyPath = main.testOnDirectory + \ | |
main.params[ 'DEPENDENCY' ][ 'path' ] | |
wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ] | |
wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ] | |
main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ] | |
bucket = main.params[ 'DEPENDENCY' ][ 'bucket' ] | |
main.maxNodes = int( main.params[ 'SCALE' ][ 'max' ] ) | |
main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] ) | |
main.startMNSleep = int( main.params[ 'SLEEP' ][ 'startMN' ] ) | |
main.addFlowSleep = int( main.params[ 'SLEEP' ][ 'addFlow' ] ) | |
main.delFlowSleep = int( main.params[ 'SLEEP' ][ 'delFlow' ] ) | |
main.addGroupSleep = int( main.params[ 'SLEEP' ][ 'addGroup' ] ) | |
main.delGroupSleep = int( main.params[ 'SLEEP' ][ 'delGroup' ] ) | |
main.debug = main.params[ 'DEBUG' ] | |
main.swDPID = main.params[ 'TEST' ][ 'swDPID' ] | |
egressPort1 = main.params[ 'TEST' ][ 'egressPort1' ] | |
egressPort2 = main.params[ 'TEST' ][ 'egressPort2' ] | |
egressPort3 = main.params[ 'TEST' ][ 'egressPort3' ] | |
ingressPort = main.params[ 'TEST' ][ 'ingressPort' ] | |
appCookie = main.params[ 'TEST' ][ 'appCookie' ] | |
type1 = main.params[ 'TEST' ][ 'type1' ] | |
type2 = main.params[ 'TEST' ][ 'type2' ] | |
groupId = main.params[ 'TEST' ][ 'groupId' ] | |
priority = main.params[ 'TEST' ][ 'priority' ] | |
deviceId = main.params[ 'TEST' ][ 'swDPID' ] | |
main.cellData = {} # for creating cell file | |
main.CLIs = [] | |
main.ONOSip = [] | |
main.debug = True if "on" in main.debug else False | |
main.ONOSip = main.ONOSbench.getOnosIps() | |
# Assigning ONOS cli handles to a list | |
for i in range( 1, main.maxNodes + 1 ): | |
main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) ) | |
# -- INIT SECTION, ONLY RUNS ONCE -- # | |
main.startUp = imp.load_source( wrapperFile1, | |
main.dependencyPath + | |
wrapperFile1 + | |
".py" ) | |
main.topo = imp.load_source( wrapperFile2, | |
main.dependencyPath + | |
wrapperFile2 + | |
".py" ) | |
main.buckets = imp.load_source( bucket, | |
main.dependencyPath + | |
bucket + | |
".py" ) | |
copyResult = main.ONOSbench.scp( main.Mininet1, | |
main.dependencyPath + main.topology, | |
main.Mininet1.home + '/custom/', | |
direction="to" ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=copyResult, | |
onpass="Successfully copy " + "test variables ", | |
onfail="Failed to copy test variables" ) | |
if main.CLIs: | |
stepResult = main.TRUE | |
else: | |
main.log.error( "Did not properly created list of ONOS CLI handle" ) | |
stepResult = main.FALSE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully construct " + "test variables ", | |
onfail="Failed to construct test variables" ) | |
if gitPull == 'True': | |
main.step( "Building ONOS in " + gitBranch + " branch" ) | |
onosBuildResult = main.startUp.onosBuild( main, gitBranch ) | |
stepResult = onosBuildResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully compiled " + "latest ONOS", | |
onfail="Failed to compile " + "latest ONOS" ) | |
else: | |
main.log.warn( "Did not pull new code so skipping mvn " + | |
"clean install" ) | |
def CASE2( self, main ): | |
""" | |
- Set up cell | |
- Create cell file | |
- Set cell file | |
- Verify cell file | |
- Kill ONOS process | |
- Uninstall ONOS cluster | |
- Verify ONOS start up | |
- Install ONOS cluster | |
- Connect to cli | |
""" | |
import time | |
main.numCtrls = int( main.maxNodes ) | |
main.case( "Starting up " + str( main.numCtrls ) + | |
" node(s) ONOS cluster" ) | |
#kill off all onos processes | |
main.log.info( "Safety check, killing all ONOS processes" + | |
" before initiating environment setup" ) | |
for i in range( main.maxNodes ): | |
main.ONOSbench.onosDie( main.ONOSip[ i ] ) | |
main.log.info( "NODE COUNT = " + str( main.numCtrls ) ) | |
tempOnosIp = [] | |
for i in range( main.numCtrls ): | |
tempOnosIp.append( main.ONOSip[ i ] ) | |
main.ONOSbench.createCellFile( main.ONOSbench.ip_address, | |
"temp", | |
main.Mininet1.ip_address, | |
main.apps, | |
tempOnosIp, main.ONOScli1.user_name ) | |
main.step( "Apply cell to environment" ) | |
cellResult = main.ONOSbench.setCell( "temp" ) | |
verifyResult = main.ONOSbench.verifyCell() | |
stepResult = cellResult and verifyResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully applied cell to " + "environment", | |
onfail="Failed to apply cell to environment " ) | |
main.step( "Creating ONOS package" ) | |
packageResult = main.ONOSbench.buckBuild() | |
stepResult = packageResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully created ONOS package", | |
onfail="Failed to create ONOS package" ) | |
time.sleep( main.startUpSleep ) | |
main.step( "Uninstalling ONOS package" ) | |
onosUninstallResult = main.TRUE | |
for ip in main.ONOSip: | |
onosUninstallResult = onosUninstallResult and \ | |
main.ONOSbench.onosUninstall( nodeIp=ip ) | |
stepResult = onosUninstallResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully uninstalled ONOS package", | |
onfail="Failed to uninstall ONOS package" ) | |
time.sleep( main.startUpSleep ) | |
main.step( "Installing ONOS package" ) | |
onosInstallResult = main.TRUE | |
for i in range( main.numCtrls ): | |
onosInstallResult = onosInstallResult and \ | |
main.ONOSbench.onosInstall( node=main.ONOSip[ i ] ) | |
stepResult = onosInstallResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully installed ONOS package", | |
onfail="Failed to install ONOS package" ) | |
time.sleep( main.startUpSleep ) | |
main.step( "Starting ONOS service" ) | |
stopResult = main.TRUE | |
startResult = main.TRUE | |
onosIsUp = main.TRUE | |
for i in range( main.numCtrls ): | |
onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] ) | |
if onosIsUp == main.TRUE: | |
main.log.report( "ONOS instance is up and ready" ) | |
else: | |
main.log.report( "ONOS instance may not be up, stop and " + | |
"start ONOS again " ) | |
for i in range( main.numCtrls ): | |
stopResult = stopResult and \ | |
main.ONOSbench.onosStop( main.ONOSip[ i ] ) | |
for i in range( main.numCtrls ): | |
startResult = startResult and \ | |
main.ONOSbench.onosStart( main.ONOSip[ i ] ) | |
stepResult = onosIsUp and stopResult and startResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="ONOS service is ready", | |
onfail="ONOS service did not start properly" ) | |
main.step( "Set up ONOS secure SSH" ) | |
secureSshResult = main.TRUE | |
for i in range( int( main.numCtrls ) ): | |
secureSshResult = secureSshResult and main.ONOSbench.onosSecureSSH( node=main.ONOSip[ i ] ) | |
utilities.assert_equals( expect=main.TRUE, actual=secureSshResult, | |
onpass="Test step PASS", | |
onfail="Test step FAIL" ) | |
main.step( "Start ONOS cli" ) | |
cliResult = main.TRUE | |
for i in range( main.numCtrls ): | |
cliResult = cliResult and \ | |
main.CLIs[ i ].startOnosCli( main.ONOSip[ i ] ) | |
stepResult = cliResult | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully start ONOS cli", | |
onfail="Failed to start ONOS cli" ) | |
def CASE3( self, main ): | |
""" | |
Start Mininet | |
""" | |
import json | |
main.case( "Setup mininet and compare ONOS topology view to Mininet topology" ) | |
main.caseExplanation = "Start mininet with custom topology and compare topology " +\ | |
"elements between Mininet and ONOS" | |
main.step( "Setup Mininet Topology" ) | |
topology = main.Mininet1.home + '/custom/' + main.topology | |
stepResult = main.Mininet1.startNet( topoFile=topology ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully loaded topology", | |
onfail="Failed to load topology" ) | |
main.step( "Assign switch to controller" ) | |
stepResult = main.Mininet1.assignSwController( "s1", main.ONOSip[ 0 ] ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Successfully assigned switch to controller", | |
onfail="Failed to assign switch to controller" ) | |
time.sleep( main.startMNSleep ) | |
main.step( "Comparing MN topology to ONOS topology" ) | |
main.log.info( "Gathering topology information" ) | |
devices = main.topo.getAllDevices( main ) | |
hosts = main.topo.getAllHosts( main ) | |
ports = main.topo.getAllPorts( main ) | |
links = main.topo.getAllLinks( main ) | |
mnSwitches = main.Mininet1.getSwitches() | |
mnLinks = main.Mininet1.getLinks() | |
mnHosts = main.Mininet1.getHosts() | |
for controller in range( main.numCtrls ): | |
controllerStr = str( controller + 1 ) | |
if devices[ controller ] and ports[ controller ] and\ | |
"Error" not in devices[ controller ] and\ | |
"Error" not in ports[ controller ]: | |
currentDevicesResult = main.Mininet1.compareSwitches( | |
mnSwitches, | |
json.loads( devices[ controller ] ), | |
json.loads( ports[ controller ] ) ) | |
else: | |
currentDevicesResult = main.FALSE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=currentDevicesResult, | |
onpass="ONOS" + controllerStr + | |
" Switches view is correct", | |
onfail="ONOS" + controllerStr + | |
" Switches view is incorrect" ) | |
if links[ controller ] and "Error" not in links[ controller ]: | |
currentLinksResult = main.Mininet1.compareLinks( | |
mnSwitches, mnLinks, | |
json.loads( links[ controller ] ) ) | |
else: | |
currentLinksResult = main.FALSE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=currentLinksResult, | |
onpass="ONOS" + controllerStr + | |
" links view is correct", | |
onfail="ONOS" + controllerStr + | |
" links view is incorrect" ) | |
if hosts[ controller ] or "Error" not in hosts[ controller ]: | |
currentHostsResult = main.Mininet1.compareHosts( | |
mnHosts, | |
json.loads( hosts[ controller ] ) ) | |
else: | |
currentHostsResult = main.FALSE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=currentHostsResult, | |
onpass="ONOS" + controllerStr + | |
" hosts exist in Mininet", | |
onfail="ONOS" + controllerStr + | |
" hosts don't match Mininet" ) | |
def CASE4( self, main ): | |
""" | |
Testing scapy | |
""" | |
main.case( "Testing scapy" ) | |
main.step( "Creating Host1 component" ) | |
main.Scapy.createHostComponent( "h1" ) | |
main.Scapy.createHostComponent( "h2" ) | |
hosts = [ main.h1, main.h2 ] | |
for host in hosts: | |
host.startHostCli() | |
host.startScapy() | |
host.updateSelf() | |
main.log.debug( host.name ) | |
main.log.debug( host.hostIp ) | |
main.log.debug( host.hostMac ) | |
main.step( "Sending/Receiving Test packet - Filter doesn't match" ) | |
main.log.info( "Starting Filter..." ) | |
main.h2.startFilter() | |
main.log.info( "Building Ether frame..." ) | |
main.h1.buildEther( dst=main.h2.hostMac ) | |
main.log.info( "Sending Packet..." ) | |
main.h1.sendPacket() | |
main.log.info( "Checking Filter..." ) | |
finished = main.h2.checkFilter() | |
main.log.debug( finished ) | |
i = "" | |
if finished: | |
a = main.h2.readPackets() | |
for i in a.splitlines(): | |
main.log.info( i ) | |
else: | |
kill = main.h2.killFilter() | |
main.log.debug( kill ) | |
main.h2.handle.sendline( "" ) | |
main.h2.handle.expect( main.h2.scapyPrompt ) | |
main.log.debug( main.h2.handle.before ) | |
utilities.assert_equals( expect=True, | |
actual="dst=00:00:00:00:00:02 src=00:00:00:00:00:01" in i, | |
onpass="Pass", | |
onfail="Fail" ) | |
main.step( "Sending/Receiving Test packet - Filter matches" ) | |
main.h2.startFilter() | |
main.h1.buildEther( dst=main.h2.hostMac ) | |
main.h1.buildIP( dst=main.h2.hostIp ) | |
main.h1.sendPacket() | |
finished = main.h2.checkFilter() | |
i = "" | |
if finished: | |
a = main.h2.readPackets() | |
for i in a.splitlines(): | |
main.log.info( i ) | |
else: | |
kill = main.h2.killFilter() | |
main.log.debug( kill ) | |
main.h2.handle.sendline( "" ) | |
main.h2.handle.expect( main.h2.scapyPrompt ) | |
main.log.debug( main.h2.handle.before ) | |
utilities.assert_equals( expect=True, | |
actual="dst=00:00:00:00:00:02 src=00:00:00:00:00:01" in i, | |
onpass="Pass", | |
onfail="Fail" ) | |
main.step( "Clean up host components" ) | |
for host in hosts: | |
host.stopScapy() | |
main.Mininet1.removeHostComponent( "h1" ) | |
main.Mininet1.removeHostComponent( "h2" ) | |
def CASE5( self, main ): | |
""" | |
Adding Group of type "ALL" using Rest api | |
""" | |
import json | |
import time | |
isAdded = main.FALSE | |
main.case( "Verify Group of type All are successfully Added" ) | |
main.caseExplanation = " Install a Group of type ALL " +\ | |
" Verify the Group is Added " +\ | |
" Add a flow using the group " +\ | |
" Send a packet that verifies the action bucket of the group" | |
main.step( "Add Group using Rest api" ) | |
bucketList = [] | |
bucket = main.buckets.addBucket( main, egressPort=egressPort1 ) | |
bucketList.append( bucket ) | |
bucket = main.buckets.addBucket( main, egressPort=egressPort2 ) | |
bucketList.append( bucket ) | |
bucket = main.buckets.addBucket( main, egressPort=egressPort3 ) | |
bucketList.append( bucket ) | |
response = main.ONOSrest.addGroup( deviceId=deviceId, | |
groupType=type1, | |
bucketList=bucketList, | |
appCookie=appCookie, | |
groupId=groupId ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=response, | |
onpass="Successfully added Groups of type ALL", | |
onfail="Failed to add Groups of type ALL" ) | |
# Giving ONOS time to add the group | |
time.sleep( main.addGroupSleep ) | |
main.step( "Check groups are in ADDED state" ) | |
response = main.ONOSrest.getGroups( deviceId=deviceId, | |
appCookie=appCookie ) | |
responsejson = json.loads( response ) | |
for item in responsejson: | |
if item[ "state" ] == "ADDED": | |
isAdded = main.TRUE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=isAdded, | |
onpass="All Group is in Added State", | |
onfail="All Group is not in Added State" ) | |
""" | |
Adding flow using rest api | |
""" | |
isAdded = main.FALSE | |
main.step( "Adding flow with Group using rest api" ) | |
response = main.ONOSrest.addFlow( deviceId=deviceId, | |
priority=priority, | |
ingressPort=ingressPort, | |
groupId=groupId ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=response, | |
onpass="Successfully Added Flows", | |
onfail="Failed to Add flows" ) | |
# Giving ONOS time to add the flow | |
time.sleep( main.addFlowSleep ) | |
response = main.ONOSrest.getFlows( deviceId=deviceId ) | |
responsejson = json.loads( response ) | |
for item in responsejson: | |
if item[ "priority" ] == int( priority ) and item[ "state" ] == "ADDED": | |
isAdded = main.TRUE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=isAdded, | |
onpass="Flow is in Added State", | |
onfail="Flow is not in Added State" ) | |
""" | |
Sends a packet using scapy | |
""" | |
main.step( "Testing Group by sending packet using Scapy" ) | |
main.log.info( "Creating host components" ) | |
main.Scapy.createHostComponent( "h1" ) | |
main.Scapy.createHostComponent( "h2" ) | |
main.Scapy.createHostComponent( "h3" ) | |
main.Scapy.createHostComponent( "h4" ) | |
hosts = [ main.h1, main.h2, main.h3, main.h4 ] | |
for host in hosts: | |
host.startHostCli() | |
host.startScapy() | |
host.updateSelf() | |
main.log.info( "Constructing Packet" ) | |
main.h1.buildEther( dst=main.h1.hostMac ) | |
main.h1.buildIP( dst=main.h1.hostIp ) | |
main.log.info( "Start Filter on host2,host3,host4" ) | |
main.h2.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) ) | |
main.h3.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) ) | |
main.h4.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) ) | |
main.log.info( "sending packet to Host" ) | |
main.h1.sendPacket() | |
main.log.info( "Checking filter for our packet" ) | |
stepResultH2 = main.h2.checkFilter() | |
stepResultH3 = main.h3.checkFilter() | |
stepResultH4 = main.h4.checkFilter() | |
if stepResultH2: | |
main.log.info( "Packet : %s" % main.h2.readPackets() ) | |
else: | |
main.h2.killFilter() | |
if stepResultH3: | |
main.log.info( "Packet : %s" % main.h3.readPackets() ) | |
else: | |
main.h2.killFilter() | |
if stepResultH4: | |
main.log.info( "Packet : %s" % main.h4.readPackets() ) | |
else: | |
main.h4.killFilter() | |
if stepResultH2 and stepResultH3 and stepResultH4: | |
main.log.info( "Success!!!Packet sent to port 1 is received at port 2,3 and 4" ) | |
stepResult = main.TRUE | |
else: | |
main.log.info( "Failure!!!Packet sent to port 1 is not received at port 2,3 and 4" ) | |
stepResult = main.FALSE | |
main.log.info( "Clean up host components" ) | |
for host in hosts: | |
host.stopScapy() | |
main.Mininet1.removeHostComponent( "h1" ) | |
main.Mininet1.removeHostComponent( "h2" ) | |
main.Mininet1.removeHostComponent( "h3" ) | |
main.Mininet1.removeHostComponent( "h4" ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResult, | |
onpass="Packet sent to port 1 is received at port 2,3,4 ", | |
onfail="Packet sent to port 1 is not received at port 2,3,4 " ) | |
def CASE6( self, main ): | |
""" | |
Deleting the Group and Flow | |
""" | |
import json | |
import time | |
respFlowId = 1 | |
main.case( "Delete the Group and Flow added through Rest api " ) | |
main.step( "Deleting Group and Flows" ) | |
#Get Flow ID | |
response = main.ONOSrest.getFlows( deviceId=deviceId ) | |
responsejson = json.loads( response ) | |
for item in responsejson: | |
if item[ "priority" ] == int( priority ): | |
respFlowId = item[ "id" ] | |
main.step( "Deleting the created flow by deviceId and flowId" ) | |
flowResponse = main.ONOSrest.removeFlow( deviceId=deviceId, | |
flowId=respFlowId ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=flowResponse, | |
onpass="Deleting flow is successful!!!", | |
onfail="Deleting flow is failure!!!" ) | |
# Giving ONOS time to delete the flow | |
time.sleep( main.delFlowSleep ) | |
main.step( "Deleting the created group by deviceId and appCookie" ) | |
groupResponse = main.ONOSrest.removeGroup( deviceId=deviceId, | |
appCookie=appCookie ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=groupResponse, | |
onpass="Deleting Group is successful!!!", | |
onfail="Deleting Group is failure!!!" ) | |
# Giving ONOS time to delete the group | |
time.sleep( main.delGroupSleep ) | |
def CASE7( self, main ): | |
""" | |
Adding Group of type "INDIRECT" using Rest api. | |
""" | |
import json | |
import time | |
isAdded = main.FALSE | |
main.case( "Verify Group of type INDIRECT are successfully Added" ) | |
main.caseExplanation = " Install a Group of type INDIRECT " +\ | |
" Verify the Group is Added " +\ | |
" Add a flow using the group " +\ | |
" Send a packet that verifies the action bucket of the group" | |
main.step( "Add Group using Rest api" ) | |
bucketList = [] | |
bucket = main.buckets.addBucket( main, egressPort=egressPort1 ) | |
bucketList.append( bucket ) | |
response = main.ONOSrest.addGroup( deviceId=deviceId, | |
groupType=type2, | |
bucketList=bucketList, | |
appCookie=appCookie, | |
groupId=groupId ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=response, | |
onpass="Successfully added Groups of type INDIRECT", | |
onfail="Failed to add Groups of type INDIRECT" ) | |
# Giving ONOS time to add the group | |
time.sleep( main.addGroupSleep ) | |
main.step( "Check groups are in ADDED state" ) | |
response = main.ONOSrest.getGroups( deviceId=deviceId, | |
appCookie=appCookie ) | |
responsejson = json.loads( response ) | |
for item in responsejson: | |
if item[ "state" ] == "ADDED": | |
isAdded = main.TRUE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=isAdded, | |
onpass="INDIRECT Group is in Added State", | |
onfail="INDIRECT Group is not in Added State" ) | |
""" | |
Adding flows using rest api | |
""" | |
isAdded = main.FALSE | |
main.step( "Adding flow with Group using rest api" ) | |
response = main.ONOSrest.addFlow( deviceId=deviceId, | |
priority=priority, | |
ingressPort=ingressPort, | |
groupId=groupId ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=response, | |
onpass="Successfully Added Flows", | |
onfail="Failed to Add flows" ) | |
# Giving ONOS time to add the flow | |
time.sleep( main.addFlowSleep ) | |
response = main.ONOSrest.getFlows( deviceId=deviceId ) | |
responsejson = json.loads( response ) | |
for item in responsejson: | |
if item[ "priority" ] == int( priority ) and item[ "state" ] == "ADDED": | |
isAdded = main.TRUE | |
utilities.assert_equals( expect=main.TRUE, | |
actual=isAdded, | |
onpass="Flow is in Added State", | |
onfail="Flow is not in Added State" ) | |
""" | |
Sends a packet using scapy | |
""" | |
main.step( "Testing Group by sending packet using Scapy" ) | |
main.log.info( "Creating host components" ) | |
main.Scapy.createHostComponent( "h1" ) | |
main.Scapy.createHostComponent( "h2" ) | |
hosts = [ main.h1, main.h2 ] | |
for host in hosts: | |
host.startHostCli() | |
host.startScapy() | |
host.updateSelf() | |
main.log.info( "Constructing Packet" ) | |
main.h1.buildEther( dst=main.h1.hostMac ) | |
main.h1.buildIP( dst=main.h1.hostIp ) | |
main.log.info( "Start Filter on host2" ) | |
main.h2.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) ) | |
main.log.info( "sending packet to Host" ) | |
main.h1.sendPacket() | |
main.log.info( "Checking filter for our packet" ) | |
stepResultH2 = main.h2.checkFilter() | |
if stepResultH2: | |
main.log.info( "Packet : %s" % main.h2.readPackets() ) | |
else: | |
main.h2.killFilter() | |
main.log.info( "Clean up host components" ) | |
for host in hosts: | |
host.stopScapy() | |
main.Mininet1.removeHostComponent( "h1" ) | |
main.Mininet1.removeHostComponent( "h2" ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=stepResultH2, | |
onpass="Packet sent to port 1 is received at port 2 successfully!!!", | |
onfail="Failure!!!Packet sent to port 1 is not received at port 2" ) | |
def CASE8( self, main ): | |
""" | |
Deleting the Group and Flow | |
""" | |
import json | |
import time | |
respFlowId = 1 | |
main.case( "Delete the Group and Flow added through Rest api " ) | |
main.step( "Deleting Group and Flows" ) | |
#Getting Flow ID | |
response = main.ONOSrest.getFlows( deviceId=deviceId ) | |
responsejson = json.loads( response ) | |
for item in responsejson: | |
if item[ "priority" ] == int( priority ): | |
respFlowId = item[ "id" ] | |
main.step( "Deleting the created flow by deviceId and flowId" ) | |
flowResponse = main.ONOSrest.removeFlow( deviceId=deviceId, | |
flowId=respFlowId ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=flowResponse, | |
onpass="Deleting flow is successful!!!", | |
onfail="Deleting flow is failure!!!" ) | |
# Giving ONOS time to delete the flow | |
time.sleep( main.delFlowSleep ) | |
groupResponse = main.ONOSrest.removeGroup( deviceId=deviceId, | |
appCookie=appCookie ) | |
utilities.assert_equals( expect=main.TRUE, | |
actual=groupResponse, | |
onpass="Deleting Group is successful!!!", | |
onfail="Deleting Group is failure!!!" ) | |
# Giving ONOS time to delete the group | |
time.sleep( main.delGroupSleep ) | |
def CASE100( self, main ): | |
""" | |
Report errors/warnings/exceptions | |
""" | |
main.log.info( "Error report: \n" ) | |
main.ONOSbench.logReport( main.ONOSip[ 0 ], | |
[ "INFO", | |
"FOLLOWER", | |
"WARN", | |
"flow", | |
"group", | |
"ERROR", | |
"Except" ], | |
"s" ) |