blob: 03c2f3d9af7fc3f22405c412bd4d8a3336538e79 [file] [log] [blame]
pingping-lin3d87a132014-12-04 14:22:49 -08001# from cupshelpers.config import prefix
pingping-lin8b306ac2014-11-17 18:13:51 -08002
pingping-linc6b86fa2014-12-01 16:18:10 -08003# Testing the basic functionality of SDN-IP
pingping-lin8b306ac2014-11-17 18:13:51 -08004
kelvin-onlab8a832582015-01-16 17:06:11 -08005
pingping-lin8b306ac2014-11-17 18:13:51 -08006class SdnIpTest:
kelvin-onlab8a832582015-01-16 17:06:11 -08007
8 def __init__( self ):
pingping-lin8b306ac2014-11-17 18:13:51 -08009 self.default = ''
10
pingping-linc1c696e2015-01-27 13:46:44 -080011# from cupshelpers.config import prefix
12
13# Testing the basic functionality of SDN-IP
14
15
16class SdnIpTest:
17
18 def __init__( self ):
19 self.default = ''
20
21 def CASE4( self, main ):
kelvin-onlab8a832582015-01-16 17:06:11 -080022 """
pingping-lin8b306ac2014-11-17 18:13:51 -080023 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -080024 allRoutesExpected: all expected routes for all BGP peers
25 routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
26 bgpIntentsExpected: expected PointToPointIntent intents
27 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -080028 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
29 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -080030 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -080031 """
pingping-lin8b306ac2014-11-17 18:13:51 -080032 import time
33 import json
34 from operator import eq
pingping-linc6b86fa2014-12-01 16:18:10 -080035 # from datetime import datetime
pingping-lin01355a62014-12-02 20:58:14 -080036 from time import localtime, strftime
pingping-linc6b86fa2014-12-01 16:18:10 -080037
pingping-lin79011132015-01-27 15:27:27 -080038 main.case("The test case is to help to setup the TestON environment \
39 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -080040 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -080041 SDNIPJSONFILEPATH = \
42 "/home/admin/workspace/onos/tools/package/config/sdnip.json"
pingping-lin6f6332e2014-11-19 19:13:58 -080043 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -080044 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -080045 main.step( "Start to generate routes for all BGP peers" )
kelvin-onlab8a832582015-01-16 17:06:11 -080046 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -080047 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
48 main.log.info( prefixesHost3 )
pingping-lin36fbe802014-11-25 16:01:14 -080049 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -080050 for prefix in prefixesHost3:
51 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -080052 routeIntentsExpectedHost3 = \
53 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
54 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
55 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -080056
kelvin-onlab8a832582015-01-16 17:06:11 -080057 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -080058 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
59 main.log.info( prefixesHost4 )
pingping-lin36fbe802014-11-25 16:01:14 -080060 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -080061 for prefix in prefixesHost4:
62 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -080063 routeIntentsExpectedHost4 = \
64 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
65 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
66 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -080067
pingping-linc1c696e2015-01-27 13:46:44 -080068 main.log.info( "Generate prefixes for host5" )
69 prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
70 main.log.info( prefixesHost5 )
71 for prefix in prefixesHost5:
72 allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
pingping-lin79011132015-01-27 15:27:27 -080073 routeIntentsExpectedHost5 = \
74 main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
75 prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
76 SDNIPJSONFILEPATH )
pingping-lin8b306ac2014-11-17 18:13:51 -080077
pingping-linc1c696e2015-01-27 13:46:44 -080078 routeIntentsExpected = routeIntentsExpectedHost3 + \
79 routeIntentsExpectedHost4 + routeIntentsExpectedHost5
80
81 cellName = main.params[ 'ENV' ][ 'cellName' ]
82 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -080083 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -080084 main.ONOScli.setCell( cellName )
85 verifyResult = main.ONOSbench.verifyCell()
pingping-lin8b306ac2014-11-17 18:13:51 -080086
pingping-linc1c696e2015-01-27 13:46:44 -080087 main.log.report( "Removing raft logs" )
88 main.ONOSbench.onosRemoveRaftLogs()
89 main.log.report( "Uninstalling ONOS" )
90 main.ONOSbench.onosUninstall( ONOS1Ip )
91
kelvin-onlab8a832582015-01-16 17:06:11 -080092 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -080093 onos1InstallResult = main.ONOSbench.onosInstall(
94 options="-f", node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -080095
kelvin-onlab8a832582015-01-16 17:06:11 -080096 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -080097 time.sleep( 150 )
98 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
99 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -0800100 main.log.report( "ONOS1 didn't start!" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800101
kelvin-onlab8a832582015-01-16 17:06:11 -0800102 main.step( "Start ONOS-cli" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800103
pingping-linc1c696e2015-01-27 13:46:44 -0800104 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin8b306ac2014-11-17 18:13:51 -0800105
kelvin-onlab8a832582015-01-16 17:06:11 -0800106 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800107 listResult = main.ONOScli.devices( jsonFormat=False )
108 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800109 time.sleep( 10 )
110 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800111 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800112 time.sleep( 10 )
113 main.step( "Login all BGP peers and add routes into peers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800114
kelvin-onlab8a832582015-01-16 17:06:11 -0800115 main.log.info( "Login Quagga CLI on host3" )
116 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
117 main.log.info( "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800118 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800119 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800120 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-linbc230942014-12-03 18:36:27 -0800121
kelvin-onlab8a832582015-01-16 17:06:11 -0800122 main.log.info( "Login Quagga CLI on host4" )
123 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
124 main.log.info( "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800125 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800126 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800127 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
128
129 main.log.info( "Login Quagga CLI on host5" )
130 main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
131 main.log.info( "Enter configuration model of Quagga CLI on host5" )
132 main.QuaggaCliHost5.enterConfig( 64521 )
133 main.log.info( "Add routes to Quagga on host5" )
134 main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
135
136 for i in range( 101, 201 ):
137 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
138 main.log.info( prefixesHostX )
139 for prefix in prefixesHostX:
140 allRoutesExpected.append(
141 prefix + "/" + "192.168.40." + str( i - 100 ) )
142
pingping-lin79011132015-01-27 15:27:27 -0800143 routeIntentsExpectedHostX = \
144 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
145 prefixesHostX, "192.168.40." + str( i - 100 ),
146 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800147 routeIntentsExpected = routeIntentsExpected + \
148 routeIntentsExpectedHostX
149
150 main.log.info( "Login Quagga CLI on host" + str( i ) )
151 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
152 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
153 main.log.info(
154 "Enter configuration model of Quagga CLI on host" + str( i ) )
155 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
156 main.log.info( "Add routes to Quagga on host" + str( i ) )
157 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
158
kelvin-onlab8a832582015-01-16 17:06:11 -0800159 time.sleep( 60 )
pingping-lin8b306ac2014-11-17 18:13:51 -0800160
pingping-linc1c696e2015-01-27 13:46:44 -0800161 # get routes inside SDN-IP
162 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-linc6b86fa2014-12-01 16:18:10 -0800163
pingping-lin8b306ac2014-11-17 18:13:51 -0800164 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800165 allRoutesActual = \
166 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc6b86fa2014-12-01 16:18:10 -0800167
pingping-linc1c696e2015-01-27 13:46:44 -0800168 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
169 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800170 main.step( "Check routes installed" )
171 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800172 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800173 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800174 main.log.info( allRoutesStrActual )
175 utilities.assertEquals(
176 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800177 onpass="***Routes in SDN-IP are correct!***",
178 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800179 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800180 main.log.report(
181 "***Routes in SDN-IP after adding routes are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800182 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800183 main.log.report(
184 "***Routes in SDN-IP after adding routes are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800185
kelvin-onlab8a832582015-01-16 17:06:11 -0800186 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800187 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin6f6332e2014-11-19 19:13:58 -0800188
kelvin-onlab8a832582015-01-16 17:06:11 -0800189 main.step( "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800190 # routeIntentsExpected are generated when generating routes
pingping-lin6f6332e2014-11-19 19:13:58 -0800191 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800192 routeIntentsActual = \
193 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800194 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
195 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800196 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800197 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800198 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800199 main.log.info( routeIntentsStrActual )
200 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800201 expect=True,
202 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
203 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
204 correct!***",
205 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
206 wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800207
pingping-linc1c696e2015-01-27 13:46:44 -0800208 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800209 main.log.report( "***MultiPointToSinglePoint Intents before \
210 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800211 else:
pingping-lin79011132015-01-27 15:27:27 -0800212 main.log.report( "***MultiPointToSinglePoint Intents before \
213 deleting routes wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800214
kelvin-onlab8a832582015-01-16 17:06:11 -0800215 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800216 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800217 bgpIntentsExpected = \
218 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800219 # get BGP intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800220 bgpIntentsActual = \
221 main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
pingping-lin3228e132014-11-20 17:49:02 -0800222
pingping-linc1c696e2015-01-27 13:46:44 -0800223 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
224 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800225 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800226 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800227 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800228 main.log.info( bgpIntentsStrActual )
pingping-lin3228e132014-11-20 17:49:02 -0800229
pingping-linc1c696e2015-01-27 13:46:44 -0800230 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800231 expect=True,
232 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
233 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
234 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800235
pingping-linc1c696e2015-01-27 13:46:44 -0800236 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800237 main.log.report(
238 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800239 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800240 main.log.report(
241 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800242
pingping-linc6b86fa2014-12-01 16:18:10 -0800243 #============================= Ping Test ========================
244 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -0800245 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800246 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800247 pingTestResultsFile = \
248 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-" \
249 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800250 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800251 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800252 main.log.info( pingTestResults )
253 time.sleep( 20 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800254
255 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -0800256 main.step( "Check deleting routes installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800257 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
258 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
259 main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800260
pingping-linc1c696e2015-01-27 13:46:44 -0800261 for i in range( 101, 201 ):
262 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
263 main.log.info( prefixesHostX )
264 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
265 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
266
267 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800268 allRoutesActual = \
269 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800270 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -0800271 main.log.info( allRoutesActual )
pingping-linc6b86fa2014-12-01 16:18:10 -0800272
pingping-lin79011132015-01-27 15:27:27 -0800273 utilities.assertEquals(
274 expect="[]", actual=str( allRoutesActual ),
275 onpass="***Route number in SDN-IP is 0, correct!***",
276 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800277
pingping-linc1c696e2015-01-27 13:46:44 -0800278 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800279 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800280 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800281 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800282
kelvin-onlab8a832582015-01-16 17:06:11 -0800283 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -0800284 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800285 routeIntentsActual = \
286 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800287 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -0800288 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800289 utilities.assertEquals(
290 expect="[]", actual=str( routeIntentsActual ),
291 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
292 correct!***",
293 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
294 wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800295
pingping-linc1c696e2015-01-27 13:46:44 -0800296 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800297 main.log.report( "***MultiPointToSinglePoint Intents after \
298 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800299 else:
pingping-lin79011132015-01-27 15:27:27 -0800300 main.log.report( "***MultiPointToSinglePoint Intents after \
301 deleting routes wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800302
kelvin-onlab8a832582015-01-16 17:06:11 -0800303 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800304 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800305 pingTestResultsFile = \
306 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-" \
307 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800308 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800309 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800310 main.log.info( pingTestResults )
311 time.sleep( 100 )
312
313 # main.step( "Test whether Mininet is started" )
314 # main.Mininet2.handle.sendline( "xterm host1" )
315 # main.Mininet2.handle.expect( "mininet>" )
316
317 def CASE3( self, main ):
318 """
319 Test the SDN-IP functionality
320 allRoutesExpected: all expected routes for all BGP peers
321 routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
322 bgpIntentsExpected: expected PointToPointIntent intents
323 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800324 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
325 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800326 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
327 """
328 import time
329 import json
330 from operator import eq
331 # from datetime import datetime
332 from time import localtime, strftime
333
pingping-lin79011132015-01-27 15:27:27 -0800334 main.case( "The test case is to help to setup the TestON environment \
335 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800336 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800337 SDNIPJSONFILEPATH = \
338 "/home/admin/workspace/onos/tools/package/config/sdnip.json"
pingping-linc1c696e2015-01-27 13:46:44 -0800339 # all expected routes for all BGP peers
340 allRoutesExpected = []
341 main.step( "Start to generate routes for all BGP peers" )
342 main.log.info( "Generate prefixes for host3" )
343 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
344 main.log.info( prefixesHost3 )
345 # generate route with next hop
346 for prefix in prefixesHost3:
347 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800348 routeIntentsExpectedHost3 = \
349 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
350 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
351 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800352
353 main.log.info( "Generate prefixes for host4" )
354 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
355 main.log.info( prefixesHost4 )
356 # generate route with next hop
357 for prefix in prefixesHost4:
358 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800359 routeIntentsExpectedHost4 = \
360 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
361 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
362 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800363
364 routeIntentsExpected = routeIntentsExpectedHost3 + \
365 routeIntentsExpectedHost4
366
pingping-linc1c696e2015-01-27 13:46:44 -0800367 cellName = main.params[ 'ENV' ][ 'cellName' ]
368 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
369 main.step( "Set cell for ONOS-cli environment" )
370 main.ONOScli.setCell( cellName )
371 verifyResult = main.ONOSbench.verifyCell()
372
373 main.log.report( "Removing raft logs" )
374 main.ONOSbench.onosRemoveRaftLogs()
375 main.log.report( "Uninstalling ONOS" )
376 main.ONOSbench.onosUninstall( ONOS1Ip )
377
378 main.step( "Installing ONOS package" )
379 onos1InstallResult = main.ONOSbench.onosInstall(
380 options="-f", node=ONOS1Ip )
381
382 main.step( "Checking if ONOS is up yet" )
383 time.sleep( 60 )
384 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
385 if not onos1Isup:
386 main.log.report( "ONOS1 didn't start!" )
387
388 main.step( "Start ONOS-cli" )
389
390 main.ONOScli.startOnosCli( ONOS1Ip )
391
392 main.step( "Get devices in the network" )
393 listResult = main.ONOScli.devices( jsonFormat=False )
394 main.log.info( listResult )
395 time.sleep( 10 )
396 main.log.info( "Installing sdn-ip feature" )
397 main.ONOScli.featureInstall( "onos-app-sdnip" )
398 time.sleep( 10 )
399 main.step( "Login all BGP peers and add routes into peers" )
400
401 main.log.info( "Login Quagga CLI on host3" )
402 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
403 main.log.info( "Enter configuration model of Quagga CLI on host3" )
404 main.QuaggaCliHost3.enterConfig( 64514 )
405 main.log.info( "Add routes to Quagga on host3" )
406 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
407
408 main.log.info( "Login Quagga CLI on host4" )
409 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
410 main.log.info( "Enter configuration model of Quagga CLI on host4" )
411 main.QuaggaCliHost4.enterConfig( 64516 )
412 main.log.info( "Add routes to Quagga on host4" )
413 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
414
415 for i in range( 101, 201 ):
416 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
417 main.log.info( prefixesHostX )
418 for prefix in prefixesHostX:
419 allRoutesExpected.append(
420 prefix + "/" + "192.168.40." + str( i - 100 ) )
421
pingping-lin79011132015-01-27 15:27:27 -0800422 routeIntentsExpectedHostX = \
423 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
424 prefixesHostX, "192.168.40." + str( i - 100 ),
425 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800426 routeIntentsExpected = routeIntentsExpected + \
427 routeIntentsExpectedHostX
428
429 main.log.info( "Login Quagga CLI on host" + str( i ) )
430 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
431 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
432 main.log.info(
433 "Enter configuration model of Quagga CLI on host" + str( i ) )
434 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
435 main.log.info( "Add routes to Quagga on host" + str( i ) )
436 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
437
438 time.sleep( 60 )
439
440 # get routes inside SDN-IP
441 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
442
443 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800444 allRoutesActual = \
445 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800446
447 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
448 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
449 main.step( "Check routes installed" )
450 main.log.info( "Routes expected:" )
451 main.log.info( allRoutesStrExpected )
452 main.log.info( "Routes get from ONOS CLI:" )
453 main.log.info( allRoutesStrActual )
454 utilities.assertEquals(
455 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800456 onpass="***Routes in SDN-IP are correct!***",
457 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800458 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
459 main.log.report(
460 "***Routes in SDN-IP after adding routes are correct!***" )
461 else:
462 main.log.report(
463 "***Routes in SDN-IP after adding routes are wrong!***" )
464
465 time.sleep( 20 )
466 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
467
468 main.step( "Check MultiPointToSinglePointIntent intents installed" )
469 # routeIntentsExpected are generated when generating routes
470 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800471 routeIntentsActual = \
472 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800473 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
474 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
475 main.log.info( "MultiPointToSinglePoint intents expected:" )
476 main.log.info( routeIntentsStrExpected )
477 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
478 main.log.info( routeIntentsStrActual )
479 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800480 expect=True,
481 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
482 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
483 correct!***",
484 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
485 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800486
487 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
488 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800489 "***MultiPointToSinglePoint Intents before deleting routes \
490 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800491 else:
492 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800493 "***MultiPointToSinglePoint Intents before deleting routes \
494 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800495
496 main.step( "Check BGP PointToPointIntent intents installed" )
497 # bgp intents expected
498 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
499 SDNIPJSONFILEPATH )
500 # get BGP intents from ONOS CLI
501 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
502 getIntentsResult )
503
504 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
505 bgpIntentsStrActual = str( bgpIntentsActual )
506 main.log.info( "PointToPointIntent intents expected:" )
507 main.log.info( bgpIntentsStrExpected )
508 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
509 main.log.info( bgpIntentsStrActual )
510
511 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800512 expect=True,
513 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
514 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
515 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800516
517 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
518 main.log.report(
519 "***PointToPointIntent Intents in SDN-IP are correct!***" )
520 else:
521 main.log.report(
522 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
523
524 #============================= Ping Test ========================
525 # wait until all MultiPointToSinglePoint
526 time.sleep( 20 )
527 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800528 pingTestResultsFile = \
529 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
530 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800531 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800532 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800533 main.log.info( pingTestResults )
534 time.sleep( 20 )
535
536 #============================= Deleting Routes ==================
537 main.step( "Check deleting routes installed" )
538 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
539 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
540 for i in range( 101, 201 ):
541 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
542 main.log.info( prefixesHostX )
543 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
544 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
545
546 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
547 allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
548 getRoutesResult )
549 main.log.info( "allRoutes_actual = " )
550 main.log.info( allRoutesActual )
551
pingping-lin79011132015-01-27 15:27:27 -0800552 utilities.assertEquals(
553 expect="[]", actual=str( allRoutesActual ),
554 onpass="***Route number in SDN-IP is 0, correct!***",
555 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800556
557 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
558 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
559 else:
560 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
561
562 main.step( "Check intents after deleting routes" )
563 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800564 routeIntentsActual = \
565 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800566 main.log.info( "main.ONOScli.intents()= " )
567 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800568 utilities.assertEquals(
569 expect="[]", actual=str( routeIntentsActual ),
570 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
571 correct!***",
572 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
573 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800574
575 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
576 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800577 "***MultiPointToSinglePoint Intents after deleting routes \
578 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800579 else:
580 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800581 "***MultiPointToSinglePoint Intents after deleting routes \
582 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800583
584 time.sleep( 20 )
585 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800586 pingTestResultsFile = \
587 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
588 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800589 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800590 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800591 main.log.info( pingTestResults )
592 time.sleep( 100 )
593
594 # main.step( "Test whether Mininet is started" )
595 # main.Mininet2.handle.sendline( "xterm host1" )
596 # main.Mininet2.handle.expect( "mininet>" )
597
598 def CASE1( self, main ):
599 """
600 Test the SDN-IP functionality
601 allRoutesExpected: all expected routes for all BGP peers
602 routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
603 bgpIntentsExpected: expected PointToPointIntent intents
604 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800605 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
606 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800607 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
608 """
609 import time
610 import json
611 from operator import eq
612 # from datetime import datetime
613 from time import localtime, strftime
614
pingping-lin79011132015-01-27 15:27:27 -0800615 main.case("The test case is to help to setup the TestON environment \
616 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800617 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
618 # all expected routes for all BGP peers
619 allRoutesExpected = []
620 main.step( "Start to generate routes for all BGP peers" )
621 # bgpPeerHosts = []
622 # for i in range( 3, 5 ):
623 # bgpPeerHosts.append( "host" + str( i ) )
624 # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
625
626 # for i in range( 3, 5 ):
627 # QuaggaCliHost = "QuaggaCliHost" + str( i )
628 # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
629
630 # main.log.info( prefixes )
631 # allRoutesExpected.append( prefixes )
632 main.log.info( "Generate prefixes for host3" )
633 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
634 main.log.info( prefixesHost3 )
635 # generate route with next hop
636 for prefix in prefixesHost3:
637 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800638 routeIntentsExpectedHost3 = \
639 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
640 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
641 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800642
643 main.log.info( "Generate prefixes for host4" )
644 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
645 main.log.info( prefixesHost4 )
646 # generate route with next hop
647 for prefix in prefixesHost4:
648 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800649 routeIntentsExpectedHost4 = \
650 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
651 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
652 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800653
654 routeIntentsExpected = routeIntentsExpectedHost3 + \
655 routeIntentsExpectedHost4
656
657 cellName = main.params[ 'ENV' ][ 'cellName' ]
658 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
659 main.step( "Set cell for ONOS-cli environment" )
660 main.ONOScli.setCell( cellName )
661 verifyResult = main.ONOSbench.verifyCell()
662 main.log.report( "Removing raft logs" )
663 main.ONOSbench.onosRemoveRaftLogs()
664 main.log.report( "Uninstalling ONOS" )
665 main.ONOSbench.onosUninstall( ONOS1Ip )
666 main.step( "Creating ONOS package" )
667 packageResult = main.ONOSbench.onosPackage()
668
669 main.step( "Starting ONOS service" )
670 # TODO: start ONOS from Mininet Script
671 # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
672 main.step( "Installing ONOS package" )
673 onos1InstallResult = main.ONOSbench.onosInstall(
674 options="-f", node=ONOS1Ip )
675
676 main.step( "Checking if ONOS is up yet" )
677 time.sleep( 60 )
678 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
679 if not onos1Isup:
680 main.log.report( "ONOS1 didn't start!" )
681
682 main.step( "Start ONOS-cli" )
683 # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
684
685 main.ONOScli.startOnosCli( ONOS1Ip )
686
687 main.step( "Get devices in the network" )
688 listResult = main.ONOScli.devices( jsonFormat=False )
689 main.log.info( listResult )
690 time.sleep( 10 )
691 main.log.info( "Installing sdn-ip feature" )
692 main.ONOScli.featureInstall( "onos-app-sdnip" )
693 time.sleep( 10 )
694 main.step( "Login all BGP peers and add routes into peers" )
695 main.log.info( "Login Quagga CLI on host3" )
696 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
697 main.log.info( "Enter configuration model of Quagga CLI on host3" )
698 main.QuaggaCliHost3.enterConfig( 64514 )
699 main.log.info( "Add routes to Quagga on host3" )
700 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
701
702 main.log.info( "Login Quagga CLI on host4" )
703 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
704 main.log.info( "Enter configuration model of Quagga CLI on host4" )
705 main.QuaggaCliHost4.enterConfig( 64516 )
706 main.log.info( "Add routes to Quagga on host4" )
707 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
708 time.sleep( 60 )
709
710 # get all routes inside SDN-IP
711 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
712
713 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800714 allRoutesActual = \
715 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800716
717 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
718 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
719 main.step( "Check routes installed" )
720 main.log.info( "Routes expected:" )
721 main.log.info( allRoutesStrExpected )
722 main.log.info( "Routes get from ONOS CLI:" )
723 main.log.info( allRoutesStrActual )
724 utilities.assertEquals(
725 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800726 onpass="***Routes in SDN-IP are correct!***",
727 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800728 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
729 main.log.report(
730 "***Routes in SDN-IP after adding routes are correct!***" )
731 else:
732 main.log.report(
733 "***Routes in SDN-IP after adding routes are wrong!***" )
734
735 time.sleep( 20 )
736 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
737
738 main.step( "Check MultiPointToSinglePointIntent intents installed" )
739 # routeIntentsExpected are generated when generating routes
740 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800741 routeIntentsActual = \
742 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800743 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
744 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
745 main.log.info( "MultiPointToSinglePoint intents expected:" )
746 main.log.info( routeIntentsStrExpected )
747 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
748 main.log.info( routeIntentsStrActual )
749 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800750 expect=True,
751 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
752 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
753 correct!***",
754 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
755 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800756
757 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
758 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800759 "***MultiPointToSinglePoint Intents before deleting routes \
760 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800761 else:
762 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800763 "***MultiPointToSinglePoint Intents before deleting routes \
764 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800765
766 main.step( "Check BGP PointToPointIntent intents installed" )
767 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800768 bgpIntentsExpected = \
769 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800770 # get BGP intents from ONOS CLI
771 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
772 getIntentsResult )
773
774 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
775 bgpIntentsStrActual = str( bgpIntentsActual )
776 main.log.info( "PointToPointIntent intents expected:" )
777 main.log.info( bgpIntentsStrExpected )
778 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
779 main.log.info( bgpIntentsStrActual )
780
781 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800782 expect=True,
783 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
784 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
785 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800786
787 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
788 main.log.report(
789 "***PointToPointIntent Intents in SDN-IP are correct!***" )
790 else:
791 main.log.report(
792 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
793
794 #============================= Ping Test ========================
795 # wait until all MultiPointToSinglePoint
796 time.sleep( 20 )
797 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800798 pingTestResultsFile = \
799 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
800 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800801 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800802 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800803 main.log.info( pingTestResults )
804
805 # ping test
806
807 #============================= Deleting Routes ==================
808 main.step( "Check deleting routes installed" )
809 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
810 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
811
812 # main.log.info( "main.ONOScli.get_routes_num() = " )
813 # main.log.info( main.ONOScli.getRoutesNum() )
814 # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
815 # main.ONOScli.getRoutesNum(),
816 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800817 allRoutesActual = \
818 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800819 main.log.info( "allRoutes_actual = " )
820 main.log.info( allRoutesActual )
821
pingping-lin79011132015-01-27 15:27:27 -0800822 utilities.assertEquals(
823 expect="[]", actual=str( allRoutesActual ),
824 onpass="***Route number in SDN-IP is 0, correct!***",
825 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800826
827 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
828 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
829 else:
830 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
831
832 main.step( "Check intents after deleting routes" )
833 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800834 routeIntentsActual = \
835 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800836 main.log.info( "main.ONOScli.intents()= " )
837 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800838 utilities.assertEquals(
839 expect="[]", actual=str( routeIntentsActual ),
840 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
841 correct!***",
842 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
843 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800844
845 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
846 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800847 "***MultiPointToSinglePoint Intents after deleting routes \
848 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800849 else:
850 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800851 "***MultiPointToSinglePoint Intents after deleting routes \
852 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800853
854 time.sleep( 20 )
855 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800856 pingTestResultsFile = \
857 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
858 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800859 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800860 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800861 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -0800862 time.sleep( 30 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800863
kelvin-onlab8a832582015-01-16 17:06:11 -0800864 # main.step( "Test whether Mininet is started" )
865 # main.Mininet2.handle.sendline( "xterm host1" )
866 # main.Mininet2.handle.expect( "mininet>" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800867
kelvin-onlab8a832582015-01-16 17:06:11 -0800868 def CASE2( self, main ):
869 """
pingping-lin3d87a132014-12-04 14:22:49 -0800870 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -0800871 allRoutesExpected: all expected routes for all BGP peers
872 routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
873 bgpIntentsExpected: expected PointToPointIntent intents
874 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800875 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
876 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800877 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800878 """
pingping-lin3d87a132014-12-04 14:22:49 -0800879 import time
880 import json
881 from operator import eq
882 from time import localtime, strftime
883
kelvin-onlab8a832582015-01-16 17:06:11 -0800884 main.case(
pingping-lin79011132015-01-27 15:27:27 -0800885 "The test case is to help to setup the TestON environment and test \
886 new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800887 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin3d87a132014-12-04 14:22:49 -0800888 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800889 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800890 main.step( "Start to generate routes for all BGP peers" )
pingping-lin3d87a132014-12-04 14:22:49 -0800891
kelvin-onlab8a832582015-01-16 17:06:11 -0800892 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800893 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
894 main.log.info( prefixesHost3 )
pingping-lin3d87a132014-12-04 14:22:49 -0800895 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800896 for prefix in prefixesHost3:
897 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800898 routeIntentsExpectedHost3 = \
899 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
900 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
901 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800902
kelvin-onlab8a832582015-01-16 17:06:11 -0800903 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800904 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
905 main.log.info( prefixesHost4 )
pingping-lin3d87a132014-12-04 14:22:49 -0800906 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800907 for prefix in prefixesHost4:
908 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800909 routeIntentsExpectedHost4 = \
910 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
911 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
912 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800913
pingping-linc1c696e2015-01-27 13:46:44 -0800914 routeIntentsExpected = routeIntentsExpectedHost3 + \
915 routeIntentsExpectedHost4
pingping-lin3d87a132014-12-04 14:22:49 -0800916
kelvin-onlab8a832582015-01-16 17:06:11 -0800917 main.log.report( "Removing raft logs" )
pingping-linc1c696e2015-01-27 13:46:44 -0800918 main.ONOSbench.onosRemoveRaftLogs()
kelvin-onlab8a832582015-01-16 17:06:11 -0800919 main.log.report( "Uninstalling ONOS" )
pingping-linc1c696e2015-01-27 13:46:44 -0800920 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800921
pingping-linc1c696e2015-01-27 13:46:44 -0800922 cellName = main.params[ 'ENV' ][ 'cellName' ]
923 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -0800924 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -0800925 main.ONOScli.setCell( cellName )
926 verifyResult = main.ONOSbench.verifyCell()
927 # main.log.report( "Removing raft logs" )
928 # main.ONOSbench.onosRemoveRaftLogs()
929 # main.log.report( "Uninstalling ONOS" )
930 # main.ONOSbench.onosUninstall( ONOS1Ip )
kelvin-onlab8a832582015-01-16 17:06:11 -0800931 main.step( "Creating ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800932 # packageResult = main.ONOSbench.onosPackage()
pingping-lin3d87a132014-12-04 14:22:49 -0800933
kelvin-onlab8a832582015-01-16 17:06:11 -0800934 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800935 # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
936 # node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800937
kelvin-onlab8a832582015-01-16 17:06:11 -0800938 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -0800939 # time.sleep( 60 )
940 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
941 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -0800942 main.log.report( "ONOS1 didn't start!" )
pingping-lin3d87a132014-12-04 14:22:49 -0800943
kelvin-onlab8a832582015-01-16 17:06:11 -0800944 main.step( "Start ONOS-cli" )
pingping-linc1c696e2015-01-27 13:46:44 -0800945 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800946
kelvin-onlab8a832582015-01-16 17:06:11 -0800947 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800948 listResult = main.ONOScli.devices( jsonFormat=False )
949 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800950 time.sleep( 10 )
951 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800952 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800953 time.sleep( 10 )
pingping-lin3d87a132014-12-04 14:22:49 -0800954
kelvin-onlab8a832582015-01-16 17:06:11 -0800955 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin3d87a132014-12-04 14:22:49 -0800956 # bgp intents expected
pingping-linc1c696e2015-01-27 13:46:44 -0800957 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
958 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800959 # get BGP intents from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800960 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
961 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
962 getIntentsResult )
pingping-lin3d87a132014-12-04 14:22:49 -0800963
pingping-linc1c696e2015-01-27 13:46:44 -0800964 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
965 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800966 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800967 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800968 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800969 main.log.info( bgpIntentsStrActual )
pingping-lin3d87a132014-12-04 14:22:49 -0800970
pingping-linc1c696e2015-01-27 13:46:44 -0800971 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800972 expect=True,
973 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
974 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
975 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800976
pingping-linc1c696e2015-01-27 13:46:44 -0800977 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800978 main.log.report(
979 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800980 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800981 main.log.report(
982 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800983
pingping-linc1c696e2015-01-27 13:46:44 -0800984 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
985 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
986 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
987 # roundNum = 0;
kelvin-onlab8a832582015-01-16 17:06:11 -0800988 # while( True ):
pingping-linc1c696e2015-01-27 13:46:44 -0800989 for roundNum in range( 1, 6 ):
pingping-lin3d87a132014-12-04 14:22:49 -0800990 # round = round + 1;
pingping-linc1c696e2015-01-27 13:46:44 -0800991 main.log.report( "The Round " + str( roundNum ) +
pingping-lin79011132015-01-27 15:27:27 -0800992 " test starts..................................." )
pingping-lin3d87a132014-12-04 14:22:49 -0800993
kelvin-onlab8a832582015-01-16 17:06:11 -0800994 main.step( "Login all BGP peers and add routes into peers" )
995 main.log.info( "Login Quagga CLI on host3" )
996 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
997 main.log.info( "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800998 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800999 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001000 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001001
kelvin-onlab8a832582015-01-16 17:06:11 -08001002 main.log.info( "Login Quagga CLI on host4" )
1003 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
1004 main.log.info( "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001005 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001006 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001007 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001008 time.sleep( 60 )
pingping-lin3d87a132014-12-04 14:22:49 -08001009
1010 # get all routes inside SDN-IP
pingping-linc1c696e2015-01-27 13:46:44 -08001011 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001012
1013 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001014 allRoutesActual = \
1015 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001016
pingping-linc1c696e2015-01-27 13:46:44 -08001017 # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1018 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001019 main.step( "Check routes installed" )
1020 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001021 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001022 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001023 main.log.info( allRoutesStrActual )
1024 utilities.assertEquals(
1025 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -08001026 onpass="***Routes in SDN-IP are correct!***",
1027 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -08001028 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001029 main.log.report(
1030 "***Routes in SDN-IP after adding correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001031 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001032 main.log.report( "***Routes in SDN-IP after adding wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001033
kelvin-onlab8a832582015-01-16 17:06:11 -08001034 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001035 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001036
kelvin-onlab8a832582015-01-16 17:06:11 -08001037 main.step(
1038 "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -08001039 # routeIntentsExpected are generated when generating routes
pingping-lin3d87a132014-12-04 14:22:49 -08001040 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001041 routeIntentsActual = \
1042 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -08001043 # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1044 routeIntentsStrActual = str(
pingping-lin79011132015-01-27 15:27:27 -08001045 routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001046 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001047 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001048 main.log.info(
1049 "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001050 main.log.info( routeIntentsStrActual )
1051 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001052 expect=True,
1053 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
1054 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
1055 correct!***",
1056 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
1057 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001058
pingping-linc1c696e2015-01-27 13:46:44 -08001059 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001060 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001061 "***MultiPointToSinglePoint Intents after adding routes \
1062 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001063 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001064 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001065 "***MultiPointToSinglePoint Intents after adding routes \
1066 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001067
1068 #============================= Ping Test ========================
1069 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -08001070 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001071 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -08001072 pingTestResultsFile = "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
1073 + str( roundNum ) + "-ping-results-before-delete-routes-" \
1074 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001075 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001076 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001077 main.log.info( pingTestResults )
pingping-lin3d87a132014-12-04 14:22:49 -08001078 # ping test
1079
1080 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -08001081 main.step( "Check deleting routes installed" )
1082 main.log.info( "Delete routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001083 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001084 main.log.info( "Delete routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001085 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001086
pingping-linc1c696e2015-01-27 13:46:44 -08001087 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001088 allRoutesActual = \
1089 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001090 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -08001091 main.log.info( allRoutesActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001092
pingping-lin79011132015-01-27 15:27:27 -08001093 utilities.assertEquals(
1094 expect="[]", actual=str( allRoutesActual ),
1095 onpass="***Route number in SDN-IP is 0, correct!***",
1096 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001097
pingping-linc1c696e2015-01-27 13:46:44 -08001098 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001099 main.log.report(
1100 "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001101 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001102 main.log.report(
1103 "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001104
kelvin-onlab8a832582015-01-16 17:06:11 -08001105 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -08001106 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001107 routeIntentsActual = \
1108 main.QuaggaCliHost3.extractActualRouteIntents( getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001109 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -08001110 main.log.info( routeIntentsActual )
1111 utilities.assertEquals(
1112 expect="[]", actual=str( routeIntentsActual ),
pingping-lin79011132015-01-27 15:27:27 -08001113 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
1114 0, correct!***",
1115 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
1116 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001117
pingping-linc1c696e2015-01-27 13:46:44 -08001118 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001119 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001120 "***MultiPointToSinglePoint Intents after deleting routes \
1121 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001122 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001123 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001124 "***MultiPointToSinglePoint Intents after deleting routes \
1125 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001126
kelvin-onlab8a832582015-01-16 17:06:11 -08001127 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001128 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -08001129 pingTestResultsFile = "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
1130 + str( roundNum ) + "-ping-results-after-delete-routes-" \
1131 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001132 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001133 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001134 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -08001135 time.sleep( 30 )
pingping-linc1c696e2015-01-27 13:46:44 -08001136