Merge "Use new graph interfaces in CHOTestMonkey"
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
index 314bde9..75e95ca 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
@@ -32,6 +32,7 @@
"""
import time
from threading import Lock, Condition
+ from core.graph import Graph
from tests.CHOTestMonkey.dependencies.elements.ONOSElement import Controller
from tests.CHOTestMonkey.dependencies.EventGenerator import EventGenerator
from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduler
@@ -58,6 +59,7 @@
if main.params[ 'EVENT' ][ eventName ][ 'status' ] == 'on':
main.enabledEvents[ int( main.params[ 'EVENT' ][ eventName ][ 'typeIndex' ] ) ] = eventName
print main.enabledEvents
+ main.graph = Graph()
main.eventScheduler = EventScheduler()
main.eventGenerator = EventGenerator()
main.variableLock = Lock()
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py b/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
index de32193..0811019 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
@@ -5,7 +5,6 @@
from threading import Lock, Condition
from tests.CHOTestMonkey.dependencies.events.Event import EventType, EventStates, Event
from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduleMethod
-from tests.CHOTestMonkey.dependencies.GraphHelper import GraphHelper
class MessageType:
def __init__( self ):
@@ -169,21 +168,10 @@
main.log.warn( "Event Generator - Too many arguments for randomLinkToggle: %s" % ( args ) )
else:
downUpAvgInterval = int( args[ 0 ] )
- with main.variableLock:
- graphHelper = GraphHelper()
- availableLinks = graphHelper.getNonCutEdges()
- if len( availableLinks ) == 0:
- main.log.warn( "All links are cut edges, aborting event" )
- return
- link = random.sample( availableLinks, 1 )
-
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_DOWN,
scheduleMethod,
- [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
- with main.variableLock:
- link[ 0 ].setPendingDown()
- link[ 0 ].backwardLink.setPendingDown()
+ [ 'random', 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -199,7 +187,7 @@
time.sleep( downUpInterval )
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_UP,
scheduleMethod,
- [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
+ [ 'random', 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -227,24 +215,12 @@
linkGroupSize = int( args[ 0 ] )
downDownAvgInterval = int( args[ 1 ] )
downUpAvgInterval = int( args[ 2 ] )
- downLinks = []
for i in range( 0, linkGroupSize ):
- with main.variableLock:
- graphHelper = GraphHelper()
- availableLinks = graphHelper.getNonCutEdges()
- if len( availableLinks ) == 0:
- main.log.warn( "All links are cut edges, aborting event" )
- continue
- link = random.sample( availableLinks, 1 )
if i == 0:
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_DOWN,
scheduleMethod,
- [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
- with main.variableLock:
- link[ 0 ].setPendingDown()
- link[ 0 ].backwardLink.setPendingDown()
- downLinks.append( link[ 0 ] )
+ [ 'random', 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkGroupToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -267,10 +243,10 @@
else:
time.sleep( downUpInterval )
- for link in downLinks:
+ for i in range( 0, linkGroupSize ):
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_UP,
scheduleMethod,
- [ link.deviceA.name, link.deviceB.name ] )
+ [ 'random', 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -301,20 +277,10 @@
main.log.warn( "Event Generator - Too many arguments for randomDeviceToggle: %s" % ( args ) )
else:
downUpAvgInterval = int( args[ 0 ] )
- with main.variableLock:
- graphHelper = GraphHelper()
- availableDevices = graphHelper.getNonCutVertices()
- if len( availableDevices ) == 0:
- main.log.warn( "All devices are Cut vertices, aborting event" )
- return
- device = random.sample( availableDevices, 1 )
-
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_DOWN,
scheduleMethod,
- [ device[ 0 ].name ] )
- with main.variableLock:
- device[ 0 ].setPendingDown()
+ [ 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -330,7 +296,7 @@
time.sleep( downUpInterval )
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_UP,
scheduleMethod,
- [ device[ 0 ].name ] )
+ [ 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -358,23 +324,12 @@
deviceGroupSize = int( args[ 0 ] )
downDownAvgInterval = int( args[ 1 ] )
downUpAvgInterval = int( args[ 2 ] )
- downDevices = []
for i in range( 0, deviceGroupSize ):
- with main.variableLock:
- graphHelper = GraphHelper()
- availableDevices = graphHelper.getNonCutVertices()
- if len( availableDevices ) == 0:
- main.log.warn( "All devices are cut vertices, aborting event" )
- continue
- device = random.sample( availableDevices, 1 )
if i == 0:
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_DOWN,
scheduleMethod,
- [ device[ 0 ].name ] )
- with main.variableLock:
- device[ 0 ].setPendingDown()
- downDevices.append( device[ 0 ] )
+ [ 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkGroupToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -397,10 +352,10 @@
else:
time.sleep( downUpInterval )
- for device in downDevices:
+ for i in range( 0, deviceGroupSize ):
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_UP,
scheduleMethod,
- [ device.name ] )
+ [ 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
index 7e4c95c..99ead73 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
@@ -172,7 +172,7 @@
if len( self.pendingEvents ) > 0:
events += str( self.pendingEvents[ -1 ].typeIndex )
events += "]"
- main.log.debug( "Event Scheduler - Events: " + events )
+ #main.log.debug( "Event Scheduler - Events: " + events )
def isAvailable( self ):
with self.pendingEventsCondition:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
index 2a18ac7..b3618dd 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
@@ -18,9 +18,6 @@
def isRemoved( self ):
return self.status == 'removed'
- def setPendingDown( self ):
- self.status = 'pending_down'
-
def setRemoved( self ):
self.status = 'removed'
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
index 76722f0..fcbf23d 100755
--- a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
@@ -99,6 +99,8 @@
if not host.isDown() and not host.isRemoved():
upHostNum += 1
clusterNum = 1
+ with main.mininetLock:
+ graphDictMininet = main.Mininet1.getGraphDict( useId=True )
for controller in main.controllers:
if controller.isUp():
with controller.CLILock:
@@ -106,8 +108,14 @@
#if not topoState:
# main.log.warn( "Topo Check - link or device number discoverd by ONOS%s is incorrect" % ( controller.index ) )
# checkResult = EventStates().FAIL
- # Check links
+ # Compare ONOS and Mininet topologies
+ graphDictONOS = controller.CLI.getGraphDict()
+ compareResult = main.graph.compareGraphs( graphDictONOS, graphDictMininet )
+ if not compareResult:
+ checkResult = EventStates().FAIL
+ main.log.warn( "Topo Check - ONOS and Mininet topologies do not match" )
try:
+ # Check links
links = controller.CLI.links()
links = json.loads( links )
if not len( links ) == upLinkNum:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
index 7247ecf..8ec62a1 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
@@ -4,7 +4,6 @@
"""
from tests.CHOTestMonkey.dependencies.events.Event import EventType, EventStates, Event
from tests.CHOTestMonkey.dependencies.elements.NetworkElement import NetworkElement, Device, Host, Link
-from tests.CHOTestMonkey.dependencies.GraphHelper import GraphHelper
class LinkEvent( Event ):
def __init__( self ):
@@ -28,18 +27,16 @@
main.log.warn( "%s - Too many arguments: %s" % ( self.typeString, args ) )
return EventStates().ABORT
if args[ 0 ] == 'random' or args[ 1 ] == 'random':
- import random
if self.typeIndex == EventType().NETWORK_LINK_DOWN:
- with main.variableLock:
- graphHelper = GraphHelper()
- availableLinks = graphHelper.getNonCutEdges()
- if len( availableLinks ) == 0:
- main.log.warn( "All links are cut edges, aborting event" )
- return EventStates().ABORT
- linkList = random.sample( availableLinks, 1 )
- self.linkA = linkList[ 0 ]
- self.linkB = linkList[ 0 ].backwardLink
+ with main.mininetLock:
+ linkRandom = main.Mininet1.getLinkRandom()
+ if linkRandom == None:
+ main.log.warn( "No link available, aborting event" )
+ return EventStates().ABORT
+ args[ 0 ] = linkRandom[ 0 ]
+ args[ 1 ] = linkRandom[ 1 ]
elif self.typeIndex == EventType().NETWORK_LINK_UP:
+ import random
with main.variableLock:
downLinks = []
for link in main.links:
@@ -54,7 +51,7 @@
elif args[ 0 ] == args[ 1 ]:
main.log.warn( "%s - invalid arguments: %s" % ( self.typeString, args ) )
return EventStates().ABORT
- else:
+ if self.linkA == None or self.linkB == None:
for link in main.links:
if link.deviceA.name == args[ 0 ] and link.deviceB.name == args[ 1 ]:
self.linkA = link
@@ -88,9 +85,13 @@
main.log.warn( "Link Down - link has been removed" )
return EventStates().ABORT
with main.mininetLock:
+ '''
result = main.Mininet1.link( END1=self.linkA.deviceA.name,
END2=self.linkA.deviceB.name,
OPTION="down")
+ '''
+ result = main.Mininet1.delLink( self.linkA.deviceA.name,
+ self.linkA.deviceB.name )
if not result:
main.log.warn( "%s - failed to bring down link" % ( self.typeString ) )
return EventStates().FAIL
@@ -118,9 +119,13 @@
main.log.warn( "Link Up - link has been removed" )
return EventStates().ABORT
with main.mininetLock:
+ '''
result = main.Mininet1.link( END1=self.linkA.deviceA.name,
END2=self.linkA.deviceB.name,
OPTION="up")
+ '''
+ result = main.Mininet1.addLink( self.linkA.deviceA.name,
+ self.linkA.deviceB.name )
if not result:
main.log.warn( "%s - failed to bring up link" % ( self.typeString ) )
return EventStates().FAIL
@@ -152,14 +157,12 @@
if args[ 0 ] == 'random':
import random
if self.typeIndex == EventType().NETWORK_DEVICE_DOWN:
- with main.variableLock:
- graphHelper = GraphHelper()
- availableDevices = graphHelper.getNonCutVertices()
- if len( availableDevices ) == 0:
- main.log.warn( "All devices are cut vertices, aborting event" )
- return EventStates().ABORT
- deviceList = random.sample( availableDevices, 1 )
- self.device = deviceList[ 0 ]
+ with main.mininetLock:
+ switchRandom = main.Mininet1.getSwitchRandom()
+ if switchRandom == None:
+ main.log.warn( "No switch available, aborting event" )
+ return EventStates().ABORT
+ args[ 0 ] = switchRandom
elif self.typeIndex == EventType().NETWORK_DEVICE_UP:
with main.variableLock:
removedDevices = []
@@ -171,7 +174,7 @@
return EventStates().ABORT
deviceList = random.sample( removedDevices, 1 )
self.device = deviceList[ 0 ]
- else:
+ if self.device == None:
for device in main.devices:
if device.name == args[ 0 ]:
self.device = device