blob: fd15862825d8ced1ca7844a7b82d736ba179294d [file] [log] [blame]
jenkins24dde6b2015-06-19 13:40:44 -07001# ScaleOutTemplate --> CbenchBM
2#
3# CASE1 starts number of nodes specified in param file
4#
5# cameron@onlab.us
6
7import sys
Jon Hallf57a5ef2015-07-07 17:56:16 -07008import os
jenkins24dde6b2015-06-19 13:40:44 -07009import os.path
10
11
Jon Hallf57a5ef2015-07-07 17:56:16 -070012class SCPFcbench:
jenkins24dde6b2015-06-19 13:40:44 -070013
14 def __init__( self ):
15 self.default = ''
16
17 def CASE1( self, main ):
18
Jon Hallf57a5ef2015-07-07 17:56:16 -070019 import time
20 import os
jenkins24dde6b2015-06-19 13:40:44 -070021 global init
suibin zhang8a46f2e2015-07-13 21:56:07 -070022 main.case("pre-condition for cbench test.")
23
jenkins24dde6b2015-06-19 13:40:44 -070024 try:
25 if type(init) is not bool:
26 init = False
27 except NameError:
28 init = False
29
30 #Load values from params file
31 checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
32 gitPull = main.params[ 'GIT' ][ 'autopull' ]
33 BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
34 BENCHUser = main.params[ 'BENCH' ][ 'user' ]
jenkinsf4ac82d2015-07-13 16:40:20 -070035 CBENCHuser = main.params[ 'CBENCH'][ 'user' ]
suibin zhangefae9032015-07-13 17:14:39 -070036 MN1Ip = os.environ[ main.params[ 'MN' ][ 'ip1' ] ]
jenkins24dde6b2015-06-19 13:40:44 -070037 maxNodes = int(main.params[ 'availableNodes' ])
38 skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
39 cellName = main.params[ 'ENV' ][ 'cellName' ]
40
41 # -- INIT SECTION, ONLY RUNS ONCE -- #
42 if init == False:
43 init = True
44 global clusterCount #number of nodes running
45 global ONOSIp #list of ONOS IP addresses
46 global scale
47
48 clusterCount = 0
49 ONOSIp = [ 0 ]
50 scale = (main.params[ 'SCALE' ]).split(",")
51 clusterCount = int(scale[0])
52
53 #Populate ONOSIp with ips from params
54 for i in range(1, maxNodes + 1):
Jon Hallf57a5ef2015-07-07 17:56:16 -070055 ipString = os.environ[main.params['CTRL']['ip1']]
56 ONOSIp.append(ipString)
jenkins24dde6b2015-06-19 13:40:44 -070057
58 #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
59 if skipMvn != "yes":
60 mvnResult = main.ONOSbench.cleanInstall()
61
62 #git
63 main.step( "Git checkout and pull " + checkoutBranch )
64 if gitPull == 'on':
65 checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
66 pullResult = main.ONOSbench.gitPull()
67
68 else:
69 checkoutResult = main.TRUE
70 pullResult = main.TRUE
71 main.log.info( "Skipped git checkout and pull" )
72
73 # -- END OF INIT SECTION --#
74
75 clusterCount = int(scale[0])
76 scale.remove(scale[0])
77
78 #kill off all onos processes
79 main.log.step("Safety check, killing all ONOS processes")
80 main.log.step("before initiating enviornment setup")
81 for node in range(1, maxNodes + 1):
82 main.ONOSbench.onosDie(ONOSIp[node])
83
84 #Uninstall everywhere
85 main.log.step( "Cleaning Enviornment..." )
86 for i in range(1, maxNodes + 1):
87 main.log.info(" Uninstalling ONOS " + str(i) )
88 main.ONOSbench.onosUninstall( ONOSIp[i] )
Jon Hallf57a5ef2015-07-07 17:56:16 -070089
90 time.sleep(10)
91 main.ONOSbench.handle.sendline(" ")
92 main.ONOSbench.handle.expect(":~")
93 print "pexpect: \n" + main.ONOSbench.handle.before
94
95
96 print "Cellname is: "+ cellName + "ONOS IP is: " + str(ONOSIp)
jenkinsf4ac82d2015-07-13 16:40:20 -070097 main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,"drivers,openflow,fwd",[ONOSIp[1]])
Jon Hallf57a5ef2015-07-07 17:56:16 -070098
jenkins24dde6b2015-06-19 13:40:44 -070099 main.step( "Set Cell" )
100 main.ONOSbench.setCell(cellName)
Jon Hallf57a5ef2015-07-07 17:56:16 -0700101
102 #main.ONOSbench.handle.sendline(" ")
103 #main.ONOSbench.handle.expect(":~")
104 #print "pexpect: \n" + main.ONOSbench.handle.before
105
jenkins24dde6b2015-06-19 13:40:44 -0700106 main.step( "Creating ONOS package" )
107 packageResult = main.ONOSbench.onosPackage()
108
109 main.step( "verify cells" )
110 verifyCellResult = main.ONOSbench.verifyCell()
111
suibin zhang8a46f2e2015-07-13 21:56:07 -0700112 main.log.report( "Initializing " + str( clusterCount ) + " node cluster." )
jenkins24dde6b2015-06-19 13:40:44 -0700113 for node in range(1, clusterCount + 1):
114 main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
115 main.ONOSbench.onosInstall( ONOSIp[node])
116
117 for node in range(1, clusterCount + 1):
118 for i in range( 2 ):
119 isup = main.ONOSbench.isup( ONOSIp[node] )
120 if isup:
121 main.log.info("ONOS " + str(node) + " is up\n")
122 break
123 if not isup:
124 main.log.report( "ONOS " + str(node) + " didn't start!" )
125 main.log.info("Startup sequence complete")
126
127 for i in range(5):
128 main.ONOSbench.onosCfgSet(ONOSIp[1], "org.onosproject.fwd.ReactiveForwarding","packetOutOnly true")
129 time.sleep(5)
130 main.ONOSbench.handle.sendline("onos $OC1 cfg get|grep packetOutOnly")
131 main.ONOSbench.handle.expect(":~")
132 check = main.ONOSbench.handle.before
133 if "value=true" in check:
134 main.log.info("cfg set successful")
suibin zhang8a46f2e2015-07-13 21:56:07 -0700135 stepResult = main.TRUE
jenkins24dde6b2015-06-19 13:40:44 -0700136 break
137 if i == 4:
suibin zhang8a46f2e2015-07-13 21:56:07 -0700138 main.log.info("Cfg set failed")
139 stepResult = main.FALSE
jenkins24dde6b2015-06-19 13:40:44 -0700140 else:
141 time.sleep(5)
suibin zhang8a46f2e2015-07-13 21:56:07 -0700142
143 utilities.assert_equals( expect=main.TRUE,
144 actual=stepResult,
145 onpass="Successfully configure onos for cbench test ",
146 onfail="Failed to configure onos for cbench test" )
jenkins24dde6b2015-06-19 13:40:44 -0700147
148
149
150
151 def CASE2( self, main ):
suibin zhang8a46f2e2015-07-13 21:56:07 -0700152 main.case("Running Cbench")
153 main.step("Issuing cbench commands and grab returned results")
154 validFlag = False
jenkins24dde6b2015-06-19 13:40:44 -0700155 mode = main.params[ 'TEST' ][ 'mode' ]
156 if mode != "t":
157 mode = " "
158
jenkinsf4ac82d2015-07-13 16:40:20 -0700159 runCbench = ( "ssh " + CBENCHuser + "@" + ONOSIp[1] + " cbench -c localhost -p 6633 -m 1000 -l 25 -s 16 -M 100000 -w 15 -D 10000 -" + mode )
jenkins24dde6b2015-06-19 13:40:44 -0700160 main.ONOSbench.handle.sendline(runCbench)
161 time.sleep(30)
162 main.ONOSbench.handle.expect(":~")
163 output = main.ONOSbench.handle.before
164 main.log.info(output)
165
166 output = output.splitlines()
167 for line in output:
suibin zhang8a46f2e2015-07-13 21:56:07 -0700168 if "RESULT: " in line:
169 validFlag = True
jenkins24dde6b2015-06-19 13:40:44 -0700170 print line
suibin zhang8a46f2e2015-07-13 21:56:07 -0700171 resultLine = line.split(" ")
172 for word in resultLine:
173 if word == "min/max/avg/stdev":
174 resultsIndex = resultLine.index(word)
175 print resultsIndex
176 break
jenkins24dde6b2015-06-19 13:40:44 -0700177
suibin zhang8a46f2e2015-07-13 21:56:07 -0700178 finalDataString = resultLine[resultsIndex + 2]
179 print finalDataString
180 finalDataList = finalDataString.split("/")
181 avg = finalDataList[2]
182 stdev = finalDataList[3]
jenkins24dde6b2015-06-19 13:40:44 -0700183
suibin zhang8a46f2e2015-07-13 21:56:07 -0700184 main.log.info("Average: \t\t\t" + avg)
185 main.log.info("Standard Deviation: \t" + stdev)
186
jenkins24dde6b2015-06-19 13:40:44 -0700187
suibin zhang8a46f2e2015-07-13 21:56:07 -0700188 commit = main.ONOSbench.getVersion()
189 commit = (commit.split(" "))[1]
jenkins24dde6b2015-06-19 13:40:44 -0700190
suibin zhang8a46f2e2015-07-13 21:56:07 -0700191 try:
192 dbFileName="/tmp/CbenchDB"
193 dbfile = open(dbFileName, "w+")
194 temp = "'" + commit + "',"
195 temp += "'" + mode + "',"
196 temp += "'" + avg + "',"
197 temp += "'" + stdev + "'\n"
198 dbfile.write(temp)
199 dbfile.close()
200 main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"], outputMode="d")
201 except IOError:
202 main.log.warn("Error opening " + dbFileName + " to write results.")
203
204 stepResult = main.TRUE
205 break
206 if ( validFlag == False ):
207 main.log.warn("Cbench Test produced no valid results!!!!")
208 stepResult = main.FALSE
jenkins24dde6b2015-06-19 13:40:44 -0700209
suibin zhang8a46f2e2015-07-13 21:56:07 -0700210 utilities.assert_equals( expect=main.TRUE,
211 actual=stepResult,
212 onpass="Successfully tested onos for cbench. ",
213 onfail="Failed to obtain valid onos cbench result!" )
jenkins24dde6b2015-06-19 13:40:44 -0700214
215
216
217
218
219