blob: 467231c6b134dc81f48c30cd868c311fe63abaa9 [file] [log] [blame]
class SRRouting:
def __init__( self ):
self.default = ''
def CASE1( self, main ):
"""
Ping between all ipv4 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between all ipv4 hosts in the topology" )
setupTest( main, test_idx=1, onosNodes=3, ipv6=False, external=False )
verify( main, ipv6=False, disconnected=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE2( self, main ):
"""
Ping between all ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between all ipv6 hosts in the topology" )
setupTest( main, test_idx=2, onosNodes=3, ipv4=False, external=False )
verify( main, ipv4=False, disconnected=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE3( self, main ):
"""
Ping between all ipv4 and ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between all ipv4 and ipv6 hosts in the topology" )
setupTest( main, test_idx=3, onosNodes=3, external=False )
verify( main, disconnected=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE4( self, main ):
"""
Ping between all ipv4 hosts in the topology and check connectivity to external ipv4 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between all ipv4 hosts in the topology and check connectivity to external ipv4 hosts" )
setupTest( main, test_idx=4, onosNodes=3, ipv6=False )
verify( main, ipv6=False, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE5( self, main ):
"""
Ping between all ipv6 hosts in the topology and check connectivity to external ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between all ipv6 hosts in the topology and check connectivity to external ipv6 hosts" )
setupTest( main, test_idx=5, onosNodes=3, ipv4=False )
verify( main, ipv4=False, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE6( self, main ):
"""
Ping between all ipv4 and ipv6 hosts in the topology and check connectivity to external ipv4 and ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between all ipv4 and ipv6 hosts in the topology and check connectivity to external hosts" )
setupTest( main, test_idx=6, onosNodes=3 )
verify( main, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE7( self, main ):
"""
Ping between ipv4 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add
command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between from ipv4 hosts to external host configured with route-add command" )
setupTest( main, test_idx=7, onosNodes=3, ipv6=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv6=False, internal=False, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE8( self, main ):
"""
Ping between ipv6 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add
command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between from ipv6 hosts to external host configured with route-add command" )
setupTest( main, test_idx=8, onosNodes=3, ipv4=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv4=False, internal=False, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE9( self, main ):
"""
Ping between ipv4 and ipv6 hosts and external hosts that is not configured in
external router config, but reachable through the use of route-add
command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Ping between from ipv4 and ipv6 hosts to external host configured with route-add command" )
setupTest( main, test_idx=9, onosNodes=3, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, internal=False, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE101( self, main ):
"""
Kill and recover links
Ping between all ipv4 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv4 hosts" )
setupTest( main, test_idx=101, onosNodes=3, ipv6=False, external=False )
verify( main, ipv6=False, external=False, disconnected=False )
MaxLinks = int( main.params["TOPO"]["linkNum"] )
MaxSwitches = int( main.params["TOPO"]["switchNum"] )
currentLinks = MaxLinks
expect = True
for stage in main.params.get( "CASE101Links", [] ):
main.log.debug("linksFailures" + stage )
linksToRemove = []
for switch in main.params[ "CASE101Links" ][ stage ]:
main.log.debug("processingSwitch" + switch )
if switch == "expect":
expect = main.params[ "CASE101Links" ][ stage ][ switch ].split() == "True"
continue
endpoints = main.params[ "CASE101Links" ][ stage ][ switch ].split(",")
for endpoint in endpoints:
linksToRemove.append( [ switch, endpoint ] )
currentLinks = (currentLinks - 2*len(linksToRemove))
verifyLinkFailure( main, linksToRemove, currentLinks, MaxSwitches, ipv6=False, external=False, skipOnFail=False, expectedConnectivity=expect )
verifyLinksRestored( main, linksToRemove, MaxLinks, MaxSwitches, ipv6=False, external=False, skipOnFail=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE102( self, main ):
"""
Kill and recover links
Ping between all ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv6 hosts" )
setupTest( main, test_idx=102, onosNodes=3, ipv4=False, external=False )
verify( main, ipv4=False, external=False, disconnected=False )
verifyLinkFailure( main, ipv4=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE103( self, main ):
"""
Kill and recover links
Ping between all ipv4 and ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv4 and IPv6 hosts" )
setupTest( main, test_idx=103, onosNodes=3, external=False )
verify( main, external=False, disconnected=False )
verifyLinkFailure( main, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE104( self, main ):
"""
Kill and recover links
Ping between all ipv4 hosts in the topology and check connectivity to external ipv4 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv4 hosts including external hosts" )
setupTest( main, test_idx=104, onosNodes=3, ipv6=False )
verify( main, ipv6=False, disconnected=False )
MaxLinks = int( main.params["TOPO"]["linkNum"] )
MaxSwitches = int( main.params["TOPO"]["switchNum"] )
currentLinks = MaxLinks
expect = True
for stage in main.params.get( "CASE104Links", [] ):
main.log.debug("linksFailures" + stage )
linksToRemove = []
for switch in main.params[ "CASE104Links" ][ stage ]:
main.log.debug("processingSwitch" + switch )
if switch == "expect":
expect = main.params[ "CASE104Links" ][ stage ][ switch ].split() == "True"
continue
endpoints = main.params[ "CASE104Links" ][ stage ][ switch ].split(",")
for endpoint in endpoints:
linksToRemove.append( [ switch, endpoint ] )
currentLinks = (currentLinks - 2*len(linksToRemove))
verifyLinkFailure( main, linksToRemove, currentLinks, MaxSwitches, ipv6=False, external=False, skipOnFail=False, expectedConnectivity=expect )
verifyLinksRestored( main, linksToRemove, MaxLinks, MaxSwitches, ipv6=False, external=False, skipOnFail=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE105( self, main ):
"""
Kill and recover links
Ping between all ipv6 hosts in the topology and check connectivity to external ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv6 hosts including external hosts" )
setupTest( main, test_idx=105, onosNodes=3, ipv4=False )
verify( main, ipv4=False, disconnected=False )
verifyLinkFailure( main, ipv4=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE106( self, main ):
"""
Kill and recover links
Ping between all ipv4 and ipv6 hosts in the topology and check connectivity to external ipv4 and ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv4 and IPv6 hosts including external hosts" )
setupTest( main, test_idx=106, onosNodes=3 )
verify( main, disconnected=False )
verifyLinkFailure( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE107( self, main ):
"""
Kill and recover links
Ping between ipv4 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv4 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=107, onosNodes=3, ipv6=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv6=False, disconnected=False )
verifyLinkFailure( main, ipv6=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE108( self, main ):
"""
Kill and recover links
Ping between ipv6 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv6 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=108, onosNodes=3, ipv4=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv4=False, disconnected=False )
verifyLinkFailure( main, ipv4=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE109( self, main ):
"""
Kill and recover links
Ping between ipv4 and pv6 hosts and external hosts that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test link failures with IPv4 and IPv6 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=109, onosNodes=3, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, disconnected=False )
verifyLinkFailure( main, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE201( self, main ):
"""
Kill and recover spine switches
Ping between all ipv4 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv4 hosts" )
setupTest( main, test_idx=201, onosNodes=3, ipv6=False, external=False )
verify( main, ipv6=False, external=False, disconnected=False )
verifySwitchFailure( main, ipv6=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE202( self, main ):
"""
Kill and recover spine switches
Ping between all ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv6 hosts" )
setupTest( main, test_idx=202, onosNodes=3, ipv4=False, external=False )
verify( main, ipv4=False, external=False, disconnected=False )
verifySwitchFailure( main, ipv4=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE203( self, main ):
"""
Kill and recover spine switches
Ping between all ipv4 and ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv4 and IPv6 hosts" )
setupTest( main, test_idx=203, onosNodes=3, external=False )
verify( main, external=False, disconnected=False )
verifySwitchFailure( main, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE204( self, main ):
"""
Kill and recover spine switches
Ping between all ipv4 hosts in the topology and check connectivity to external ipv4 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv4 hosts including external hosts" )
setupTest( main, test_idx=204, onosNodes=3, ipv6=False )
verify( main, ipv6=False, disconnected=False )
verifySwitchFailure( main, ipv6=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE205( self, main ):
"""
Kill and recover spine switches
Ping between all ipv6 hosts in the topology and check connectivity to external ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv6 hosts including external hosts" )
setupTest( main, test_idx=205, onosNodes=3, ipv4=False )
verify( main, ipv4=False, disconnected=False )
verifySwitchFailure( main, ipv4=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE206( self, main ):
"""
Kill and recover spine switches
Ping between all ipv4 and ipv6 hosts in the topology and check connectivity to external ipv4 and ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv4 and IPv6 hosts including external hosts" )
setupTest( main, test_idx=206, onosNodes=3 )
verify( main, disconnected=False )
verifySwitchFailure( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE207( self, main ):
"""
Kill and recover spine switches
Ping between ipv4 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv4 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=207, onosNodes=3, ipv6=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv6=False, disconnected=False )
verifySwitchFailure( main, ipv6=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE208( self, main ):
"""
Kill and recover spine switches
Ping between ipv6 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv6 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=208, onosNodes=3, ipv4=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv4=False, disconnected=False )
verifySwitchFailure( main, ipv4=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE209( self, main ):
"""
Kill and recover spine switches
Ping between ipv4 and pv6 hosts and external hosts that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test switch failures with IPv4 and IPv6 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=209, onosNodes=3, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, disconnected=False )
verifySwitchFailure( main, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE301( self, main ):
"""
Kill and recover onos nodes
Ping between all ipv4 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv4 hosts" )
setupTest( main, test_idx=301, onosNodes=3, ipv6=False, external=False )
verify( main, ipv6=False, external=False, disconnected=False )
verifyOnosFailure( main, ipv6=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE302( self, main ):
"""
Kill and recover onos nodes
Ping between all ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv6 hosts" )
setupTest( main, test_idx=302, onosNodes=3, ipv4=False, external=False )
verify( main, ipv4=False, external=False, disconnected=False )
verifyOnosFailure( main, ipv4=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE303( self, main ):
"""
Kill and recover onos nodes
Ping between all ipv4 and ipv6 hosts in the topology.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv4 and IPv6 hosts" )
setupTest( main, test_idx=303, onosNodes=3, external=False )
verify( main, external=False, disconnected=False )
verifyOnosFailure( main, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE304( self, main ):
"""
Kill and recover onos nodes
Ping between all ipv4 hosts in the topology and check connectivity to external ipv4 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv4 hosts including external hosts" )
setupTest( main, test_idx=304, onosNodes=3, ipv6=False )
verify( main, ipv6=False, disconnected=False )
verifyOnosFailure( main, ipv6=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE305( self, main ):
"""
Kill and recover onos nodes
Ping between all ipv6 hosts in the topology and check connectivity to external ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv6 hosts including external hosts" )
setupTest( main, test_idx=305, onosNodes=3, ipv4=False )
verify( main, ipv4=False, disconnected=False )
verifyOnosFailure( main, ipv4=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE306( self, main ):
"""
Kill and recover onos nodes
Ping between all ipv4 and ipv6 hosts in the topology and check connectivity to external ipv4 and ipv6 hosts
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv4 and IPv6 hosts including external hosts" )
setupTest( main, test_idx=306, onosNodes=3 )
verify( main, disconnected=False )
verifyOnosFailure( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE307( self, main ):
"""
Kill and recover onos nodes
Ping between ipv4 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv4 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=307, onosNodes=3, ipv6=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv6=False, disconnected=False )
verifyOnosFailure( main, ipv6=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE308( self, main ):
"""
Kill and recover onos nodes
Ping between ipv6 hosts and an external host that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv6 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=308, onosNodes=3, ipv4=False, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, ipv4=False, disconnected=False )
verifyOnosFailure( main, ipv4=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE309( self, main ):
"""
Kill and recover onos nodes
Ping between ipv4 and pv6 hosts and external hosts that is not configured in
external router config, but reachable through the use of route-add command.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Test onos failures with IPv4 and IPv6 hosts including external hosts configured with route-add command" )
setupTest( main, test_idx=309, onosNodes=3, external=False, static=True )
main.externalIpv4Hosts = main.staticIpv4Hosts
main.externalIpv6Hosts = main.staticIpv6Hosts
verify( main, disconnected=False )
verifyOnosFailure( main, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE601( self, main ):
"""
Bring down all switches
Verify Topology
Bring up all switches
Verify
repeat x3
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Bring down all switches then recover" )
setupTest( main, test_idx=601, external=False )
main.Cluster.next().CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
main.Network.discoverHosts( hostList=main.internalIpv4Hosts + main.internalIpv6Hosts )
totalSwitches = int( main.params[ 'TOPO' ][ 'switchNum' ] )
totalLinks = int( main.params[ 'TOPO' ][ 'linkNum' ] )
switchList = [ 'spine101', 'spine102', 'spine103', 'spine104',
'leaf1', 'leaf2', 'leaf3', 'leaf4', 'leaf5', 'leaf6' ]
verify( main, disconnected=False, external=False )
for i in range( 1, 4 ):
main.log.info( "Beginning iteration {} of stopping then starting all switches".format( i ) )
main.log.debug( main.Cluster.next().summary() )
# Bring down all switches
main.step( "Stopping switches - iteration " + str( i ) )
switchStop = main.TRUE
for switch in switchList:
switchStop = switchStop and main.Network.switch( SW=switch, OPTION="stop" )
utilities.assert_equals( expect=main.TRUE, actual=switchStop,
onpass="All switches stopped",
onfail="Failed to stop all switches" )
main.log.debug( "sleeping %i seconds" % float( 60 ) )
time.sleep( 60 )
lib.verifyTopology( main, 0, 0, main.Cluster.numCtrls )
# Bring up all switches
main.log.debug( main.Cluster.next().summary() )
main.step( "Starting switches - iteration " + str( i ) )
switchStart = main.TRUE
for switch in switchList:
switchStart = switchStart and main.Network.switch( SW=switch, OPTION="start" )
utilities.assert_equals( expect=main.TRUE, actual=switchStart,
onpass="All switches started",
onfail="Failed to start all switches" )
main.Network.discoverHosts( hostList=main.internalIpv4Hosts + main.internalIpv6Hosts )
lib.verifyTopology( main, totalSwitches, totalLinks, main.Cluster.numCtrls )
main.log.debug( main.Cluster.next().summary() )
main.log.debug( "sleeping %i seconds" % float( 60 ) )
time.sleep( 60 )
main.log.debug( main.Cluster.next().summary() )
main.log.debug( "sleeping %i seconds" % float( 60 ) )
time.sleep( 60 )
main.log.debug( main.Cluster.next().summary() )
verifyPing( main )
verify( main, disconnected=False, external=False )
verify( main, disconnected=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE602( self, main ):
""""
Take down a leaf switch that is paired and has a dual homed host
Restore the leaf switch
Repeat for various dual homed hosts and paired switches
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop a leaf switch that is paired and has a dual homed host." )
setupTest( main, test_idx=602, onosNodes=3 )
verify( main, disconnected=False )
# We need to disable ports toward dual-homed hosts before killing the leaf switch
portsToDisable = [ [ "of:0000000000000002", 7 ], [ "of:0000000000000002", 8 ],
[ "of:0000000000000002", 10 ], [ "of:0000000000000002", 11 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48, 5 )
# Kill leaf-2
lib.killSwitch( main, "leaf2", 9, 38 )
# FIXME: the downed interfaces on h4v6 and h5v6 won't disappear because they are
# configured by netcfg
hostLocations = { "h4v6": "of:0000000000000003/6",
"h5v6": [ "of:0000000000000002/8", "of:0000000000000003/7" ],
"h4v4": "of:0000000000000003/10",
"h5v4": "of:0000000000000003/11" }
lib.verifyHostLocations( main, hostLocations )
main.disconnectedIpv4Hosts = [ "h3v4" ]
main.disconnectedIpv6Hosts = [ "h3v6" ]
verify( main )
# Recover leaf-2
lib.recoverSwitch( main, "leaf2", 10, 48, rediscoverHosts=True )
hostLocations = { "h4v6": [ "of:0000000000000002/7", "of:0000000000000003/6" ],
"h5v6": [ "of:0000000000000002/8", "of:0000000000000003/7" ],
"h4v4": [ "of:0000000000000002/10", "of:0000000000000003/10" ],
"h5v4": [ "of:0000000000000002/11", "of:0000000000000003/11" ] }
lib.verifyHostLocations( main, hostLocations )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main, disconnected=False )
# We need to disable ports toward dual-homed hosts before killing the leaf switch
portsToDisable = [ [ "of:0000000000000004", 7 ], [ "of:0000000000000004", 8 ],
[ "of:0000000000000004", 10 ], [ "of:0000000000000004", 11 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48, 5 )
# Kill leaf-4
lib.killSwitch( main, "leaf4", 9, 38 )
hostLocations = { "h9v6": [ "of:0000000000000004/7", "of:0000000000000005/6" ],
"h10v6": [ "of:0000000000000004/8", "of:0000000000000005/7" ],
"h9v4": "of:0000000000000005/9",
"h10v4": "of:0000000000000005/10" }
lib.verifyHostLocations( main, hostLocations )
main.disconnectedIpv4Hosts = [ "h8v4" ]
main.disconnectedIpv6Hosts = [ "h8v6" ]
verify( main )
# Recover leaf-4
lib.recoverSwitch( main, "leaf4", 10, 48, rediscoverHosts=True )
hostLocations = { "h9v6": [ "of:0000000000000004/7", "of:0000000000000005/6" ],
"h10v6": [ "of:0000000000000004/8", "of:0000000000000005/7" ],
"h9v4": [ "of:0000000000000004/10", "of:0000000000000005/9" ],
"h10v4": [ "of:0000000000000004/11", "of:0000000000000005/10" ] }
lib.verifyHostLocations( main, hostLocations )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE603( self, main ):
""""
Drop HAGG-1 device and test connectivity.
Drop DAAS-1 device and test connectivity (some hosts lost it)
Bring up DAAS-1 and test connectivity (all hosts gained it again)
Repeat the same with HAGG-2 and DAAS-2.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop hagg spine switch along with dass leaf switch." )
setupTest( main, test_idx=603, onosNodes=3 )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main )
lib.killSwitch( main, "spine103",
int( main.params[ "TOPO" ]["switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6 )
verify( main )
lib.killSwitch( main, "leaf6",
int( main.params[ "TOPO" ]["switchNum" ] ) - 2,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 8 )
main.disconnectedIpv4Hosts = [ 'h12v4', 'h13v4']
main.disconnectedIpv6Hosts = [ 'h12v6', 'h13v6']
verify( main )
lib.recoverSwitch( main, "leaf6",
int( main.params[ "TOPO" ]["switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6,
rediscoverHosts=True)
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main )
lib.recoverSwitch( main, "spine103",
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
verify( main )
lib.killSwitch( main, "spine104",
int( main.params[ "TOPO" ]["switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6 )
verify( main )
lib.killSwitch( main, "leaf1",
int( main.params[ "TOPO" ]["switchNum" ] ) - 2,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 8 )
main.disconnectedIpv4Hosts = [ 'h1v4', 'h2v4']
main.disconnectedIpv6Hosts = [ 'h1v6', 'h2v6']
verify( main )
lib.recoverSwitch( main, "leaf1",
int( main.params[ "TOPO" ]["switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6,
rediscoverHosts=True )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main )
lib.recoverSwitch( main, "spine104",
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
verify( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE604( self, main ):
""""
Drop HAGG-1 device and test connectivity.
Bring up HAGG-1 and test connectivity.
Drop HAGG-2 device and test connectivity.
Bring up HAGG-2 device and test connectivity
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop hagg spine switches." )
setupTest( main, test_idx=604, onosNodes=3 )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main )
lib.killSwitch( main, "spine103",
int( main.params[ "TOPO" ]["switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6 )
verify( main )
lib.recoverSwitch( main, "spine103",
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
verify( main )
lib.killSwitch( main, "spine104",
int( main.params[ "TOPO" ]["switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6 )
verify( main )
lib.recoverSwitch( main, "spine104",
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
verify( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE605( self, main ):
"""
Drop HAGG-1 and test connectivity (expect no failure)
Drop all leafs in big fabric and test connectivity (expect some failures)
Bring up HAGG-1 and test connectivity (still expect some failures)
Bring up all leafs in big fabric and test connectivity (expect no failure)
Repeat above with HAGG-2
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop one hagg and all leafs in big fabric" )
setupTest( main, test_idx=605, onosNodes=3 )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main )
lib.killSwitch( main, "spine103",
int( main.params[ "TOPO" ][ "switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6 )
verify( main )
lib.killSwitch( main, [ "leaf2", "leaf3", "leaf4", "leaf5" ],
int( main.params[ "TOPO" ][ "switchNum" ] ) - 5,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 42 )
main.disconnectedIpv4Hosts = [ "h3v4", "h4v4", "h5v4", "h6v4", "h7v4", "h8v4", "h9v4", "h10v4", "h11v4" ]
main.disconnectedIpv6Hosts = [ "h3v6", "h4v6", "h5v6", "h6v6", "h7v6", "h8v6", "h9v6", "h10v6", "h11v6" ]
main.disconnectedExternalIpv4Hosts = [ "rh1v4", "rh2v4", "rh5v4" ]
main.disconnectedExternalIpv6Hosts = [ "rh1v6", "rh11v6", "rh5v6", "rh2v6", "rh22v6" ]
verify( main, disconnected=True )
lib.recoverSwitch( main, "spine103",
int( main.params[ "TOPO" ][ "switchNum" ] ) - 4,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 36 )
verify( main, disconnected=True )
lib.recoverSwitch( main, [ "leaf2", "leaf3", "leaf4", "leaf5" ],
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
main.disconnectedExternalIpv4Hosts = [ ]
main.disconnectedExternalIpv6Hosts = [ ]
verify( main )
lib.killSwitch( main, "spine104",
int( main.params[ "TOPO" ][ "switchNum" ] ) - 1,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 6 )
verify( main )
lib.killSwitch( main, [ "leaf2", "leaf3", "leaf4", "leaf5" ],
int( main.params[ "TOPO" ][ "switchNum" ] ) - 5,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 42 )
main.disconnectedIpv4Hosts = [ "h3v4", "h4v4", "h5v4", "h6v4", "h7v4", "h8v4", "h9v4", "h10v4", "h11v4" ]
main.disconnectedIpv6Hosts = [ "h3v6", "h4v6", "h5v6", "h6v6", "h7v6", "h8v6", "h9v6", "h10v6", "h11v6" ]
main.disconnectedExternalIpv4Hosts = [ "rh1v4", "rh2v4", "rh5v4" ]
main.disconnectedExternalIpv6Hosts = [ "rh1v6", "rh11v6", "rh5v6", "rh2v6", "rh22v6" ]
verify( main, disconnected=True )
lib.recoverSwitch( main, "spine104",
int( main.params[ "TOPO" ][ "switchNum" ] ) - 4,
int( main.params[ "TOPO" ][ "linkNum" ] ) - 36 )
verify( main, disconnected=True )
lib.recoverSwitch( main, [ "leaf2", "leaf3", "leaf4", "leaf5" ],
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
main.disconnectedExternalIpv4Hosts = [ ]
main.disconnectedExternalIpv6Hosts = [ ]
verify( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE606( self, main ):
"""
Drop SPINE-1 and test connectivity
Drop paired leaf and test connectivity (expect some failures)
Bring up SPINE-1 and test connectivity (still expect some failures)
Bring up the paired leaf and test connectivity
Repeat above with SPINE-2 and a different paired leaf
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop spine and paired leaf" )
setupTest( main, test_idx=606, onosNodes=3 )
verify( main, disconnected=False )
# Drop spine101 and leaf-2/3
lib.killSwitch( main, "spine101", 9, 30 )
verify( main, disconnected=False )
lib.killSwitch( main, "leaf2", 8, 24 )
lib.killSwitch( main, "leaf3", 7, 20 )
main.disconnectedIpv4Hosts = [ "h3v4", "h4v4", "h5v4", "h6v4", "h7v4" ]
main.disconnectedIpv6Hosts = [ "h3v6", "h4v6", "h5v6", "h6v6", "h7v6" ]
verify( main )
lib.recoverSwitch( main, "spine101", 8, 30 )
verify( main )
lib.recoverSwitch( main, "leaf3", 9, 38 )
lib.recoverSwitch( main, "leaf2", 10, 48, rediscoverHosts=True,
hostsToDiscover=main.disconnectedIpv4Hosts + main.disconnectedIpv6Hosts )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main, disconnected=False )
# Drop spine102 and leaf-4/5
lib.killSwitch( main, "spine102", 9, 30 )
verify( main, disconnected=False )
lib.killSwitch( main, "leaf4", 8, 24 )
lib.killSwitch( main, "leaf5", 7, 20 )
main.disconnectedIpv4Hosts = [ "h8v4", "h9v4", "h10v4", "h11v4" ]
main.disconnectedIpv6Hosts = [ "h8v6", "h9v6", "h10v6", "h11v6" ]
verify( main, external=False )
lib.recoverSwitch( main, "spine102", 8, 30 )
verify( main, external=False )
lib.recoverSwitch( main, "leaf5", 9, 38 )
lib.recoverSwitch( main, "leaf4", 10, 48, rediscoverHosts=True,
hostsToDiscover=main.disconnectedIpv4Hosts + main.disconnectedIpv6Hosts )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE620( self, main ):
"""
Take down one of double links towards the spine from all leaf switches and
check that buckets in select groups change accordingly
Bring up links again and check that buckets in select groups change accordingly
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Take down one of double links towards the spine" )
setupTest( main, test_idx=620, onosNodes=3 )
verify( main, disconnected=False )
groupBuckets = { "of:0000000000000002": { "10.1.0.0/24": 4, "10.1.10.0/24": 4,
"10.2.0.0/24": 1, "10.2.30.0/24": 1, "10.2.20.0/24": 1,
"10.2.10.0/24": 4, "10.2.40.0/24": 4,
"10.3.0.0/24": 4, "10.3.10.0/24": 8, "10.3.30.0/24": 8,
"10.3.20.0/24": 4, "10.5.10.0/24": 4, "10.5.20.0/24": 4 },
"of:0000000000000003": { "10.1.0.0/24": 4, "10.1.10.0/24": 4,
"10.2.0.0/24": 4, "10.2.30.0/24": 1, "10.2.20.0/24": 1,
"10.2.10.0/24": 1, "10.2.40.0/24": 1,
"10.3.0.0/24": 4, "10.3.10.0/24": 8, "10.3.30.0/24": 8,
"10.3.20.0/24": 4, "10.5.10.0/24": 4, "10.5.20.0/24": 4 },
"of:0000000000000004": { "10.1.0.0/24": 4, "10.1.10.0/24": 4,
"10.2.0.0/24": 4, "10.2.30.0/24": 8, "10.2.20.0/24": 8,
"10.2.10.0/24": 4, "10.2.40.0/24": 4,
"10.3.0.0/24": 1, "10.3.10.0/24": 1, "10.3.30.0/24": 1,
"10.3.20.0/24": 4, "10.5.10.0/24": 4, "10.5.20.0/24": 4 },
"of:0000000000000005": { "10.1.0.0/24": 4, "10.1.10.0/24": 4,
"10.2.0.0/24": 4, "10.2.30.0/24": 8, "10.2.20.0/24": 8,
"10.2.10.0/24": 4, "10.2.40.0/24": 4,
"10.3.0.0/24": 4, "10.3.10.0/24": 1, "10.3.30.0/24": 1,
"10.3.20.0/24": 1, "10.5.10.0/24": 4, "10.5.20.0/24": 4 } }
for switch, subnets in groupBuckets.items():
lib.checkGroupsForBuckets( main, switch, subnets )
# Take down one of double links
portsToDisable = [ [ "of:0000000000000002", 1 ], [ "of:0000000000000002", 3 ],
[ "of:0000000000000003", 1 ], [ "of:0000000000000003", 3 ],
[ "of:0000000000000004", 1 ], [ "of:0000000000000004", 3 ],
[ "of:0000000000000005", 1 ], [ "of:0000000000000005", 3 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 32 )
groupBucketsNew = { "of:0000000000000002": { "10.1.0.0/24": 2, "10.1.10.0/24": 2,
"10.2.0.0/24": 1, "10.2.30.0/24": 1, "10.2.20.0/24": 1,
"10.2.10.0/24": 2, "10.2.40.0/24": 2,
"10.3.0.0/24": 2, "10.3.10.0/24": 4, "10.3.30.0/24": 4,
"10.3.20.0/24": 2, "10.5.10.0/24": 2, "10.5.20.0/24": 2 },
"of:0000000000000003": { "10.1.0.0/24": 2, "10.1.10.0/24": 2,
"10.2.0.0/24": 2, "10.2.30.0/24": 1, "10.2.20.0/24": 1,
"10.2.10.0/24": 1, "10.2.40.0/24": 1,
"10.3.0.0/24": 2, "10.3.10.0/24": 4, "10.3.30.0/24": 4,
"10.3.20.0/24": 2, "10.5.10.0/24": 2, "10.5.20.0/24": 2 },
"of:0000000000000004": { "10.1.0.0/24": 2, "10.1.10.0/24": 2,
"10.2.0.0/24": 2, "10.2.30.0/24": 4, "10.2.20.0/24": 4,
"10.2.10.0/24": 2, "10.2.40.0/24": 2,
"10.3.0.0/24": 1, "10.3.10.0/24": 1, "10.3.30.0/24": 1,
"10.3.20.0/24": 2, "10.5.10.0/24": 2, "10.5.20.0/24": 2 },
"of:0000000000000005": { "10.1.0.0/24": 2, "10.1.10.0/24": 2,
"10.2.0.0/24": 2, "10.2.30.0/24": 4, "10.2.20.0/24": 4,
"10.2.10.0/24": 2, "10.2.40.0/24": 2,
"10.3.0.0/24": 2, "10.3.10.0/24": 1, "10.3.30.0/24": 1,
"10.3.20.0/24": 1, "10.5.10.0/24": 2, "10.5.20.0/24": 2 } }
for switch, subnets in groupBucketsNew.items():
lib.checkGroupsForBuckets( main, switch, subnets )
verify( main, disconnected=False )
# Bring up the links
lib.enablePortBatch( main, portsToDisable, 10, 48 )
for switch, subnets in groupBuckets.items():
lib.checkGroupsForBuckets( main, switch, subnets )
verify( main, disconnected=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE621( self, main ):
"""
Remove all the links in the network and restore all Links (repeat x3)
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Remove all the links in the network and restore all Links" )
setupTest( main, test_idx=621, onosNodes=3 )
verify( main, disconnected=False )
linksToRemove = [ ["spine101", "spine103"], ["spine102", "spine104"],
["spine103", "leaf6"], ["spine103", "leaf1"],
["spine104", "leaf6"], ["spine104", "leaf1"],
["spine101", "leaf2"], ["spine101", "leaf3"], ["spine101", "leaf4"], ["spine101", "leaf5"],
["spine102", "leaf2"], ["spine102", "leaf3"], ["spine102", "leaf4"], ["spine102", "leaf5"],
["leaf2", "leaf3"], ["leaf4", "leaf5"] ]
portsToDisable = [ [ "of:0000000000000001", 3 ], [ "of:0000000000000001", 4 ],
[ "of:0000000000000001", 5 ], [ "of:0000000000000001", 6 ],
[ "of:0000000000000002", 6 ], [ "of:0000000000000002", 7 ],
[ "of:0000000000000002", 8 ], [ "of:0000000000000002", 9 ],
[ "of:0000000000000002", 10 ], [ "of:0000000000000002", 11 ],
[ "of:0000000000000003", 6 ], [ "of:0000000000000003", 7 ],
[ "of:0000000000000003", 8 ], [ "of:0000000000000003", 9 ],
[ "of:0000000000000003", 10 ], [ "of:0000000000000003", 11 ],
[ "of:0000000000000003", 12 ], [ "of:0000000000000003", 13 ],
[ "of:0000000000000004", 6 ], [ "of:0000000000000004", 7 ],
[ "of:0000000000000004", 8 ], [ "of:0000000000000004", 9 ],
[ "of:0000000000000004", 10 ], [ "of:0000000000000004", 11 ],
[ "of:0000000000000004", 12 ], [ "of:0000000000000004", 13 ], [ "of:0000000000000004", 14 ],
[ "of:0000000000000005", 6 ], [ "of:0000000000000005", 7 ],
[ "of:0000000000000005", 8 ], [ "of:0000000000000005", 9 ],
[ "of:0000000000000005", 10 ], [ "of:0000000000000005", 11 ],
[ "of:0000000000000005", 12 ], [ "of:0000000000000005", 13 ],
[ "of:0000000000000005", 14 ], [ "of:0000000000000005", 15 ],
[ "of:0000000000000006", 3 ], [ "of:0000000000000006", 4 ],
[ "of:0000000000000006", 5 ], [ "of:0000000000000006", 6 ] ]
for i in range( 0, 3 ):
lib.killLinkBatch( main, linksToRemove, 0, 10 )
lib.disablePortBatch( main, portsToDisable, 10, 0 )
main.disconnectedIpv4Hosts = main.internalIpv4Hosts
main.disconnectedIpv6Hosts = main.internalIpv6Hosts
verify( main )
lib.restoreLinkBatch( main, linksToRemove, 48, 10 )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
main.Network.discoverHosts( hostList=main.disconnectedIpv4Hosts + main.disconnectedIpv6Hosts )
main.log.debug( "sleeping %i seconds" % float( 10 ) )
time.sleep( 10 )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE622( self, main ):
"""
Take down all uplinks from a paired leaf switch
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
from core import utilities
main.case( "Take down all uplinks from a paired leaf switch" )
setupTest( main, test_idx=622, onosNodes=3 )
verify( main, disconnected=False )
hostLocations = { "h4v6": [ "of:0000000000000002/7", "of:0000000000000003/6" ],
"h5v6": [ "of:0000000000000002/8", "of:0000000000000003/7" ],
"h4v4": [ "of:0000000000000002/10", "of:0000000000000003/10" ],
"h5v4": [ "of:0000000000000002/11", "of:0000000000000003/11" ] }
lib.verifyHostLocations( main, hostLocations )
linksToRemove = [ ["spine101", "leaf2"], ["spine102", "leaf2"] ]
lib.killLinkBatch( main, linksToRemove, 40, 10 )
# TODO: more verifications are required
main.disconnectedIpv4Hosts = [ "h3v4" ]
main.disconnectedIpv6Hosts = [ "h3v6" ]
verify( main )
hostLocations = { "h4v6": "of:0000000000000003/6",
"h5v6": [ "of:0000000000000002/8", "of:0000000000000003/7" ],
"h4v4": "of:0000000000000003/10",
"h5v4": "of:0000000000000003/11" }
lib.verifyHostLocations( main, hostLocations )
lib.restoreLinkBatch( main, linksToRemove, 48, 10 )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
verify( main, disconnected=False )
hostLocations = { "h4v6": [ "of:0000000000000002/7", "of:0000000000000003/6" ],
"h5v6": [ "of:0000000000000002/8", "of:0000000000000003/7" ],
"h4v4": [ "of:0000000000000002/10", "of:0000000000000003/10" ],
"h5v4": [ "of:0000000000000002/11", "of:0000000000000003/11" ] }
lib.verifyHostLocations( main, hostLocations )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE630( self, main ):
"""
Bring an instance down
Drop a device
Bring that same instance up again and observe that this specific instance sees that the device is down.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
from core import utilities
main.case( "Bring an instance down and drop a device" )
setupTest( main, test_idx=630, onosNodes=3 )
onosToKill = 0
deviceToDrop = "spine101"
lib.killOnos( main, [ onosToKill ], 10, 48, 2 )
lib.killSwitch( main, deviceToDrop, 9, 30 )
lib.recoverOnos( main, [ onosToKill ], 9, 30, 3 )
result = main.Cluster.runningNodes[ onosToKill ].CLI.checkStatus( 9, 30, 3 )
utilities.assert_equals( expect=main.TRUE, actual=result,
onpass="ONOS instance {} sees correct device numbers".format( onosToKill ),
onfail="ONOS instance {} doesn't see correct device numbers".format( onosToKill ) )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE640( self, main ):
"""
Controller instance going down and switch coming down at the same time and then we bring them up together
A. Instance goes down and SPINE-1 goes down
- All connectivity should be there
- Bring them up together
- All connectivity should be there
B. Instance goes down and HAGG-1 goes down
- All connectivity should be there
- Bring them up together
- All connectivity should be there
C. Instance goes down and a paired leaf switch goes down
- Single homed hosts in this leaf should lose connectivity all others should be ok
- Bring them up together
- Test connectivity
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop an ONOS instance and switch(es) at the same time" )
caseDict = { 'A': { 'switches': "spine101",
'ports': [],
'disconnectedV4': [],
'disconnectedV6': [],
'expectedSwitches': 9,
'expectedLinks': 30 },
'B': { 'switches': "spine103",
'ports': [],
'disconnectedV4': [],
'disconnectedV6': [],
'expectedSwitches': 9,
'expectedLinks': 42 },
'C': { 'switches': "leaf2",
'ports': [ [ "of:0000000000000002", 7 ], [ "of:0000000000000002", 8 ],
[ "of:0000000000000002", 10 ], [ "of:0000000000000002", 11 ] ],
'disconnectedV4': [ "h3v4" ],
'disconnectedV6': [ "h3v6" ],
'expectedSwitches': 9,
'expectedLinks': 38 } }
totalSwitches = int( main.params[ 'TOPO' ][ 'switchNum' ] )
totalLinks = int( main.params[ 'TOPO' ][ 'linkNum' ] )
nodeIndex = 0
cases = sorted( caseDict.keys() )
for case in cases:
switches = caseDict[ case ][ 'switches' ]
ports = caseDict[ case ][ 'ports' ]
expectedSwitches = caseDict[ case ][ 'expectedSwitches' ]
expectedLinks = caseDict[ case ][ 'expectedLinks' ]
main.step( "\n640{}: Drop ONOS{} and switch(es) {} at the same time".format( case,
nodeIndex + 1,
switches ) )
setupTest( main, test_idx=640 )
main.Cluster.next().CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
main.Network.discoverHosts( hostList=main.internalIpv4Hosts + main.internalIpv6Hosts )
instance = main.Cluster.controllers[ nodeIndex ]
verify( main, disconnected=False, external=False )
# Simultaneous failures
main.step( "Kill ONOS{}: {}".format( nodeIndex + 1, instance.ipAddress ) )
killResult = main.ONOSbench.onosDie( instance.ipAddress )
utilities.assert_equals( expect=main.TRUE, actual=killResult,
onpass="ONOS node killed",
onfail="Failed to kill ONOS node" )
instance.active = False
main.Cluster.reset()
if ports:
lib.disablePortBatch( main, ports, 10, 48, 0 )
# TODO: Remove sleeps from the concurrent events
lib.killSwitch( main, switches, expectedSwitches, expectedLinks )
main.disconnectedIpv4Hosts = caseDict[ case ][ 'disconnectedV4' ]
main.disconnectedIpv6Hosts = caseDict[ case ][ 'disconnectedV6' ]
# verify functionality
main.log.debug( main.Cluster.next().summary() )
main.Network.discoverHosts( hostList=main.internalIpv4Hosts + main.internalIpv6Hosts )
main.log.debug( main.Cluster.next().summary() )
lib.verifyTopology( main, expectedSwitches, expectedLinks, main.Cluster.numCtrls - 1 )
lib.verifyNodes( main )
verify( main, external=False )
# Bring everything back up
lib.recoverSwitch( main, switches, totalSwitches, totalLinks, rediscoverHosts=True )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
lib.recoverOnos( main, [ nodeIndex ], expectedSwitches, expectedLinks, main.Cluster.numCtrls )
# Verify functionality
lib.verifyNodes( main )
verify( main, disconnected=False, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
nodeIndex = ( nodeIndex + 1 ) % main.Cluster.numCtrls
def CASE641( self, main ):
"""
Controller instance going down while switch comes up at the same time
A. Take down SPINE-1
- Test connectivity
- Bring up SPINE-1 and drop an instance at the same time
- Test connectivity
- Bring up instance one
- Test connectivity
B. Take down HAGG-1
- Test connectivity
- Bring up HAGG-1 and drop an instance at the same time
- Test connectivity
- Bring up instance one
- Test connectivity
C. Take down a paired leaf switch
- Test connectivity ( single homed hosts on this leaf will lose it )
- Bring up paired leaf switch and drop a controller instance at the same time
- Test connectivity
- Bring up the instance
- Test connectivity
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop an ONOS instance and recover switch(es) at the same time" )
caseDict = { 'A': { 'switches': "spine101",
'ports': [],
'disconnectedV4': [],
'disconnectedV6': [],
'expectedSwitches': 9,
'expectedLinks': 30 },
'B': { 'switches': "spine103",
'ports': [],
'disconnectedV4': [],
'disconnectedV6': [],
'expectedSwitches': 9,
'expectedLinks': 42 },
'C': { 'switches': "leaf2",
'ports': [ [ "of:0000000000000002", 7 ], [ "of:0000000000000002", 8 ],
[ "of:0000000000000002", 10 ], [ "of:0000000000000002", 11 ] ],
'disconnectedV4': [ "h3v4" ],
'disconnectedV6': [ "h3v6" ],
'expectedSwitches': 9,
'expectedLinks': 38 } }
totalSwitches = int( main.params[ 'TOPO' ][ 'switchNum' ] )
totalLinks = int( main.params[ 'TOPO' ][ 'linkNum' ] )
nodeIndex = 0
cases = sorted( caseDict.keys() )
for case in cases:
switches = caseDict[ case ][ 'switches' ]
ports = caseDict[ case ][ 'ports' ]
expectedSwitches = caseDict[ case ][ 'expectedSwitches' ]
expectedLinks = caseDict[ case ][ 'expectedLinks' ]
main.step( "\n641{}: Drop ONOS{} and recover switch(es) {} at the same time".format( case,
nodeIndex + 1,
switches ) )
setupTest( main, test_idx=641 )
main.Cluster.next().CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
main.Network.discoverHosts( hostList=main.internalIpv4Hosts + main.internalIpv6Hosts )
instance = main.Cluster.controllers[ nodeIndex ]
verify( main, disconnected=False, external=False )
# Drop the switch to setup scenario
if ports:
lib.disablePortBatch( main, ports, 10, 48, 5 )
lib.killSwitch( main, switches, expectedSwitches, expectedLinks )
main.disconnectedIpv4Hosts = caseDict[ case ][ 'disconnectedV4' ]
main.disconnectedIpv6Hosts = caseDict[ case ][ 'disconnectedV6' ]
verify( main, external=False )
# Simultaneous node failure and switch recovery
main.step( "Kill ONOS{}: {}".format( nodeIndex + 1, instance.ipAddress ) )
killResult = main.ONOSbench.onosDie( instance.ipAddress )
utilities.assert_equals( expect=main.TRUE, actual=killResult,
onpass="ONOS node killed",
onfail="Failed to kill ONOS node" )
instance.active = False
main.Cluster.reset()
# TODO: Remove sleeps from the concurrent events
lib.recoverSwitch( main, switches, totalSwitches, totalLinks, rediscoverHosts=True )
main.disconnectedIpv4Hosts = []
main.disconnectedIpv6Hosts = []
# verify functionality
main.log.debug( main.Cluster.next().summary() )
lib.verifyTopology( main, totalSwitches, totalLinks, main.Cluster.numCtrls - 1 )
lib.verifyNodes( main )
verify( main, disconnected=False, external=False )
# Bring everything back up and verify functionality
lib.recoverOnos( main, [ nodeIndex ], totalSwitches, totalLinks, main.Cluster.numCtrls )
lib.verifyNodes( main )
verify( main, external=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
nodeIndex = ( nodeIndex + 1 ) % main.Cluster.numCtrls
def CASE642( self, main ):
"""
Drop one link from each double link
Drop a link between DAAS-1 and HAAG-1
Drop a link between HAGG-2 and SPINE-2
Drop one ONOS instance
Test connectivity (expect no failure)
Bring up all links and ONOS instance
Test connectivity (expect no failure)
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop ONOS instance and links at the same time" )
setupTest( main, test_idx=642, onosNodes=3 )
main.Cluster.active( 0 ).CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
verify( main )
portsToDisable = [ [ "of:0000000000000001", 1 ], [ "of:0000000000000103", 1 ],
[ "of:0000000000000006", 1 ], [ "of:0000000000000103", 2 ],
[ "of:0000000000000101", 9 ], [ "of:0000000000000103", 3 ],
[ "of:0000000000000002", 1 ], [ "of:0000000000000101", 1 ],
[ "of:0000000000000003", 1 ], [ "of:0000000000000101", 3 ],
[ "of:0000000000000004", 1 ], [ "of:0000000000000101", 5 ],
[ "of:0000000000000005", 1 ], [ "of:0000000000000101", 7 ],
[ "of:0000000000000002", 3 ], [ "of:0000000000000102", 1 ],
[ "of:0000000000000003", 3 ], [ "of:0000000000000102", 3 ],
[ "of:0000000000000004", 3 ], [ "of:0000000000000102", 5 ],
[ "of:0000000000000005", 3 ], [ "of:0000000000000102", 7 ] ]
lib.disablePortBatch( main, portsToDisable,
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) - len( portsToDisable ),
sleep=0 )
lib.killOnos( main, [ 2, ], int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) - len( portsToDisable ), 2 )
verify( main )
lib.enablePortBatch( main, portsToDisable,
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ),
sleep=0 )
lib.recoverOnos( main, [ 2, ], int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ), 3 )
verify( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE643( self, main ):
"""
Drop one link from each double link
Drop a link between DAAS-1 and HAAG-1
Drop a link between HAGG-2 and SPINE-2
Test connectivity (expect no failure)
Bring up all links
Drop one ONOS instance
Test connectivity (expect no failure)
Bring up ONOS instance
Test connectivity (expect no failure)
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Drop ONOS instances and bring up links at the same time" )
setupTest( main, test_idx=643, onosNodes=3 )
main.Cluster.active( 0 ).CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
verify( main )
portsToDisable = [ [ "of:0000000000000001", 1 ], [ "of:0000000000000103", 1 ],
[ "of:0000000000000006", 1 ], [ "of:0000000000000103", 2 ],
[ "of:0000000000000101", 9 ], [ "of:0000000000000103", 3 ],
[ "of:0000000000000002", 1 ], [ "of:0000000000000101", 1 ],
[ "of:0000000000000003", 1 ], [ "of:0000000000000101", 3 ],
[ "of:0000000000000004", 1 ], [ "of:0000000000000101", 5 ],
[ "of:0000000000000005", 1 ], [ "of:0000000000000101", 7 ],
[ "of:0000000000000002", 3 ], [ "of:0000000000000102", 1 ],
[ "of:0000000000000003", 3 ], [ "of:0000000000000102", 3 ],
[ "of:0000000000000004", 3 ], [ "of:0000000000000102", 5 ],
[ "of:0000000000000005", 3 ], [ "of:0000000000000102", 7 ] ]
lib.disablePortBatch( main, portsToDisable,
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) - len( portsToDisable ) )
verify( main )
lib.enablePortBatch( main, portsToDisable,
int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ) )
lib.killOnos( main, [ 2, ], int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ), 2 )
verify( main )
lib.recoverOnos( main, [ 2, ], int( main.params[ "TOPO" ][ "switchNum" ] ),
int( main.params[ "TOPO" ][ "linkNum" ] ), 3 )
verify( main )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE651( self, main ):
"""
Move a single-homed host from port A to port B in DAAS-1
Test connectivity (expect no failure)
Repeat with DAAS-2
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Move a single-homed host to another port in the same DAAS" )
setupTest( main, test_idx=651, onosNodes=3 )
main.Cluster.active( 0 ).CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
verify( main )
# Move an untagged IPv4 host on DAAS-1
h1v4cfg = '{"of:0000000000000001/7" : { "interfaces" : [ { "ips" : [ "10.1.0.254/24" ], "vlan-untagged": 10 } ] } }'
lib.moveHost( main, "h1v4", "leaf1", "leaf1", "10.1.0.254", prefixLen=24, cfg=h1v4cfg )
hostLocations = { "h1v4": "of:0000000000000001/7" }
lib.verifyHostLocations( main, hostLocations )
verify( main )
# Move an untagged IPv6 host on DAAS-1
h1v6cfg = '{"of:0000000000000001/8" : { "interfaces" : [ { "ips" : [ "1000::3ff/120" ], "vlan-untagged": 21 } ] } }'
lib.moveHost( main, "h1v6", "leaf1", "leaf1", "1000::3ff", prefixLen=128, cfg=h1v6cfg, ipv6=True )
hostLocations = { "h1v6": "of:0000000000000001/8" }
lib.verifyHostLocations( main, hostLocations )
verify( main )
# FIXME: We don't have any tagged hosts on DAAS-1
# Move an untagged IPv4 host on DAAS-2
h13v4cfg = '{"of:0000000000000006/7" : { "interfaces" : [ { "ips" : [ "10.5.20.254/24" ], "vlan-untagged": 20 } ] } }'
lib.moveHost( main, "h13v4", "leaf6", "leaf6", "10.5.20.254", prefixLen=24, cfg=h13v4cfg )
hostLocations = { "h13v4": "of:0000000000000006/7" }
lib.verifyHostLocations( main, hostLocations )
verify( main )
# Move an untagged IPv6 host on DAAS-2
h13v6cfg = '{"of:0000000000000006/8" : { "interfaces" : [ { "ips" : [ "1012::3ff/120" ], "vlan-untagged": 26 } ] } }'
lib.moveHost( main, "h13v6", "leaf6", "leaf6", "1012::3ff", prefixLen=128, cfg=h13v6cfg, ipv6=True )
hostLocations = { "h13v6": "of:0000000000000006/8" }
lib.verifyHostLocations( main, hostLocations )
verify( main )
# Move a tagged IPv4 host on DAAS-2
h12v4cfg = '{"of:0000000000000006/9" : { "interfaces" : [ { "ips" : [ "10.5.10.254/24" ], "vlan-tagged": [80] } ] } }'
lib.moveHost( main, "h12v4", "leaf6", "leaf6", "10.5.10.254", prefixLen=24, cfg=h12v4cfg, vlan=80 )
hostLocations = { "h12v4": "of:0000000000000006/9" }
lib.verifyHostLocations( main, hostLocations )
verify( main )
# FIXME: Due to CORD-3079, we are not able to test movement of tagged IPv6 hosts at the moment
'''
h12v6cfg = '{"of:0000000000000006/10" : { "interfaces" : [ { "ips" : [ "1011::3ff/120" ], "vlan-tagged": [127] } ] } }'
lib.moveHost( main, "h12v6", "leaf6", "leaf6", "1011::3ff", prefixLen=128, cfg=h12v6cfg, ipv6=True, vlan=127 )
hostLocations = { "h12v6": "of:0000000000000006/10" }
lib.verifyHostLocations( main, hostLocations )
verify( main )
'''
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE652( self, main ):
"""
Move a dual-homed host from ports 1A and 1B to ports 2A and 2B
Host retains the same MAC and IP address
Test connectivity (expect no failure)
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Move a dual-homed host from porst 1A and 1B to ports 2A and 2B with the same MAC and IP" )
setupTest( main, test_idx=652, onosNodes=3 )
main.Cluster.active( 0 ).CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
verify( main )
# Move an untagged IPv4 host
lib.addStaticOnosRoute( main, "10.2.31.0/24", "10.2.30.1" )
lib.startScapyHosts( main, scapyNames=[ 'h4v4Scapy' ], mininetNames=[ 'h4v4' ] )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.31.1", "h4v4Scapy", "h4v4-bond0" )
h4v4cfg = '''{"of:0000000000000002/12" : { "interfaces" : [ { "ips" : [ "10.2.30.254/24" ], "vlan-untagged": 16 } ] },
"of:0000000000000003/14" : { "interfaces" : [ { "ips" : [ "10.2.30.254/24" ], "vlan-untagged": 16 } ] } }'''
lib.moveDualHomedHost( main, "h4v4", "leaf2", "leaf3", "leaf2", "leaf3", "10.2.30.254", prefixLen=24, cfg=h4v4cfg )
hostLocations = { "h4v4": [ "of:0000000000000002/12", "of:0000000000000003/14" ] }
lib.verifyHostLocations( main, hostLocations )
verify( main )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.31.1", "h4v4Scapy", "h4v4-bond1" )
# Move an untagged IPv6 host
lib.addStaticOnosRoute( main, "1003::400/120", "1003::3fe" )
lib.startScapyHosts( main, scapyNames=[ 'h4v6Scapy' ], mininetNames=[ 'h4v6' ] )
lib.verifyTraffic( main, main.internalIpv6Hosts, "1003::4fe", "h4v6Scapy", "h4v6-bond0", ipv6=True )
h4v6cfg = '''{"of:0000000000000002/13" : { "interfaces" : [ { "ips" : [ "1003::3ff/120" ], "vlan-untagged": 24 } ] },
"of:0000000000000003/15" : { "interfaces" : [ { "ips" : [ "1003::3ff/120" ], "vlan-untagged": 24 } ] } }'''
lib.moveDualHomedHost( main, "h4v6", "leaf2", "leaf3", "leaf2", "leaf3", "1003::3fe", prefixLen=128, cfg=h4v6cfg, ipv6=True )
hostLocations = { "h4v6": [ "of:0000000000000002/13", "of:0000000000000003/15" ] }
lib.verifyHostLocations( main, hostLocations )
verify( main )
lib.verifyTraffic( main, main.internalIpv6Hosts, "1003::4fe", "h4v6Scapy", "h4v6-bond1", ipv6=True )
# Move a tagged IPv4 host
lib.addStaticOnosRoute( main, "10.2.21.0/24", "10.2.20.1" )
lib.startScapyHosts( main, scapyNames=[ 'h5v4Scapy' ], mininetNames=[ 'h5v4' ] )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.21.1", "h5v4Scapy", "h5v4-bond0" )
h5v4cfg = '''{"of:0000000000000002/14" : { "interfaces" : [ { "ips" : [ "10.2.20.254/24" ], "vlan-tagged": [30] } ] },
"of:0000000000000003/16" : { "interfaces" : [ { "ips" : [ "10.2.20.254/24" ], "vlan-tagged": [30] } ] } }'''
lib.moveDualHomedHost( main, "h5v4", "leaf2", "leaf3", "leaf2", "leaf3", "10.2.20.254", prefixLen=24, cfg=h5v4cfg, vlan=30 )
hostLocations = { "h5v4": [ "of:0000000000000002/14", "of:0000000000000003/16" ] }
lib.verifyHostLocations( main, hostLocations )
verify( main )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.21.1", "h5v4Scapy", "h5v4-bond1" )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE653( self, main ):
"""
Move a dual-homed host from porst 1A and 1B to ports 2A and 2B
Host retains the same IP but MAC address changes
Test connectivity (expect no failure)
"""
import time
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Move a dual-homed host from porst 1A and 1B to ports 2A and 2B with the same IP and different MAC" )
setupTest( main, test_idx=653, onosNodes=3 )
main.Cluster.active( 0 ).CLI.balanceMasters()
main.log.debug( "sleeping %i seconds" % float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
time.sleep( float( main.params[ 'timers' ][ 'balanceMasterSleep' ] ) )
verify( main )
# Move an untagged IPv4 host
lib.addStaticOnosRoute( main, "10.2.31.0/24", "10.2.30.1" )
lib.startScapyHosts( main, scapyNames=[ 'h4v4Scapy' ], mininetNames=[ 'h4v4' ] )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.31.1", "h4v4Scapy", "h4v4-bond0" )
h4v4cfg = '''{"of:0000000000000002/12" : { "interfaces" : [ { "ips" : [ "10.2.30.254/24" ], "vlan-untagged": 16 } ] },
"of:0000000000000003/14" : { "interfaces" : [ { "ips" : [ "10.2.30.254/24" ], "vlan-untagged": 16 } ] } }'''
lib.moveDualHomedHost( main, "h4v4", "leaf2", "leaf3", "leaf2", "leaf3", "10.2.30.254", macAddr="00:aa:01:00:00:03", prefixLen=24, cfg=h4v4cfg )
hostLocations = { "h4v4": [ "of:0000000000000002/12", "of:0000000000000003/14" ] }
lib.verifyHostLocations( main, hostLocations )
verify( main )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.31.1", "h4v4Scapy", "h4v4-bond1" )
# Move an untagged IPv6 host
lib.addStaticOnosRoute( main, "1003::400/120", "1003::3fe" )
lib.startScapyHosts( main, scapyNames=[ 'h4v6Scapy' ], mininetNames=[ 'h4v6' ] )
lib.verifyTraffic( main, main.internalIpv6Hosts, "1003::4fe", "h4v6Scapy", "h4v6-bond0", ipv6=True )
h4v6cfg = '''{"of:0000000000000002/13" : { "interfaces" : [ { "ips" : [ "1003::3ff/120" ], "vlan-untagged": 24 } ] },
"of:0000000000000003/15" : { "interfaces" : [ { "ips" : [ "1003::3ff/120" ], "vlan-untagged": 24 } ] } }'''
lib.moveDualHomedHost( main, "h4v6", "leaf2", "leaf3", "leaf2", "leaf3", "1003::3fe", macAddr="00:bb:01:00:00:03", prefixLen=128, cfg=h4v6cfg, ipv6=True )
hostLocations = { "h4v6": [ "of:0000000000000002/13", "of:0000000000000003/15" ] }
lib.verifyHostLocations( main, hostLocations )
verify( main )
lib.verifyTraffic( main, main.internalIpv6Hosts, "1003::4fe", "h4v6Scapy", "h4v6-bond1", ipv6=True )
# Move a tagged IPv4 host
lib.addStaticOnosRoute( main, "10.2.21.0/24", "10.2.20.1" )
lib.startScapyHosts( main, scapyNames=[ 'h5v4Scapy' ], mininetNames=[ 'h5v4' ] )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.21.1", "h5v4Scapy", "h5v4-bond0" )
h5v4cfg = '''{"of:0000000000000002/14" : { "interfaces" : [ { "ips" : [ "10.2.20.254/24" ], "vlan-tagged": [30] } ] },
"of:0000000000000003/16" : { "interfaces" : [ { "ips" : [ "10.2.20.254/24" ], "vlan-tagged": [30] } ] } }'''
lib.moveDualHomedHost( main, "h5v4", "leaf2", "leaf3", "leaf2", "leaf3", "10.2.20.254", macAddr="00:aa:01:00:00:04", prefixLen=24, cfg=h5v4cfg, vlan=30 )
hostLocations = { "h5v4": [ "of:0000000000000002/14", "of:0000000000000003/16" ] }
lib.verifyHostLocations( main, hostLocations )
verify( main )
lib.verifyTraffic( main, main.internalIpv4Hosts, "10.2.21.1", "h5v4Scapy", "h5v4-bond1" )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE660( self, main ):
"""
External router failure
- Bring down quagga external router-1. Hosts that are behind router-2 should still be reachable. Hosts that are behind router-1 should not be reachable.
- Bring router up again, all external hosts are reachable again.
- Repeat this with external router-2.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "External router failure with cross-link" )
setupTest( main, test_idx=660, onosNodes=3, static=True )
main.externalIpv4Hosts += main.staticIpv4Hosts
main.externalIpv6Hosts += main.staticIpv6Hosts
verify( main, disconnected=False )
# Bring down/up external router-1
verifyRouterFailure( main, "r1", [ "rh5v4" ], [ "rh11v6", "rh5v6" ] )
# Bring down/up external router-2
verifyRouterFailure( main, "r2", [], [ "rh22v6" ] )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE661( self, main ):
"""
External router link failure
- Drop a non-cross-link for external router-1. All external hosts should be reachable (via cross-link).
- Bring up the link. All external hosts should be reachable.
- Repeat the steps above with the cross-link of external router-1
- Repeat all steps above with external router-2
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "External router link failure with cross-link" )
setupTest( main, test_idx=661, onosNodes=3, static=True )
main.externalIpv4Hosts += main.staticIpv4Hosts
main.externalIpv6Hosts += main.staticIpv6Hosts
verify( main, disconnected=False )
# Bring down/up a non-cross-link for external router-1
portsToDisable = [ [ "of:0000000000000005", 13 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
# Bring down/up a cross-link for external router-1
portsToDisable = [ [ "of:0000000000000005", 14 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
# Bring down/up a non-cross-link for external router-2
portsToDisable = [ [ "of:0000000000000004", 14 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
# Bring down/up a cross-link for external router-2
portsToDisable = [ [ "of:0000000000000004", 13 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE662( self, main ):
"""
Internal router failure
- Bring down quagga internal router-1. All external hosts should be reachable (via cross-link).
- Bring the router up. All external hosts should be reachable.
- Repeat this with internal router-2.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Internal router failure with cross-link" )
setupTest( main, test_idx=662, onosNodes=3, static=True )
main.externalIpv4Hosts += main.staticIpv4Hosts
main.externalIpv6Hosts += main.staticIpv6Hosts
verify( main, disconnected=False )
# Bring down/up internal router-1
verifyRouterFailure( main, "bgp1" )
# Bring down/up internal router-2
verifyRouterFailure( main, "bgp2" )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE663( self, main ):
"""
External router failure without cross-link
- Drop the cross-link for both external routers. All external hosts should be reachable.
- Bring down quagga external router-1. Hosts that are behind router-2 should still be reachable. Hosts that are behind router-1 should not be reachable.
- Bring router up again, all external hosts are reachable again.
- Repeat this with external router-2.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "External router failure without cross-link" )
setupTest( main, test_idx=663, onosNodes=3, static=True )
main.externalIpv4Hosts += main.staticIpv4Hosts
main.externalIpv6Hosts += main.staticIpv6Hosts
verify( main, disconnected=False )
# Drop the cross-link
portsToDisable = [ [ "of:0000000000000004", 13 ], [ "of:0000000000000005", 14 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
# Bring down/up external router-1
verifyRouterFailure( main, "r1", [ "rh5v4" ], [ "rh11v6", "rh5v6" ] )
# Bring down/up external router-2
verifyRouterFailure( main, "r2", [], [ "rh22v6" ] )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE664( self, main ):
"""
External router link failure without cross-link
- Drop the cross-link for both external routers. All external hosts should be reachable.
- Drop an extra link for external router-1. Only hosts connected to router-2 should be reachable.
- Bring up single link for external router-1. All external hosts should be reachable.
- Repeat the two steps above with external router-2
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "External router link failure without cross-link" )
setupTest( main, test_idx=664, onosNodes=3, static=True )
main.externalIpv4Hosts += main.staticIpv4Hosts
main.externalIpv6Hosts += main.staticIpv6Hosts
verify( main, disconnected=False )
# Drop the cross-link
portsToDisable = [ [ "of:0000000000000004", 13 ], [ "of:0000000000000005", 14 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
# Bring down/up a non-cross-link for external router-1
portsToDisable = [ [ "of:0000000000000005", 13 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
main.disconnectedExternalIpv4Hosts = [ 'rh5v4' ]
main.disconnectedExternalIpv6Hosts = [ "rh11v6", "rh5v6" ]
verify( main, internal=False )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
main.disconnectedExternalIpv4Hosts = []
main.disconnectedExternalIpv6Hosts = []
verify( main, disconnected=False, internal=False )
# Bring down/up a non-cross-link for external router-2
portsToDisable = [ [ "of:0000000000000004", 14 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
main.disconnectedExternalIpv6Hosts = [ "rh22v6" ]
verify( main, internal=False )
lib.enablePortBatch( main, portsToDisable, 10, 48 )
main.disconnectedExternalIpv6Hosts = []
verify( main, disconnected=False, internal=False )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )
def CASE665( self, main ):
"""
Internal router failure without cross-link
- Drop the cross-link for both external routers. All external hosts should be reachable.
- Bring down quagga internal router-1. Hosts that are behind router-2 should still be reachable. Hosts that are behind router-1 should not be reachable.
- Bring router up again, all external hosts are reachable again.
- Repeat this with internal router-2.
"""
from tests.USECASE.SegmentRouting.SRRouting.dependencies.SRRoutingTest import *
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
main.case( "Internal router failure without cross-link" )
setupTest( main, test_idx=665, onosNodes=3, static=True )
main.externalIpv4Hosts += main.staticIpv4Hosts
main.externalIpv6Hosts += main.staticIpv6Hosts
verify( main, disconnected=False )
# Drop the cross-link
portsToDisable = [ [ "of:0000000000000004", 13 ], [ "of:0000000000000005", 14 ] ]
lib.disablePortBatch( main, portsToDisable, 10, 48 )
verify( main, disconnected=False, internal=False )
# Bring down/up internal router-1
verifyRouterFailure( main, "bgp1", [], [ "rh22v6" ] )
# Bring down/up internal router-2
verifyRouterFailure( main, "bgp2", [ "rh5v4" ], [ "rh11v6", "rh5v6" ] )
lib.cleanup( main, copyKarafLog=False, removeHostComponent=True )