blob: cf51848a82f82bbfa5d1c24c3a9b4aac27c40576 [file] [log] [blame]
pingping-lin8b306ac2014-11-17 18:13:51 -08001
pingping-lin26521182015-01-30 14:52:39 -08002# Testing the functionality of SDN-IP with single ONOS instance
pingping-lin8b306ac2014-11-17 18:13:51 -08003class SdnIpTest:
kelvin-onlab8a832582015-01-16 17:06:11 -08004
5 def __init__( self ):
pingping-lin8b306ac2014-11-17 18:13:51 -08006 self.default = ''
pingping-lin26521182015-01-30 14:52:39 -08007
8 # This case is to setup ONOS
pingping-lina600d9b2015-01-30 13:57:26 -08009 def CASE100( self, main ):
pingping-lina600d9b2015-01-30 13:57:26 -080010 """
11 CASE100 is to compile ONOS and push it to the test machines
12 Startup sequence:
13 git pull
14 mvn clean install
15 onos-package
16 cell <name>
17 onos-verify-cell
18 onos-install -f
19 onos-wait-for-start
20 """
21 main.case( "Setting up test environment" )
pingping-lin8b306ac2014-11-17 18:13:51 -080022
pingping-lina600d9b2015-01-30 13:57:26 -080023 cellName = main.params[ 'ENV' ][ 'cellName' ]
24 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
pingping-linc1c696e2015-01-27 13:46:44 -080025
pingping-lina600d9b2015-01-30 13:57:26 -080026 main.step( "Applying cell variable to environment" )
27 cellResult = main.ONOSbench.setCell( cellName )
28 verifyResult = main.ONOSbench.verifyCell()
pingping-lin26521182015-01-30 14:52:39 -080029
pingping-lina600d9b2015-01-30 13:57:26 -080030 main.log.report( "Uninstalling ONOS" )
31 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-linc1c696e2015-01-27 13:46:44 -080032
pingping-lina600d9b2015-01-30 13:57:26 -080033 cleanInstallResult = main.TRUE
34 gitPullResult = main.TRUE
pingping-lin26521182015-01-30 14:52:39 -080035
pingping-lina600d9b2015-01-30 13:57:26 -080036 main.step( "Git pull" )
pingping-lina600d9b2015-01-30 13:57:26 -080037 gitPullResult = main.ONOSbench.gitPull()
pingping-lin26521182015-01-30 14:52:39 -080038
pingping-lina600d9b2015-01-30 13:57:26 -080039 main.step( "Using mvn clean & install" )
40 cleanInstallResult = main.TRUE
41 if gitPullResult == main.TRUE:
42 cleanInstallResult = main.ONOSbench.cleanInstall()
43 else:
44 main.log.warn( "Did not pull new code so skipping mvn " +
45 "clean install" )
46 main.ONOSbench.getVersion( report=True )
47
pingping-lin26521182015-01-30 14:52:39 -080048 #cellResult = main.ONOSbench.setCell( cellName )
49 #verifyResult = main.ONOSbench.verifyCell()
pingping-lina600d9b2015-01-30 13:57:26 -080050 main.step( "Creating ONOS package" )
51 packageResult = main.ONOSbench.onosPackage()
52
53 main.step( "Installing ONOS package" )
54 onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
55 node=ONOS1Ip )
56
57 main.step( "Checking if ONOS is up yet" )
58 for i in range( 2 ):
59 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
60 if onos1Isup:
61 break
62 if not onos1Isup:
63 main.log.report( "ONOS1 didn't start!" )
64
65 cliResult = main.ONOScli.startOnosCli( ONOS1Ip )
66
67 case1Result = ( cleanInstallResult and packageResult and
68 cellResult and verifyResult and
69 onos1InstallResult and
70 onos1Isup and cliResult )
71
72 utilities.assert_equals( expect=main.TRUE, actual=case1Result,
pingping-lin26521182015-01-30 14:52:39 -080073 onpass="ONOS startup successful",
74 onfail="ONOS startup NOT successful" )
pingping-lina600d9b2015-01-30 13:57:26 -080075
76 if case1Result == main.FALSE:
77 main.cleanup()
78 main.exit()
pingping-linc1c696e2015-01-27 13:46:44 -080079
80 def CASE4( self, main ):
kelvin-onlab8a832582015-01-16 17:06:11 -080081 """
pingping-lin8b306ac2014-11-17 18:13:51 -080082 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -080083 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -080084 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
85 intents
pingping-linc1c696e2015-01-27 13:46:44 -080086 bgpIntentsExpected: expected PointToPointIntent intents
87 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -080088 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
89 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -080090 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -080091 """
pingping-lin8b306ac2014-11-17 18:13:51 -080092 import time
93 import json
94 from operator import eq
pingping-lin01355a62014-12-02 20:58:14 -080095 from time import localtime, strftime
pingping-linc6b86fa2014-12-01 16:18:10 -080096
pingping-lin26521182015-01-30 14:52:39 -080097 main.case("This case is to testing the functionality of SDN-IP with \
98 single ONOS instance" )
pingping-lin79011132015-01-27 15:27:27 -080099 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800100 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-lin6f6332e2014-11-19 19:13:58 -0800101 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800102 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800103 main.step( "Start to generate routes for all BGP peers" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800104 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800105 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
106 main.log.info( prefixesHost3 )
pingping-lin36fbe802014-11-25 16:01:14 -0800107 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800108 for prefix in prefixesHost3:
109 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800110 routeIntentsExpectedHost3 = \
111 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
112 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
113 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800114
kelvin-onlab8a832582015-01-16 17:06:11 -0800115 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800116 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
117 main.log.info( prefixesHost4 )
pingping-lin36fbe802014-11-25 16:01:14 -0800118 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800119 for prefix in prefixesHost4:
120 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800121 routeIntentsExpectedHost4 = \
122 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
123 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
124 SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800125
pingping-linc1c696e2015-01-27 13:46:44 -0800126 main.log.info( "Generate prefixes for host5" )
127 prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
128 main.log.info( prefixesHost5 )
129 for prefix in prefixesHost5:
130 allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
pingping-lin79011132015-01-27 15:27:27 -0800131 routeIntentsExpectedHost5 = \
132 main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
133 prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
134 SDNIPJSONFILEPATH )
pingping-lin8b306ac2014-11-17 18:13:51 -0800135
pingping-linc1c696e2015-01-27 13:46:44 -0800136 routeIntentsExpected = routeIntentsExpectedHost3 + \
137 routeIntentsExpectedHost4 + routeIntentsExpectedHost5
pingping-lina600d9b2015-01-30 13:57:26 -0800138
kelvin-onlab8a832582015-01-16 17:06:11 -0800139 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800140 listResult = main.ONOScli.devices( jsonFormat=False )
141 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800142 time.sleep( 10 )
143 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800144 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800145 time.sleep( 10 )
146 main.step( "Login all BGP peers and add routes into peers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800147
kelvin-onlab8a832582015-01-16 17:06:11 -0800148 main.log.info( "Login Quagga CLI on host3" )
149 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
150 main.log.info( "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800151 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800152 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800153 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-linbc230942014-12-03 18:36:27 -0800154
kelvin-onlab8a832582015-01-16 17:06:11 -0800155 main.log.info( "Login Quagga CLI on host4" )
156 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
157 main.log.info( "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800158 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -0800159 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800160 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
161
162 main.log.info( "Login Quagga CLI on host5" )
163 main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
164 main.log.info( "Enter configuration model of Quagga CLI on host5" )
165 main.QuaggaCliHost5.enterConfig( 64521 )
166 main.log.info( "Add routes to Quagga on host5" )
167 main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
168
169 for i in range( 101, 201 ):
170 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
171 main.log.info( prefixesHostX )
172 for prefix in prefixesHostX:
pingping-lina600d9b2015-01-30 13:57:26 -0800173 allRoutesExpected.append( prefix + "/" + "192.168.40." + str( i - 100 ) )
pingping-linc1c696e2015-01-27 13:46:44 -0800174
pingping-lin79011132015-01-27 15:27:27 -0800175 routeIntentsExpectedHostX = \
176 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
177 prefixesHostX, "192.168.40." + str( i - 100 ),
178 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800179 routeIntentsExpected = routeIntentsExpected + \
180 routeIntentsExpectedHostX
181
182 main.log.info( "Login Quagga CLI on host" + str( i ) )
183 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
184 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
185 main.log.info(
186 "Enter configuration model of Quagga CLI on host" + str( i ) )
187 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
188 main.log.info( "Add routes to Quagga on host" + str( i ) )
189 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
190
kelvin-onlab8a832582015-01-16 17:06:11 -0800191 time.sleep( 60 )
pingping-lin8b306ac2014-11-17 18:13:51 -0800192
pingping-linc1c696e2015-01-27 13:46:44 -0800193 # get routes inside SDN-IP
194 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-linc6b86fa2014-12-01 16:18:10 -0800195
pingping-lin8b306ac2014-11-17 18:13:51 -0800196 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800197 allRoutesActual = \
198 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lina600d9b2015-01-30 13:57:26 -0800199
pingping-linc1c696e2015-01-27 13:46:44 -0800200 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
201 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800202 main.step( "Check routes installed" )
203 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800204 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800205 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800206 main.log.info( allRoutesStrActual )
207 utilities.assertEquals(
208 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800209 onpass="***Routes in SDN-IP are correct!***",
210 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800211 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800212 main.log.report(
213 "***Routes in SDN-IP after adding routes are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800214 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800215 main.log.report(
216 "***Routes in SDN-IP after adding routes are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800217
kelvin-onlab8a832582015-01-16 17:06:11 -0800218 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800219 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin6f6332e2014-11-19 19:13:58 -0800220
kelvin-onlab8a832582015-01-16 17:06:11 -0800221 main.step( "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800222 # routeIntentsExpected are generated when generating routes
pingping-lin26521182015-01-30 14:52:39 -0800223 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800224 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800225 main.QuaggaCliHost3.extractActualRouteIntents(
226 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800227 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
228 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800229 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800230 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800231 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800232 main.log.info( routeIntentsStrActual )
233 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800234 expect=True,
235 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
236 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
237 correct!***",
238 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
239 wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800240
pingping-linc1c696e2015-01-27 13:46:44 -0800241 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800242 main.log.report( "***MultiPointToSinglePoint Intents before \
243 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800244 else:
pingping-lin79011132015-01-27 15:27:27 -0800245 main.log.report( "***MultiPointToSinglePoint Intents before \
246 deleting routes wrong!***" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800247
kelvin-onlab8a832582015-01-16 17:06:11 -0800248 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin6f6332e2014-11-19 19:13:58 -0800249 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800250 bgpIntentsExpected = \
251 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-lin6f6332e2014-11-19 19:13:58 -0800252 # get BGP intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800253 bgpIntentsActual = \
254 main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
pingping-lin3228e132014-11-20 17:49:02 -0800255
pingping-linc1c696e2015-01-27 13:46:44 -0800256 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
257 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -0800258 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800259 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -0800260 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -0800261 main.log.info( bgpIntentsStrActual )
pingping-lin3228e132014-11-20 17:49:02 -0800262
pingping-linc1c696e2015-01-27 13:46:44 -0800263 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800264 expect=True,
265 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
266 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
267 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800268
pingping-linc1c696e2015-01-27 13:46:44 -0800269 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800270 main.log.report(
271 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800272 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800273 main.log.report(
274 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800275
pingping-linc6b86fa2014-12-01 16:18:10 -0800276 #============================= Ping Test ========================
pingping-lin26521182015-01-30 14:52:39 -0800277 # Wait until all MultiPointToSinglePoint intents are in system
kelvin-onlab8a832582015-01-16 17:06:11 -0800278 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800279 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800280 pingTestResultsFile = \
281 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-" \
282 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800283 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800284 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800285 main.log.info( pingTestResults )
286 time.sleep( 20 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800287
288 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -0800289 main.step( "Check deleting routes installed" )
pingping-linc1c696e2015-01-27 13:46:44 -0800290 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
291 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
292 main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800293
pingping-linc1c696e2015-01-27 13:46:44 -0800294 for i in range( 101, 201 ):
295 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
296 main.log.info( prefixesHostX )
297 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
298 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
299
300 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800301 allRoutesActual = \
302 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800303 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -0800304 main.log.info( allRoutesActual )
pingping-linc6b86fa2014-12-01 16:18:10 -0800305
pingping-lin79011132015-01-27 15:27:27 -0800306 utilities.assertEquals(
307 expect="[]", actual=str( allRoutesActual ),
308 onpass="***Route number in SDN-IP is 0, correct!***",
309 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800310
pingping-linc1c696e2015-01-27 13:46:44 -0800311 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -0800312 main.log.report( "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800313 else:
kelvin-onlab8a832582015-01-16 17:06:11 -0800314 main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800315
kelvin-onlab8a832582015-01-16 17:06:11 -0800316 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -0800317 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800318 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800319 main.QuaggaCliHost3.extractActualRouteIntents(
320 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800321 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -0800322 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800323 utilities.assertEquals(
324 expect="[]", actual=str( routeIntentsActual ),
325 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
326 correct!***",
327 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
328 wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800329
pingping-linc1c696e2015-01-27 13:46:44 -0800330 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
pingping-lin79011132015-01-27 15:27:27 -0800331 main.log.report( "***MultiPointToSinglePoint Intents after \
332 deleting routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -0800333 else:
pingping-lin79011132015-01-27 15:27:27 -0800334 main.log.report( "***MultiPointToSinglePoint Intents after \
335 deleting routes wrong!***" )
pingping-linc6b86fa2014-12-01 16:18:10 -0800336
kelvin-onlab8a832582015-01-16 17:06:11 -0800337 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -0800338 pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800339 pingTestResultsFile = \
pingping-lin26521182015-01-30 14:52:39 -0800340 "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-"\
pingping-lin79011132015-01-27 15:27:27 -0800341 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800342 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800343 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800344 main.log.info( pingTestResults )
345 time.sleep( 100 )
346
pingping-linc1c696e2015-01-27 13:46:44 -0800347
348 def CASE3( self, main ):
349 """
350 Test the SDN-IP functionality
351 allRoutesExpected: all expected routes for all BGP peers
pingping-lin26521182015-01-30 14:52:39 -0800352 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
353 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800354 bgpIntentsExpected: expected PointToPointIntent intents
355 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800356 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
357 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800358 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
359 """
360 import time
361 import json
362 from operator import eq
363 # from datetime import datetime
364 from time import localtime, strftime
365
pingping-lin00e4f7f2015-01-27 16:30:06 -0800366 main.case( "The test case is to help to setup the TestON \
367 environment and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800368 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800369 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800370 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-linc1c696e2015-01-27 13:46:44 -0800371 # all expected routes for all BGP peers
372 allRoutesExpected = []
373 main.step( "Start to generate routes for all BGP peers" )
374 main.log.info( "Generate prefixes for host3" )
375 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
376 main.log.info( prefixesHost3 )
377 # generate route with next hop
378 for prefix in prefixesHost3:
379 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800380 routeIntentsExpectedHost3 = \
381 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
382 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
383 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800384
385 main.log.info( "Generate prefixes for host4" )
386 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
387 main.log.info( prefixesHost4 )
388 # generate route with next hop
389 for prefix in prefixesHost4:
390 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800391 routeIntentsExpectedHost4 = \
392 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
393 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
394 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800395
396 routeIntentsExpected = routeIntentsExpectedHost3 + \
397 routeIntentsExpectedHost4
398
pingping-linc1c696e2015-01-27 13:46:44 -0800399 cellName = main.params[ 'ENV' ][ 'cellName' ]
400 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
401 main.step( "Set cell for ONOS-cli environment" )
402 main.ONOScli.setCell( cellName )
403 verifyResult = main.ONOSbench.verifyCell()
404
405 main.log.report( "Removing raft logs" )
406 main.ONOSbench.onosRemoveRaftLogs()
407 main.log.report( "Uninstalling ONOS" )
408 main.ONOSbench.onosUninstall( ONOS1Ip )
409
410 main.step( "Installing ONOS package" )
411 onos1InstallResult = main.ONOSbench.onosInstall(
412 options="-f", node=ONOS1Ip )
413
414 main.step( "Checking if ONOS is up yet" )
415 time.sleep( 60 )
416 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
417 if not onos1Isup:
418 main.log.report( "ONOS1 didn't start!" )
419
420 main.step( "Start ONOS-cli" )
421
422 main.ONOScli.startOnosCli( ONOS1Ip )
423
424 main.step( "Get devices in the network" )
425 listResult = main.ONOScli.devices( jsonFormat=False )
426 main.log.info( listResult )
427 time.sleep( 10 )
428 main.log.info( "Installing sdn-ip feature" )
429 main.ONOScli.featureInstall( "onos-app-sdnip" )
430 time.sleep( 10 )
431 main.step( "Login all BGP peers and add routes into peers" )
432
433 main.log.info( "Login Quagga CLI on host3" )
434 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
435 main.log.info( "Enter configuration model of Quagga CLI on host3" )
436 main.QuaggaCliHost3.enterConfig( 64514 )
437 main.log.info( "Add routes to Quagga on host3" )
438 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
439
440 main.log.info( "Login Quagga CLI on host4" )
441 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
442 main.log.info( "Enter configuration model of Quagga CLI on host4" )
443 main.QuaggaCliHost4.enterConfig( 64516 )
444 main.log.info( "Add routes to Quagga on host4" )
445 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
446
447 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800448 prefixesHostX = \
449 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800450 main.log.info( prefixesHostX )
451 for prefix in prefixesHostX:
452 allRoutesExpected.append(
453 prefix + "/" + "192.168.40." + str( i - 100 ) )
454
pingping-lin79011132015-01-27 15:27:27 -0800455 routeIntentsExpectedHostX = \
456 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
457 prefixesHostX, "192.168.40." + str( i - 100 ),
458 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800459 routeIntentsExpected = routeIntentsExpected + \
460 routeIntentsExpectedHostX
461
462 main.log.info( "Login Quagga CLI on host" + str( i ) )
463 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
464 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
465 main.log.info(
466 "Enter configuration model of Quagga CLI on host" + str( i ) )
467 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
468 main.log.info( "Add routes to Quagga on host" + str( i ) )
469 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
470
471 time.sleep( 60 )
472
473 # get routes inside SDN-IP
474 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
475
476 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800477 allRoutesActual = \
478 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800479
480 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
481 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
482 main.step( "Check routes installed" )
483 main.log.info( "Routes expected:" )
484 main.log.info( allRoutesStrExpected )
485 main.log.info( "Routes get from ONOS CLI:" )
486 main.log.info( allRoutesStrActual )
487 utilities.assertEquals(
488 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800489 onpass="***Routes in SDN-IP are correct!***",
490 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800491 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
492 main.log.report(
493 "***Routes in SDN-IP after adding routes are correct!***" )
494 else:
495 main.log.report(
496 "***Routes in SDN-IP after adding routes are wrong!***" )
497
498 time.sleep( 20 )
499 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
500
501 main.step( "Check MultiPointToSinglePointIntent intents installed" )
502 # routeIntentsExpected are generated when generating routes
503 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800504 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800505 main.QuaggaCliHost3.extractActualRouteIntents(
506 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800507 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
508 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
509 main.log.info( "MultiPointToSinglePoint intents expected:" )
510 main.log.info( routeIntentsStrExpected )
511 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
512 main.log.info( routeIntentsStrActual )
513 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800514 expect=True,
515 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
516 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
517 correct!***",
518 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
519 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800520
521 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
522 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800523 "***MultiPointToSinglePoint Intents before deleting routes \
524 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800525 else:
526 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800527 "***MultiPointToSinglePoint Intents before deleting routes \
528 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800529
530 main.step( "Check BGP PointToPointIntent intents installed" )
531 # bgp intents expected
532 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
533 SDNIPJSONFILEPATH )
534 # get BGP intents from ONOS CLI
535 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
536 getIntentsResult )
537
538 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
539 bgpIntentsStrActual = str( bgpIntentsActual )
540 main.log.info( "PointToPointIntent intents expected:" )
541 main.log.info( bgpIntentsStrExpected )
542 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
543 main.log.info( bgpIntentsStrActual )
544
545 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800546 expect=True,
547 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
548 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
549 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800550
551 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
552 main.log.report(
553 "***PointToPointIntent Intents in SDN-IP are correct!***" )
554 else:
555 main.log.report(
556 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
557
558 #============================= Ping Test ========================
559 # wait until all MultiPointToSinglePoint
560 time.sleep( 20 )
561 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800562 pingTestResultsFile = \
563 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
564 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800565 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800566 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800567 main.log.info( pingTestResults )
568 time.sleep( 20 )
569
570 #============================= Deleting Routes ==================
571 main.step( "Check deleting routes installed" )
572 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
573 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
574 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800575 prefixesHostX = \
576 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800577 main.log.info( prefixesHostX )
578 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
579 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
580
581 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
582 allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
583 getRoutesResult )
584 main.log.info( "allRoutes_actual = " )
585 main.log.info( allRoutesActual )
586
pingping-lin79011132015-01-27 15:27:27 -0800587 utilities.assertEquals(
588 expect="[]", actual=str( allRoutesActual ),
589 onpass="***Route number in SDN-IP is 0, correct!***",
590 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800591
592 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800593 main.log.report(
594 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800595 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800596 main.log.report(
597 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800598
599 main.step( "Check intents after deleting routes" )
600 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800601 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800602 main.QuaggaCliHost3.extractActualRouteIntents(
603 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800604 main.log.info( "main.ONOScli.intents()= " )
605 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800606 utilities.assertEquals(
607 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800608 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
609 0, correct!***",
610 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
611 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800612
613 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
614 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800615 "***MultiPointToSinglePoint Intents after deleting routes \
616 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800617 else:
618 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800619 "***MultiPointToSinglePoint Intents after deleting routes \
620 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800621
622 time.sleep( 20 )
623 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800624 pingTestResultsFile = \
625 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
626 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800627 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800628 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800629 main.log.info( pingTestResults )
630 time.sleep( 100 )
631
632 # main.step( "Test whether Mininet is started" )
633 # main.Mininet2.handle.sendline( "xterm host1" )
634 # main.Mininet2.handle.expect( "mininet>" )
635
636 def CASE1( self, main ):
637 """
638 Test the SDN-IP functionality
639 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800640 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
641 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800642 bgpIntentsExpected: expected PointToPointIntent intents
643 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800644 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
645 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800646 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
647 """
648 import time
649 import json
650 from operator import eq
651 # from datetime import datetime
652 from time import localtime, strftime
653
pingping-lin79011132015-01-27 15:27:27 -0800654 main.case("The test case is to help to setup the TestON environment \
655 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800656 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
657 # all expected routes for all BGP peers
658 allRoutesExpected = []
659 main.step( "Start to generate routes for all BGP peers" )
660 # bgpPeerHosts = []
661 # for i in range( 3, 5 ):
662 # bgpPeerHosts.append( "host" + str( i ) )
663 # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
664
665 # for i in range( 3, 5 ):
666 # QuaggaCliHost = "QuaggaCliHost" + str( i )
667 # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
668
669 # main.log.info( prefixes )
670 # allRoutesExpected.append( prefixes )
671 main.log.info( "Generate prefixes for host3" )
672 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
673 main.log.info( prefixesHost3 )
674 # generate route with next hop
675 for prefix in prefixesHost3:
676 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800677 routeIntentsExpectedHost3 = \
678 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
679 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
680 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800681
682 main.log.info( "Generate prefixes for host4" )
683 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
684 main.log.info( prefixesHost4 )
685 # generate route with next hop
686 for prefix in prefixesHost4:
687 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800688 routeIntentsExpectedHost4 = \
689 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
690 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
691 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800692
693 routeIntentsExpected = routeIntentsExpectedHost3 + \
694 routeIntentsExpectedHost4
695
696 cellName = main.params[ 'ENV' ][ 'cellName' ]
697 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
698 main.step( "Set cell for ONOS-cli environment" )
699 main.ONOScli.setCell( cellName )
700 verifyResult = main.ONOSbench.verifyCell()
701 main.log.report( "Removing raft logs" )
702 main.ONOSbench.onosRemoveRaftLogs()
703 main.log.report( "Uninstalling ONOS" )
704 main.ONOSbench.onosUninstall( ONOS1Ip )
705 main.step( "Creating ONOS package" )
706 packageResult = main.ONOSbench.onosPackage()
707
708 main.step( "Starting ONOS service" )
709 # TODO: start ONOS from Mininet Script
710 # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
711 main.step( "Installing ONOS package" )
712 onos1InstallResult = main.ONOSbench.onosInstall(
713 options="-f", node=ONOS1Ip )
714
715 main.step( "Checking if ONOS is up yet" )
716 time.sleep( 60 )
717 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
718 if not onos1Isup:
719 main.log.report( "ONOS1 didn't start!" )
720
721 main.step( "Start ONOS-cli" )
722 # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
723
724 main.ONOScli.startOnosCli( ONOS1Ip )
725
726 main.step( "Get devices in the network" )
727 listResult = main.ONOScli.devices( jsonFormat=False )
728 main.log.info( listResult )
729 time.sleep( 10 )
730 main.log.info( "Installing sdn-ip feature" )
731 main.ONOScli.featureInstall( "onos-app-sdnip" )
732 time.sleep( 10 )
733 main.step( "Login all BGP peers and add routes into peers" )
734 main.log.info( "Login Quagga CLI on host3" )
735 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
736 main.log.info( "Enter configuration model of Quagga CLI on host3" )
737 main.QuaggaCliHost3.enterConfig( 64514 )
738 main.log.info( "Add routes to Quagga on host3" )
739 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
740
741 main.log.info( "Login Quagga CLI on host4" )
742 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
743 main.log.info( "Enter configuration model of Quagga CLI on host4" )
744 main.QuaggaCliHost4.enterConfig( 64516 )
745 main.log.info( "Add routes to Quagga on host4" )
746 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
747 time.sleep( 60 )
748
749 # get all routes inside SDN-IP
750 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
751
752 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800753 allRoutesActual = \
754 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800755
756 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
757 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
758 main.step( "Check routes installed" )
759 main.log.info( "Routes expected:" )
760 main.log.info( allRoutesStrExpected )
761 main.log.info( "Routes get from ONOS CLI:" )
762 main.log.info( allRoutesStrActual )
763 utilities.assertEquals(
764 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800765 onpass="***Routes in SDN-IP are correct!***",
766 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800767 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
768 main.log.report(
769 "***Routes in SDN-IP after adding routes are correct!***" )
770 else:
771 main.log.report(
772 "***Routes in SDN-IP after adding routes are wrong!***" )
773
774 time.sleep( 20 )
775 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
776
777 main.step( "Check MultiPointToSinglePointIntent intents installed" )
778 # routeIntentsExpected are generated when generating routes
779 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800780 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800781 main.QuaggaCliHost3.extractActualRouteIntents(
782 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800783 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
784 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
785 main.log.info( "MultiPointToSinglePoint intents expected:" )
786 main.log.info( routeIntentsStrExpected )
787 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
788 main.log.info( routeIntentsStrActual )
789 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800790 expect=True,
791 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
792 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
793 correct!***",
794 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
795 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800796
797 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
798 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800799 "***MultiPointToSinglePoint Intents before deleting routes \
800 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800801 else:
802 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800803 "***MultiPointToSinglePoint Intents before deleting routes \
804 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800805
806 main.step( "Check BGP PointToPointIntent intents installed" )
807 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800808 bgpIntentsExpected = \
809 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800810 # get BGP intents from ONOS CLI
811 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
812 getIntentsResult )
813
814 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
815 bgpIntentsStrActual = str( bgpIntentsActual )
816 main.log.info( "PointToPointIntent intents expected:" )
817 main.log.info( bgpIntentsStrExpected )
818 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
819 main.log.info( bgpIntentsStrActual )
820
821 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800822 expect=True,
823 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
824 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
825 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800826
827 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
828 main.log.report(
829 "***PointToPointIntent Intents in SDN-IP are correct!***" )
830 else:
831 main.log.report(
832 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
833
834 #============================= Ping Test ========================
835 # wait until all MultiPointToSinglePoint
836 time.sleep( 20 )
837 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800838 pingTestResultsFile = \
839 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
840 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800841 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800842 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800843 main.log.info( pingTestResults )
844
845 # ping test
846
847 #============================= Deleting Routes ==================
848 main.step( "Check deleting routes installed" )
849 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
850 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
851
852 # main.log.info( "main.ONOScli.get_routes_num() = " )
853 # main.log.info( main.ONOScli.getRoutesNum() )
854 # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
855 # main.ONOScli.getRoutesNum(),
856 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800857 allRoutesActual = \
858 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800859 main.log.info( "allRoutes_actual = " )
860 main.log.info( allRoutesActual )
861
pingping-lin79011132015-01-27 15:27:27 -0800862 utilities.assertEquals(
863 expect="[]", actual=str( allRoutesActual ),
864 onpass="***Route number in SDN-IP is 0, correct!***",
865 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800866
867 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800868 main.log.report(
869 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800870 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800871 main.log.report(
872 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800873
874 main.step( "Check intents after deleting routes" )
875 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800876 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800877 main.QuaggaCliHost3.extractActualRouteIntents(
878 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800879 main.log.info( "main.ONOScli.intents()= " )
880 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800881 utilities.assertEquals(
882 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800883 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
884 0, correct!***",
885 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
886 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800887
888 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
889 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800890 "***MultiPointToSinglePoint Intents after deleting routes \
891 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800892 else:
893 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800894 "***MultiPointToSinglePoint Intents after deleting routes \
895 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800896
897 time.sleep( 20 )
898 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800899 pingTestResultsFile = \
900 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
901 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800902 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800903 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800904 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -0800905 time.sleep( 30 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800906
kelvin-onlab8a832582015-01-16 17:06:11 -0800907 # main.step( "Test whether Mininet is started" )
908 # main.Mininet2.handle.sendline( "xterm host1" )
909 # main.Mininet2.handle.expect( "mininet>" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800910
kelvin-onlab8a832582015-01-16 17:06:11 -0800911 def CASE2( self, main ):
912 """
pingping-lin3d87a132014-12-04 14:22:49 -0800913 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -0800914 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800915 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
916 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800917 bgpIntentsExpected: expected PointToPointIntent intents
918 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800919 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
920 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800921 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800922 """
pingping-lin3d87a132014-12-04 14:22:49 -0800923 import time
924 import json
925 from operator import eq
926 from time import localtime, strftime
927
kelvin-onlab8a832582015-01-16 17:06:11 -0800928 main.case(
pingping-lin00e4f7f2015-01-27 16:30:06 -0800929 "The test case is to help to setup the TestON environment and \
930 test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800931 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin3d87a132014-12-04 14:22:49 -0800932 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800933 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800934 main.step( "Start to generate routes for all BGP peers" )
pingping-lin3d87a132014-12-04 14:22:49 -0800935
kelvin-onlab8a832582015-01-16 17:06:11 -0800936 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800937 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
938 main.log.info( prefixesHost3 )
pingping-lin3d87a132014-12-04 14:22:49 -0800939 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800940 for prefix in prefixesHost3:
941 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800942 routeIntentsExpectedHost3 = \
943 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
944 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
945 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800946
kelvin-onlab8a832582015-01-16 17:06:11 -0800947 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800948 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
949 main.log.info( prefixesHost4 )
pingping-lin3d87a132014-12-04 14:22:49 -0800950 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800951 for prefix in prefixesHost4:
952 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800953 routeIntentsExpectedHost4 = \
954 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
955 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
956 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800957
pingping-linc1c696e2015-01-27 13:46:44 -0800958 routeIntentsExpected = routeIntentsExpectedHost3 + \
959 routeIntentsExpectedHost4
pingping-lin3d87a132014-12-04 14:22:49 -0800960
kelvin-onlab8a832582015-01-16 17:06:11 -0800961 main.log.report( "Removing raft logs" )
pingping-linc1c696e2015-01-27 13:46:44 -0800962 main.ONOSbench.onosRemoveRaftLogs()
kelvin-onlab8a832582015-01-16 17:06:11 -0800963 main.log.report( "Uninstalling ONOS" )
pingping-linc1c696e2015-01-27 13:46:44 -0800964 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800965
pingping-linc1c696e2015-01-27 13:46:44 -0800966 cellName = main.params[ 'ENV' ][ 'cellName' ]
967 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -0800968 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -0800969 main.ONOScli.setCell( cellName )
970 verifyResult = main.ONOSbench.verifyCell()
971 # main.log.report( "Removing raft logs" )
972 # main.ONOSbench.onosRemoveRaftLogs()
973 # main.log.report( "Uninstalling ONOS" )
974 # main.ONOSbench.onosUninstall( ONOS1Ip )
kelvin-onlab8a832582015-01-16 17:06:11 -0800975 main.step( "Creating ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800976 # packageResult = main.ONOSbench.onosPackage()
pingping-lin3d87a132014-12-04 14:22:49 -0800977
kelvin-onlab8a832582015-01-16 17:06:11 -0800978 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800979 # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
980 # node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800981
kelvin-onlab8a832582015-01-16 17:06:11 -0800982 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -0800983 # time.sleep( 60 )
984 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
985 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -0800986 main.log.report( "ONOS1 didn't start!" )
pingping-lin3d87a132014-12-04 14:22:49 -0800987
kelvin-onlab8a832582015-01-16 17:06:11 -0800988 main.step( "Start ONOS-cli" )
pingping-linc1c696e2015-01-27 13:46:44 -0800989 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800990
kelvin-onlab8a832582015-01-16 17:06:11 -0800991 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800992 listResult = main.ONOScli.devices( jsonFormat=False )
993 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800994 time.sleep( 10 )
995 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800996 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800997 time.sleep( 10 )
pingping-lin3d87a132014-12-04 14:22:49 -0800998
kelvin-onlab8a832582015-01-16 17:06:11 -0800999 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin3d87a132014-12-04 14:22:49 -08001000 # bgp intents expected
pingping-linc1c696e2015-01-27 13:46:44 -08001001 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
1002 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -08001003 # get BGP intents from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -08001004 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
1005 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
1006 getIntentsResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001007
pingping-linc1c696e2015-01-27 13:46:44 -08001008 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
1009 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -08001010 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001011 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001012 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001013 main.log.info( bgpIntentsStrActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001014
pingping-linc1c696e2015-01-27 13:46:44 -08001015 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001016 expect=True,
1017 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
1018 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
1019 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001020
pingping-linc1c696e2015-01-27 13:46:44 -08001021 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001022 main.log.report(
1023 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001024 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001025 main.log.report(
1026 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001027
pingping-linc1c696e2015-01-27 13:46:44 -08001028 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1029 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1030 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
1031 # roundNum = 0;
kelvin-onlab8a832582015-01-16 17:06:11 -08001032 # while( True ):
pingping-linc1c696e2015-01-27 13:46:44 -08001033 for roundNum in range( 1, 6 ):
pingping-lin3d87a132014-12-04 14:22:49 -08001034 # round = round + 1;
pingping-linc1c696e2015-01-27 13:46:44 -08001035 main.log.report( "The Round " + str( roundNum ) +
pingping-lin00e4f7f2015-01-27 16:30:06 -08001036 " test starts................................" )
pingping-lin3d87a132014-12-04 14:22:49 -08001037
kelvin-onlab8a832582015-01-16 17:06:11 -08001038 main.step( "Login all BGP peers and add routes into peers" )
1039 main.log.info( "Login Quagga CLI on host3" )
1040 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001041 main.log.info(
1042 "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001043 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001044 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001045 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001046
kelvin-onlab8a832582015-01-16 17:06:11 -08001047 main.log.info( "Login Quagga CLI on host4" )
1048 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001049 main.log.info(
1050 "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001051 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001052 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001053 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001054 time.sleep( 60 )
pingping-lin3d87a132014-12-04 14:22:49 -08001055
1056 # get all routes inside SDN-IP
pingping-linc1c696e2015-01-27 13:46:44 -08001057 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001058
1059 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001060 allRoutesActual = \
1061 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001062
pingping-linc1c696e2015-01-27 13:46:44 -08001063 # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1064 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001065 main.step( "Check routes installed" )
1066 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001067 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001068 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001069 main.log.info( allRoutesStrActual )
1070 utilities.assertEquals(
1071 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -08001072 onpass="***Routes in SDN-IP are correct!***",
1073 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -08001074 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001075 main.log.report(
1076 "***Routes in SDN-IP after adding correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001077 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -08001078 main.log.report(
1079 "***Routes in SDN-IP after adding wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001080
kelvin-onlab8a832582015-01-16 17:06:11 -08001081 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001082 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001083
kelvin-onlab8a832582015-01-16 17:06:11 -08001084 main.step(
1085 "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -08001086 # routeIntentsExpected are generated when generating routes
pingping-lin3d87a132014-12-04 14:22:49 -08001087 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001088 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001089 main.QuaggaCliHost3.extractActualRouteIntents(
1090 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -08001091 # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1092 routeIntentsStrActual = str(
pingping-lin79011132015-01-27 15:27:27 -08001093 routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001094 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001095 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001096 main.log.info(
1097 "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001098 main.log.info( routeIntentsStrActual )
1099 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001100 expect=True,
1101 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
1102 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
1103 correct!***",
1104 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
1105 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001106
pingping-linc1c696e2015-01-27 13:46:44 -08001107 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001108 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001109 "***MultiPointToSinglePoint Intents after adding routes \
1110 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001111 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001112 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001113 "***MultiPointToSinglePoint Intents after adding routes \
1114 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001115
1116 #============================= Ping Test ========================
1117 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -08001118 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001119 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001120 pingTestResultsFile = \
1121 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001122 + str( roundNum ) + "-ping-results-before-delete-routes-" \
1123 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001124 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001125 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001126 main.log.info( pingTestResults )
pingping-lin3d87a132014-12-04 14:22:49 -08001127 # ping test
1128
1129 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -08001130 main.step( "Check deleting routes installed" )
1131 main.log.info( "Delete routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001132 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001133 main.log.info( "Delete routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001134 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001135
pingping-linc1c696e2015-01-27 13:46:44 -08001136 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001137 allRoutesActual = \
1138 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001139 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -08001140 main.log.info( allRoutesActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001141
pingping-lin79011132015-01-27 15:27:27 -08001142 utilities.assertEquals(
1143 expect="[]", actual=str( allRoutesActual ),
1144 onpass="***Route number in SDN-IP is 0, correct!***",
1145 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001146
pingping-linc1c696e2015-01-27 13:46:44 -08001147 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001148 main.log.report(
1149 "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001150 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001151 main.log.report(
1152 "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001153
kelvin-onlab8a832582015-01-16 17:06:11 -08001154 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -08001155 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001156 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001157 main.QuaggaCliHost3.extractActualRouteIntents(
1158 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001159 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -08001160 main.log.info( routeIntentsActual )
1161 utilities.assertEquals(
1162 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -08001163 onpass=
1164 "***MultiPointToSinglePoint Intents number in SDN-IP \
1165 is 0, correct!***",
1166 onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
1167 is 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001168
pingping-linc1c696e2015-01-27 13:46:44 -08001169 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001170 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001171 "***MultiPointToSinglePoint Intents after deleting \
1172 routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001173 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001174 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001175 "***MultiPointToSinglePoint Intents after deleting \
1176 routes wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001177
kelvin-onlab8a832582015-01-16 17:06:11 -08001178 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001179 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001180 pingTestResultsFile = \
1181 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001182 + str( roundNum ) + "-ping-results-after-delete-routes-" \
1183 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001184 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001185 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001186 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -08001187 time.sleep( 30 )
pingping-linc1c696e2015-01-27 13:46:44 -08001188