blob: b3d34def3483cd00f9e85d4a45552e7ab167c4b5 [file] [log] [blame]
pingping-lin86d9f512015-08-17 18:29:41 -07001# Testing the functionality of SDN-IP with single ONOS instance
2class SDNIPfunction:
3
pingping-lin500727a2015-09-02 19:53:11 -07004 def __init__( self ):
pingping-lin86d9f512015-08-17 18:29:41 -07005 self.default = ''
6 global branchName
7
8
9 # This case is to setup ONOS
pingping-lin500727a2015-09-02 19:53:11 -070010 def CASE100( self, main ):
pingping-lin86d9f512015-08-17 18:29:41 -070011 """
12 CASE100 is to compile ONOS and install it
13 Startup sequence:
14 cell <name>
15 onos-verify-cell
16 git pull
17 mvn clean install
18 onos-package
19 onos-install -f
20 onos-wait-for-start
21 """
pingping-lin500727a2015-09-02 19:53:11 -070022 main.case( "Setting up test environment" )
pingping-lin86d9f512015-08-17 18:29:41 -070023
24 cellName = main.params[ 'ENV' ][ 'cellName' ]
25 ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
26
pingping-lin500727a2015-09-02 19:53:11 -070027 main.step( "Applying cell variable to environment" )
28 cellResult = main.ONOSbench.setCell( cellName )
pingping-lin86d9f512015-08-17 18:29:41 -070029 verifyResult = main.ONOSbench.verifyCell()
30
31 branchName = main.ONOSbench.getBranchName()
pingping-lin500727a2015-09-02 19:53:11 -070032 main.log.info( "ONOS is on branch: " + branchName )
pingping-lin86d9f512015-08-17 18:29:41 -070033
pingping-lin500727a2015-09-02 19:53:11 -070034 main.log.report( "Uninstalling ONOS" )
35 main.ONOSbench.onosUninstall( ONOS1Ip )
pingping-lin86d9f512015-08-17 18:29:41 -070036
pingping-lin86d9f512015-08-17 18:29:41 -070037 # gitPullResult = main.TRUE
38
pingping-lin500727a2015-09-02 19:53:11 -070039 main.step( "Git pull" )
pingping-lin86d9f512015-08-17 18:29:41 -070040 gitPullResult = main.ONOSbench.gitPull()
41
pingping-lin86d9f512015-08-17 18:29:41 -070042
pingping-lin500727a2015-09-02 19:53:11 -070043 main.ONOSbench.getVersion( report = True )
pingping-lin86d9f512015-08-17 18:29:41 -070044
pingping-lin500727a2015-09-02 19:53:11 -070045 main.step( "Creating ONOS package" )
Jon Hallbd60ea02016-08-23 10:03:59 -070046 packageResult = main.ONOSbench.buckBuild()
pingping-lin86d9f512015-08-17 18:29:41 -070047
pingping-lin500727a2015-09-02 19:53:11 -070048 main.step( "Installing ONOS package" )
49 onos1InstallResult = main.ONOSbench.onosInstall( options = "-f",
50 node = ONOS1Ip )
pingping-lin86d9f512015-08-17 18:29:41 -070051
You Wangf5de25b2017-01-06 15:13:01 -080052 main.step( "Set up ONOS secure SSH" )
53 secureSshResult = main.ONOSbench.onosSecureSSH( node=ONOS1Ip )
54
pingping-lin500727a2015-09-02 19:53:11 -070055 main.step( "Checking if ONOS is up yet" )
56 for i in range( 2 ):
57 onos1Isup = main.ONOSbench.isup( ONOS1Ip, timeout = 420 )
pingping-lin86d9f512015-08-17 18:29:41 -070058 if onos1Isup:
59 break
60 if not onos1Isup:
pingping-lin500727a2015-09-02 19:53:11 -070061 main.log.report( "ONOS1 didn't start!" )
pingping-lin86d9f512015-08-17 18:29:41 -070062
pingping-lin500727a2015-09-02 19:53:11 -070063 cliResult = main.ONOScli.startOnosCli( ONOS1Ip,
64 commandlineTimeout = 100, onosStartTimeout = 600 )
pingping-lin86d9f512015-08-17 18:29:41 -070065
Devin Lim8d7c7782017-06-07 16:21:20 -070066 case1Result = ( packageResult and cellResult and
67 verifyResult and onos1InstallResult and
Chiyu Chengef109502016-11-21 15:51:38 -080068 onos1Isup and secureSshResult and
69 cliResult )
pingping-lin86d9f512015-08-17 18:29:41 -070070
pingping-lin500727a2015-09-02 19:53:11 -070071 utilities.assert_equals( expect = main.TRUE, actual = case1Result,
72 onpass = "ONOS startup successful",
73 onfail = "ONOS startup NOT successful" )
pingping-lin86d9f512015-08-17 18:29:41 -070074
75 if case1Result == main.FALSE:
76 main.cleanup()
77 main.exit()
78
pingping-lin500727a2015-09-02 19:53:11 -070079 def CASE4( self, main ):
pingping-lin86d9f512015-08-17 18:29:41 -070080 """
81 Test the SDN-IP functionality
82 allRoutesExpected: all expected routes for all BGP peers
83 routeIntentsExpected: all expected MultiPointToSinglePointIntent \
84 intents
85 bgpIntentsExpected: expected PointToPointIntent intents
86 allRoutesActual: all routes from ONOS LCI
87 routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
88 ONOS CLI
89 bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
90 """
91 import json
92 import time
93 from operator import eq
94 from time import localtime, strftime
95
pingping-lin500727a2015-09-02 19:53:11 -070096 main.case( "This case is to testing the functionality of SDN-IP with \
97 single ONOS instance" )
pingping-lin86d9f512015-08-17 18:29:41 -070098 SDNIPJSONFILEPATH = \
Jon Hall53c5e662016-04-13 16:06:56 -070099 "~/ONOS/tools/package/config/sdnip.json"
pingping-lin86d9f512015-08-17 18:29:41 -0700100 # all expected routes for all BGP peers
101 allRoutesExpected = []
pingping-lin500727a2015-09-02 19:53:11 -0700102 main.step( "Start to generate routes for all BGP peers" )
103 main.log.info( "Generate prefixes for host3" )
104 prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
105 main.log.info( prefixesHost3 )
pingping-lin86d9f512015-08-17 18:29:41 -0700106 # generate route with next hop
107 for prefix in prefixesHost3:
pingping-lin500727a2015-09-02 19:53:11 -0700108 allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
pingping-lin86d9f512015-08-17 18:29:41 -0700109 routeIntentsExpectedHost3 = \
pingping-lin500727a2015-09-02 19:53:11 -0700110 main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
pingping-lin86d9f512015-08-17 18:29:41 -0700111 prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
pingping-lin500727a2015-09-02 19:53:11 -0700112 SDNIPJSONFILEPATH )
pingping-lin86d9f512015-08-17 18:29:41 -0700113
pingping-lin500727a2015-09-02 19:53:11 -0700114 main.log.info( "Generate prefixes for host4" )
115 prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
116 main.log.info( prefixesHost4 )
pingping-lin86d9f512015-08-17 18:29:41 -0700117 # generate route with next hop
118 for prefix in prefixesHost4:
pingping-lin500727a2015-09-02 19:53:11 -0700119 allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
pingping-lin86d9f512015-08-17 18:29:41 -0700120 routeIntentsExpectedHost4 = \
pingping-lin500727a2015-09-02 19:53:11 -0700121 main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
pingping-lin86d9f512015-08-17 18:29:41 -0700122 prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
pingping-lin500727a2015-09-02 19:53:11 -0700123 SDNIPJSONFILEPATH )
pingping-lin86d9f512015-08-17 18:29:41 -0700124
pingping-lin500727a2015-09-02 19:53:11 -0700125 main.log.info( "Generate prefixes for host5" )
126 prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
127 main.log.info( prefixesHost5 )
pingping-lin86d9f512015-08-17 18:29:41 -0700128 for prefix in prefixesHost5:
pingping-lin500727a2015-09-02 19:53:11 -0700129 allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
pingping-lin86d9f512015-08-17 18:29:41 -0700130 routeIntentsExpectedHost5 = \
pingping-lin500727a2015-09-02 19:53:11 -0700131 main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
pingping-lin86d9f512015-08-17 18:29:41 -0700132 prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
pingping-lin500727a2015-09-02 19:53:11 -0700133 SDNIPJSONFILEPATH )
pingping-lin86d9f512015-08-17 18:29:41 -0700134
135 routeIntentsExpected = routeIntentsExpectedHost3 + \
136 routeIntentsExpectedHost4 + routeIntentsExpectedHost5
137
pingping-lin500727a2015-09-02 19:53:11 -0700138 main.step( "Get links in the network" )
139 listResult = main.ONOScli.links( jsonFormat = False )
140 main.log.info( listResult )
141 main.log.info( "Activate sdn-ip application" )
142 main.ONOScli.activateApp( "org.onosproject.sdnip" )
pingping-lin86d9f512015-08-17 18:29:41 -0700143 # wait sdn-ip to finish installing connectivity intents, and the BGP
144 # paths in data plane are ready.
pingping-lin500727a2015-09-02 19:53:11 -0700145 time.sleep( int( main.params[ 'timers' ][ 'SdnIpSetup' ] ) )
pingping-lin86d9f512015-08-17 18:29:41 -0700146
pingping-lin500727a2015-09-02 19:53:11 -0700147 main.step( "Login all BGP peers and add routes into peers" )
pingping-lin86d9f512015-08-17 18:29:41 -0700148
pingping-lin500727a2015-09-02 19:53:11 -0700149 main.log.info( "Login Quagga CLI on host3" )
150 main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
151 main.log.info( "Enter configuration model of Quagga CLI on host3" )
152 main.QuaggaCliHost3.enterConfig( 64514 )
153 main.log.info( "Add routes to Quagga on host3" )
154 main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
pingping-lin86d9f512015-08-17 18:29:41 -0700155
pingping-lin500727a2015-09-02 19:53:11 -0700156 main.log.info( "Login Quagga CLI on host4" )
157 main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
158 main.log.info( "Enter configuration model of Quagga CLI on host4" )
159 main.QuaggaCliHost4.enterConfig( 64516 )
160 main.log.info( "Add routes to Quagga on host4" )
161 main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
pingping-lin86d9f512015-08-17 18:29:41 -0700162
pingping-lin500727a2015-09-02 19:53:11 -0700163 main.log.info( "Login Quagga CLI on host5" )
164 main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
165 main.log.info( "Enter configuration model of Quagga CLI on host5" )
166 main.QuaggaCliHost5.enterConfig( 64521 )
167 main.log.info( "Add routes to Quagga on host5" )
168 main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
pingping-lin86d9f512015-08-17 18:29:41 -0700169
pingping-lin500727a2015-09-02 19:53:11 -0700170 for i in range( 101, 201 ):
171 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
172 main.log.info( prefixesHostX )
pingping-lin86d9f512015-08-17 18:29:41 -0700173 for prefix in prefixesHostX:
pingping-lin500727a2015-09-02 19:53:11 -0700174 allRoutesExpected.append( prefix + "/" + "192.168.40."
175 + str( i - 100 ) )
pingping-lin86d9f512015-08-17 18:29:41 -0700176
177 routeIntentsExpectedHostX = \
pingping-lin500727a2015-09-02 19:53:11 -0700178 main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
179 prefixesHostX, "192.168.40." + str( i - 100 ),
180 "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
pingping-lin86d9f512015-08-17 18:29:41 -0700181 routeIntentsExpected = routeIntentsExpected + \
182 routeIntentsExpectedHostX
183
pingping-lin500727a2015-09-02 19:53:11 -0700184 main.log.info( "Login Quagga CLI on host" + str( i ) )
185 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
186 QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
187 main.log.info( \
188 "Enter configuration model of Quagga CLI on host" + str( i ) )
189 QuaggaCliHostX.enterConfig( 65000 + i - 100 )
190 main.log.info( "Add routes to Quagga on host" + str( i ) )
191 QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
pingping-lin86d9f512015-08-17 18:29:41 -0700192 # wait Quagga to finish delivery all routes to each other and to sdn-ip,
193 # plus finish installing all intents.
pingping-lin500727a2015-09-02 19:53:11 -0700194 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
195 time.sleep( int( main.params[ 'timers' ][ 'PathAvailable' ] ) )
pingping-lin86d9f512015-08-17 18:29:41 -0700196 # get routes inside SDN-IP
pingping-lin500727a2015-09-02 19:53:11 -0700197 getRoutesResult = main.ONOScli.routes( jsonFormat = True )
pingping-lin86d9f512015-08-17 18:29:41 -0700198
199 allRoutesActual = \
pingping-lin500727a2015-09-02 19:53:11 -0700200 main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
pingping-lin86d9f512015-08-17 18:29:41 -0700201
pingping-lin500727a2015-09-02 19:53:11 -0700202 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
203 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
204 main.step( "Check routes installed" )
205 main.log.info( "Routes expected:" )
206 main.log.info( allRoutesStrExpected )
207 main.log.info( "Routes get from ONOS CLI:" )
208 main.log.info( allRoutesStrActual )
209 utilities.assertEquals( \
210 expect = allRoutesStrExpected, actual = allRoutesStrActual,
211 onpass = "***Routes in SDN-IP are correct!***",
212 onfail = "***Routes in SDN-IP are wrong!***" )
pingping-lin86d9f512015-08-17 18:29:41 -0700213
pingping-lin500727a2015-09-02 19:53:11 -0700214 getIntentsResult = main.ONOScli.intents( jsonFormat = True )
pingping-lin86d9f512015-08-17 18:29:41 -0700215
pingping-lin500727a2015-09-02 19:53:11 -0700216 main.step( "Check MultiPointToSinglePointIntent intents installed" )
pingping-lin86d9f512015-08-17 18:29:41 -0700217 # routeIntentsExpected are generated when generating routes
218 # get route intents from ONOS CLI
219 routeIntentsActualNum = \
pingping-lin500727a2015-09-02 19:53:11 -0700220 main.QuaggaCliHost3.extractActualRouteIntentNum( getIntentsResult )
pingping-lin86d9f512015-08-17 18:29:41 -0700221 routeIntentsExpectedNum = 1030
pingping-lin500727a2015-09-02 19:53:11 -0700222 main.log.info( "MultiPointToSinglePoint Intent Num expected is:" )
223 main.log.info( routeIntentsExpectedNum )
224 main.log.info( "MultiPointToSinglePoint Intent NUM Actual is:" )
225 main.log.info( routeIntentsActualNum )
226 utilities.assertEquals( \
227 expect = True,
228 actual = eq( routeIntentsExpectedNum, routeIntentsActualNum ),
229 onpass = "***MultiPointToSinglePoint Intent Num in SDN-IP is \
pingping-lin86d9f512015-08-17 18:29:41 -0700230 correct!***",
pingping-lin500727a2015-09-02 19:53:11 -0700231 onfail = "***MultiPointToSinglePoint Intent Num in SDN-IP is \
232 wrong!***" )
pingping-lin86d9f512015-08-17 18:29:41 -0700233
pingping-lin500727a2015-09-02 19:53:11 -0700234 main.step( "Check BGP PointToPointIntent intents installed" )
pingping-lin86d9f512015-08-17 18:29:41 -0700235
236 bgpIntentsActualNum = \
pingping-lin500727a2015-09-02 19:53:11 -0700237 main.QuaggaCliHost3.extractActualBgpIntentNum( getIntentsResult )
pingping-lin86d9f512015-08-17 18:29:41 -0700238 bgpIntentsExpectedNum = 624
pingping-lin500727a2015-09-02 19:53:11 -0700239 main.log.info( "bgpIntentsExpected num is:" )
240 main.log.info( bgpIntentsExpectedNum )
241 main.log.info( "bgpIntentsActual num is:" )
242 main.log.info( bgpIntentsActualNum )
243 utilities.assertEquals( \
244 expect = True,
245 actual = eq( bgpIntentsExpectedNum, bgpIntentsActualNum ),
246 onpass = "***PointToPointIntent Intent Num in SDN-IP are correct!***",
247 onfail = "***PointToPointIntent Intent Num in SDN-IP are wrong!***" )
pingping-lin86d9f512015-08-17 18:29:41 -0700248
249 #============================= Ping Test ========================
Jon Hall53c5e662016-04-13 16:06:56 -0700250 pingTestScript = "~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/CASE4-ping-as2host.sh"
pingping-lin86d9f512015-08-17 18:29:41 -0700251 pingTestResultsFile = \
Jon Hall53c5e662016-04-13 16:06:56 -0700252 "~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/log/CASE4-ping-results-before-delete-routes-"\
pingping-lin500727a2015-09-02 19:53:11 -0700253 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
254 pingTestResults = main.QuaggaCliHost.pingTest( \
255 "1.168.30.100", pingTestScript, pingTestResultsFile )
256 main.log.info( pingTestResults )
pingping-lin86d9f512015-08-17 18:29:41 -0700257 # wait to finish the ping test
pingping-lin500727a2015-09-02 19:53:11 -0700258 time.sleep( int( main.params[ 'timers' ][ 'PingTestWithRoutes' ] ) )
pingping-lin86d9f512015-08-17 18:29:41 -0700259
260 #============================= Deleting Routes ==================
pingping-lin500727a2015-09-02 19:53:11 -0700261 main.step( "Check deleting routes installed" )
262 main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
263 main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
264 main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
pingping-lin86d9f512015-08-17 18:29:41 -0700265
pingping-lin500727a2015-09-02 19:53:11 -0700266 for i in range( 101, 201 ):
267 prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
268 main.log.info( prefixesHostX )
269 QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
270 QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
pingping-lin86d9f512015-08-17 18:29:41 -0700271 # wait Quagga to finish delivery all routes to each other and to sdn-ip,
272 # plus finish un-installing all intents.
pingping-lin500727a2015-09-02 19:53:11 -0700273 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
274 time.sleep( int( main.params[ 'timers' ][ 'PathAvailable' ] ) )
pingping-lin86d9f512015-08-17 18:29:41 -0700275
pingping-lin500727a2015-09-02 19:53:11 -0700276 getRoutesResult = main.ONOScli.routes( jsonFormat = True )
pingping-lin86d9f512015-08-17 18:29:41 -0700277 allRoutesActual = \
pingping-lin500727a2015-09-02 19:53:11 -0700278 main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
279 main.log.info( "allRoutes_actual = " )
280 main.log.info( allRoutesActual )
pingping-lin86d9f512015-08-17 18:29:41 -0700281
pingping-lin500727a2015-09-02 19:53:11 -0700282 utilities.assertEquals( \
283 expect = "[]", actual = str( allRoutesActual ),
284 onpass = "***Route number in SDN-IP is 0, correct!***",
285 onfail = "***Routes number in SDN-IP is not 0, wrong!***" )
pingping-lin86d9f512015-08-17 18:29:41 -0700286
pingping-lin500727a2015-09-02 19:53:11 -0700287 main.step( "Check intents after deleting routes" )
288 getIntentsResult = main.ONOScli.intents( jsonFormat = True )
pingping-lin86d9f512015-08-17 18:29:41 -0700289 routeIntentsActualNum = \
pingping-lin500727a2015-09-02 19:53:11 -0700290 main.QuaggaCliHost3.extractActualRouteIntentNum(
291 getIntentsResult )
292 main.log.info( "route Intents Actual Num is: " )
293 main.log.info( routeIntentsActualNum )
294 utilities.assertEquals( \
295 expect = 0, actual = routeIntentsActualNum,
296 onpass = "***MultiPointToSinglePoint Intent Num in SDN-IP is 0, \
pingping-lin86d9f512015-08-17 18:29:41 -0700297 correct!***",
pingping-lin500727a2015-09-02 19:53:11 -0700298 onfail = "***MultiPointToSinglePoint Intent Num in SDN-IP is not 0, \
299 wrong!***" )
pingping-lin86d9f512015-08-17 18:29:41 -0700300
Jon Hall53c5e662016-04-13 16:06:56 -0700301 pingTestScript = "~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/CASE4-ping-as2host.sh"
pingping-lin86d9f512015-08-17 18:29:41 -0700302 pingTestResultsFile = \
Jon Hall53c5e662016-04-13 16:06:56 -0700303 "~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/log/CASE4-ping-results-after-delete-routes-"\
pingping-lin500727a2015-09-02 19:53:11 -0700304 + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
305 pingTestResults = main.QuaggaCliHost.pingTest( \
306 "1.168.30.100", pingTestScript, pingTestResultsFile )
307 main.log.info( pingTestResults )
pingping-lin86d9f512015-08-17 18:29:41 -0700308 # wait to finish the ping test
pingping-lin500727a2015-09-02 19:53:11 -0700309 time.sleep( int( main.params[ 'timers' ][ 'PingTestWithoutRoutes' ] ) )