blob: e8baa83b6eeb24353d8484fe9788accd12bd0870 [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-lin7048cb02015-01-30 15:09:46 -08007
pingping-lin26521182015-01-30 14:52:39 -08008 # 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 )
pingping-lin7048cb02015-01-30 15:09:46 -080047
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()
pingping-lin7048cb02015-01-30 15:09:46 -080052
pingping-lina600d9b2015-01-30 13:57:26 -080053 main.step( "Installing ONOS package" )
54 onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
55 node=ONOS1Ip )
pingping-lin7048cb02015-01-30 15:09:46 -080056
pingping-lina600d9b2015-01-30 13:57:26 -080057 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!" )
pingping-lin7048cb02015-01-30 15:09:46 -080064
pingping-lina600d9b2015-01-30 13:57:26 -080065 cliResult = main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin7048cb02015-01-30 15:09:46 -080066
pingping-lina600d9b2015-01-30 13:57:26 -080067 case1Result = ( cleanInstallResult and packageResult and
68 cellResult and verifyResult and
69 onos1InstallResult and
70 onos1Isup and cliResult )
pingping-lin7048cb02015-01-30 15:09:46 -080071
pingping-lina600d9b2015-01-30 13:57:26 -080072 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-lin7048cb02015-01-30 15:09:46 -080075
pingping-lina600d9b2015-01-30 13:57:26 -080076 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-lin7048cb02015-01-30 15:09:46 -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-lin7048cb02015-01-30 15:09:46 -0800173 allRoutesExpected.append( prefix + "/" + "192.168.40."
174 + str( i - 100 ) )
pingping-linc1c696e2015-01-27 13:46:44 -0800175
pingping-lin79011132015-01-27 15:27:27 -0800176 routeIntentsExpectedHostX = \
177 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
178 prefixesHostX, "192.168.40." + str( i - 100 ),
179 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800180 routeIntentsExpected = routeIntentsExpected + \
181 routeIntentsExpectedHostX
182
183 main.log.info( "Login Quagga CLI on host" + str( i ) )
184 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
185 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
186 main.log.info(
187 "Enter configuration model of Quagga CLI on host" + str( i ) )
188 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
189 main.log.info( "Add routes to Quagga on host" + str( i ) )
190 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
191
kelvin-onlab8a832582015-01-16 17:06:11 -0800192 time.sleep( 60 )
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-lin7048cb02015-01-30 15:09:46 -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 def CASE3( self, main ):
348 """
349 Test the SDN-IP functionality
350 allRoutesExpected: all expected routes for all BGP peers
pingping-lin26521182015-01-30 14:52:39 -0800351 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
352 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800353 bgpIntentsExpected: expected PointToPointIntent intents
354 allRoutesActual: all routes from ONOS LCI
pingping-lin79011132015-01-27 15:27:27 -0800355 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
356 ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800357 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
358 """
359 import time
360 import json
361 from operator import eq
362 # from datetime import datetime
363 from time import localtime, strftime
364
pingping-lin00e4f7f2015-01-27 16:30:06 -0800365 main.case( "The test case is to help to setup the TestON \
366 environment and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800367 # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin79011132015-01-27 15:27:27 -0800368 SDNIPJSONFILEPATH = \
pingping-lina600d9b2015-01-30 13:57:26 -0800369 "/home/admin/ONOS/tools/package/config/sdnip.json"
pingping-linc1c696e2015-01-27 13:46:44 -0800370 # all expected routes for all BGP peers
371 allRoutesExpected = []
372 main.step( "Start to generate routes for all BGP peers" )
373 main.log.info( "Generate prefixes for host3" )
374 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
375 main.log.info( prefixesHost3 )
376 # generate route with next hop
377 for prefix in prefixesHost3:
378 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800379 routeIntentsExpectedHost3 = \
380 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
381 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
382 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800383
384 main.log.info( "Generate prefixes for host4" )
385 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
386 main.log.info( prefixesHost4 )
387 # generate route with next hop
388 for prefix in prefixesHost4:
389 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800390 routeIntentsExpectedHost4 = \
391 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
392 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
393 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800394
395 routeIntentsExpected = routeIntentsExpectedHost3 + \
396 routeIntentsExpectedHost4
397
pingping-linc1c696e2015-01-27 13:46:44 -0800398 cellName = main.params[ 'ENV' ][ 'cellName' ]
399 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
400 main.step( "Set cell for ONOS-cli environment" )
401 main.ONOScli.setCell( cellName )
402 verifyResult = main.ONOSbench.verifyCell()
403
404 main.log.report( "Removing raft logs" )
405 main.ONOSbench.onosRemoveRaftLogs()
406 main.log.report( "Uninstalling ONOS" )
407 main.ONOSbench.onosUninstall( ONOS1Ip )
408
409 main.step( "Installing ONOS package" )
410 onos1InstallResult = main.ONOSbench.onosInstall(
411 options="-f", node=ONOS1Ip )
412
413 main.step( "Checking if ONOS is up yet" )
414 time.sleep( 60 )
415 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
416 if not onos1Isup:
417 main.log.report( "ONOS1 didn't start!" )
418
419 main.step( "Start ONOS-cli" )
420
421 main.ONOScli.startOnosCli( ONOS1Ip )
422
423 main.step( "Get devices in the network" )
424 listResult = main.ONOScli.devices( jsonFormat=False )
425 main.log.info( listResult )
426 time.sleep( 10 )
427 main.log.info( "Installing sdn-ip feature" )
428 main.ONOScli.featureInstall( "onos-app-sdnip" )
429 time.sleep( 10 )
430 main.step( "Login all BGP peers and add routes into peers" )
431
432 main.log.info( "Login Quagga CLI on host3" )
433 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
434 main.log.info( "Enter configuration model of Quagga CLI on host3" )
435 main.QuaggaCliHost3.enterConfig( 64514 )
436 main.log.info( "Add routes to Quagga on host3" )
437 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
438
439 main.log.info( "Login Quagga CLI on host4" )
440 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
441 main.log.info( "Enter configuration model of Quagga CLI on host4" )
442 main.QuaggaCliHost4.enterConfig( 64516 )
443 main.log.info( "Add routes to Quagga on host4" )
444 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
445
446 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800447 prefixesHostX = \
448 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800449 main.log.info( prefixesHostX )
450 for prefix in prefixesHostX:
451 allRoutesExpected.append(
452 prefix + "/" + "192.168.40." + str( i - 100 ) )
453
pingping-lin79011132015-01-27 15:27:27 -0800454 routeIntentsExpectedHostX = \
455 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
456 prefixesHostX, "192.168.40." + str( i - 100 ),
457 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800458 routeIntentsExpected = routeIntentsExpected + \
459 routeIntentsExpectedHostX
460
461 main.log.info( "Login Quagga CLI on host" + str( i ) )
462 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
463 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
464 main.log.info(
465 "Enter configuration model of Quagga CLI on host" + str( i ) )
466 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
467 main.log.info( "Add routes to Quagga on host" + str( i ) )
468 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
469
470 time.sleep( 60 )
471
472 # get routes inside SDN-IP
473 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
474
475 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800476 allRoutesActual = \
477 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800478
479 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
480 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
481 main.step( "Check routes installed" )
482 main.log.info( "Routes expected:" )
483 main.log.info( allRoutesStrExpected )
484 main.log.info( "Routes get from ONOS CLI:" )
485 main.log.info( allRoutesStrActual )
486 utilities.assertEquals(
487 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800488 onpass="***Routes in SDN-IP are correct!***",
489 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800490 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
491 main.log.report(
492 "***Routes in SDN-IP after adding routes are correct!***" )
493 else:
494 main.log.report(
495 "***Routes in SDN-IP after adding routes are wrong!***" )
496
497 time.sleep( 20 )
498 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
499
500 main.step( "Check MultiPointToSinglePointIntent intents installed" )
501 # routeIntentsExpected are generated when generating routes
502 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800503 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800504 main.QuaggaCliHost3.extractActualRouteIntents(
505 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800506 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
507 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
508 main.log.info( "MultiPointToSinglePoint intents expected:" )
509 main.log.info( routeIntentsStrExpected )
510 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
511 main.log.info( routeIntentsStrActual )
512 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800513 expect=True,
514 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
515 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
516 correct!***",
517 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
518 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800519
520 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
521 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800522 "***MultiPointToSinglePoint Intents before deleting routes \
523 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800524 else:
525 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800526 "***MultiPointToSinglePoint Intents before deleting routes \
527 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800528
529 main.step( "Check BGP PointToPointIntent intents installed" )
530 # bgp intents expected
531 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
532 SDNIPJSONFILEPATH )
533 # get BGP intents from ONOS CLI
534 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
535 getIntentsResult )
536
537 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
538 bgpIntentsStrActual = str( bgpIntentsActual )
539 main.log.info( "PointToPointIntent intents expected:" )
540 main.log.info( bgpIntentsStrExpected )
541 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
542 main.log.info( bgpIntentsStrActual )
543
544 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800545 expect=True,
546 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
547 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
548 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800549
550 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
551 main.log.report(
552 "***PointToPointIntent Intents in SDN-IP are correct!***" )
553 else:
554 main.log.report(
555 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
556
557 #============================= Ping Test ========================
558 # wait until all MultiPointToSinglePoint
559 time.sleep( 20 )
560 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800561 pingTestResultsFile = \
562 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
563 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800564 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800565 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800566 main.log.info( pingTestResults )
567 time.sleep( 20 )
568
569 #============================= Deleting Routes ==================
570 main.step( "Check deleting routes installed" )
571 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
572 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
573 for i in range( 101, 201 ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800574 prefixesHostX = \
575 main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
pingping-linc1c696e2015-01-27 13:46:44 -0800576 main.log.info( prefixesHostX )
577 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
578 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
579
580 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
581 allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
582 getRoutesResult )
583 main.log.info( "allRoutes_actual = " )
584 main.log.info( allRoutesActual )
585
pingping-lin79011132015-01-27 15:27:27 -0800586 utilities.assertEquals(
587 expect="[]", actual=str( allRoutesActual ),
588 onpass="***Route number in SDN-IP is 0, correct!***",
589 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800590
591 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800592 main.log.report(
593 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800594 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800595 main.log.report(
596 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800597
598 main.step( "Check intents after deleting routes" )
599 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800600 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800601 main.QuaggaCliHost3.extractActualRouteIntents(
602 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800603 main.log.info( "main.ONOScli.intents()= " )
604 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800605 utilities.assertEquals(
606 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800607 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
608 0, correct!***",
609 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
610 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800611
612 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
613 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800614 "***MultiPointToSinglePoint Intents after deleting routes \
615 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800616 else:
617 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800618 "***MultiPointToSinglePoint Intents after deleting routes \
619 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800620
621 time.sleep( 20 )
622 pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800623 pingTestResultsFile = \
624 "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
625 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800626 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800627 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800628 main.log.info( pingTestResults )
629 time.sleep( 100 )
630
631 # main.step( "Test whether Mininet is started" )
632 # main.Mininet2.handle.sendline( "xterm host1" )
633 # main.Mininet2.handle.expect( "mininet>" )
634
635 def CASE1( self, main ):
636 """
637 Test the SDN-IP functionality
638 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800639 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
640 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800641 bgpIntentsExpected: expected PointToPointIntent intents
642 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800643 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
644 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800645 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
646 """
647 import time
648 import json
649 from operator import eq
650 # from datetime import datetime
651 from time import localtime, strftime
652
pingping-lin79011132015-01-27 15:27:27 -0800653 main.case("The test case is to help to setup the TestON environment \
654 and test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800655 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
656 # all expected routes for all BGP peers
657 allRoutesExpected = []
658 main.step( "Start to generate routes for all BGP peers" )
659 # bgpPeerHosts = []
660 # for i in range( 3, 5 ):
661 # bgpPeerHosts.append( "host" + str( i ) )
662 # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
663
664 # for i in range( 3, 5 ):
665 # QuaggaCliHost = "QuaggaCliHost" + str( i )
666 # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
667
668 # main.log.info( prefixes )
669 # allRoutesExpected.append( prefixes )
670 main.log.info( "Generate prefixes for host3" )
671 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
672 main.log.info( prefixesHost3 )
673 # generate route with next hop
674 for prefix in prefixesHost3:
675 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800676 routeIntentsExpectedHost3 = \
677 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
678 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
679 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800680
681 main.log.info( "Generate prefixes for host4" )
682 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
683 main.log.info( prefixesHost4 )
684 # generate route with next hop
685 for prefix in prefixesHost4:
686 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800687 routeIntentsExpectedHost4 = \
688 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
689 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
690 SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800691
692 routeIntentsExpected = routeIntentsExpectedHost3 + \
693 routeIntentsExpectedHost4
694
695 cellName = main.params[ 'ENV' ][ 'cellName' ]
696 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
697 main.step( "Set cell for ONOS-cli environment" )
698 main.ONOScli.setCell( cellName )
699 verifyResult = main.ONOSbench.verifyCell()
700 main.log.report( "Removing raft logs" )
701 main.ONOSbench.onosRemoveRaftLogs()
702 main.log.report( "Uninstalling ONOS" )
703 main.ONOSbench.onosUninstall( ONOS1Ip )
704 main.step( "Creating ONOS package" )
705 packageResult = main.ONOSbench.onosPackage()
706
707 main.step( "Starting ONOS service" )
708 # TODO: start ONOS from Mininet Script
709 # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
710 main.step( "Installing ONOS package" )
711 onos1InstallResult = main.ONOSbench.onosInstall(
712 options="-f", node=ONOS1Ip )
713
714 main.step( "Checking if ONOS is up yet" )
715 time.sleep( 60 )
716 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
717 if not onos1Isup:
718 main.log.report( "ONOS1 didn't start!" )
719
720 main.step( "Start ONOS-cli" )
721 # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
722
723 main.ONOScli.startOnosCli( ONOS1Ip )
724
725 main.step( "Get devices in the network" )
726 listResult = main.ONOScli.devices( jsonFormat=False )
727 main.log.info( listResult )
728 time.sleep( 10 )
729 main.log.info( "Installing sdn-ip feature" )
730 main.ONOScli.featureInstall( "onos-app-sdnip" )
731 time.sleep( 10 )
732 main.step( "Login all BGP peers and add routes into peers" )
733 main.log.info( "Login Quagga CLI on host3" )
734 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
735 main.log.info( "Enter configuration model of Quagga CLI on host3" )
736 main.QuaggaCliHost3.enterConfig( 64514 )
737 main.log.info( "Add routes to Quagga on host3" )
738 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
739
740 main.log.info( "Login Quagga CLI on host4" )
741 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
742 main.log.info( "Enter configuration model of Quagga CLI on host4" )
743 main.QuaggaCliHost4.enterConfig( 64516 )
744 main.log.info( "Add routes to Quagga on host4" )
745 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
746 time.sleep( 60 )
747
748 # get all routes inside SDN-IP
749 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
750
751 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800752 allRoutesActual = \
753 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800754
755 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
756 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
757 main.step( "Check routes installed" )
758 main.log.info( "Routes expected:" )
759 main.log.info( allRoutesStrExpected )
760 main.log.info( "Routes get from ONOS CLI:" )
761 main.log.info( allRoutesStrActual )
762 utilities.assertEquals(
763 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -0800764 onpass="***Routes in SDN-IP are correct!***",
765 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800766 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
767 main.log.report(
768 "***Routes in SDN-IP after adding routes are correct!***" )
769 else:
770 main.log.report(
771 "***Routes in SDN-IP after adding routes are wrong!***" )
772
773 time.sleep( 20 )
774 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
775
776 main.step( "Check MultiPointToSinglePointIntent intents installed" )
777 # routeIntentsExpected are generated when generating routes
778 # get rpoute intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -0800779 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800780 main.QuaggaCliHost3.extractActualRouteIntents(
781 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800782 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
783 routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
784 main.log.info( "MultiPointToSinglePoint intents expected:" )
785 main.log.info( routeIntentsStrExpected )
786 main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
787 main.log.info( routeIntentsStrActual )
788 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800789 expect=True,
790 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
791 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
792 correct!***",
793 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
794 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800795
796 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
797 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800798 "***MultiPointToSinglePoint Intents before deleting routes \
799 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800800 else:
801 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800802 "***MultiPointToSinglePoint Intents before deleting routes \
803 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800804
805 main.step( "Check BGP PointToPointIntent intents installed" )
806 # bgp intents expected
pingping-lin79011132015-01-27 15:27:27 -0800807 bgpIntentsExpected = \
808 main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
pingping-linc1c696e2015-01-27 13:46:44 -0800809 # get BGP intents from ONOS CLI
810 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
811 getIntentsResult )
812
813 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
814 bgpIntentsStrActual = str( bgpIntentsActual )
815 main.log.info( "PointToPointIntent intents expected:" )
816 main.log.info( bgpIntentsStrExpected )
817 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
818 main.log.info( bgpIntentsStrActual )
819
820 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -0800821 expect=True,
822 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
823 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
824 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800825
826 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
827 main.log.report(
828 "***PointToPointIntent Intents in SDN-IP are correct!***" )
829 else:
830 main.log.report(
831 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
832
833 #============================= Ping Test ========================
834 # wait until all MultiPointToSinglePoint
835 time.sleep( 20 )
836 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800837 pingTestResultsFile = \
838 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
839 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800840 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800841 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800842 main.log.info( pingTestResults )
843
844 # ping test
845
846 #============================= Deleting Routes ==================
847 main.step( "Check deleting routes installed" )
848 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
849 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
850
851 # main.log.info( "main.ONOScli.get_routes_num() = " )
852 # main.log.info( main.ONOScli.getRoutesNum() )
853 # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
854 # main.ONOScli.getRoutesNum(),
855 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800856 allRoutesActual = \
857 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800858 main.log.info( "allRoutes_actual = " )
859 main.log.info( allRoutesActual )
860
pingping-lin79011132015-01-27 15:27:27 -0800861 utilities.assertEquals(
862 expect="[]", actual=str( allRoutesActual ),
863 onpass="***Route number in SDN-IP is 0, correct!***",
864 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800865
866 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
pingping-lin00e4f7f2015-01-27 16:30:06 -0800867 main.log.report(
868 "***Routes in SDN-IP after deleting correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800869 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -0800870 main.log.report(
871 "***Routes in SDN-IP after deleting wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800872
873 main.step( "Check intents after deleting routes" )
874 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -0800875 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -0800876 main.QuaggaCliHost3.extractActualRouteIntents(
877 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -0800878 main.log.info( "main.ONOScli.intents()= " )
879 main.log.info( routeIntentsActual )
pingping-lin79011132015-01-27 15:27:27 -0800880 utilities.assertEquals(
881 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -0800882 onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
883 0, correct!***",
884 onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
885 0, wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800886
887 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
888 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800889 "***MultiPointToSinglePoint Intents after deleting routes \
890 correct!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800891 else:
892 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -0800893 "***MultiPointToSinglePoint Intents after deleting routes \
894 wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -0800895
896 time.sleep( 20 )
897 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin79011132015-01-27 15:27:27 -0800898 pingTestResultsFile = \
899 "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
900 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -0800901 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -0800902 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -0800903 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -0800904 time.sleep( 30 )
pingping-linc6b86fa2014-12-01 16:18:10 -0800905
kelvin-onlab8a832582015-01-16 17:06:11 -0800906 # main.step( "Test whether Mininet is started" )
907 # main.Mininet2.handle.sendline( "xterm host1" )
908 # main.Mininet2.handle.expect( "mininet>" )
pingping-lin8b306ac2014-11-17 18:13:51 -0800909
kelvin-onlab8a832582015-01-16 17:06:11 -0800910 def CASE2( self, main ):
911 """
pingping-lin3d87a132014-12-04 14:22:49 -0800912 Test the SDN-IP functionality
pingping-linc1c696e2015-01-27 13:46:44 -0800913 allRoutesExpected: all expected routes for all BGP peers
pingping-lin00e4f7f2015-01-27 16:30:06 -0800914 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
915 intents
pingping-linc1c696e2015-01-27 13:46:44 -0800916 bgpIntentsExpected: expected PointToPointIntent intents
917 allRoutesActual: all routes from ONOS LCI
pingping-lin00e4f7f2015-01-27 16:30:06 -0800918 routeIntentsActual: actual MultiPointToSinglePointIntent intents \
919 from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -0800920 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
kelvin-onlab8a832582015-01-16 17:06:11 -0800921 """
pingping-lin3d87a132014-12-04 14:22:49 -0800922 import time
923 import json
924 from operator import eq
925 from time import localtime, strftime
926
kelvin-onlab8a832582015-01-16 17:06:11 -0800927 main.case(
pingping-lin00e4f7f2015-01-27 16:30:06 -0800928 "The test case is to help to setup the TestON environment and \
929 test new drivers" )
pingping-linc1c696e2015-01-27 13:46:44 -0800930 SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
pingping-lin3d87a132014-12-04 14:22:49 -0800931 # all expected routes for all BGP peers
pingping-linc1c696e2015-01-27 13:46:44 -0800932 allRoutesExpected = []
kelvin-onlab8a832582015-01-16 17:06:11 -0800933 main.step( "Start to generate routes for all BGP peers" )
pingping-lin3d87a132014-12-04 14:22:49 -0800934
kelvin-onlab8a832582015-01-16 17:06:11 -0800935 main.log.info( "Generate prefixes for host3" )
pingping-linc1c696e2015-01-27 13:46:44 -0800936 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
937 main.log.info( prefixesHost3 )
pingping-lin3d87a132014-12-04 14:22:49 -0800938 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800939 for prefix in prefixesHost3:
940 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin79011132015-01-27 15:27:27 -0800941 routeIntentsExpectedHost3 = \
942 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
943 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
944 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800945
kelvin-onlab8a832582015-01-16 17:06:11 -0800946 main.log.info( "Generate prefixes for host4" )
pingping-linc1c696e2015-01-27 13:46:44 -0800947 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
948 main.log.info( prefixesHost4 )
pingping-lin3d87a132014-12-04 14:22:49 -0800949 # generate route with next hop
pingping-linc1c696e2015-01-27 13:46:44 -0800950 for prefix in prefixesHost4:
951 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin79011132015-01-27 15:27:27 -0800952 routeIntentsExpectedHost4 = \
953 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
954 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
955 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -0800956
pingping-linc1c696e2015-01-27 13:46:44 -0800957 routeIntentsExpected = routeIntentsExpectedHost3 + \
958 routeIntentsExpectedHost4
pingping-lin3d87a132014-12-04 14:22:49 -0800959
kelvin-onlab8a832582015-01-16 17:06:11 -0800960 main.log.report( "Removing raft logs" )
pingping-linc1c696e2015-01-27 13:46:44 -0800961 main.ONOSbench.onosRemoveRaftLogs()
kelvin-onlab8a832582015-01-16 17:06:11 -0800962 main.log.report( "Uninstalling ONOS" )
pingping-linc1c696e2015-01-27 13:46:44 -0800963 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800964
pingping-linc1c696e2015-01-27 13:46:44 -0800965 cellName = main.params[ 'ENV' ][ 'cellName' ]
966 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
kelvin-onlab8a832582015-01-16 17:06:11 -0800967 main.step( "Set cell for ONOS-cli environment" )
pingping-linc1c696e2015-01-27 13:46:44 -0800968 main.ONOScli.setCell( cellName )
969 verifyResult = main.ONOSbench.verifyCell()
970 # main.log.report( "Removing raft logs" )
971 # main.ONOSbench.onosRemoveRaftLogs()
972 # main.log.report( "Uninstalling ONOS" )
973 # main.ONOSbench.onosUninstall( ONOS1Ip )
kelvin-onlab8a832582015-01-16 17:06:11 -0800974 main.step( "Creating ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800975 # packageResult = main.ONOSbench.onosPackage()
pingping-lin3d87a132014-12-04 14:22:49 -0800976
kelvin-onlab8a832582015-01-16 17:06:11 -0800977 main.step( "Installing ONOS package" )
pingping-linc1c696e2015-01-27 13:46:44 -0800978 # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
979 # node=ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800980
kelvin-onlab8a832582015-01-16 17:06:11 -0800981 main.step( "Checking if ONOS is up yet" )
pingping-linc1c696e2015-01-27 13:46:44 -0800982 # time.sleep( 60 )
983 onos1Isup = main.ONOSbench.isup( ONOS1Ip )
984 if not onos1Isup:
kelvin-onlab8a832582015-01-16 17:06:11 -0800985 main.log.report( "ONOS1 didn't start!" )
pingping-lin3d87a132014-12-04 14:22:49 -0800986
kelvin-onlab8a832582015-01-16 17:06:11 -0800987 main.step( "Start ONOS-cli" )
pingping-linc1c696e2015-01-27 13:46:44 -0800988 main.ONOScli.startOnosCli( ONOS1Ip )
pingping-lin3d87a132014-12-04 14:22:49 -0800989
kelvin-onlab8a832582015-01-16 17:06:11 -0800990 main.step( "Get devices in the network" )
pingping-linc1c696e2015-01-27 13:46:44 -0800991 listResult = main.ONOScli.devices( jsonFormat=False )
992 main.log.info( listResult )
kelvin-onlab8a832582015-01-16 17:06:11 -0800993 time.sleep( 10 )
994 main.log.info( "Installing sdn-ip feature" )
pingping-linc1c696e2015-01-27 13:46:44 -0800995 main.ONOScli.featureInstall( "onos-app-sdnip" )
kelvin-onlab8a832582015-01-16 17:06:11 -0800996 time.sleep( 10 )
pingping-lin3d87a132014-12-04 14:22:49 -0800997
kelvin-onlab8a832582015-01-16 17:06:11 -0800998 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin3d87a132014-12-04 14:22:49 -0800999 # bgp intents expected
pingping-linc1c696e2015-01-27 13:46:44 -08001000 bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
1001 SDNIPJSONFILEPATH )
pingping-lin3d87a132014-12-04 14:22:49 -08001002 # get BGP intents from ONOS CLI
pingping-linc1c696e2015-01-27 13:46:44 -08001003 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
1004 bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
1005 getIntentsResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001006
pingping-linc1c696e2015-01-27 13:46:44 -08001007 bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
1008 bgpIntentsStrActual = str( bgpIntentsActual )
kelvin-onlab8a832582015-01-16 17:06:11 -08001009 main.log.info( "PointToPointIntent intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001010 main.log.info( bgpIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001011 main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001012 main.log.info( bgpIntentsStrActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001013
pingping-linc1c696e2015-01-27 13:46:44 -08001014 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001015 expect=True,
1016 actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
1017 onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
1018 onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001019
pingping-linc1c696e2015-01-27 13:46:44 -08001020 if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001021 main.log.report(
1022 "***PointToPointIntent Intents in SDN-IP are correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001023 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001024 main.log.report(
1025 "***PointToPointIntent Intents in SDN-IP are wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001026
pingping-linc1c696e2015-01-27 13:46:44 -08001027 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1028 routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1029 pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
1030 # roundNum = 0;
kelvin-onlab8a832582015-01-16 17:06:11 -08001031 # while( True ):
pingping-linc1c696e2015-01-27 13:46:44 -08001032 for roundNum in range( 1, 6 ):
pingping-lin3d87a132014-12-04 14:22:49 -08001033 # round = round + 1;
pingping-linc1c696e2015-01-27 13:46:44 -08001034 main.log.report( "The Round " + str( roundNum ) +
pingping-lin00e4f7f2015-01-27 16:30:06 -08001035 " test starts................................" )
pingping-lin3d87a132014-12-04 14:22:49 -08001036
kelvin-onlab8a832582015-01-16 17:06:11 -08001037 main.step( "Login all BGP peers and add routes into peers" )
1038 main.log.info( "Login Quagga CLI on host3" )
1039 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001040 main.log.info(
1041 "Enter configuration model of Quagga CLI on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001042 main.QuaggaCliHost3.enterConfig( 64514 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001043 main.log.info( "Add routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001044 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001045
kelvin-onlab8a832582015-01-16 17:06:11 -08001046 main.log.info( "Login Quagga CLI on host4" )
1047 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
pingping-lin00e4f7f2015-01-27 16:30:06 -08001048 main.log.info(
1049 "Enter configuration model of Quagga CLI on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001050 main.QuaggaCliHost4.enterConfig( 64516 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001051 main.log.info( "Add routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001052 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001053 time.sleep( 60 )
pingping-lin3d87a132014-12-04 14:22:49 -08001054
1055 # get all routes inside SDN-IP
pingping-linc1c696e2015-01-27 13:46:44 -08001056 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001057
1058 # parse routes from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001059 allRoutesActual = \
1060 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
pingping-lin3d87a132014-12-04 14:22:49 -08001061
pingping-linc1c696e2015-01-27 13:46:44 -08001062 # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
1063 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001064 main.step( "Check routes installed" )
1065 main.log.info( "Routes expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001066 main.log.info( allRoutesStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001067 main.log.info( "Routes get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001068 main.log.info( allRoutesStrActual )
1069 utilities.assertEquals(
1070 expect=allRoutesStrExpected, actual=allRoutesStrActual,
pingping-lin79011132015-01-27 15:27:27 -08001071 onpass="***Routes in SDN-IP are correct!***",
1072 onfail="***Routes in SDN-IP are wrong!***" )
pingping-linc1c696e2015-01-27 13:46:44 -08001073 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001074 main.log.report(
1075 "***Routes in SDN-IP after adding correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001076 else:
pingping-lin00e4f7f2015-01-27 16:30:06 -08001077 main.log.report(
1078 "***Routes in SDN-IP after adding wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001079
kelvin-onlab8a832582015-01-16 17:06:11 -08001080 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001081 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin3d87a132014-12-04 14:22:49 -08001082
kelvin-onlab8a832582015-01-16 17:06:11 -08001083 main.step(
1084 "Check MultiPointToSinglePointIntent intents installed" )
pingping-linc1c696e2015-01-27 13:46:44 -08001085 # routeIntentsExpected are generated when generating routes
pingping-lin3d87a132014-12-04 14:22:49 -08001086 # get route intents from ONOS CLI
pingping-lin79011132015-01-27 15:27:27 -08001087 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001088 main.QuaggaCliHost3.extractActualRouteIntents(
1089 getIntentsResult )
pingping-linc1c696e2015-01-27 13:46:44 -08001090 # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
1091 routeIntentsStrActual = str(
pingping-lin79011132015-01-27 15:27:27 -08001092 routeIntentsActual ).replace( 'u', "" )
kelvin-onlab8a832582015-01-16 17:06:11 -08001093 main.log.info( "MultiPointToSinglePoint intents expected:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001094 main.log.info( routeIntentsStrExpected )
kelvin-onlab8a832582015-01-16 17:06:11 -08001095 main.log.info(
1096 "MultiPointToSinglePoint intents get from ONOS CLI:" )
pingping-linc1c696e2015-01-27 13:46:44 -08001097 main.log.info( routeIntentsStrActual )
1098 utilities.assertEquals(
pingping-lin79011132015-01-27 15:27:27 -08001099 expect=True,
1100 actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
1101 onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
1102 correct!***",
1103 onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
1104 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001105
pingping-linc1c696e2015-01-27 13:46:44 -08001106 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001107 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001108 "***MultiPointToSinglePoint Intents after adding routes \
1109 correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001110 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001111 main.log.report(
pingping-lin79011132015-01-27 15:27:27 -08001112 "***MultiPointToSinglePoint Intents after adding routes \
1113 wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001114
1115 #============================= Ping Test ========================
1116 # wait until all MultiPointToSinglePoint
kelvin-onlab8a832582015-01-16 17:06:11 -08001117 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001118 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001119 pingTestResultsFile = \
1120 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001121 + str( roundNum ) + "-ping-results-before-delete-routes-" \
1122 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001123 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001124 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001125 main.log.info( pingTestResults )
pingping-lin3d87a132014-12-04 14:22:49 -08001126 # ping test
1127
1128 #============================= Deleting Routes ==================
kelvin-onlab8a832582015-01-16 17:06:11 -08001129 main.step( "Check deleting routes installed" )
1130 main.log.info( "Delete routes to Quagga on host3" )
pingping-linc1c696e2015-01-27 13:46:44 -08001131 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
kelvin-onlab8a832582015-01-16 17:06:11 -08001132 main.log.info( "Delete routes to Quagga on host4" )
pingping-linc1c696e2015-01-27 13:46:44 -08001133 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
pingping-lin3d87a132014-12-04 14:22:49 -08001134
pingping-linc1c696e2015-01-27 13:46:44 -08001135 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001136 allRoutesActual = \
1137 main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001138 main.log.info( "allRoutes_actual = " )
pingping-linc1c696e2015-01-27 13:46:44 -08001139 main.log.info( allRoutesActual )
pingping-lin3d87a132014-12-04 14:22:49 -08001140
pingping-lin79011132015-01-27 15:27:27 -08001141 utilities.assertEquals(
1142 expect="[]", actual=str( allRoutesActual ),
1143 onpass="***Route number in SDN-IP is 0, correct!***",
1144 onfail="***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001145
pingping-linc1c696e2015-01-27 13:46:44 -08001146 if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001147 main.log.report(
1148 "***Routes in SDN-IP after deleting correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001149 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001150 main.log.report(
1151 "***Routes in SDN-IP after deleting wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001152
kelvin-onlab8a832582015-01-16 17:06:11 -08001153 main.step( "Check intents after deleting routes" )
pingping-linc1c696e2015-01-27 13:46:44 -08001154 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin79011132015-01-27 15:27:27 -08001155 routeIntentsActual = \
pingping-lin00e4f7f2015-01-27 16:30:06 -08001156 main.QuaggaCliHost3.extractActualRouteIntents(
1157 getIntentsResult )
kelvin-onlab8a832582015-01-16 17:06:11 -08001158 main.log.info( "main.ONOScli.intents()= " )
pingping-linc1c696e2015-01-27 13:46:44 -08001159 main.log.info( routeIntentsActual )
1160 utilities.assertEquals(
1161 expect="[]", actual=str( routeIntentsActual ),
pingping-lin00e4f7f2015-01-27 16:30:06 -08001162 onpass=
1163 "***MultiPointToSinglePoint Intents number in SDN-IP \
1164 is 0, correct!***",
1165 onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
1166 is 0, wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001167
pingping-linc1c696e2015-01-27 13:46:44 -08001168 if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
kelvin-onlab8a832582015-01-16 17:06:11 -08001169 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001170 "***MultiPointToSinglePoint Intents after deleting \
1171 routes correct!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001172 else:
kelvin-onlab8a832582015-01-16 17:06:11 -08001173 main.log.report(
pingping-lin00e4f7f2015-01-27 16:30:06 -08001174 "***MultiPointToSinglePoint Intents after deleting \
1175 routes wrong!***" )
pingping-lin3d87a132014-12-04 14:22:49 -08001176
kelvin-onlab8a832582015-01-16 17:06:11 -08001177 time.sleep( 20 )
pingping-linc1c696e2015-01-27 13:46:44 -08001178 # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
pingping-lin00e4f7f2015-01-27 16:30:06 -08001179 pingTestResultsFile = \
1180 "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
pingping-lin79011132015-01-27 15:27:27 -08001181 + str( roundNum ) + "-ping-results-after-delete-routes-" \
1182 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingping-linc1c696e2015-01-27 13:46:44 -08001183 pingTestResults = main.QuaggaCliHost.pingTest(
pingping-lin79011132015-01-27 15:27:27 -08001184 "1.168.30.100", pingTestScript, pingTestResultsFile )
pingping-linc1c696e2015-01-27 13:46:44 -08001185 main.log.info( pingTestResults )
kelvin-onlab8a832582015-01-16 17:06:11 -08001186 time.sleep( 30 )
pingping-linc1c696e2015-01-27 13:46:44 -08001187