blob: b95bfe09e4c7d553bf83472e216c0152b055f882 [file] [log] [blame]
pingping-lin8b306ac2014-11-17 18:13:51 -08001
pingping-lin26521182015-01-30 14:52:39 -08002# Testing the functionality of SDN-IP with single ONOS instance
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-lin529dad22015-02-02 16:57:35 -08007 global branchName
pingping-lin7048cb02015-01-30 15:09:46 -08008
pingping-lin26521182015-01-30 14:52:39 -08009 # This case is to setup ONOS
pingping-lina600d9b2015-01-30 13:57:26 -080010 def CASE100( self, main ):
pingping-lina600d9b2015-01-30 13:57:26 -080011 """
12 CASE100 is to compile ONOS and push it to the test machines
13 Startup sequence:
14 git pull
15 mvn clean install
16 onos-package
17 cell <name>
18 onos-verify-cell
19 onos-install -f
20 onos-wait-for-start
21 """
pingping-linc8fcd0c2015-05-20 15:22:46 -070022 import time
pingping-lina600d9b2015-01-30 13:57:26 -080023 main.case( "Setting up test environment" )
pingping-lin8b306ac2014-11-17 18:13:51 -080024
pingping-lina600d9b2015-01-30 13:57:26 -080025 cellName = main.params[ 'ENV' ][ 'cellName' ]
26 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
pingping-linc1c696e2015-01-27 13:46:44 -080027
pingping-lina600d9b2015-01-30 13:57:26 -080028 main.step( "Applying cell variable to environment" )
29 cellResult = main.ONOSbench.setCell( cellName )
30 verifyResult = main.ONOSbench.verifyCell()
pingping-lin26521182015-01-30 14:52:39 -080031
pingping-lin529dad22015-02-02 16:57:35 -080032 branchName = main.ONOSbench.getBranchName()
33 main.log.info( "ONOS is on branch: " + branchName )
34
pingping-lina600d9b2015-01-30 13:57:26 -080035 main.log.report( "Uninstalling ONOS" )
36 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-linc1c696e2015-01-27 13:46:44 -080037
pingping-lina600d9b2015-01-30 13:57:26 -080038 cleanInstallResult = main.TRUE
39 gitPullResult = main.TRUE
pingping-lin26521182015-01-30 14:52:39 -080040
pingping-lina600d9b2015-01-30 13:57:26 -080041 main.step( "Git pull" )
pingping-lina600d9b2015-01-30 13:57:26 -080042 gitPullResult = main.ONOSbench.gitPull()
pingping-lin26521182015-01-30 14:52:39 -080043
pingping-lina600d9b2015-01-30 13:57:26 -080044 main.step( "Using mvn clean & install" )
45 cleanInstallResult = main.TRUE
pingping-lin529dad22015-02-02 16:57:35 -080046# if gitPullResult == main.TRUE:
47# cleanInstallResult = main.ONOSbench.cleanInstall()
48# else:
49# main.log.warn( "Did not pull new code so skipping mvn " +
50# "clean install" )
51 cleanInstallResult = main.ONOSbench.cleanInstall()
pingping-lina600d9b2015-01-30 13:57:26 -080052 main.ONOSbench.getVersion( report=True )
pingping-lin7048cb02015-01-30 15:09:46 -080053
pingping-lin26521182015-01-30 14:52:39 -080054 #cellResult = main.ONOSbench.setCell( cellName )
55 #verifyResult = main.ONOSbench.verifyCell()
pingping-lina600d9b2015-01-30 13:57:26 -080056 main.step( "Creating ONOS package" )
57 packageResult = main.ONOSbench.onosPackage()
pingping-lin7048cb02015-01-30 15:09:46 -080058
pingping-lina600d9b2015-01-30 13:57:26 -080059 main.step( "Installing ONOS package" )
60 onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
61 node=ONOS1Ip )
pingping-lin7048cb02015-01-30 15:09:46 -080062
pingping-lina600d9b2015-01-30 13:57:26 -080063 main.step( "Checking if ONOS is up yet" )
pingping-linc8fcd0c2015-05-20 15:22:46 -070064 #time.sleep( 300 )
pingping-lina600d9b2015-01-30 13:57:26 -080065 for i in range( 2 ):
66 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
67 if onos1Isup:
68 break
69 if not onos1Isup:
70 main.log.report( "ONOS1 didn't start!" )
pingping-lin7048cb02015-01-30 15:09:46 -080071
pingping-lina600d9b2015-01-30 13:57:26 -080072 cliResult = main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin7048cb02015-01-30 15:09:46 -080073
pingping-lina600d9b2015-01-30 13:57:26 -080074 case1Result = ( cleanInstallResult and packageResult and
75 cellResult and verifyResult and
76 onos1InstallResult and
77 onos1Isup and cliResult )
pingping-lin7048cb02015-01-30 15:09:46 -080078
pingping-lina600d9b2015-01-30 13:57:26 -080079 utilities.assert_equals( expect=main.TRUE, actual=case1Result,
pingping-lin26521182015-01-30 14:52:39 -080080 onpass="ONOS startup successful",
81 onfail="ONOS startup NOT successful" )
pingping-lin7048cb02015-01-30 15:09:46 -080082
pingping-lina600d9b2015-01-30 13:57:26 -080083 if case1Result == main.FALSE:
84 main.cleanup()
85 main.exit()
pingping-linc1c696e2015-01-27 13:46:44 -080086
87 def CASE4( self, main ):
kelvin-onlab8a832582015-01-16 17:06:11 -080088 """
pingping-lin8b306ac2014-11-17 18:13:51 -080089 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -080090 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -080091 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
92 intents
pingping-linc1c696e2015-01-27 13:46:44 -080093 bgpIntentsExpected: expected PointToPointIntent intents
94 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -080095 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
96 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -080097 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -080098 """
pingping-lin8b306ac2014-11-17 18:13:51 -080099 import time
100 import json
101 from operator import eq
pingping-lin01355a62014-12-02 20:58:14 -0800102 from time import localtime, strftime
pingping-linc6b86fa2014-12-01 16:18:10 -0800103
pingping-lin26521182015-01-30 14:52:39 -0800104 main.case("This case is to testing the functionality of SDN-IP with \
105 single ONOS instance" )
pingping-lin79011132015-01-27 15:27:27 -0800106 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800107 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-lin6f6332e2014-11-19 19:13:58 -0800108 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800109 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800110 main.step( "Start to generate routes for all BGP peers" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800111 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800112 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
113 main.log.info( prefixesHost3 )
pingping-lin36fbe802014-11-25 16:01:14 -0800114 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800115 for prefix in prefixesHost3:
116 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800117 routeIntentsExpectedHost3 = \
118 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
119 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
120 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800121
kelvin-onlab8a832582015-01-16 17:06:11 -0800122 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800123 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
124 main.log.info( prefixesHost4 )
pingping-lin36fbe802014-11-25 16:01:14 -0800125 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800126 for prefix in prefixesHost4:
127 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800128 routeIntentsExpectedHost4 = \
129 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
130 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
131 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800132
pingping-linc1c696e2015-01-27 13:46:44 -0800133 main.log.info( "Generate prefixes for host5" )
134 prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
135 main.log.info( prefixesHost5 )
136 for prefix in prefixesHost5:
137 allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
pingping-lin79011132015-01-27 15:27:27 -0800138 routeIntentsExpectedHost5 = \
139 main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
140 prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
141 SDNIPJSONFILEPATH )
pingping-lin8b306ac2014-11-17 18:13:51 -0800142
pingping-linc1c696e2015-01-27 13:46:44 -0800143 routeIntentsExpected = routeIntentsExpectedHost3 + \
144 routeIntentsExpectedHost4 + routeIntentsExpectedHost5
pingping-lin7048cb02015-01-30 15:09:46 -0800145
kelvin-onlab8a832582015-01-16 17:06:11 -0800146 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800147 listResult = main.ONOScli.devices( jsonFormat=False )
148 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800149 time.sleep( 10 )
150 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800151 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800152 time.sleep( 10 )
153 main.step( "Login all BGP peers and add routes into peers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800154
kelvin-onlab8a832582015-01-16 17:06:11 -0800155 main.log.info( "Login Quagga CLI on host3" )
156 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
157 main.log.info( "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800158 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800159 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800160 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-linbc230942014-12-03 18:36:27 -0800161
kelvin-onlab8a832582015-01-16 17:06:11 -0800162 main.log.info( "Login Quagga CLI on host4" )
163 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
164 main.log.info( "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800165 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800166 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800167 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
168
169 main.log.info( "Login Quagga CLI on host5" )
170 main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
171 main.log.info( "Enter configuration model of Quagga CLI on host5" )
172 main.QuaggaCliHost5.enterConfig( 64521 )
173 main.log.info( "Add routes to Quagga on host5" )
174 main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
175
176 for i in range( 101, 201 ):
177 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
178 main.log.info( prefixesHostX )
179 for prefix in prefixesHostX:
pingping-lin7048cb02015-01-30 15:09:46 -0800180 allRoutesExpected.append( prefix + "/" + "192.168.40."
181 + str( i - 100 ) )
pingping-linc1c696e2015-01-27 13:46:44 -0800182
pingping-lin79011132015-01-27 15:27:27 -0800183 routeIntentsExpectedHostX = \
184 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
185 prefixesHostX, "192.168.40." + str( i - 100 ),
186 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800187 routeIntentsExpected = routeIntentsExpected + \
188 routeIntentsExpectedHostX
189
190 main.log.info( "Login Quagga CLI on host" + str( i ) )
191 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
192 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
193 main.log.info(
194 "Enter configuration model of Quagga CLI on host" + str( i ) )
195 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
196 main.log.info( "Add routes to Quagga on host" + str( i ) )
197 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
198
kelvin-onlab8a832582015-01-16 17:06:11 -0800199 time.sleep( 60 )
pingping-linc1c696e2015-01-27 13:46:44 -0800200 # get routes inside SDN-IP
201 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-linc6b86fa2014-12-01 16:18:10 -0800202
pingping-lin8b306ac2014-11-17 18:13:51 -0800203 # parse routes from ONOS CLI
pingping-linc8fcd0c2015-05-20 15:22:46 -0700204 #if branchName == "master":
205 # allRoutesActual = \
206 # main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
207 #elif branchName == "onos-1.0":
208 # allRoutesActual = \
209 # main.QuaggaCliHost3.extractActualRoutesOneDotZero( getRoutesResult )
210 #else:
211 # main.log("ONOS is on wrong branch")
212 # exit
213
214 allRoutesActual = \
pingping-lin529dad22015-02-02 16:57:35 -0800215 main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
pingping-lin7048cb02015-01-30 15:09:46 -0800216
pingping-linc1c696e2015-01-27 13:46:44 -0800217 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
218 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800219 main.step( "Check routes installed" )
220 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800221 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800222 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800223 main.log.info( allRoutesStrActual )
224 utilities.assertEquals(
225 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800226 onpass="***Routes in SDN-IP are correct!***",
227 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800228 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800229 main.log.report(
230 "***Routes in SDN-IP after adding routes are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800231 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800232 main.log.report(
233 "***Routes in SDN-IP after adding routes are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800234
kelvin-onlab8a832582015-01-16 17:06:11 -0800235 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800236 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin6f6332e2014-11-19 19:13:58 -0800237
kelvin-onlab8a832582015-01-16 17:06:11 -0800238 main.step( "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800239 # routeIntentsExpected are generated when generating routes
pingping-lin26521182015-01-30 14:52:39 -0800240 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800241 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800242 main.QuaggaCliHost3.extractActualRouteIntents(
243 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800244 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
245 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800246 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800247 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800248 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800249 main.log.info( routeIntentsStrActual )
250 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800251 expect=True,
252 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
253 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
254 correct!***",
255 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
256 wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800257
pingping-linc1c696e2015-01-27 13:46:44 -0800258 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800259 main.log.report( "***MultiPointToSinglePoint Intents before \
260 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800261 else:
pingping-lin79011132015-01-27 15:27:27 -0800262 main.log.report( "***MultiPointToSinglePoint Intents before \
263 deleting routes wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800264
kelvin-onlab8a832582015-01-16 17:06:11 -0800265 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800266 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800267 bgpIntentsExpected = \
268 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800269 # get BGP intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800270 bgpIntentsActual = \
271 main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
pingping-lin3228e132014-11-20 17:49:02 -0800272
pingping-linc1c696e2015-01-27 13:46:44 -0800273 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
274 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800275 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800276 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800277 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800278 main.log.info( bgpIntentsStrActual )
pingping-lin3228e132014-11-20 17:49:02 -0800279
pingping-linc1c696e2015-01-27 13:46:44 -0800280 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800281 expect=True,
282 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
283 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
284 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800285
pingping-linc1c696e2015-01-27 13:46:44 -0800286 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800287 main.log.report(
288 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800289 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800290 main.log.report(
291 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800292
pingping-linc6b86fa2014-12-01 16:18:10 -0800293 #============================= Ping Test ========================
pingping-lin26521182015-01-30 14:52:39 -0800294 # Wait until all MultiPointToSinglePoint intents are in system
kelvin-onlab8a832582015-01-16 17:06:11 -0800295 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800296 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800297 pingTestResultsFile = \
298 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-" \
299 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800300 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800301 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800302 main.log.info( pingTestResults )
303 time.sleep( 20 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800304
305 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -0800306 main.step( "Check deleting routes installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800307 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
308 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
309 main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800310
pingping-linc1c696e2015-01-27 13:46:44 -0800311 for i in range( 101, 201 ):
312 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
313 main.log.info( prefixesHostX )
314 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
315 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
316
317 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800318 allRoutesActual = \
319 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800320 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -0800321 main.log.info( allRoutesActual )
pingping-linc6b86fa2014-12-01 16:18:10 -0800322
pingping-lin79011132015-01-27 15:27:27 -0800323 utilities.assertEquals(
324 expect="[]", actual=str( allRoutesActual ),
325 onpass="***Route number in SDN-IP is 0, correct!***",
326 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800327
pingping-linc1c696e2015-01-27 13:46:44 -0800328 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800329 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800330 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800331 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800332
kelvin-onlab8a832582015-01-16 17:06:11 -0800333 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -0800334 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800335 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800336 main.QuaggaCliHost3.extractActualRouteIntents(
337 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800338 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -0800339 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800340 utilities.assertEquals(
341 expect="[]", actual=str( routeIntentsActual ),
342 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
343 correct!***",
344 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
345 wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800346
pingping-linc1c696e2015-01-27 13:46:44 -0800347 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800348 main.log.report( "***MultiPointToSinglePoint Intents after \
349 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800350 else:
pingping-lin79011132015-01-27 15:27:27 -0800351 main.log.report( "***MultiPointToSinglePoint Intents after \
352 deleting routes wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800353
kelvin-onlab8a832582015-01-16 17:06:11 -0800354 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800355 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800356 pingTestResultsFile = \
pingping-lin26521182015-01-30 14:52:39 -0800357 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-"\
pingping-lin79011132015-01-27 15:27:27 -0800358 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800359 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800360 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800361 main.log.info( pingTestResults )
362 time.sleep( 100 )
363
pingping-linc1c696e2015-01-27 13:46:44 -0800364 def CASE3( self, main ):
365 """
366 Test the SDN-IP functionality
367 allRoutesExpected: all expected routes for all BGP peers
pingping-lin26521182015-01-30 14:52:39 -0800368 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
369 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800370 bgpIntentsExpected: expected PointToPointIntent intents
371 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800372 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
373 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800374 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
375 """
376 import time
377 import json
378 from operator import eq
379 # from datetime import datetime
380 from time import localtime, strftime
381
pingping-lin00e4f7f2015-01-27 16:30:06 -0800382 main.case( "The test case is to help to setup the TestON \
383 environment and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800384 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800385 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800386 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-linc1c696e2015-01-27 13:46:44 -0800387 # all expected routes for all BGP peers
388 allRoutesExpected = []
389 main.step( "Start to generate routes for all BGP peers" )
390 main.log.info( "Generate prefixes for host3" )
391 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
392 main.log.info( prefixesHost3 )
393 # generate route with next hop
394 for prefix in prefixesHost3:
395 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800396 routeIntentsExpectedHost3 = \
397 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
398 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
399 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800400
401 main.log.info( "Generate prefixes for host4" )
402 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
403 main.log.info( prefixesHost4 )
404 # generate route with next hop
405 for prefix in prefixesHost4:
406 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800407 routeIntentsExpectedHost4 = \
408 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
409 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
410 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800411
412 routeIntentsExpected = routeIntentsExpectedHost3 + \
413 routeIntentsExpectedHost4
414
pingping-linc1c696e2015-01-27 13:46:44 -0800415 cellName = main.params[ 'ENV' ][ 'cellName' ]
416 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
417 main.step( "Set cell for ONOS-cli environment" )
418 main.ONOScli.setCell( cellName )
419 verifyResult = main.ONOSbench.verifyCell()
420
421 main.log.report( "Removing raft logs" )
422 main.ONOSbench.onosRemoveRaftLogs()
423 main.log.report( "Uninstalling ONOS" )
424 main.ONOSbench.onosUninstall( ONOS1Ip )
425
426 main.step( "Installing ONOS package" )
427 onos1InstallResult = main.ONOSbench.onosInstall(
428 options="-f", node=ONOS1Ip )
429
430 main.step( "Checking if ONOS is up yet" )
431 time.sleep( 60 )
432 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
433 if not onos1Isup:
434 main.log.report( "ONOS1 didn't start!" )
435
436 main.step( "Start ONOS-cli" )
437
438 main.ONOScli.startOnosCli( ONOS1Ip )
439
440 main.step( "Get devices in the network" )
441 listResult = main.ONOScli.devices( jsonFormat=False )
442 main.log.info( listResult )
443 time.sleep( 10 )
444 main.log.info( "Installing sdn-ip feature" )
445 main.ONOScli.featureInstall( "onos-app-sdnip" )
446 time.sleep( 10 )
447 main.step( "Login all BGP peers and add routes into peers" )
448
449 main.log.info( "Login Quagga CLI on host3" )
450 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
451 main.log.info( "Enter configuration model of Quagga CLI on host3" )
452 main.QuaggaCliHost3.enterConfig( 64514 )
453 main.log.info( "Add routes to Quagga on host3" )
454 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
455
456 main.log.info( "Login Quagga CLI on host4" )
457 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
458 main.log.info( "Enter configuration model of Quagga CLI on host4" )
459 main.QuaggaCliHost4.enterConfig( 64516 )
460 main.log.info( "Add routes to Quagga on host4" )
461 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
462
463 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800464 prefixesHostX = \
465 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800466 main.log.info( prefixesHostX )
467 for prefix in prefixesHostX:
468 allRoutesExpected.append(
469 prefix + "/" + "192.168.40." + str( i - 100 ) )
470
pingping-lin79011132015-01-27 15:27:27 -0800471 routeIntentsExpectedHostX = \
472 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
473 prefixesHostX, "192.168.40." + str( i - 100 ),
474 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800475 routeIntentsExpected = routeIntentsExpected + \
476 routeIntentsExpectedHostX
477
478 main.log.info( "Login Quagga CLI on host" + str( i ) )
479 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
480 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
481 main.log.info(
482 "Enter configuration model of Quagga CLI on host" + str( i ) )
483 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
484 main.log.info( "Add routes to Quagga on host" + str( i ) )
485 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
486
487 time.sleep( 60 )
488
489 # get routes inside SDN-IP
490 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
491
492 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800493 allRoutesActual = \
494 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800495
496 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
497 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
498 main.step( "Check routes installed" )
499 main.log.info( "Routes expected:" )
500 main.log.info( allRoutesStrExpected )
501 main.log.info( "Routes get from ONOS CLI:" )
502 main.log.info( allRoutesStrActual )
503 utilities.assertEquals(
504 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800505 onpass="***Routes in SDN-IP are correct!***",
506 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800507 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
508 main.log.report(
509 "***Routes in SDN-IP after adding routes are correct!***" )
510 else:
511 main.log.report(
512 "***Routes in SDN-IP after adding routes are wrong!***" )
513
514 time.sleep( 20 )
515 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
516
517 main.step( "Check MultiPointToSinglePointIntent intents installed" )
518 # routeIntentsExpected are generated when generating routes
519 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800520 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800521 main.QuaggaCliHost3.extractActualRouteIntents(
522 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800523 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
524 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
525 main.log.info( "MultiPointToSinglePoint intents expected:" )
526 main.log.info( routeIntentsStrExpected )
527 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
528 main.log.info( routeIntentsStrActual )
529 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800530 expect=True,
531 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
532 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
533 correct!***",
534 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
535 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800536
537 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
538 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800539 "***MultiPointToSinglePoint Intents before deleting routes \
540 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800541 else:
542 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800543 "***MultiPointToSinglePoint Intents before deleting routes \
544 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800545
546 main.step( "Check BGP PointToPointIntent intents installed" )
547 # bgp intents expected
548 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
549 SDNIPJSONFILEPATH )
550 # get BGP intents from ONOS CLI
551 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
552 getIntentsResult )
553
554 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
555 bgpIntentsStrActual = str( bgpIntentsActual )
556 main.log.info( "PointToPointIntent intents expected:" )
557 main.log.info( bgpIntentsStrExpected )
558 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
559 main.log.info( bgpIntentsStrActual )
560
561 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800562 expect=True,
563 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
564 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
565 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800566
567 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
568 main.log.report(
569 "***PointToPointIntent Intents in SDN-IP are correct!***" )
570 else:
571 main.log.report(
572 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
573
574 #============================= Ping Test ========================
575 # wait until all MultiPointToSinglePoint
576 time.sleep( 20 )
577 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800578 pingTestResultsFile = \
579 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
580 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800581 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800582 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800583 main.log.info( pingTestResults )
584 time.sleep( 20 )
585
586 #============================= Deleting Routes ==================
587 main.step( "Check deleting routes installed" )
588 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
589 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
590 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800591 prefixesHostX = \
592 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800593 main.log.info( prefixesHostX )
594 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
595 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
596
597 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
598 allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
599 getRoutesResult )
600 main.log.info( "allRoutes_actual = " )
601 main.log.info( allRoutesActual )
602
pingping-lin79011132015-01-27 15:27:27 -0800603 utilities.assertEquals(
604 expect="[]", actual=str( allRoutesActual ),
605 onpass="***Route number in SDN-IP is 0, correct!***",
606 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800607
608 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800609 main.log.report(
610 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800611 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800612 main.log.report(
613 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800614
615 main.step( "Check intents after deleting routes" )
616 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800617 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800618 main.QuaggaCliHost3.extractActualRouteIntents(
619 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800620 main.log.info( "main.ONOScli.intents()= " )
621 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800622 utilities.assertEquals(
623 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800624 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
625 0, correct!***",
626 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
627 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800628
629 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
630 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800631 "***MultiPointToSinglePoint Intents after deleting routes \
632 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800633 else:
634 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800635 "***MultiPointToSinglePoint Intents after deleting routes \
636 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800637
638 time.sleep( 20 )
639 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800640 pingTestResultsFile = \
641 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
642 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800643 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800644 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800645 main.log.info( pingTestResults )
646 time.sleep( 100 )
647
648 # main.step( "Test whether Mininet is started" )
649 # main.Mininet2.handle.sendline( "xterm host1" )
650 # main.Mininet2.handle.expect( "mininet>" )
651
652 def CASE1( self, main ):
653 """
654 Test the SDN-IP functionality
655 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800656 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
657 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800658 bgpIntentsExpected: expected PointToPointIntent intents
659 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800660 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
661 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800662 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
663 """
664 import time
665 import json
666 from operator import eq
667 # from datetime import datetime
668 from time import localtime, strftime
669
pingping-lin79011132015-01-27 15:27:27 -0800670 main.case("The test case is to help to setup the TestON environment \
671 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800672 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
673 # all expected routes for all BGP peers
674 allRoutesExpected = []
675 main.step( "Start to generate routes for all BGP peers" )
676 # bgpPeerHosts = []
677 # for i in range( 3, 5 ):
678 # bgpPeerHosts.append( "host" + str( i ) )
679 # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
680
681 # for i in range( 3, 5 ):
682 # QuaggaCliHost = "QuaggaCliHost" + str( i )
683 # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
684
685 # main.log.info( prefixes )
686 # allRoutesExpected.append( prefixes )
687 main.log.info( "Generate prefixes for host3" )
688 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
689 main.log.info( prefixesHost3 )
690 # generate route with next hop
691 for prefix in prefixesHost3:
692 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800693 routeIntentsExpectedHost3 = \
694 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
695 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
696 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800697
698 main.log.info( "Generate prefixes for host4" )
699 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
700 main.log.info( prefixesHost4 )
701 # generate route with next hop
702 for prefix in prefixesHost4:
703 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800704 routeIntentsExpectedHost4 = \
705 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
706 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
707 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800708
709 routeIntentsExpected = routeIntentsExpectedHost3 + \
710 routeIntentsExpectedHost4
711
712 cellName = main.params[ 'ENV' ][ 'cellName' ]
713 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
714 main.step( "Set cell for ONOS-cli environment" )
715 main.ONOScli.setCell( cellName )
716 verifyResult = main.ONOSbench.verifyCell()
717 main.log.report( "Removing raft logs" )
718 main.ONOSbench.onosRemoveRaftLogs()
719 main.log.report( "Uninstalling ONOS" )
720 main.ONOSbench.onosUninstall( ONOS1Ip )
721 main.step( "Creating ONOS package" )
722 packageResult = main.ONOSbench.onosPackage()
723
724 main.step( "Starting ONOS service" )
725 # TODO: start ONOS from Mininet Script
726 # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
727 main.step( "Installing ONOS package" )
728 onos1InstallResult = main.ONOSbench.onosInstall(
729 options="-f", node=ONOS1Ip )
730
731 main.step( "Checking if ONOS is up yet" )
732 time.sleep( 60 )
733 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
734 if not onos1Isup:
735 main.log.report( "ONOS1 didn't start!" )
736
737 main.step( "Start ONOS-cli" )
738 # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
739
740 main.ONOScli.startOnosCli( ONOS1Ip )
741
742 main.step( "Get devices in the network" )
743 listResult = main.ONOScli.devices( jsonFormat=False )
744 main.log.info( listResult )
745 time.sleep( 10 )
746 main.log.info( "Installing sdn-ip feature" )
747 main.ONOScli.featureInstall( "onos-app-sdnip" )
748 time.sleep( 10 )
749 main.step( "Login all BGP peers and add routes into peers" )
750 main.log.info( "Login Quagga CLI on host3" )
751 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
752 main.log.info( "Enter configuration model of Quagga CLI on host3" )
753 main.QuaggaCliHost3.enterConfig( 64514 )
754 main.log.info( "Add routes to Quagga on host3" )
755 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
756
757 main.log.info( "Login Quagga CLI on host4" )
758 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
759 main.log.info( "Enter configuration model of Quagga CLI on host4" )
760 main.QuaggaCliHost4.enterConfig( 64516 )
761 main.log.info( "Add routes to Quagga on host4" )
762 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
763 time.sleep( 60 )
764
765 # get all routes inside SDN-IP
766 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
767
768 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800769 allRoutesActual = \
770 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800771
772 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
773 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
774 main.step( "Check routes installed" )
775 main.log.info( "Routes expected:" )
776 main.log.info( allRoutesStrExpected )
777 main.log.info( "Routes get from ONOS CLI:" )
778 main.log.info( allRoutesStrActual )
779 utilities.assertEquals(
780 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800781 onpass="***Routes in SDN-IP are correct!***",
782 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800783 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
784 main.log.report(
785 "***Routes in SDN-IP after adding routes are correct!***" )
786 else:
787 main.log.report(
788 "***Routes in SDN-IP after adding routes are wrong!***" )
789
790 time.sleep( 20 )
791 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
792
793 main.step( "Check MultiPointToSinglePointIntent intents installed" )
794 # routeIntentsExpected are generated when generating routes
795 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800796 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800797 main.QuaggaCliHost3.extractActualRouteIntents(
798 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800799 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
800 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
801 main.log.info( "MultiPointToSinglePoint intents expected:" )
802 main.log.info( routeIntentsStrExpected )
803 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
804 main.log.info( routeIntentsStrActual )
805 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800806 expect=True,
807 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
808 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
809 correct!***",
810 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
811 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800812
813 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
814 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800815 "***MultiPointToSinglePoint Intents before deleting routes \
816 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800817 else:
818 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800819 "***MultiPointToSinglePoint Intents before deleting routes \
820 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800821
822 main.step( "Check BGP PointToPointIntent intents installed" )
823 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800824 bgpIntentsExpected = \
825 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800826 # get BGP intents from ONOS CLI
827 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
828 getIntentsResult )
829
830 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
831 bgpIntentsStrActual = str( bgpIntentsActual )
832 main.log.info( "PointToPointIntent intents expected:" )
833 main.log.info( bgpIntentsStrExpected )
834 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
835 main.log.info( bgpIntentsStrActual )
836
837 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800838 expect=True,
839 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
840 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
841 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800842
843 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
844 main.log.report(
845 "***PointToPointIntent Intents in SDN-IP are correct!***" )
846 else:
847 main.log.report(
848 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
849
850 #============================= Ping Test ========================
851 # wait until all MultiPointToSinglePoint
852 time.sleep( 20 )
853 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800854 pingTestResultsFile = \
855 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
856 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800857 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800858 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800859 main.log.info( pingTestResults )
860
861 # ping test
862
863 #============================= Deleting Routes ==================
864 main.step( "Check deleting routes installed" )
865 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
866 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
867
868 # main.log.info( "main.ONOScli.get_routes_num() = " )
869 # main.log.info( main.ONOScli.getRoutesNum() )
870 # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
871 # main.ONOScli.getRoutesNum(),
872 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800873 allRoutesActual = \
874 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800875 main.log.info( "allRoutes_actual = " )
876 main.log.info( allRoutesActual )
877
pingping-lin79011132015-01-27 15:27:27 -0800878 utilities.assertEquals(
879 expect="[]", actual=str( allRoutesActual ),
880 onpass="***Route number in SDN-IP is 0, correct!***",
881 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800882
883 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800884 main.log.report(
885 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800886 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800887 main.log.report(
888 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800889
890 main.step( "Check intents after deleting routes" )
891 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800892 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800893 main.QuaggaCliHost3.extractActualRouteIntents(
894 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800895 main.log.info( "main.ONOScli.intents()= " )
896 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800897 utilities.assertEquals(
898 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800899 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
900 0, correct!***",
901 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
902 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800903
904 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
905 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800906 "***MultiPointToSinglePoint Intents after deleting routes \
907 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800908 else:
909 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800910 "***MultiPointToSinglePoint Intents after deleting routes \
911 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800912
913 time.sleep( 20 )
914 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800915 pingTestResultsFile = \
916 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
917 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800918 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800919 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800920 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -0800921 time.sleep( 30 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800922
kelvin-onlab8a832582015-01-16 17:06:11 -0800923 # main.step( "Test whether Mininet is started" )
924 # main.Mininet2.handle.sendline( "xterm host1" )
925 # main.Mininet2.handle.expect( "mininet>" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800926
kelvin-onlab8a832582015-01-16 17:06:11 -0800927 def CASE2( self, main ):
928 """
pingping-lin3d87a132014-12-04 14:22:49 -0800929 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -0800930 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800931 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
932 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800933 bgpIntentsExpected: expected PointToPointIntent intents
934 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800935 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
936 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800937 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800938 """
pingping-lin3d87a132014-12-04 14:22:49 -0800939 import time
940 import json
941 from operator import eq
942 from time import localtime, strftime
943
kelvin-onlab8a832582015-01-16 17:06:11 -0800944 main.case(
pingping-lin00e4f7f2015-01-27 16:30:06 -0800945 "The test case is to help to setup the TestON environment and \
946 test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800947 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin3d87a132014-12-04 14:22:49 -0800948 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800949 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800950 main.step( "Start to generate routes for all BGP peers" )
pingping-lin3d87a132014-12-04 14:22:49 -0800951
kelvin-onlab8a832582015-01-16 17:06:11 -0800952 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800953 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
954 main.log.info( prefixesHost3 )
pingping-lin3d87a132014-12-04 14:22:49 -0800955 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800956 for prefix in prefixesHost3:
957 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800958 routeIntentsExpectedHost3 = \
959 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
960 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
961 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800962
kelvin-onlab8a832582015-01-16 17:06:11 -0800963 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800964 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
965 main.log.info( prefixesHost4 )
pingping-lin3d87a132014-12-04 14:22:49 -0800966 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800967 for prefix in prefixesHost4:
968 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800969 routeIntentsExpectedHost4 = \
970 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
971 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
972 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800973
pingping-linc1c696e2015-01-27 13:46:44 -0800974 routeIntentsExpected = routeIntentsExpectedHost3 + \
975 routeIntentsExpectedHost4
pingping-lin3d87a132014-12-04 14:22:49 -0800976
kelvin-onlab8a832582015-01-16 17:06:11 -0800977 main.log.report( "Removing raft logs" )
pingping-linc1c696e2015-01-27 13:46:44 -0800978 main.ONOSbench.onosRemoveRaftLogs()
kelvin-onlab8a832582015-01-16 17:06:11 -0800979 main.log.report( "Uninstalling ONOS" )
pingping-linc1c696e2015-01-27 13:46:44 -0800980 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800981
pingping-linc1c696e2015-01-27 13:46:44 -0800982 cellName = main.params[ 'ENV' ][ 'cellName' ]
983 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -0800984 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -0800985 main.ONOScli.setCell( cellName )
986 verifyResult = main.ONOSbench.verifyCell()
987 # main.log.report( "Removing raft logs" )
988 # main.ONOSbench.onosRemoveRaftLogs()
989 # main.log.report( "Uninstalling ONOS" )
990 # main.ONOSbench.onosUninstall( ONOS1Ip )
kelvin-onlab8a832582015-01-16 17:06:11 -0800991 main.step( "Creating ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800992 # packageResult = main.ONOSbench.onosPackage()
pingping-lin3d87a132014-12-04 14:22:49 -0800993
kelvin-onlab8a832582015-01-16 17:06:11 -0800994 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800995 # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
996 # node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800997
kelvin-onlab8a832582015-01-16 17:06:11 -0800998 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -0800999 # time.sleep( 60 )
1000 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
1001 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -08001002 main.log.report( "ONOS1 didn't start!" )
pingping-lin3d87a132014-12-04 14:22:49 -08001003
kelvin-onlab8a832582015-01-16 17:06:11 -08001004 main.step( "Start ONOS-cli" )
pingping-linc1c696e2015-01-27 13:46:44 -08001005 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -08001006
kelvin-onlab8a832582015-01-16 17:06:11 -08001007 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -08001008 listResult = main.ONOScli.devices( jsonFormat=False )
1009 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001010 time.sleep( 10 )
1011 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -08001012 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001013 time.sleep( 10 )
pingping-lin3d87a132014-12-04 14:22:49 -08001014
kelvin-onlab8a832582015-01-16 17:06:11 -08001015 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin3d87a132014-12-04 14:22:49 -08001016 # bgp intents expected
pingping-linc1c696e2015-01-27 13:46:44 -08001017 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
1018 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -08001019 # get BGP intents from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -08001020 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
1021 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
1022 getIntentsResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001023
pingping-linc1c696e2015-01-27 13:46:44 -08001024 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
1025 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -08001026 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001027 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001028 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001029 main.log.info( bgpIntentsStrActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001030
pingping-linc1c696e2015-01-27 13:46:44 -08001031 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001032 expect=True,
1033 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
1034 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
1035 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001036
pingping-linc1c696e2015-01-27 13:46:44 -08001037 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001038 main.log.report(
1039 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001040 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001041 main.log.report(
1042 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001043
pingping-linc1c696e2015-01-27 13:46:44 -08001044 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1045 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1046 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
1047 # roundNum = 0;
kelvin-onlab8a832582015-01-16 17:06:11 -08001048 # while( True ):
pingping-linc1c696e2015-01-27 13:46:44 -08001049 for roundNum in range( 1, 6 ):
pingping-lin3d87a132014-12-04 14:22:49 -08001050 # round = round + 1;
pingping-linc1c696e2015-01-27 13:46:44 -08001051 main.log.report( "The Round " + str( roundNum ) +
pingping-lin00e4f7f2015-01-27 16:30:06 -08001052 " test starts................................" )
pingping-lin3d87a132014-12-04 14:22:49 -08001053
kelvin-onlab8a832582015-01-16 17:06:11 -08001054 main.step( "Login all BGP peers and add routes into peers" )
1055 main.log.info( "Login Quagga CLI on host3" )
1056 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001057 main.log.info(
1058 "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001059 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001060 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001061 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001062
kelvin-onlab8a832582015-01-16 17:06:11 -08001063 main.log.info( "Login Quagga CLI on host4" )
1064 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001065 main.log.info(
1066 "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001067 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001068 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001069 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001070 time.sleep( 60 )
pingping-lin3d87a132014-12-04 14:22:49 -08001071
1072 # get all routes inside SDN-IP
pingping-linc1c696e2015-01-27 13:46:44 -08001073 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001074
1075 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001076 allRoutesActual = \
1077 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001078
pingping-linc1c696e2015-01-27 13:46:44 -08001079 # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1080 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001081 main.step( "Check routes installed" )
1082 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001083 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001084 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001085 main.log.info( allRoutesStrActual )
1086 utilities.assertEquals(
1087 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -08001088 onpass="***Routes in SDN-IP are correct!***",
1089 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -08001090 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001091 main.log.report(
1092 "***Routes in SDN-IP after adding correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001093 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -08001094 main.log.report(
1095 "***Routes in SDN-IP after adding wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001096
kelvin-onlab8a832582015-01-16 17:06:11 -08001097 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001098 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001099
kelvin-onlab8a832582015-01-16 17:06:11 -08001100 main.step(
1101 "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -08001102 # routeIntentsExpected are generated when generating routes
pingping-lin3d87a132014-12-04 14:22:49 -08001103 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001104 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001105 main.QuaggaCliHost3.extractActualRouteIntents(
1106 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -08001107 # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1108 routeIntentsStrActual = str(
pingping-lin79011132015-01-27 15:27:27 -08001109 routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001110 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001111 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001112 main.log.info(
1113 "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001114 main.log.info( routeIntentsStrActual )
1115 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001116 expect=True,
1117 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
1118 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
1119 correct!***",
1120 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
1121 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001122
pingping-linc1c696e2015-01-27 13:46:44 -08001123 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001124 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001125 "***MultiPointToSinglePoint Intents after adding routes \
1126 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001127 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001128 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001129 "***MultiPointToSinglePoint Intents after adding routes \
1130 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001131
1132 #============================= Ping Test ========================
1133 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -08001134 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001135 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001136 pingTestResultsFile = \
1137 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001138 + str( roundNum ) + "-ping-results-before-delete-routes-" \
1139 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001140 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001141 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001142 main.log.info( pingTestResults )
pingping-lin3d87a132014-12-04 14:22:49 -08001143 # ping test
1144
1145 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -08001146 main.step( "Check deleting routes installed" )
1147 main.log.info( "Delete routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001148 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001149 main.log.info( "Delete routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001150 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001151
pingping-linc1c696e2015-01-27 13:46:44 -08001152 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001153 allRoutesActual = \
1154 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001155 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -08001156 main.log.info( allRoutesActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001157
pingping-lin79011132015-01-27 15:27:27 -08001158 utilities.assertEquals(
1159 expect="[]", actual=str( allRoutesActual ),
1160 onpass="***Route number in SDN-IP is 0, correct!***",
1161 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001162
pingping-linc1c696e2015-01-27 13:46:44 -08001163 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001164 main.log.report(
1165 "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001166 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001167 main.log.report(
1168 "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001169
kelvin-onlab8a832582015-01-16 17:06:11 -08001170 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -08001171 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001172 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001173 main.QuaggaCliHost3.extractActualRouteIntents(
1174 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001175 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -08001176 main.log.info( routeIntentsActual )
1177 utilities.assertEquals(
1178 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -08001179 onpass=
1180 "***MultiPointToSinglePoint Intents number in SDN-IP \
1181 is 0, correct!***",
1182 onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
1183 is 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001184
pingping-linc1c696e2015-01-27 13:46:44 -08001185 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001186 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001187 "***MultiPointToSinglePoint Intents after deleting \
1188 routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001189 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001190 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001191 "***MultiPointToSinglePoint Intents after deleting \
1192 routes wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001193
kelvin-onlab8a832582015-01-16 17:06:11 -08001194 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001195 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001196 pingTestResultsFile = \
1197 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001198 + str( roundNum ) + "-ping-results-after-delete-routes-" \
1199 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001200 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001201 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001202 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -08001203 time.sleep( 30 )
pingping-linc1c696e2015-01-27 13:46:44 -08001204