blob: 7b1855840d562a3cd09c8f4077487d2c82a29909 [file] [log] [blame]
pingping-lin8b306ac2014-11-17 18:13:51 -08001
pingping-linc6b86fa2014-12-01 16:18:10 -08002# Testing the basic functionality of SDN-IP
pingping-lin8b306ac2014-11-17 18:13:51 -08003class SdnIpTest:
kelvin-onlab8a832582015-01-16 17:06:11 -08004
5 def __init__( self ):
pingping-lin8b306ac2014-11-17 18:13:51 -08006 self.default = ''
pingping-lina600d9b2015-01-30 13:57:26 -08007 global git_branch
8
9 def CASE101( self, main ):
10 git_branch = main.params[ 'GIT' ][ 'branch1' ]
11 def CASE102( self, main ):
12 git_branch = main.params[ 'GIT' ][ 'branch2' ]
13 # Setup ONOS
14 def CASE100( self, main ):
15 import time
16 """
17 CASE100 is to compile ONOS and push it to the test machines
18 Startup sequence:
19 git pull
20 mvn clean install
21 onos-package
22 cell <name>
23 onos-verify-cell
24 onos-install -f
25 onos-wait-for-start
26 """
27 main.case( "Setting up test environment" )
pingping-lin8b306ac2014-11-17 18:13:51 -080028
pingping-lina600d9b2015-01-30 13:57:26 -080029 PULLCODE = False
30 #if main.params[ 'Git' ] == 'True':
31 # PULLCODE = True
32 cellName = main.params[ 'ENV' ][ 'cellName' ]
33 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
pingping-linc1c696e2015-01-27 13:46:44 -080034
pingping-lina600d9b2015-01-30 13:57:26 -080035 main.step( "Applying cell variable to environment" )
36 cellResult = main.ONOSbench.setCell( cellName )
37 verifyResult = main.ONOSbench.verifyCell()
38
39 main.log.report( "Uninstalling ONOS" )
40 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-linc1c696e2015-01-27 13:46:44 -080041
pingping-lina600d9b2015-01-30 13:57:26 -080042 cleanInstallResult = main.TRUE
43 gitPullResult = main.TRUE
44
45 main.step( "Git pull" )
46 #main.ONOSbench.gitCheckout( git_branch )
47 gitPullResult = main.ONOSbench.gitPull()
48
49 main.step( "Using mvn clean & install" )
50 cleanInstallResult = main.TRUE
51 if gitPullResult == main.TRUE:
52 cleanInstallResult = main.ONOSbench.cleanInstall()
53 else:
54 main.log.warn( "Did not pull new code so skipping mvn " +
55 "clean install" )
56 main.ONOSbench.getVersion( report=True )
57
58 cellResult = main.ONOSbench.setCell( cellName )
59 verifyResult = main.ONOSbench.verifyCell()
60 main.step( "Creating ONOS package" )
61 packageResult = main.ONOSbench.onosPackage()
62
63 main.step( "Installing ONOS package" )
64 onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
65 node=ONOS1Ip )
66
67 main.step( "Checking if ONOS is up yet" )
68 for i in range( 2 ):
69 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
70 if onos1Isup:
71 break
72 if not onos1Isup:
73 main.log.report( "ONOS1 didn't start!" )
74
75 cliResult = main.ONOScli.startOnosCli( ONOS1Ip )
76
77 case1Result = ( cleanInstallResult and packageResult and
78 cellResult and verifyResult and
79 onos1InstallResult and
80 onos1Isup and cliResult )
81
82 utilities.assert_equals( expect=main.TRUE, actual=case1Result,
83 onpass="Test startup successful",
84 onfail="Test startup NOT successful" )
85
86 if case1Result == main.FALSE:
87 main.cleanup()
88 main.exit()
pingping-linc1c696e2015-01-27 13:46:44 -080089
90 def CASE4( self, main ):
kelvin-onlab8a832582015-01-16 17:06:11 -080091 """
pingping-lin8b306ac2014-11-17 18:13:51 -080092 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -080093 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -080094 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
95 intents
pingping-linc1c696e2015-01-27 13:46:44 -080096 bgpIntentsExpected: expected PointToPointIntent intents
97 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -080098 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
99 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800100 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800101 """
pingping-lin8b306ac2014-11-17 18:13:51 -0800102 import time
103 import json
104 from operator import eq
pingping-linc6b86fa2014-12-01 16:18:10 -0800105 # from datetime import datetime
pingping-lin01355a62014-12-02 20:58:14 -0800106 from time import localtime, strftime
pingping-linc6b86fa2014-12-01 16:18:10 -0800107
pingping-lin79011132015-01-27 15:27:27 -0800108 main.case("The test case is to help to setup the TestON environment \
109 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800110 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800111 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800112 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-lin6f6332e2014-11-19 19:13:58 -0800113 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800114 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800115 main.step( "Start to generate routes for all BGP peers" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800116 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800117 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
118 main.log.info( prefixesHost3 )
pingping-lin36fbe802014-11-25 16:01:14 -0800119 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800120 for prefix in prefixesHost3:
121 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800122 routeIntentsExpectedHost3 = \
123 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
124 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
125 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800126
kelvin-onlab8a832582015-01-16 17:06:11 -0800127 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800128 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
129 main.log.info( prefixesHost4 )
pingping-lin36fbe802014-11-25 16:01:14 -0800130 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800131 for prefix in prefixesHost4:
132 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800133 routeIntentsExpectedHost4 = \
134 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
135 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
136 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800137
pingping-linc1c696e2015-01-27 13:46:44 -0800138 main.log.info( "Generate prefixes for host5" )
139 prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
140 main.log.info( prefixesHost5 )
141 for prefix in prefixesHost5:
142 allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
pingping-lin79011132015-01-27 15:27:27 -0800143 routeIntentsExpectedHost5 = \
144 main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
145 prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
146 SDNIPJSONFILEPATH )
pingping-lin8b306ac2014-11-17 18:13:51 -0800147
pingping-linc1c696e2015-01-27 13:46:44 -0800148 routeIntentsExpected = routeIntentsExpectedHost3 + \
149 routeIntentsExpectedHost4 + routeIntentsExpectedHost5
150
pingping-lina600d9b2015-01-30 13:57:26 -0800151 #####
152# cellName = main.params[ 'ENV' ][ 'cellName' ]
153# ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
154# main.step( "Set cell for ONOS-cli environment" )
155# main.ONOScli.setCell( cellName )
156# verifyResult = main.ONOSbench.verifyCell()
157#
158# main.log.report( "Removing raft logs" )
159# main.ONOSbench.onosRemoveRaftLogs()
160# main.log.report( "Uninstalling ONOS" )
161# main.ONOSbench.onosUninstall( ONOS1Ip )
162#
163# main.step( "Installing ONOS package" )
164# onos1InstallResult = main.ONOSbench.onosInstall(
165# options="-f", node=ONOS1Ip )
166#
167# main.step( "Checking if ONOS is up yet" )
168# time.sleep( 150 )
169# onos1Isup = main.ONOSbench.isup( ONOS1Ip )
170# if not onos1Isup:
171# main.log.report( "ONOS1 didn't start!" )
172#
173# main.step( "Start ONOS-cli" )
174#
175# main.ONOScli.startOnosCli( ONOS1Ip )
176 #####
177
kelvin-onlab8a832582015-01-16 17:06:11 -0800178 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800179 listResult = main.ONOScli.devices( jsonFormat=False )
180 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800181 time.sleep( 10 )
182 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800183 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800184 time.sleep( 10 )
185 main.step( "Login all BGP peers and add routes into peers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800186
kelvin-onlab8a832582015-01-16 17:06:11 -0800187 main.log.info( "Login Quagga CLI on host3" )
188 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
189 main.log.info( "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800190 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800191 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800192 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-linbc230942014-12-03 18:36:27 -0800193
kelvin-onlab8a832582015-01-16 17:06:11 -0800194 main.log.info( "Login Quagga CLI on host4" )
195 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
196 main.log.info( "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800197 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800198 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800199 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
200
201 main.log.info( "Login Quagga CLI on host5" )
202 main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
203 main.log.info( "Enter configuration model of Quagga CLI on host5" )
204 main.QuaggaCliHost5.enterConfig( 64521 )
205 main.log.info( "Add routes to Quagga on host5" )
206 main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
207
208 for i in range( 101, 201 ):
209 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
210 main.log.info( prefixesHostX )
211 for prefix in prefixesHostX:
pingping-lina600d9b2015-01-30 13:57:26 -0800212 allRoutesExpected.append( prefix + "/" + "192.168.40." + str( i - 100 ) )
pingping-linc1c696e2015-01-27 13:46:44 -0800213
pingping-lin79011132015-01-27 15:27:27 -0800214 routeIntentsExpectedHostX = \
215 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
216 prefixesHostX, "192.168.40." + str( i - 100 ),
217 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800218 routeIntentsExpected = routeIntentsExpected + \
219 routeIntentsExpectedHostX
220
221 main.log.info( "Login Quagga CLI on host" + str( i ) )
222 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
223 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
224 main.log.info(
225 "Enter configuration model of Quagga CLI on host" + str( i ) )
226 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
227 main.log.info( "Add routes to Quagga on host" + str( i ) )
228 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
229
kelvin-onlab8a832582015-01-16 17:06:11 -0800230 time.sleep( 60 )
pingping-lin8b306ac2014-11-17 18:13:51 -0800231
pingping-linc1c696e2015-01-27 13:46:44 -0800232 # get routes inside SDN-IP
233 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-linc6b86fa2014-12-01 16:18:10 -0800234
pingping-lin8b306ac2014-11-17 18:13:51 -0800235 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800236 allRoutesActual = \
237 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lina600d9b2015-01-30 13:57:26 -0800238
pingping-linc1c696e2015-01-27 13:46:44 -0800239 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
240 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800241 main.step( "Check routes installed" )
242 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800243 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800244 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800245 main.log.info( allRoutesStrActual )
246 utilities.assertEquals(
247 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800248 onpass="***Routes in SDN-IP are correct!***",
249 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800250 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800251 main.log.report(
252 "***Routes in SDN-IP after adding routes are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800253 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800254 main.log.report(
255 "***Routes in SDN-IP after adding routes are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800256
kelvin-onlab8a832582015-01-16 17:06:11 -0800257 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800258 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin6f6332e2014-11-19 19:13:58 -0800259
kelvin-onlab8a832582015-01-16 17:06:11 -0800260 main.step( "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800261 # routeIntentsExpected are generated when generating routes
pingping-lin6f6332e2014-11-19 19:13:58 -0800262 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800263 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800264 main.QuaggaCliHost3.extractActualRouteIntents(
265 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800266 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
267 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800268 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800269 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800270 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800271 main.log.info( routeIntentsStrActual )
272 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800273 expect=True,
274 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
275 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
276 correct!***",
277 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
278 wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800279
pingping-linc1c696e2015-01-27 13:46:44 -0800280 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800281 main.log.report( "***MultiPointToSinglePoint Intents before \
282 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800283 else:
pingping-lin79011132015-01-27 15:27:27 -0800284 main.log.report( "***MultiPointToSinglePoint Intents before \
285 deleting routes wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800286
kelvin-onlab8a832582015-01-16 17:06:11 -0800287 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800288 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800289 bgpIntentsExpected = \
290 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800291 # get BGP intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800292 bgpIntentsActual = \
293 main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
pingping-lin3228e132014-11-20 17:49:02 -0800294
pingping-linc1c696e2015-01-27 13:46:44 -0800295 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
296 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800297 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800298 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800299 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800300 main.log.info( bgpIntentsStrActual )
pingping-lin3228e132014-11-20 17:49:02 -0800301
pingping-linc1c696e2015-01-27 13:46:44 -0800302 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800303 expect=True,
304 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
305 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
306 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800307
pingping-linc1c696e2015-01-27 13:46:44 -0800308 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800309 main.log.report(
310 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800311 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800312 main.log.report(
313 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800314
pingping-linc6b86fa2014-12-01 16:18:10 -0800315 #============================= Ping Test ========================
316 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -0800317 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800318 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800319 pingTestResultsFile = \
320 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-" \
321 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800322 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800323 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800324 main.log.info( pingTestResults )
325 time.sleep( 20 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800326
327 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -0800328 main.step( "Check deleting routes installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800329 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
330 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
331 main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800332
pingping-linc1c696e2015-01-27 13:46:44 -0800333 for i in range( 101, 201 ):
334 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
335 main.log.info( prefixesHostX )
336 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
337 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
338
339 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800340 allRoutesActual = \
341 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800342 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -0800343 main.log.info( allRoutesActual )
pingping-linc6b86fa2014-12-01 16:18:10 -0800344
pingping-lin79011132015-01-27 15:27:27 -0800345 utilities.assertEquals(
346 expect="[]", actual=str( allRoutesActual ),
347 onpass="***Route number in SDN-IP is 0, correct!***",
348 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800349
pingping-linc1c696e2015-01-27 13:46:44 -0800350 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800351 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800352 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800353 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800354
kelvin-onlab8a832582015-01-16 17:06:11 -0800355 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -0800356 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800357 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800358 main.QuaggaCliHost3.extractActualRouteIntents(
359 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800360 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -0800361 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800362 utilities.assertEquals(
363 expect="[]", actual=str( routeIntentsActual ),
364 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
365 correct!***",
366 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
367 wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800368
pingping-linc1c696e2015-01-27 13:46:44 -0800369 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800370 main.log.report( "***MultiPointToSinglePoint Intents after \
371 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800372 else:
pingping-lin79011132015-01-27 15:27:27 -0800373 main.log.report( "***MultiPointToSinglePoint Intents after \
374 deleting routes wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800375
kelvin-onlab8a832582015-01-16 17:06:11 -0800376 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800377 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800378 pingTestResultsFile = \
379 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-" \
380 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800381 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800382 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800383 main.log.info( pingTestResults )
384 time.sleep( 100 )
385
386 # main.step( "Test whether Mininet is started" )
387 # main.Mininet2.handle.sendline( "xterm host1" )
388 # main.Mininet2.handle.expect( "mininet>" )
389
390 def CASE3( self, main ):
391 """
392 Test the SDN-IP functionality
393 allRoutesExpected: all expected routes for all BGP peers
394 routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
395 bgpIntentsExpected: expected PointToPointIntent intents
396 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800397 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
398 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800399 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
400 """
401 import time
402 import json
403 from operator import eq
404 # from datetime import datetime
405 from time import localtime, strftime
406
pingping-lin00e4f7f2015-01-27 16:30:06 -0800407 main.case( "The test case is to help to setup the TestON \
408 environment and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800409 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800410 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800411 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-linc1c696e2015-01-27 13:46:44 -0800412 # all expected routes for all BGP peers
413 allRoutesExpected = []
414 main.step( "Start to generate routes for all BGP peers" )
415 main.log.info( "Generate prefixes for host3" )
416 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
417 main.log.info( prefixesHost3 )
418 # generate route with next hop
419 for prefix in prefixesHost3:
420 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800421 routeIntentsExpectedHost3 = \
422 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
423 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
424 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800425
426 main.log.info( "Generate prefixes for host4" )
427 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
428 main.log.info( prefixesHost4 )
429 # generate route with next hop
430 for prefix in prefixesHost4:
431 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800432 routeIntentsExpectedHost4 = \
433 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
434 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
435 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800436
437 routeIntentsExpected = routeIntentsExpectedHost3 + \
438 routeIntentsExpectedHost4
439
pingping-linc1c696e2015-01-27 13:46:44 -0800440 cellName = main.params[ 'ENV' ][ 'cellName' ]
441 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
442 main.step( "Set cell for ONOS-cli environment" )
443 main.ONOScli.setCell( cellName )
444 verifyResult = main.ONOSbench.verifyCell()
445
446 main.log.report( "Removing raft logs" )
447 main.ONOSbench.onosRemoveRaftLogs()
448 main.log.report( "Uninstalling ONOS" )
449 main.ONOSbench.onosUninstall( ONOS1Ip )
450
451 main.step( "Installing ONOS package" )
452 onos1InstallResult = main.ONOSbench.onosInstall(
453 options="-f", node=ONOS1Ip )
454
455 main.step( "Checking if ONOS is up yet" )
456 time.sleep( 60 )
457 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
458 if not onos1Isup:
459 main.log.report( "ONOS1 didn't start!" )
460
461 main.step( "Start ONOS-cli" )
462
463 main.ONOScli.startOnosCli( ONOS1Ip )
464
465 main.step( "Get devices in the network" )
466 listResult = main.ONOScli.devices( jsonFormat=False )
467 main.log.info( listResult )
468 time.sleep( 10 )
469 main.log.info( "Installing sdn-ip feature" )
470 main.ONOScli.featureInstall( "onos-app-sdnip" )
471 time.sleep( 10 )
472 main.step( "Login all BGP peers and add routes into peers" )
473
474 main.log.info( "Login Quagga CLI on host3" )
475 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
476 main.log.info( "Enter configuration model of Quagga CLI on host3" )
477 main.QuaggaCliHost3.enterConfig( 64514 )
478 main.log.info( "Add routes to Quagga on host3" )
479 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
480
481 main.log.info( "Login Quagga CLI on host4" )
482 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
483 main.log.info( "Enter configuration model of Quagga CLI on host4" )
484 main.QuaggaCliHost4.enterConfig( 64516 )
485 main.log.info( "Add routes to Quagga on host4" )
486 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
487
488 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800489 prefixesHostX = \
490 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800491 main.log.info( prefixesHostX )
492 for prefix in prefixesHostX:
493 allRoutesExpected.append(
494 prefix + "/" + "192.168.40." + str( i - 100 ) )
495
pingping-lin79011132015-01-27 15:27:27 -0800496 routeIntentsExpectedHostX = \
497 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
498 prefixesHostX, "192.168.40." + str( i - 100 ),
499 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800500 routeIntentsExpected = routeIntentsExpected + \
501 routeIntentsExpectedHostX
502
503 main.log.info( "Login Quagga CLI on host" + str( i ) )
504 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
505 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
506 main.log.info(
507 "Enter configuration model of Quagga CLI on host" + str( i ) )
508 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
509 main.log.info( "Add routes to Quagga on host" + str( i ) )
510 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
511
512 time.sleep( 60 )
513
514 # get routes inside SDN-IP
515 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
516
517 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800518 allRoutesActual = \
519 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800520
521 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
522 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
523 main.step( "Check routes installed" )
524 main.log.info( "Routes expected:" )
525 main.log.info( allRoutesStrExpected )
526 main.log.info( "Routes get from ONOS CLI:" )
527 main.log.info( allRoutesStrActual )
528 utilities.assertEquals(
529 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800530 onpass="***Routes in SDN-IP are correct!***",
531 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800532 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
533 main.log.report(
534 "***Routes in SDN-IP after adding routes are correct!***" )
535 else:
536 main.log.report(
537 "***Routes in SDN-IP after adding routes are wrong!***" )
538
539 time.sleep( 20 )
540 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
541
542 main.step( "Check MultiPointToSinglePointIntent intents installed" )
543 # routeIntentsExpected are generated when generating routes
544 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800545 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800546 main.QuaggaCliHost3.extractActualRouteIntents(
547 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800548 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
549 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
550 main.log.info( "MultiPointToSinglePoint intents expected:" )
551 main.log.info( routeIntentsStrExpected )
552 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
553 main.log.info( routeIntentsStrActual )
554 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800555 expect=True,
556 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
557 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
558 correct!***",
559 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
560 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800561
562 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
563 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800564 "***MultiPointToSinglePoint Intents before deleting routes \
565 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800566 else:
567 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800568 "***MultiPointToSinglePoint Intents before deleting routes \
569 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800570
571 main.step( "Check BGP PointToPointIntent intents installed" )
572 # bgp intents expected
573 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
574 SDNIPJSONFILEPATH )
575 # get BGP intents from ONOS CLI
576 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
577 getIntentsResult )
578
579 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
580 bgpIntentsStrActual = str( bgpIntentsActual )
581 main.log.info( "PointToPointIntent intents expected:" )
582 main.log.info( bgpIntentsStrExpected )
583 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
584 main.log.info( bgpIntentsStrActual )
585
586 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800587 expect=True,
588 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
589 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
590 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800591
592 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
593 main.log.report(
594 "***PointToPointIntent Intents in SDN-IP are correct!***" )
595 else:
596 main.log.report(
597 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
598
599 #============================= Ping Test ========================
600 # wait until all MultiPointToSinglePoint
601 time.sleep( 20 )
602 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800603 pingTestResultsFile = \
604 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
605 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800606 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800607 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800608 main.log.info( pingTestResults )
609 time.sleep( 20 )
610
611 #============================= Deleting Routes ==================
612 main.step( "Check deleting routes installed" )
613 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
614 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
615 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800616 prefixesHostX = \
617 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800618 main.log.info( prefixesHostX )
619 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
620 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
621
622 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
623 allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
624 getRoutesResult )
625 main.log.info( "allRoutes_actual = " )
626 main.log.info( allRoutesActual )
627
pingping-lin79011132015-01-27 15:27:27 -0800628 utilities.assertEquals(
629 expect="[]", actual=str( allRoutesActual ),
630 onpass="***Route number in SDN-IP is 0, correct!***",
631 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800632
633 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800634 main.log.report(
635 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800636 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800637 main.log.report(
638 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800639
640 main.step( "Check intents after deleting routes" )
641 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800642 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800643 main.QuaggaCliHost3.extractActualRouteIntents(
644 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800645 main.log.info( "main.ONOScli.intents()= " )
646 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800647 utilities.assertEquals(
648 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800649 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
650 0, correct!***",
651 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
652 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800653
654 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
655 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800656 "***MultiPointToSinglePoint Intents after deleting routes \
657 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800658 else:
659 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800660 "***MultiPointToSinglePoint Intents after deleting routes \
661 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800662
663 time.sleep( 20 )
664 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800665 pingTestResultsFile = \
666 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
667 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800668 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800669 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800670 main.log.info( pingTestResults )
671 time.sleep( 100 )
672
673 # main.step( "Test whether Mininet is started" )
674 # main.Mininet2.handle.sendline( "xterm host1" )
675 # main.Mininet2.handle.expect( "mininet>" )
676
677 def CASE1( self, main ):
678 """
679 Test the SDN-IP functionality
680 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800681 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
682 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800683 bgpIntentsExpected: expected PointToPointIntent intents
684 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800685 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
686 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800687 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
688 """
689 import time
690 import json
691 from operator import eq
692 # from datetime import datetime
693 from time import localtime, strftime
694
pingping-lin79011132015-01-27 15:27:27 -0800695 main.case("The test case is to help to setup the TestON environment \
696 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800697 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
698 # all expected routes for all BGP peers
699 allRoutesExpected = []
700 main.step( "Start to generate routes for all BGP peers" )
701 # bgpPeerHosts = []
702 # for i in range( 3, 5 ):
703 # bgpPeerHosts.append( "host" + str( i ) )
704 # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
705
706 # for i in range( 3, 5 ):
707 # QuaggaCliHost = "QuaggaCliHost" + str( i )
708 # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
709
710 # main.log.info( prefixes )
711 # allRoutesExpected.append( prefixes )
712 main.log.info( "Generate prefixes for host3" )
713 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
714 main.log.info( prefixesHost3 )
715 # generate route with next hop
716 for prefix in prefixesHost3:
717 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800718 routeIntentsExpectedHost3 = \
719 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
720 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
721 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800722
723 main.log.info( "Generate prefixes for host4" )
724 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
725 main.log.info( prefixesHost4 )
726 # generate route with next hop
727 for prefix in prefixesHost4:
728 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800729 routeIntentsExpectedHost4 = \
730 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
731 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
732 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800733
734 routeIntentsExpected = routeIntentsExpectedHost3 + \
735 routeIntentsExpectedHost4
736
737 cellName = main.params[ 'ENV' ][ 'cellName' ]
738 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
739 main.step( "Set cell for ONOS-cli environment" )
740 main.ONOScli.setCell( cellName )
741 verifyResult = main.ONOSbench.verifyCell()
742 main.log.report( "Removing raft logs" )
743 main.ONOSbench.onosRemoveRaftLogs()
744 main.log.report( "Uninstalling ONOS" )
745 main.ONOSbench.onosUninstall( ONOS1Ip )
746 main.step( "Creating ONOS package" )
747 packageResult = main.ONOSbench.onosPackage()
748
749 main.step( "Starting ONOS service" )
750 # TODO: start ONOS from Mininet Script
751 # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
752 main.step( "Installing ONOS package" )
753 onos1InstallResult = main.ONOSbench.onosInstall(
754 options="-f", node=ONOS1Ip )
755
756 main.step( "Checking if ONOS is up yet" )
757 time.sleep( 60 )
758 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
759 if not onos1Isup:
760 main.log.report( "ONOS1 didn't start!" )
761
762 main.step( "Start ONOS-cli" )
763 # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
764
765 main.ONOScli.startOnosCli( ONOS1Ip )
766
767 main.step( "Get devices in the network" )
768 listResult = main.ONOScli.devices( jsonFormat=False )
769 main.log.info( listResult )
770 time.sleep( 10 )
771 main.log.info( "Installing sdn-ip feature" )
772 main.ONOScli.featureInstall( "onos-app-sdnip" )
773 time.sleep( 10 )
774 main.step( "Login all BGP peers and add routes into peers" )
775 main.log.info( "Login Quagga CLI on host3" )
776 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
777 main.log.info( "Enter configuration model of Quagga CLI on host3" )
778 main.QuaggaCliHost3.enterConfig( 64514 )
779 main.log.info( "Add routes to Quagga on host3" )
780 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
781
782 main.log.info( "Login Quagga CLI on host4" )
783 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
784 main.log.info( "Enter configuration model of Quagga CLI on host4" )
785 main.QuaggaCliHost4.enterConfig( 64516 )
786 main.log.info( "Add routes to Quagga on host4" )
787 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
788 time.sleep( 60 )
789
790 # get all routes inside SDN-IP
791 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
792
793 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800794 allRoutesActual = \
795 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800796
797 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
798 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
799 main.step( "Check routes installed" )
800 main.log.info( "Routes expected:" )
801 main.log.info( allRoutesStrExpected )
802 main.log.info( "Routes get from ONOS CLI:" )
803 main.log.info( allRoutesStrActual )
804 utilities.assertEquals(
805 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800806 onpass="***Routes in SDN-IP are correct!***",
807 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800808 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
809 main.log.report(
810 "***Routes in SDN-IP after adding routes are correct!***" )
811 else:
812 main.log.report(
813 "***Routes in SDN-IP after adding routes are wrong!***" )
814
815 time.sleep( 20 )
816 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
817
818 main.step( "Check MultiPointToSinglePointIntent intents installed" )
819 # routeIntentsExpected are generated when generating routes
820 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800821 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800822 main.QuaggaCliHost3.extractActualRouteIntents(
823 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800824 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
825 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
826 main.log.info( "MultiPointToSinglePoint intents expected:" )
827 main.log.info( routeIntentsStrExpected )
828 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
829 main.log.info( routeIntentsStrActual )
830 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800831 expect=True,
832 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
833 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
834 correct!***",
835 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
836 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800837
838 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
839 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800840 "***MultiPointToSinglePoint Intents before deleting routes \
841 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800842 else:
843 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800844 "***MultiPointToSinglePoint Intents before deleting routes \
845 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800846
847 main.step( "Check BGP PointToPointIntent intents installed" )
848 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800849 bgpIntentsExpected = \
850 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800851 # get BGP intents from ONOS CLI
852 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
853 getIntentsResult )
854
855 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
856 bgpIntentsStrActual = str( bgpIntentsActual )
857 main.log.info( "PointToPointIntent intents expected:" )
858 main.log.info( bgpIntentsStrExpected )
859 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
860 main.log.info( bgpIntentsStrActual )
861
862 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800863 expect=True,
864 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
865 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
866 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800867
868 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
869 main.log.report(
870 "***PointToPointIntent Intents in SDN-IP are correct!***" )
871 else:
872 main.log.report(
873 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
874
875 #============================= Ping Test ========================
876 # wait until all MultiPointToSinglePoint
877 time.sleep( 20 )
878 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800879 pingTestResultsFile = \
880 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
881 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800882 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800883 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800884 main.log.info( pingTestResults )
885
886 # ping test
887
888 #============================= Deleting Routes ==================
889 main.step( "Check deleting routes installed" )
890 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
891 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
892
893 # main.log.info( "main.ONOScli.get_routes_num() = " )
894 # main.log.info( main.ONOScli.getRoutesNum() )
895 # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
896 # main.ONOScli.getRoutesNum(),
897 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800898 allRoutesActual = \
899 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800900 main.log.info( "allRoutes_actual = " )
901 main.log.info( allRoutesActual )
902
pingping-lin79011132015-01-27 15:27:27 -0800903 utilities.assertEquals(
904 expect="[]", actual=str( allRoutesActual ),
905 onpass="***Route number in SDN-IP is 0, correct!***",
906 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800907
908 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800909 main.log.report(
910 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800911 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800912 main.log.report(
913 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800914
915 main.step( "Check intents after deleting routes" )
916 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800917 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800918 main.QuaggaCliHost3.extractActualRouteIntents(
919 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800920 main.log.info( "main.ONOScli.intents()= " )
921 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800922 utilities.assertEquals(
923 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800924 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
925 0, correct!***",
926 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
927 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800928
929 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
930 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800931 "***MultiPointToSinglePoint Intents after deleting routes \
932 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800933 else:
934 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800935 "***MultiPointToSinglePoint Intents after deleting routes \
936 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800937
938 time.sleep( 20 )
939 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800940 pingTestResultsFile = \
941 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
942 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800943 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800944 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800945 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -0800946 time.sleep( 30 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800947
kelvin-onlab8a832582015-01-16 17:06:11 -0800948 # main.step( "Test whether Mininet is started" )
949 # main.Mininet2.handle.sendline( "xterm host1" )
950 # main.Mininet2.handle.expect( "mininet>" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800951
kelvin-onlab8a832582015-01-16 17:06:11 -0800952 def CASE2( self, main ):
953 """
pingping-lin3d87a132014-12-04 14:22:49 -0800954 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -0800955 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800956 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
957 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800958 bgpIntentsExpected: expected PointToPointIntent intents
959 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800960 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
961 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800962 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800963 """
pingping-lin3d87a132014-12-04 14:22:49 -0800964 import time
965 import json
966 from operator import eq
967 from time import localtime, strftime
968
kelvin-onlab8a832582015-01-16 17:06:11 -0800969 main.case(
pingping-lin00e4f7f2015-01-27 16:30:06 -0800970 "The test case is to help to setup the TestON environment and \
971 test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800972 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin3d87a132014-12-04 14:22:49 -0800973 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800974 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800975 main.step( "Start to generate routes for all BGP peers" )
pingping-lin3d87a132014-12-04 14:22:49 -0800976
kelvin-onlab8a832582015-01-16 17:06:11 -0800977 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800978 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
979 main.log.info( prefixesHost3 )
pingping-lin3d87a132014-12-04 14:22:49 -0800980 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800981 for prefix in prefixesHost3:
982 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800983 routeIntentsExpectedHost3 = \
984 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
985 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
986 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800987
kelvin-onlab8a832582015-01-16 17:06:11 -0800988 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800989 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
990 main.log.info( prefixesHost4 )
pingping-lin3d87a132014-12-04 14:22:49 -0800991 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800992 for prefix in prefixesHost4:
993 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800994 routeIntentsExpectedHost4 = \
995 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
996 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
997 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800998
pingping-linc1c696e2015-01-27 13:46:44 -0800999 routeIntentsExpected = routeIntentsExpectedHost3 + \
1000 routeIntentsExpectedHost4
pingping-lin3d87a132014-12-04 14:22:49 -08001001
kelvin-onlab8a832582015-01-16 17:06:11 -08001002 main.log.report( "Removing raft logs" )
pingping-linc1c696e2015-01-27 13:46:44 -08001003 main.ONOSbench.onosRemoveRaftLogs()
kelvin-onlab8a832582015-01-16 17:06:11 -08001004 main.log.report( "Uninstalling ONOS" )
pingping-linc1c696e2015-01-27 13:46:44 -08001005 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -08001006
pingping-linc1c696e2015-01-27 13:46:44 -08001007 cellName = main.params[ 'ENV' ][ 'cellName' ]
1008 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -08001009 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -08001010 main.ONOScli.setCell( cellName )
1011 verifyResult = main.ONOSbench.verifyCell()
1012 # main.log.report( "Removing raft logs" )
1013 # main.ONOSbench.onosRemoveRaftLogs()
1014 # main.log.report( "Uninstalling ONOS" )
1015 # main.ONOSbench.onosUninstall( ONOS1Ip )
kelvin-onlab8a832582015-01-16 17:06:11 -08001016 main.step( "Creating ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -08001017 # packageResult = main.ONOSbench.onosPackage()
pingping-lin3d87a132014-12-04 14:22:49 -08001018
kelvin-onlab8a832582015-01-16 17:06:11 -08001019 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -08001020 # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
1021 # node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -08001022
kelvin-onlab8a832582015-01-16 17:06:11 -08001023 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -08001024 # time.sleep( 60 )
1025 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
1026 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -08001027 main.log.report( "ONOS1 didn't start!" )
pingping-lin3d87a132014-12-04 14:22:49 -08001028
kelvin-onlab8a832582015-01-16 17:06:11 -08001029 main.step( "Start ONOS-cli" )
pingping-linc1c696e2015-01-27 13:46:44 -08001030 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -08001031
kelvin-onlab8a832582015-01-16 17:06:11 -08001032 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -08001033 listResult = main.ONOScli.devices( jsonFormat=False )
1034 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001035 time.sleep( 10 )
1036 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -08001037 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001038 time.sleep( 10 )
pingping-lin3d87a132014-12-04 14:22:49 -08001039
kelvin-onlab8a832582015-01-16 17:06:11 -08001040 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin3d87a132014-12-04 14:22:49 -08001041 # bgp intents expected
pingping-linc1c696e2015-01-27 13:46:44 -08001042 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
1043 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -08001044 # get BGP intents from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -08001045 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
1046 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
1047 getIntentsResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001048
pingping-linc1c696e2015-01-27 13:46:44 -08001049 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
1050 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -08001051 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001052 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001053 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001054 main.log.info( bgpIntentsStrActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001055
pingping-linc1c696e2015-01-27 13:46:44 -08001056 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001057 expect=True,
1058 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
1059 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
1060 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001061
pingping-linc1c696e2015-01-27 13:46:44 -08001062 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001063 main.log.report(
1064 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001065 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001066 main.log.report(
1067 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001068
pingping-linc1c696e2015-01-27 13:46:44 -08001069 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1070 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1071 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
1072 # roundNum = 0;
kelvin-onlab8a832582015-01-16 17:06:11 -08001073 # while( True ):
pingping-linc1c696e2015-01-27 13:46:44 -08001074 for roundNum in range( 1, 6 ):
pingping-lin3d87a132014-12-04 14:22:49 -08001075 # round = round + 1;
pingping-linc1c696e2015-01-27 13:46:44 -08001076 main.log.report( "The Round " + str( roundNum ) +
pingping-lin00e4f7f2015-01-27 16:30:06 -08001077 " test starts................................" )
pingping-lin3d87a132014-12-04 14:22:49 -08001078
kelvin-onlab8a832582015-01-16 17:06:11 -08001079 main.step( "Login all BGP peers and add routes into peers" )
1080 main.log.info( "Login Quagga CLI on host3" )
1081 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001082 main.log.info(
1083 "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001084 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001085 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001086 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001087
kelvin-onlab8a832582015-01-16 17:06:11 -08001088 main.log.info( "Login Quagga CLI on host4" )
1089 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001090 main.log.info(
1091 "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001092 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001093 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001094 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001095 time.sleep( 60 )
pingping-lin3d87a132014-12-04 14:22:49 -08001096
1097 # get all routes inside SDN-IP
pingping-linc1c696e2015-01-27 13:46:44 -08001098 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001099
1100 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001101 allRoutesActual = \
1102 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001103
pingping-linc1c696e2015-01-27 13:46:44 -08001104 # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1105 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001106 main.step( "Check routes installed" )
1107 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001108 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001109 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001110 main.log.info( allRoutesStrActual )
1111 utilities.assertEquals(
1112 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -08001113 onpass="***Routes in SDN-IP are correct!***",
1114 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -08001115 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001116 main.log.report(
1117 "***Routes in SDN-IP after adding correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001118 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -08001119 main.log.report(
1120 "***Routes in SDN-IP after adding wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001121
kelvin-onlab8a832582015-01-16 17:06:11 -08001122 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001123 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001124
kelvin-onlab8a832582015-01-16 17:06:11 -08001125 main.step(
1126 "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -08001127 # routeIntentsExpected are generated when generating routes
pingping-lin3d87a132014-12-04 14:22:49 -08001128 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001129 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001130 main.QuaggaCliHost3.extractActualRouteIntents(
1131 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -08001132 # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1133 routeIntentsStrActual = str(
pingping-lin79011132015-01-27 15:27:27 -08001134 routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001135 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001136 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001137 main.log.info(
1138 "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001139 main.log.info( routeIntentsStrActual )
1140 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001141 expect=True,
1142 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
1143 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
1144 correct!***",
1145 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
1146 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001147
pingping-linc1c696e2015-01-27 13:46:44 -08001148 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001149 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001150 "***MultiPointToSinglePoint Intents after adding routes \
1151 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001152 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001153 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001154 "***MultiPointToSinglePoint Intents after adding routes \
1155 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001156
1157 #============================= Ping Test ========================
1158 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -08001159 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001160 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001161 pingTestResultsFile = \
1162 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001163 + str( roundNum ) + "-ping-results-before-delete-routes-" \
1164 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001165 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001166 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001167 main.log.info( pingTestResults )
pingping-lin3d87a132014-12-04 14:22:49 -08001168 # ping test
1169
1170 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -08001171 main.step( "Check deleting routes installed" )
1172 main.log.info( "Delete routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001173 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001174 main.log.info( "Delete routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001175 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001176
pingping-linc1c696e2015-01-27 13:46:44 -08001177 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001178 allRoutesActual = \
1179 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001180 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -08001181 main.log.info( allRoutesActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001182
pingping-lin79011132015-01-27 15:27:27 -08001183 utilities.assertEquals(
1184 expect="[]", actual=str( allRoutesActual ),
1185 onpass="***Route number in SDN-IP is 0, correct!***",
1186 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001187
pingping-linc1c696e2015-01-27 13:46:44 -08001188 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001189 main.log.report(
1190 "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001191 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001192 main.log.report(
1193 "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001194
kelvin-onlab8a832582015-01-16 17:06:11 -08001195 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -08001196 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001197 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001198 main.QuaggaCliHost3.extractActualRouteIntents(
1199 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001200 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -08001201 main.log.info( routeIntentsActual )
1202 utilities.assertEquals(
1203 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -08001204 onpass=
1205 "***MultiPointToSinglePoint Intents number in SDN-IP \
1206 is 0, correct!***",
1207 onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
1208 is 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001209
pingping-linc1c696e2015-01-27 13:46:44 -08001210 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001211 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001212 "***MultiPointToSinglePoint Intents after deleting \
1213 routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001214 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001215 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001216 "***MultiPointToSinglePoint Intents after deleting \
1217 routes wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001218
kelvin-onlab8a832582015-01-16 17:06:11 -08001219 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001220 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001221 pingTestResultsFile = \
1222 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001223 + str( roundNum ) + "-ping-results-after-delete-routes-" \
1224 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001225 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001226 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001227 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -08001228 time.sleep( 30 )
pingping-linc1c696e2015-01-27 13:46:44 -08001229