blob: 174d46347044438a0e6ef62a35eb81a0ff80c6ad [file] [log] [blame]
YPZhangcbc2a062016-07-11 10:55:44 -07001'''
2SCPFintentEventTp
3 - Use intentperf app to generate a lot of intent install and withdraw events
4 - Test will run with 1,3,5,7 nodes, and with all neighbors
5 - Test will run 400 seconds and grep the overall rate from intent-perf summary
andrew@onlab.us2ae3a112015-02-02 11:24:32 -08006
YPZhangcbc2a062016-07-11 10:55:44 -07007 yunpeng@onlab.us
8'''
9
cameron@onlab.usaaecfd72015-07-08 12:27:26 -070010import time
andrew@onlab.us10332202015-03-11 15:04:43 -070011
andrew@onlab.us2ae3a112015-02-02 11:24:32 -080012
suibin7f2c9cd2015-07-08 17:34:59 -070013class SCPFintentEventTp:
andrew@onlab.us2ae3a112015-02-02 11:24:32 -080014 def __init__( self ):
15 self.default = ''
16
YPZhangcbc2a062016-07-11 10:55:44 -070017 def CASE0( self, main ):
18 '''
19 - GIT
20 - BUILDING ONOS
21 Pull specific ONOS branch, then Build ONOS ono ONOS Bench.
22 This step is usually skipped. Because in a Jenkins driven automated
23 test env. We want Jenkins jobs to pull&build for flexibility to handle
24 different versions of ONOS.
25 - Construct tests variables
26 '''
27 gitPull = main.params['GIT']['gitPull']
28 gitBranch = main.params['GIT']['gitBranch']
cameron@onlab.usc10e22c2015-05-13 13:07:28 -070029
YPZhangcbc2a062016-07-11 10:55:44 -070030 main.case( "Pull onos branch and build onos on Teststation." )
cameron@onlab.usaaecfd72015-07-08 12:27:26 -070031
YPZhangcbc2a062016-07-11 10:55:44 -070032 if gitPull == 'True':
33 main.step( "Git Checkout ONOS branch: " + gitBranch )
34 stepResult = main.ONOSbench.gitCheckout( branch=gitBranch )
35 utilities.assert_equals(expect=main.TRUE,
36 actual=stepResult,
37 onpass="Successfully checkout onos branch.",
38 onfail="Failed to checkout onos branch. Exiting test...")
39 if not stepResult: main.exit()
YPZhange6ef82a2016-07-05 16:48:15 -070040
YPZhangcbc2a062016-07-11 10:55:44 -070041 main.step( "Git Pull on ONOS branch:" + gitBranch )
42 stepResult = main.ONOSbench.gitPull()
43 utilities.assert_equals(expect=main.TRUE,
44 actual=stepResult,
45 onpass="Successfully pull onos. ",
46 onfail="Failed to pull onos. Exiting test ...")
47 if not stepResult: main.exit()
andrew@onlab.us2ae3a112015-02-02 11:24:32 -080048
YPZhangcbc2a062016-07-11 10:55:44 -070049 main.step( "Building ONOS branch: " + gitBranch )
50 stepResult = main.ONOSbench.cleanInstall( skipTest=True )
51 utilities.assert_equals(expect=main.TRUE,
52 actual=stepResult,
53 onpass="Successfully build onos.",
54 onfail="Failed to build onos. Exiting test...")
55 if not stepResult: main.exit()
56
57 else:
58 main.log.warn( "Skipped pulling onos and Skipped building ONOS" )
59
60 main.cellName = main.params['ENV']['cellName']
61 main.Apps = main.params['ENV']['cellApps']
62 main.BENCHIp = main.params['BENCH']['ip1']
63 main.BENCHUser = main.params['BENCH']['user']
64 main.MN1Ip = main.params['MN']['ip1']
65 main.maxNodes = int(main.params['max'])
66 main.numSwitches = (main.params['TEST']['numSwitches']).split(",")
YPZhangcbc2a062016-07-11 10:55:44 -070067 main.skipRelRsrc = main.params['TEST']['skipReleaseResourcesOnWithdrawal']
YPZhange6ef82a2016-07-05 16:48:15 -070068 main.flowObj = main.params['TEST']['flowObj']
YPZhangcbc2a062016-07-11 10:55:44 -070069 main.startUpSleep = int(main.params['SLEEP']['startup'])
70 main.installSleep = int(main.params['SLEEP']['install'])
71 main.verifySleep = int(main.params['SLEEP']['verify'])
72 main.scale = (main.params['SCALE']).split(",")
73 main.testDuration = main.params[ 'TEST' ][ 'duration' ]
74 main.logInterval = main.params[ 'TEST' ][ 'log_interval' ]
75 main.debug = main.params[ 'debugMode' ]
YPZhangcbc2a062016-07-11 10:55:44 -070076 main.timeout = int(main.params['SLEEP']['timeout'])
77 main.cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
YPZhange6ef82a2016-07-05 16:48:15 -070078 if main.flowObj == "True":
79 main.flowObj = True
80 main.dbFileName = main.params['DATABASE']['dbFlowObj']
You Wange1427332017-02-06 17:16:20 -080081 main.numKeys = main.params[ 'TEST' ][ 'numKeysFlowObj' ]
YPZhange6ef82a2016-07-05 16:48:15 -070082 else:
83 main.flowObj = False
84 main.dbFileName = main.params['DATABASE']['dbName']
You Wange1427332017-02-06 17:16:20 -080085 main.numKeys = main.params[ 'TEST' ][ 'numKeys' ]
YPZhangcbc2a062016-07-11 10:55:44 -070086 # Create DataBase file
87 main.log.info( "Create Database file " + main.dbFileName )
88 resultsDB = open( main.dbFileName, "w+" )
89 resultsDB.close()
YPZhange6ef82a2016-07-05 16:48:15 -070090
YPZhangcbc2a062016-07-11 10:55:44 -070091 # set neighbors
92 main.neighbors = "1"
cameron@onlab.us412e9562015-05-13 16:04:34 -070093
YPZhangcbc2a062016-07-11 10:55:44 -070094 def CASE1( self, main ):
95 # Clean up test environment and set up
96 import time
97 main.log.info( "Get ONOS cluster IP" )
98 print( main.scale )
99 main.numCtrls = int( main.scale.pop(0) )
100 main.ONOSip = []
101 main.maxNumBatch = 0
102 main.AllONOSip = main.ONOSbench.getOnosIps()
103 for i in range( main.numCtrls ):
104 main.ONOSip.append( main.AllONOSip[i] )
105 main.log.info( main.ONOSip )
106 main.CLIs = []
107 main.log.info( "Creating list of ONOS cli handles" )
108 for i in range( main.numCtrls ):
Devin Lim28706842017-06-08 10:23:48 -0700109 main.CLIs.append( getattr( main, 'ONOScli%s' % (i + 1) ) )
cameron@onlab.usc10e22c2015-05-13 13:07:28 -0700110
YPZhangcbc2a062016-07-11 10:55:44 -0700111 if not main.CLIs:
112 main.log.error( "Failed to create the list of ONOS cli handles" )
113 main.cleanup()
114 main.exit()
cameron@onlab.usc5bf8192015-07-13 13:36:05 -0700115
YPZhangcbc2a062016-07-11 10:55:44 -0700116 main.commit = main.ONOSbench.getVersion( report=True )
117 main.commit = main.commit.split(" ")[1]
118 main.log.info( "Starting up %s node(s) ONOS cluster" % main.numCtrls )
119 main.log.info("Safety check, killing all ONOS processes" +
120 " before initiating environment setup")
cameron@onlab.us059c2562015-04-02 14:12:51 -0700121
YPZhangcbc2a062016-07-11 10:55:44 -0700122 for i in range( main.numCtrls ):
You Wangb98a9fa2017-02-15 17:27:42 -0800123 main.ONOSbench.onosStop( main.ONOSip[i] )
124 main.ONOSbench.onosKill( main.ONOSip[i] )
jenkins15b2b132015-06-23 14:04:09 -0700125
YPZhangcbc2a062016-07-11 10:55:44 -0700126 main.log.info( "NODE COUNT = %s" % main.numCtrls )
127 main.ONOSbench.createCellFile(main.ONOSbench.ip_address,
128 main.cellName,
129 main.MN1Ip,
130 main.Apps,
Devin Lim461f0872017-06-05 16:49:33 -0700131 main.ONOSip,
132 main.ONOScli1.user_name )
YPZhangcbc2a062016-07-11 10:55:44 -0700133 main.step( "Apply cell to environment" )
134 cellResult = main.ONOSbench.setCell( main.cellName )
135 verifyResult = main.ONOSbench.verifyCell()
136 stepResult = cellResult and verifyResult
137 utilities.assert_equals(expect=main.TRUE,
138 actual=stepResult,
139 onpass="Successfully applied cell to " + \
140 "environment",
141 onfail="Failed to apply cell to environment ")
andrew@onlab.us2ae3a112015-02-02 11:24:32 -0800142
andrew@onlab.us2ae3a112015-02-02 11:24:32 -0800143 main.step( "Creating ONOS package" )
Jon Hallbd60ea02016-08-23 10:03:59 -0700144 packageResult = main.ONOSbench.buckBuild()
YPZhangcbc2a062016-07-11 10:55:44 -0700145 stepResult = packageResult
146 utilities.assert_equals(expect=main.TRUE,
147 actual=stepResult,
148 onpass="Successfully created ONOS package",
149 onfail="Failed to create ONOS package")
andrew@onlab.us2ae3a112015-02-02 11:24:32 -0800150
YPZhangcbc2a062016-07-11 10:55:44 -0700151 main.step( "Uninstall ONOS package on all Nodes" )
152 uninstallResult = main.TRUE
153 for i in range( int( main.numCtrls ) ):
154 main.log.info( "Uninstalling package on ONOS Node IP: " + main.ONOSip[i] )
155 u_result = main.ONOSbench.onosUninstall( main.ONOSip[i] )
156 utilities.assert_equals(expect=main.TRUE, actual=u_result,
157 onpass="Test step PASS",
158 onfail="Test step FAIL")
159 uninstallResult = ( uninstallResult and u_result )
Jon Hall4ba53f02015-07-29 13:07:41 -0700160
YPZhangcbc2a062016-07-11 10:55:44 -0700161 main.step( "Install ONOS package on all Nodes" )
162 installResult = main.TRUE
163 for i in range( int( main.numCtrls ) ):
164 main.log.info( "Installing package on ONOS Node IP: " + main.ONOSip[i] )
165 i_result = main.ONOSbench.onosInstall(node=main.ONOSip[i])
166 utilities.assert_equals(expect=main.TRUE, actual=i_result,
167 onpass="Test step PASS",
168 onfail="Test step FAIL")
169 installResult = installResult and i_result
cameron@onlab.us059c2562015-04-02 14:12:51 -0700170
Chiyu Chengef109502016-11-21 15:51:38 -0800171 main.step( "Set up ONOS secure SSH" )
172 secureSshResult = main.TRUE
173 for i in range( int( main.numCtrls ) ):
174 secureSshResult = secureSshResult and main.ONOSbench.onosSecureSSH( node=main.ONOSip[i] )
175 utilities.assert_equals( expect=main.TRUE, actual=secureSshResult,
176 onpass="Test step PASS",
177 onfail="Test step FAIL" )
178
You Wang0357c432017-01-09 16:13:33 -0800179 time.sleep( main.startUpSleep )
180 main.step( "Starting ONOS service" )
181 stopResult = main.TRUE
182 startResult = main.TRUE
183 onosIsUp = main.TRUE
184 for i in range( main.numCtrls ):
185 onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
186 if onosIsUp == main.TRUE:
187 main.log.report( "ONOS instance is up and ready" )
188 else:
189 main.log.report( "ONOS instance may not be up, stop and " +
190 "start ONOS again " )
191 for i in range( main.numCtrls ):
192 stopResult = stopResult and \
193 main.ONOSbench.onosStop( main.ONOSip[ i ] )
194 for i in range( main.numCtrls ):
195 startResult = startResult and \
196 main.ONOSbench.onosStart( main.ONOSip[ i ] )
197 stepResult = onosIsUp and stopResult and startResult
198 utilities.assert_equals( expect=main.TRUE,
199 actual=stepResult,
200 onpass="ONOS service is ready",
201 onfail="ONOS service did not start properly" )
202
YPZhangcbc2a062016-07-11 10:55:44 -0700203 main.step( "Start ONOS cli using thread" )
204 startCliResult = main.TRUE
205 pool = []
206 main.threadID = 0
207 for i in range(int(main.numCtrls)):
208 t = main.Thread(target=main.CLIs[i].startOnosCli,
209 threadID=main.threadID,
210 name="startOnosCli",
211 args=[main.ONOSip[i]],
212 kwargs={"onosStartTimeout": main.timeout})
213 pool.append(t)
214 t.start()
215 main.threadID = main.threadID + 1
216 for t in pool:
217 t.join()
218 startCliResult = startCliResult and t.result
219 time.sleep( main.startUpSleep )
cameron@onlab.us059c2562015-04-02 14:12:51 -0700220
YPZhangcbc2a062016-07-11 10:55:44 -0700221 # config apps
YPZhangcbc2a062016-07-11 10:55:44 -0700222 main.CLIs[0].setCfg( "org.onosproject.net.intent.impl.IntentManager",
223 "skipReleaseResourcesOnWithdrawal " + main.skipRelRsrc )
224 main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(int(main.numCtrls*10)) )
225 main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "topoShape linear" )
226 main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "enabled true" )
YPZhange6ef82a2016-07-05 16:48:15 -0700227 if main.flowObj:
YPZhangcbc2a062016-07-11 10:55:44 -0700228 main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
229 "useFlowObjectives", value="true")
You Wang106d0fa2017-05-15 17:22:15 -0700230 main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
231 "defaultFlowObjectiveCompiler",
232 value='org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler')
YPZhangcbc2a062016-07-11 10:55:44 -0700233 time.sleep( main.startUpSleep )
cameron@onlab.useae03dc2015-07-29 11:51:28 -0700234
YPZhangcbc2a062016-07-11 10:55:44 -0700235 # balanceMasters
236 main.CLIs[0].balanceMasters()
237 time.sleep( main.startUpSleep )
cameron@onlab.usaaecfd72015-07-08 12:27:26 -0700238
YPZhangcbc2a062016-07-11 10:55:44 -0700239 def CASE2(self, main):
jenkins3af0cd82015-03-24 10:27:16 -0700240 import numpy
cameron@onlab.usc10e22c2015-05-13 13:07:28 -0700241
YPZhangcbc2a062016-07-11 10:55:44 -0700242 main.log.info( "Cluster Count = " + str( main.numCtrls ) )
243 # adjust neighbors
244 if main.numCtrls == 1:
245 main.neighbors = "0"
246 main.log.info( "Neighbors: 0" )
247 elif main.neighbors != "0":
248 main.neighbors = "0"
249 main.log.info( "Neighbors: 0" )
250 elif main.neighbors == "0":
251 main.neighbors = str( main.numCtrls - 1 )
252 main.log.info( "Neighbors: " + main.neighbors )
cameron@onlab.usc10e22c2015-05-13 13:07:28 -0700253
YPZhangcbc2a062016-07-11 10:55:44 -0700254 main.log.info( "Config intent-perf app" )
255 main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "numKeys " + main.numKeys )
256 main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "numNeighbors " + str( main.neighbors ) )
257 main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "cyclePeriod " + main.cyclePeriod )
cameron@onlab.usc10e22c2015-05-13 13:07:28 -0700258
YPZhangcbc2a062016-07-11 10:55:44 -0700259 main.log.info( "Starting intent-perf test for " + str(main.testDuration) + " seconds..." )
260 main.CLIs[0].sendline( "intent-perf-start" )
261 stop = time.time() + float( main.testDuration )
andrew@onlab.us10332202015-03-11 15:04:43 -0700262
YPZhangcbc2a062016-07-11 10:55:44 -0700263 while time.time() < stop:
264 time.sleep(15)
265 result = main.CLIs[0].getIntentPerfSummary()
266 if result:
267 for ip in main.ONOSip:
268 main.log.info( "Node {} Overall Rate: {}".format( ip, result[ip] ) )
269 main.log.info( "Stop intent-perf" )
270 for node in main.CLIs:
271 node.sendline( "intent-perf-stop" )
272 if result:
273 for ip in main.ONOSip:
274 main.log.info( "Node {} final Overall Rate: {}".format( ip, result[ip] ) )
andrew@onlab.us2ae3a112015-02-02 11:24:32 -0800275
YPZhangcbc2a062016-07-11 10:55:44 -0700276 with open( main.dbFileName, "a" ) as resultDB:
277 for nodes in range( 0, len( main.ONOSip ) ):
278 resultString = "'" + main.commit + "',"
279 resultString += "'1gig',"
280 resultString += str(main.numCtrls) + ","
281 resultString += "'baremetal" + str( nodes+1 ) + "',"
282 resultString += main.neighbors + ","
283 resultString += result[ main.ONOSip[ nodes ] ]+","
284 resultString += str(0) + "\n" # no stddev
285 resultDB.write( resultString )
286 resultDB.close()