blob: 85ac21ea9c27b9b0edd2e6bc7e9cf542edb2708f [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
pingping-lin00e4f7f2015-01-27 16:30:06 -080025 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
26 intents
pingping-linc1c696e2015-01-27 13:46:44 -080027 bgpIntentsExpected: expected PointToPointIntent intents
28 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -080029 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
30 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -080031 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -080032 """
pingping-lin8b306ac2014-11-17 18:13:51 -080033 import time
34 import json
35 from operator import eq
pingping-linc6b86fa2014-12-01 16:18:10 -080036 # from datetime import datetime
pingping-lin01355a62014-12-02 20:58:14 -080037 from time import localtime, strftime
pingping-linc6b86fa2014-12-01 16:18:10 -080038
pingping-lin79011132015-01-27 15:27:27 -080039 main.case("The test case is to help to setup the TestON environment \
40 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -080041 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -080042 SDNIPJSONFILEPATH = \
43 "/home/admin/workspace/onos/tools/package/config/sdnip.json"
pingping-lin6f6332e2014-11-19 19:13:58 -080044 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -080045 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -080046 main.step( "Start to generate routes for all BGP peers" )
kelvin-onlab8a832582015-01-16 17:06:11 -080047 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -080048 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
49 main.log.info( prefixesHost3 )
pingping-lin36fbe802014-11-25 16:01:14 -080050 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -080051 for prefix in prefixesHost3:
52 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -080053 routeIntentsExpectedHost3 = \
54 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
55 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
56 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -080057
kelvin-onlab8a832582015-01-16 17:06:11 -080058 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -080059 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
60 main.log.info( prefixesHost4 )
pingping-lin36fbe802014-11-25 16:01:14 -080061 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -080062 for prefix in prefixesHost4:
63 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -080064 routeIntentsExpectedHost4 = \
65 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
66 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
67 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -080068
pingping-linc1c696e2015-01-27 13:46:44 -080069 main.log.info( "Generate prefixes for host5" )
70 prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
71 main.log.info( prefixesHost5 )
72 for prefix in prefixesHost5:
73 allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
pingping-lin79011132015-01-27 15:27:27 -080074 routeIntentsExpectedHost5 = \
75 main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
76 prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
77 SDNIPJSONFILEPATH )
pingping-lin8b306ac2014-11-17 18:13:51 -080078
pingping-linc1c696e2015-01-27 13:46:44 -080079 routeIntentsExpected = routeIntentsExpectedHost3 + \
80 routeIntentsExpectedHost4 + routeIntentsExpectedHost5
81
82 cellName = main.params[ 'ENV' ][ 'cellName' ]
83 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -080084 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -080085 main.ONOScli.setCell( cellName )
86 verifyResult = main.ONOSbench.verifyCell()
pingping-lin8b306ac2014-11-17 18:13:51 -080087
pingping-linc1c696e2015-01-27 13:46:44 -080088 main.log.report( "Removing raft logs" )
89 main.ONOSbench.onosRemoveRaftLogs()
90 main.log.report( "Uninstalling ONOS" )
91 main.ONOSbench.onosUninstall( ONOS1Ip )
92
kelvin-onlab8a832582015-01-16 17:06:11 -080093 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -080094 onos1InstallResult = main.ONOSbench.onosInstall(
95 options="-f", node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -080096
kelvin-onlab8a832582015-01-16 17:06:11 -080097 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -080098 time.sleep( 150 )
99 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
100 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -0800101 main.log.report( "ONOS1 didn't start!" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800102
kelvin-onlab8a832582015-01-16 17:06:11 -0800103 main.step( "Start ONOS-cli" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800104
pingping-linc1c696e2015-01-27 13:46:44 -0800105 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin8b306ac2014-11-17 18:13:51 -0800106
kelvin-onlab8a832582015-01-16 17:06:11 -0800107 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800108 listResult = main.ONOScli.devices( jsonFormat=False )
109 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800110 time.sleep( 10 )
111 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800112 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800113 time.sleep( 10 )
114 main.step( "Login all BGP peers and add routes into peers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800115
kelvin-onlab8a832582015-01-16 17:06:11 -0800116 main.log.info( "Login Quagga CLI on host3" )
117 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
118 main.log.info( "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800119 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800120 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800121 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-linbc230942014-12-03 18:36:27 -0800122
kelvin-onlab8a832582015-01-16 17:06:11 -0800123 main.log.info( "Login Quagga CLI on host4" )
124 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
125 main.log.info( "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800126 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800127 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800128 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
129
130 main.log.info( "Login Quagga CLI on host5" )
131 main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
132 main.log.info( "Enter configuration model of Quagga CLI on host5" )
133 main.QuaggaCliHost5.enterConfig( 64521 )
134 main.log.info( "Add routes to Quagga on host5" )
135 main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
136
137 for i in range( 101, 201 ):
138 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
139 main.log.info( prefixesHostX )
140 for prefix in prefixesHostX:
141 allRoutesExpected.append(
142 prefix + "/" + "192.168.40." + str( i - 100 ) )
143
pingping-lin79011132015-01-27 15:27:27 -0800144 routeIntentsExpectedHostX = \
145 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
146 prefixesHostX, "192.168.40." + str( i - 100 ),
147 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800148 routeIntentsExpected = routeIntentsExpected + \
149 routeIntentsExpectedHostX
150
151 main.log.info( "Login Quagga CLI on host" + str( i ) )
152 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
153 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
154 main.log.info(
155 "Enter configuration model of Quagga CLI on host" + str( i ) )
156 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
157 main.log.info( "Add routes to Quagga on host" + str( i ) )
158 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
159
kelvin-onlab8a832582015-01-16 17:06:11 -0800160 time.sleep( 60 )
pingping-lin8b306ac2014-11-17 18:13:51 -0800161
pingping-linc1c696e2015-01-27 13:46:44 -0800162 # get routes inside SDN-IP
163 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-linc6b86fa2014-12-01 16:18:10 -0800164
pingping-lin8b306ac2014-11-17 18:13:51 -0800165 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800166 allRoutesActual = \
167 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc6b86fa2014-12-01 16:18:10 -0800168
pingping-linc1c696e2015-01-27 13:46:44 -0800169 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
170 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800171 main.step( "Check routes installed" )
172 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800173 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800174 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800175 main.log.info( allRoutesStrActual )
176 utilities.assertEquals(
177 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800178 onpass="***Routes in SDN-IP are correct!***",
179 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800180 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800181 main.log.report(
182 "***Routes in SDN-IP after adding routes are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800183 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800184 main.log.report(
185 "***Routes in SDN-IP after adding routes are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800186
kelvin-onlab8a832582015-01-16 17:06:11 -0800187 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800188 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin6f6332e2014-11-19 19:13:58 -0800189
kelvin-onlab8a832582015-01-16 17:06:11 -0800190 main.step( "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800191 # routeIntentsExpected are generated when generating routes
pingping-lin6f6332e2014-11-19 19:13:58 -0800192 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800193 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800194 main.QuaggaCliHost3.extractActualRouteIntents(
195 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800196 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
197 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800198 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800199 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800200 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800201 main.log.info( routeIntentsStrActual )
202 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800203 expect=True,
204 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
205 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
206 correct!***",
207 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
208 wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800209
pingping-linc1c696e2015-01-27 13:46:44 -0800210 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800211 main.log.report( "***MultiPointToSinglePoint Intents before \
212 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800213 else:
pingping-lin79011132015-01-27 15:27:27 -0800214 main.log.report( "***MultiPointToSinglePoint Intents before \
215 deleting routes wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800216
kelvin-onlab8a832582015-01-16 17:06:11 -0800217 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800218 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800219 bgpIntentsExpected = \
220 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800221 # get BGP intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800222 bgpIntentsActual = \
223 main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
pingping-lin3228e132014-11-20 17:49:02 -0800224
pingping-linc1c696e2015-01-27 13:46:44 -0800225 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
226 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800227 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800228 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800229 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800230 main.log.info( bgpIntentsStrActual )
pingping-lin3228e132014-11-20 17:49:02 -0800231
pingping-linc1c696e2015-01-27 13:46:44 -0800232 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800233 expect=True,
234 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
235 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
236 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800237
pingping-linc1c696e2015-01-27 13:46:44 -0800238 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800239 main.log.report(
240 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800241 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800242 main.log.report(
243 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800244
pingping-linc6b86fa2014-12-01 16:18:10 -0800245 #============================= Ping Test ========================
246 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -0800247 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800248 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800249 pingTestResultsFile = \
250 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-" \
251 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800252 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800253 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800254 main.log.info( pingTestResults )
255 time.sleep( 20 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800256
257 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -0800258 main.step( "Check deleting routes installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800259 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
260 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
261 main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800262
pingping-linc1c696e2015-01-27 13:46:44 -0800263 for i in range( 101, 201 ):
264 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
265 main.log.info( prefixesHostX )
266 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
267 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
268
269 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800270 allRoutesActual = \
271 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800272 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -0800273 main.log.info( allRoutesActual )
pingping-linc6b86fa2014-12-01 16:18:10 -0800274
pingping-lin79011132015-01-27 15:27:27 -0800275 utilities.assertEquals(
276 expect="[]", actual=str( allRoutesActual ),
277 onpass="***Route number in SDN-IP is 0, correct!***",
278 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800279
pingping-linc1c696e2015-01-27 13:46:44 -0800280 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800281 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800282 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800283 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800284
kelvin-onlab8a832582015-01-16 17:06:11 -0800285 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -0800286 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800287 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800288 main.QuaggaCliHost3.extractActualRouteIntents(
289 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800290 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -0800291 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800292 utilities.assertEquals(
293 expect="[]", actual=str( routeIntentsActual ),
294 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
295 correct!***",
296 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
297 wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800298
pingping-linc1c696e2015-01-27 13:46:44 -0800299 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800300 main.log.report( "***MultiPointToSinglePoint Intents after \
301 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800302 else:
pingping-lin79011132015-01-27 15:27:27 -0800303 main.log.report( "***MultiPointToSinglePoint Intents after \
304 deleting routes wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800305
kelvin-onlab8a832582015-01-16 17:06:11 -0800306 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800307 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800308 pingTestResultsFile = \
309 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-" \
310 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800311 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800312 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800313 main.log.info( pingTestResults )
314 time.sleep( 100 )
315
316 # main.step( "Test whether Mininet is started" )
317 # main.Mininet2.handle.sendline( "xterm host1" )
318 # main.Mininet2.handle.expect( "mininet>" )
319
320 def CASE3( self, main ):
321 """
322 Test the SDN-IP functionality
323 allRoutesExpected: all expected routes for all BGP peers
324 routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
325 bgpIntentsExpected: expected PointToPointIntent intents
326 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800327 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
328 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800329 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
330 """
331 import time
332 import json
333 from operator import eq
334 # from datetime import datetime
335 from time import localtime, strftime
336
pingping-lin00e4f7f2015-01-27 16:30:06 -0800337 main.case( "The test case is to help to setup the TestON \
338 environment and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800339 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800340 SDNIPJSONFILEPATH = \
341 "/home/admin/workspace/onos/tools/package/config/sdnip.json"
pingping-linc1c696e2015-01-27 13:46:44 -0800342 # all expected routes for all BGP peers
343 allRoutesExpected = []
344 main.step( "Start to generate routes for all BGP peers" )
345 main.log.info( "Generate prefixes for host3" )
346 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
347 main.log.info( prefixesHost3 )
348 # generate route with next hop
349 for prefix in prefixesHost3:
350 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800351 routeIntentsExpectedHost3 = \
352 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
353 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
354 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800355
356 main.log.info( "Generate prefixes for host4" )
357 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
358 main.log.info( prefixesHost4 )
359 # generate route with next hop
360 for prefix in prefixesHost4:
361 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800362 routeIntentsExpectedHost4 = \
363 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
364 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
365 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800366
367 routeIntentsExpected = routeIntentsExpectedHost3 + \
368 routeIntentsExpectedHost4
369
pingping-linc1c696e2015-01-27 13:46:44 -0800370 cellName = main.params[ 'ENV' ][ 'cellName' ]
371 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
372 main.step( "Set cell for ONOS-cli environment" )
373 main.ONOScli.setCell( cellName )
374 verifyResult = main.ONOSbench.verifyCell()
375
376 main.log.report( "Removing raft logs" )
377 main.ONOSbench.onosRemoveRaftLogs()
378 main.log.report( "Uninstalling ONOS" )
379 main.ONOSbench.onosUninstall( ONOS1Ip )
380
381 main.step( "Installing ONOS package" )
382 onos1InstallResult = main.ONOSbench.onosInstall(
383 options="-f", node=ONOS1Ip )
384
385 main.step( "Checking if ONOS is up yet" )
386 time.sleep( 60 )
387 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
388 if not onos1Isup:
389 main.log.report( "ONOS1 didn't start!" )
390
391 main.step( "Start ONOS-cli" )
392
393 main.ONOScli.startOnosCli( ONOS1Ip )
394
395 main.step( "Get devices in the network" )
396 listResult = main.ONOScli.devices( jsonFormat=False )
397 main.log.info( listResult )
398 time.sleep( 10 )
399 main.log.info( "Installing sdn-ip feature" )
400 main.ONOScli.featureInstall( "onos-app-sdnip" )
401 time.sleep( 10 )
402 main.step( "Login all BGP peers and add routes into peers" )
403
404 main.log.info( "Login Quagga CLI on host3" )
405 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
406 main.log.info( "Enter configuration model of Quagga CLI on host3" )
407 main.QuaggaCliHost3.enterConfig( 64514 )
408 main.log.info( "Add routes to Quagga on host3" )
409 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
410
411 main.log.info( "Login Quagga CLI on host4" )
412 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
413 main.log.info( "Enter configuration model of Quagga CLI on host4" )
414 main.QuaggaCliHost4.enterConfig( 64516 )
415 main.log.info( "Add routes to Quagga on host4" )
416 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
417
418 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800419 prefixesHostX = \
420 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800421 main.log.info( prefixesHostX )
422 for prefix in prefixesHostX:
423 allRoutesExpected.append(
424 prefix + "/" + "192.168.40." + str( i - 100 ) )
425
pingping-lin79011132015-01-27 15:27:27 -0800426 routeIntentsExpectedHostX = \
427 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
428 prefixesHostX, "192.168.40." + str( i - 100 ),
429 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800430 routeIntentsExpected = routeIntentsExpected + \
431 routeIntentsExpectedHostX
432
433 main.log.info( "Login Quagga CLI on host" + str( i ) )
434 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
435 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
436 main.log.info(
437 "Enter configuration model of Quagga CLI on host" + str( i ) )
438 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
439 main.log.info( "Add routes to Quagga on host" + str( i ) )
440 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
441
442 time.sleep( 60 )
443
444 # get routes inside SDN-IP
445 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
446
447 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800448 allRoutesActual = \
449 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800450
451 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
452 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
453 main.step( "Check routes installed" )
454 main.log.info( "Routes expected:" )
455 main.log.info( allRoutesStrExpected )
456 main.log.info( "Routes get from ONOS CLI:" )
457 main.log.info( allRoutesStrActual )
458 utilities.assertEquals(
459 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800460 onpass="***Routes in SDN-IP are correct!***",
461 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800462 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
463 main.log.report(
464 "***Routes in SDN-IP after adding routes are correct!***" )
465 else:
466 main.log.report(
467 "***Routes in SDN-IP after adding routes are wrong!***" )
468
469 time.sleep( 20 )
470 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
471
472 main.step( "Check MultiPointToSinglePointIntent intents installed" )
473 # routeIntentsExpected are generated when generating routes
474 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800475 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800476 main.QuaggaCliHost3.extractActualRouteIntents(
477 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800478 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
479 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
480 main.log.info( "MultiPointToSinglePoint intents expected:" )
481 main.log.info( routeIntentsStrExpected )
482 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
483 main.log.info( routeIntentsStrActual )
484 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800485 expect=True,
486 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
487 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
488 correct!***",
489 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
490 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800491
492 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
493 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800494 "***MultiPointToSinglePoint Intents before deleting routes \
495 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800496 else:
497 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800498 "***MultiPointToSinglePoint Intents before deleting routes \
499 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800500
501 main.step( "Check BGP PointToPointIntent intents installed" )
502 # bgp intents expected
503 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
504 SDNIPJSONFILEPATH )
505 # get BGP intents from ONOS CLI
506 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
507 getIntentsResult )
508
509 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
510 bgpIntentsStrActual = str( bgpIntentsActual )
511 main.log.info( "PointToPointIntent intents expected:" )
512 main.log.info( bgpIntentsStrExpected )
513 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
514 main.log.info( bgpIntentsStrActual )
515
516 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800517 expect=True,
518 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
519 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
520 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800521
522 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
523 main.log.report(
524 "***PointToPointIntent Intents in SDN-IP are correct!***" )
525 else:
526 main.log.report(
527 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
528
529 #============================= Ping Test ========================
530 # wait until all MultiPointToSinglePoint
531 time.sleep( 20 )
532 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800533 pingTestResultsFile = \
534 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
535 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800536 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800537 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800538 main.log.info( pingTestResults )
539 time.sleep( 20 )
540
541 #============================= Deleting Routes ==================
542 main.step( "Check deleting routes installed" )
543 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
544 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
545 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800546 prefixesHostX = \
547 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800548 main.log.info( prefixesHostX )
549 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
550 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
551
552 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
553 allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
554 getRoutesResult )
555 main.log.info( "allRoutes_actual = " )
556 main.log.info( allRoutesActual )
557
pingping-lin79011132015-01-27 15:27:27 -0800558 utilities.assertEquals(
559 expect="[]", actual=str( allRoutesActual ),
560 onpass="***Route number in SDN-IP is 0, correct!***",
561 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800562
563 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800564 main.log.report(
565 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800566 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800567 main.log.report(
568 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800569
570 main.step( "Check intents after deleting routes" )
571 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800572 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800573 main.QuaggaCliHost3.extractActualRouteIntents(
574 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800575 main.log.info( "main.ONOScli.intents()= " )
576 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800577 utilities.assertEquals(
578 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800579 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
580 0, correct!***",
581 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
582 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800583
584 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
585 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800586 "***MultiPointToSinglePoint Intents after deleting routes \
587 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800588 else:
589 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800590 "***MultiPointToSinglePoint Intents after deleting routes \
591 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800592
593 time.sleep( 20 )
594 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800595 pingTestResultsFile = \
596 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
597 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800598 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800599 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800600 main.log.info( pingTestResults )
601 time.sleep( 100 )
602
603 # main.step( "Test whether Mininet is started" )
604 # main.Mininet2.handle.sendline( "xterm host1" )
605 # main.Mininet2.handle.expect( "mininet>" )
606
607 def CASE1( self, main ):
608 """
609 Test the SDN-IP functionality
610 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800611 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
612 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800613 bgpIntentsExpected: expected PointToPointIntent intents
614 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800615 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
616 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800617 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
618 """
619 import time
620 import json
621 from operator import eq
622 # from datetime import datetime
623 from time import localtime, strftime
624
pingping-lin79011132015-01-27 15:27:27 -0800625 main.case("The test case is to help to setup the TestON environment \
626 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800627 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
628 # all expected routes for all BGP peers
629 allRoutesExpected = []
630 main.step( "Start to generate routes for all BGP peers" )
631 # bgpPeerHosts = []
632 # for i in range( 3, 5 ):
633 # bgpPeerHosts.append( "host" + str( i ) )
634 # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
635
636 # for i in range( 3, 5 ):
637 # QuaggaCliHost = "QuaggaCliHost" + str( i )
638 # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
639
640 # main.log.info( prefixes )
641 # allRoutesExpected.append( prefixes )
642 main.log.info( "Generate prefixes for host3" )
643 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
644 main.log.info( prefixesHost3 )
645 # generate route with next hop
646 for prefix in prefixesHost3:
647 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800648 routeIntentsExpectedHost3 = \
649 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
650 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
651 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800652
653 main.log.info( "Generate prefixes for host4" )
654 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
655 main.log.info( prefixesHost4 )
656 # generate route with next hop
657 for prefix in prefixesHost4:
658 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800659 routeIntentsExpectedHost4 = \
660 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
661 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
662 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800663
664 routeIntentsExpected = routeIntentsExpectedHost3 + \
665 routeIntentsExpectedHost4
666
667 cellName = main.params[ 'ENV' ][ 'cellName' ]
668 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
669 main.step( "Set cell for ONOS-cli environment" )
670 main.ONOScli.setCell( cellName )
671 verifyResult = main.ONOSbench.verifyCell()
672 main.log.report( "Removing raft logs" )
673 main.ONOSbench.onosRemoveRaftLogs()
674 main.log.report( "Uninstalling ONOS" )
675 main.ONOSbench.onosUninstall( ONOS1Ip )
676 main.step( "Creating ONOS package" )
677 packageResult = main.ONOSbench.onosPackage()
678
679 main.step( "Starting ONOS service" )
680 # TODO: start ONOS from Mininet Script
681 # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
682 main.step( "Installing ONOS package" )
683 onos1InstallResult = main.ONOSbench.onosInstall(
684 options="-f", node=ONOS1Ip )
685
686 main.step( "Checking if ONOS is up yet" )
687 time.sleep( 60 )
688 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
689 if not onos1Isup:
690 main.log.report( "ONOS1 didn't start!" )
691
692 main.step( "Start ONOS-cli" )
693 # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
694
695 main.ONOScli.startOnosCli( ONOS1Ip )
696
697 main.step( "Get devices in the network" )
698 listResult = main.ONOScli.devices( jsonFormat=False )
699 main.log.info( listResult )
700 time.sleep( 10 )
701 main.log.info( "Installing sdn-ip feature" )
702 main.ONOScli.featureInstall( "onos-app-sdnip" )
703 time.sleep( 10 )
704 main.step( "Login all BGP peers and add routes into peers" )
705 main.log.info( "Login Quagga CLI on host3" )
706 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
707 main.log.info( "Enter configuration model of Quagga CLI on host3" )
708 main.QuaggaCliHost3.enterConfig( 64514 )
709 main.log.info( "Add routes to Quagga on host3" )
710 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
711
712 main.log.info( "Login Quagga CLI on host4" )
713 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
714 main.log.info( "Enter configuration model of Quagga CLI on host4" )
715 main.QuaggaCliHost4.enterConfig( 64516 )
716 main.log.info( "Add routes to Quagga on host4" )
717 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
718 time.sleep( 60 )
719
720 # get all routes inside SDN-IP
721 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
722
723 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800724 allRoutesActual = \
725 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800726
727 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
728 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
729 main.step( "Check routes installed" )
730 main.log.info( "Routes expected:" )
731 main.log.info( allRoutesStrExpected )
732 main.log.info( "Routes get from ONOS CLI:" )
733 main.log.info( allRoutesStrActual )
734 utilities.assertEquals(
735 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800736 onpass="***Routes in SDN-IP are correct!***",
737 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800738 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
739 main.log.report(
740 "***Routes in SDN-IP after adding routes are correct!***" )
741 else:
742 main.log.report(
743 "***Routes in SDN-IP after adding routes are wrong!***" )
744
745 time.sleep( 20 )
746 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
747
748 main.step( "Check MultiPointToSinglePointIntent intents installed" )
749 # routeIntentsExpected are generated when generating routes
750 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800751 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800752 main.QuaggaCliHost3.extractActualRouteIntents(
753 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800754 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
755 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
756 main.log.info( "MultiPointToSinglePoint intents expected:" )
757 main.log.info( routeIntentsStrExpected )
758 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
759 main.log.info( routeIntentsStrActual )
760 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800761 expect=True,
762 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
763 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
764 correct!***",
765 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
766 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800767
768 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
769 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800770 "***MultiPointToSinglePoint Intents before deleting routes \
771 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800772 else:
773 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800774 "***MultiPointToSinglePoint Intents before deleting routes \
775 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800776
777 main.step( "Check BGP PointToPointIntent intents installed" )
778 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800779 bgpIntentsExpected = \
780 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800781 # get BGP intents from ONOS CLI
782 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
783 getIntentsResult )
784
785 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
786 bgpIntentsStrActual = str( bgpIntentsActual )
787 main.log.info( "PointToPointIntent intents expected:" )
788 main.log.info( bgpIntentsStrExpected )
789 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
790 main.log.info( bgpIntentsStrActual )
791
792 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800793 expect=True,
794 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
795 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
796 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800797
798 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
799 main.log.report(
800 "***PointToPointIntent Intents in SDN-IP are correct!***" )
801 else:
802 main.log.report(
803 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
804
805 #============================= Ping Test ========================
806 # wait until all MultiPointToSinglePoint
807 time.sleep( 20 )
808 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800809 pingTestResultsFile = \
810 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
811 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800812 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800813 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800814 main.log.info( pingTestResults )
815
816 # ping test
817
818 #============================= Deleting Routes ==================
819 main.step( "Check deleting routes installed" )
820 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
821 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
822
823 # main.log.info( "main.ONOScli.get_routes_num() = " )
824 # main.log.info( main.ONOScli.getRoutesNum() )
825 # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
826 # main.ONOScli.getRoutesNum(),
827 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800828 allRoutesActual = \
829 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800830 main.log.info( "allRoutes_actual = " )
831 main.log.info( allRoutesActual )
832
pingping-lin79011132015-01-27 15:27:27 -0800833 utilities.assertEquals(
834 expect="[]", actual=str( allRoutesActual ),
835 onpass="***Route number in SDN-IP is 0, correct!***",
836 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800837
838 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800839 main.log.report(
840 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800841 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800842 main.log.report(
843 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800844
845 main.step( "Check intents after deleting routes" )
846 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800847 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800848 main.QuaggaCliHost3.extractActualRouteIntents(
849 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800850 main.log.info( "main.ONOScli.intents()= " )
851 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800852 utilities.assertEquals(
853 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800854 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
855 0, correct!***",
856 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
857 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800858
859 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
860 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800861 "***MultiPointToSinglePoint Intents after deleting routes \
862 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800863 else:
864 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800865 "***MultiPointToSinglePoint Intents after deleting routes \
866 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800867
868 time.sleep( 20 )
869 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800870 pingTestResultsFile = \
871 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
872 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800873 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800874 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800875 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -0800876 time.sleep( 30 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800877
kelvin-onlab8a832582015-01-16 17:06:11 -0800878 # main.step( "Test whether Mininet is started" )
879 # main.Mininet2.handle.sendline( "xterm host1" )
880 # main.Mininet2.handle.expect( "mininet>" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800881
kelvin-onlab8a832582015-01-16 17:06:11 -0800882 def CASE2( self, main ):
883 """
pingping-lin3d87a132014-12-04 14:22:49 -0800884 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -0800885 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800886 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
887 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800888 bgpIntentsExpected: expected PointToPointIntent intents
889 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800890 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
891 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800892 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800893 """
pingping-lin3d87a132014-12-04 14:22:49 -0800894 import time
895 import json
896 from operator import eq
897 from time import localtime, strftime
898
kelvin-onlab8a832582015-01-16 17:06:11 -0800899 main.case(
pingping-lin00e4f7f2015-01-27 16:30:06 -0800900 "The test case is to help to setup the TestON environment and \
901 test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800902 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin3d87a132014-12-04 14:22:49 -0800903 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800904 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800905 main.step( "Start to generate routes for all BGP peers" )
pingping-lin3d87a132014-12-04 14:22:49 -0800906
kelvin-onlab8a832582015-01-16 17:06:11 -0800907 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800908 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
909 main.log.info( prefixesHost3 )
pingping-lin3d87a132014-12-04 14:22:49 -0800910 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800911 for prefix in prefixesHost3:
912 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800913 routeIntentsExpectedHost3 = \
914 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
915 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
916 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800917
kelvin-onlab8a832582015-01-16 17:06:11 -0800918 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800919 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
920 main.log.info( prefixesHost4 )
pingping-lin3d87a132014-12-04 14:22:49 -0800921 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800922 for prefix in prefixesHost4:
923 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800924 routeIntentsExpectedHost4 = \
925 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
926 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
927 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800928
pingping-linc1c696e2015-01-27 13:46:44 -0800929 routeIntentsExpected = routeIntentsExpectedHost3 + \
930 routeIntentsExpectedHost4
pingping-lin3d87a132014-12-04 14:22:49 -0800931
kelvin-onlab8a832582015-01-16 17:06:11 -0800932 main.log.report( "Removing raft logs" )
pingping-linc1c696e2015-01-27 13:46:44 -0800933 main.ONOSbench.onosRemoveRaftLogs()
kelvin-onlab8a832582015-01-16 17:06:11 -0800934 main.log.report( "Uninstalling ONOS" )
pingping-linc1c696e2015-01-27 13:46:44 -0800935 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800936
pingping-linc1c696e2015-01-27 13:46:44 -0800937 cellName = main.params[ 'ENV' ][ 'cellName' ]
938 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -0800939 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -0800940 main.ONOScli.setCell( cellName )
941 verifyResult = main.ONOSbench.verifyCell()
942 # main.log.report( "Removing raft logs" )
943 # main.ONOSbench.onosRemoveRaftLogs()
944 # main.log.report( "Uninstalling ONOS" )
945 # main.ONOSbench.onosUninstall( ONOS1Ip )
kelvin-onlab8a832582015-01-16 17:06:11 -0800946 main.step( "Creating ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800947 # packageResult = main.ONOSbench.onosPackage()
pingping-lin3d87a132014-12-04 14:22:49 -0800948
kelvin-onlab8a832582015-01-16 17:06:11 -0800949 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800950 # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
951 # node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800952
kelvin-onlab8a832582015-01-16 17:06:11 -0800953 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -0800954 # time.sleep( 60 )
955 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
956 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -0800957 main.log.report( "ONOS1 didn't start!" )
pingping-lin3d87a132014-12-04 14:22:49 -0800958
kelvin-onlab8a832582015-01-16 17:06:11 -0800959 main.step( "Start ONOS-cli" )
pingping-linc1c696e2015-01-27 13:46:44 -0800960 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800961
kelvin-onlab8a832582015-01-16 17:06:11 -0800962 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800963 listResult = main.ONOScli.devices( jsonFormat=False )
964 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800965 time.sleep( 10 )
966 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800967 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800968 time.sleep( 10 )
pingping-lin3d87a132014-12-04 14:22:49 -0800969
kelvin-onlab8a832582015-01-16 17:06:11 -0800970 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin3d87a132014-12-04 14:22:49 -0800971 # bgp intents expected
pingping-linc1c696e2015-01-27 13:46:44 -0800972 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
973 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800974 # get BGP intents from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800975 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
976 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
977 getIntentsResult )
pingping-lin3d87a132014-12-04 14:22:49 -0800978
pingping-linc1c696e2015-01-27 13:46:44 -0800979 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
980 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800981 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800982 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800983 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800984 main.log.info( bgpIntentsStrActual )
pingping-lin3d87a132014-12-04 14:22:49 -0800985
pingping-linc1c696e2015-01-27 13:46:44 -0800986 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800987 expect=True,
988 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
989 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
990 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800991
pingping-linc1c696e2015-01-27 13:46:44 -0800992 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800993 main.log.report(
994 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800995 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800996 main.log.report(
997 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800998
pingping-linc1c696e2015-01-27 13:46:44 -0800999 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1000 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1001 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
1002 # roundNum = 0;
kelvin-onlab8a832582015-01-16 17:06:11 -08001003 # while( True ):
pingping-linc1c696e2015-01-27 13:46:44 -08001004 for roundNum in range( 1, 6 ):
pingping-lin3d87a132014-12-04 14:22:49 -08001005 # round = round + 1;
pingping-linc1c696e2015-01-27 13:46:44 -08001006 main.log.report( "The Round " + str( roundNum ) +
pingping-lin00e4f7f2015-01-27 16:30:06 -08001007 " test starts................................" )
pingping-lin3d87a132014-12-04 14:22:49 -08001008
kelvin-onlab8a832582015-01-16 17:06:11 -08001009 main.step( "Login all BGP peers and add routes into peers" )
1010 main.log.info( "Login Quagga CLI on host3" )
1011 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001012 main.log.info(
1013 "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001014 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001015 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001016 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001017
kelvin-onlab8a832582015-01-16 17:06:11 -08001018 main.log.info( "Login Quagga CLI on host4" )
1019 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001020 main.log.info(
1021 "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001022 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001023 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001024 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001025 time.sleep( 60 )
pingping-lin3d87a132014-12-04 14:22:49 -08001026
1027 # get all routes inside SDN-IP
pingping-linc1c696e2015-01-27 13:46:44 -08001028 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001029
1030 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001031 allRoutesActual = \
1032 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001033
pingping-linc1c696e2015-01-27 13:46:44 -08001034 # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1035 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001036 main.step( "Check routes installed" )
1037 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001038 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001039 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001040 main.log.info( allRoutesStrActual )
1041 utilities.assertEquals(
1042 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -08001043 onpass="***Routes in SDN-IP are correct!***",
1044 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -08001045 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001046 main.log.report(
1047 "***Routes in SDN-IP after adding correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001048 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -08001049 main.log.report(
1050 "***Routes in SDN-IP after adding wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001051
kelvin-onlab8a832582015-01-16 17:06:11 -08001052 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001053 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001054
kelvin-onlab8a832582015-01-16 17:06:11 -08001055 main.step(
1056 "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -08001057 # routeIntentsExpected are generated when generating routes
pingping-lin3d87a132014-12-04 14:22:49 -08001058 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001059 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001060 main.QuaggaCliHost3.extractActualRouteIntents(
1061 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -08001062 # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1063 routeIntentsStrActual = str(
pingping-lin79011132015-01-27 15:27:27 -08001064 routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001065 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001066 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001067 main.log.info(
1068 "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001069 main.log.info( routeIntentsStrActual )
1070 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001071 expect=True,
1072 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
1073 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
1074 correct!***",
1075 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
1076 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001077
pingping-linc1c696e2015-01-27 13:46:44 -08001078 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001079 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001080 "***MultiPointToSinglePoint Intents after adding routes \
1081 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001082 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001083 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001084 "***MultiPointToSinglePoint Intents after adding routes \
1085 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001086
1087 #============================= Ping Test ========================
1088 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -08001089 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001090 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001091 pingTestResultsFile = \
1092 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001093 + str( roundNum ) + "-ping-results-before-delete-routes-" \
1094 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001095 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001096 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001097 main.log.info( pingTestResults )
pingping-lin3d87a132014-12-04 14:22:49 -08001098 # ping test
1099
1100 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -08001101 main.step( "Check deleting routes installed" )
1102 main.log.info( "Delete routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001103 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001104 main.log.info( "Delete routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001105 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001106
pingping-linc1c696e2015-01-27 13:46:44 -08001107 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001108 allRoutesActual = \
1109 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001110 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -08001111 main.log.info( allRoutesActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001112
pingping-lin79011132015-01-27 15:27:27 -08001113 utilities.assertEquals(
1114 expect="[]", actual=str( allRoutesActual ),
1115 onpass="***Route number in SDN-IP is 0, correct!***",
1116 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001117
pingping-linc1c696e2015-01-27 13:46:44 -08001118 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001119 main.log.report(
1120 "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001121 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001122 main.log.report(
1123 "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001124
kelvin-onlab8a832582015-01-16 17:06:11 -08001125 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -08001126 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001127 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001128 main.QuaggaCliHost3.extractActualRouteIntents(
1129 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001130 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -08001131 main.log.info( routeIntentsActual )
1132 utilities.assertEquals(
1133 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -08001134 onpass=
1135 "***MultiPointToSinglePoint Intents number in SDN-IP \
1136 is 0, correct!***",
1137 onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
1138 is 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001139
pingping-linc1c696e2015-01-27 13:46:44 -08001140 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001141 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001142 "***MultiPointToSinglePoint Intents after deleting \
1143 routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001144 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001145 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001146 "***MultiPointToSinglePoint Intents after deleting \
1147 routes wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001148
kelvin-onlab8a832582015-01-16 17:06:11 -08001149 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001150 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001151 pingTestResultsFile = \
1152 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001153 + str( roundNum ) + "-ping-results-after-delete-routes-" \
1154 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001155 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001156 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001157 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -08001158 time.sleep( 30 )
pingping-linc1c696e2015-01-27 13:46:44 -08001159