blob: 3f9862f2fda51a18f984d06f1d0ff6c7226508c4 [file] [log] [blame]
Jeremy Ronquillod1833522019-05-06 16:51:59 -07001#!groovy
2// Copyright 2019 Open Networking Foundation (ONF)
3//
4// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
5// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
6// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
7//
8// TestON is free software: you can redistribute it and/or modify
9// it under the terms of the GNU General Public License as published by
10// the Free Software Foundation, either version 2 of the License, or
11// (at your option) any later version.
12//
13// TestON is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with TestON. If not, see <http://www.gnu.org/licenses/>.
20
21// When there is a new version of ONOS about to release, run this job to create all necessary
22// test result wiki pages.
23//
24// In order to create the sub-pages, you need to know the page IDs of the parent pages; for
25// example, if you want to generate the test category pages, you will need the page ID
26// of the top level branch results.
27
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -070028test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
Jeremy Ronquillod1833522019-05-06 16:51:59 -070029
30runningNode = "TestStation-BMs"
31
32// set default onos_v to be current_version.
33// onos_v needs to be in the format #.##, do not include "ONOS" or "onos"
34wikiTestResultsPageID = 1048618
35onos_v = params.version
36onos_bird = params.bird
37top_level_page_id = params.top_level_page_id.toInteger()
38SCPF_page_id = params.SCPF_page_id.toInteger()
39USECASE_page_id = params.USECASE_page_id.toInteger()
40SR_page_id = params.USECASE_page_id.toInteger()
41onos_branch = "ONOS-" + onos_v
42
43SCPF_system_environment = [ "Server: Dual XeonE5-2670 v2 2.5GHz; 64GB DDR3; 512GB SSD",
44 "System clock precision is +/- 1 ms",
45 "1Gbps NIC",
46 "JAVA_OPTS=\"\${JAVA_OPTS:--Xms8G -Xmx8G}\"" ]
47
Jeremy Ronquillod1833522019-05-06 16:51:59 -070048// get the name of the job.
49jobName = env.JOB_NAME
50
51String[] pagesToPublish = []
52String[] pageNames = []
53parentID = -1
54
55if ( top_level_page_id > -1 ){
56 pageNames += onos_v + "-CHO"
57 pagesToPublish += createCHOpageContents()
58
59 pageNames += onos_v + "-Functionality"
60 pagesToPublish += createGeneralPageContents( "FUNC" )
61
62 pageNames += onos_v + "-HA"
63 pagesToPublish += createGeneralPageContents( "HA" )
64
65 pageNames += onos_v + "-Performance and Scale-out"
66 pagesToPublish += createSCPFpageContents()
67
68 pageNames += onos_v + "-USECASE"
69 pagesToPublish += createGeneralPageContents( "USECASE" )
70
71 // pagesToPublish += createGeneralPageContents( "SRHA" )
72
73 parentID = top_level_page_id
74} else {
75 pageNames += "ONOS-" + onos_v + " (" + onos_bird + ")"
76 pagesToPublish += createTopLevelPageContents()
77
78 parentID = wikiTestResultsPageID
79}
80
81if ( SCPF_page_id > -1 ){
82 pageNames += onos_v + ": Experiment A&B - Topology (Switch, Link) Event Latency"
83 pagesToPublish += createSwitchPortLatPage()
84
85 pageNames += onos_v + ": Experiment C - Intent Install/Remove/Re-route Latency"
86 pagesToPublish += createIntentLatencyPage()
87
88 pageNames += onos_v + ": Experiment D - Intents Operations Throughput"
89 pagesToPublish += createIntentEventThroughputPage()
90
91 pageNames += onos_v + ": Experiment E - Topology Scaling Operation"
92 pagesToPublish += createScaleTopoPage()
93
94 pageNames += onos_v + ": Experiment F - Flow Subsystem Burst Throughput"
95 pagesToPublish += createFlowThroughputPage()
96
97 pageNames += onos_v + ": Experiment G - Single-node ONOS Cbench"
98 pagesToPublish += createCbenchPage()
99
100 pageNames += onos_v + ": Experiment I - Single Bench Flow Latency Test"
101 pagesToPublish += createBatchFlowPage()
102
103 pageNames += onos_v + ": Experiment L - Host Add Latency"
104 pagesToPublish += createHostAddLatencyPage()
105
106 pageNames += onos_v + ": Experiment M - Mastership Failover Latency"
107 pagesToPublish += createMastershipFailoverLatPage()
108
109 parentID = SCPF_page_id
110}
111
112if ( USECASE_page_id > -1 ){
113 pageNames += onos_v + "-Segment Routing"
114 pagesToPublish += createGeneralPageContents( "SR" )
115
116 parentID = USECASE_page_id
117}
118
119echoForDebug(pageNames, pagesToPublish)
120node ( runningNode ) {
121 for ( i in 0..pagesToPublish.length - 1 ){
122 publishToConfluence( pageNames[ i ], pagesToPublish[ i ], parentID )
123 }
124}
125
126def publishToConfluence( pageName, contents, parentID ){
127 // publish HTML script to wiki confluence
128 // isPostResult : string "true" "false"
129 // file : name of the file to be published
130
131 if ( parentID > -1 ){
132 publishConfluence siteName: 'wiki.onosproject.org', pageName: pageName, spaceName: 'ONOS',
133 attachArchivedArtifacts: true, buildIfUnstable: true, parentId: parentID,
134 editorList: [ confluenceWritePage( confluenceText( contents ) ) ]
135 } else {
136 publishConfluence siteName: 'wiki.onosproject.org', pageName: pageName, spaceName: 'ONOS',
137 attachArchivedArtifacts: true, buildIfUnstable: true,
138 editorList: [ confluenceWritePage( confluenceText( contents ) ) ]
139 }
140}
141
142def echoForDebug( pageNames, pagesToPublish ){
143 for ( i in 0..pagesToPublish.length - 1 ){
144 echo pageNames[ i ]
145 echo pagesToPublish[ i ]
146 }
147}
148
149def makeImage( imageClass, imageLink, width=-1 ){
150 if ( width == -1 ){
151 return "<p><img class=\"" + imageClass + "\" src=\"" + imageLink + "\" data-image-src=\"" + imageLink + "\"></img></p>"
152 } else {
153 return "<p><img class=\"" + imageClass + "\" width=\"" + width + "\" src=\"" + imageLink + "\" data-image-src=\"" + imageLink + "\"></img></p>"
154 }
155
156}
157
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700158def pageTree( category, testsFromCategory ){
Jeremy Ronquillod1833522019-05-06 16:51:59 -0700159 pTree = "<ul>"
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700160 for ( String test in testsFromCategory.keySet() ){
161 testTitle = onos_v + "-" + testsFromCategory[ test ][ "wikiName" ]
Jeremy Ronquillod1833522019-05-06 16:51:59 -0700162 pTree += "<li><h3><a href=\"https://wiki.onosproject.org/display/ONOS/" + testTitle + "\">"
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700163 pTree += testTitle + "</a></h3></li>"
Jeremy Ronquillod1833522019-05-06 16:51:59 -0700164 }
165 pTree += "</ul>"
166 return pTree
167}
168
169def createTopLevelPageContents(){
170 result = ""
171 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-VM/lastSuccessfulBuild/artifact/ALL_onos-" + onos_v + "_build-latest_"
172 executed = graphLinkPrefix + "executed_pieChart.jpg"
173 passfail = graphLinkPrefix + "passfail_pieChart.jpg"
174 ts_summary = graphLinkPrefix + "test-suite-summary.jpg"
175
176 imageClass = "confluence-embedded-image confluence-external-resource confluence-content-image-border"
177 imagesHTML = makeImage( imageClass, executed, 400 ) +
178 makeImage( imageClass, passfail, 400 ) +
179 makeImage( imageClass, ts_summary, 500 )
180
181 pTreeLinkPrefix = "https://wiki.onosproject.org/display/ONOS/"
182 pTreeHTML = "<ul>" +
183 "<li><h3><a href=\"" + pTreeLinkPrefix + onos_v + "-CHO" + "\">" + onos_v + "-CHO" + "</a></h3></li>" +
184 "<li><h3><a href=\"" + pTreeLinkPrefix + onos_v + "-Functionality" + "\">" + onos_v + "-Functionality" + "</a></h3></li>" +
185 "<li><h3><a href=\"" + pTreeLinkPrefix + onos_v + "-HA" + "\">" + onos_v + "-HA" + "</a></h3></li>" +
186 "<li><h3><a href=\"" + pTreeLinkPrefix + onos_v + "-Performance+and+Scale-out" + "\">" + onos_v + "-Performance and Scale-out" + "</a></h3></li>" +
187 "<li><h3><a href=\"" + pTreeLinkPrefix + onos_v + "-USECASE" + "\">" + onos_v + "-USECASE" + "</a></h3></li>" +
188 "</ul>"
189
190 result = imagesHTML + pTreeHTML
191
192 return result
193}
194
195def createCHOpageContents(){
196 result = ""
197 testPlan = "https://wiki.onosproject.org/pages/viewpage.action?pageId=2131208"
198 description = "<p>ONOS Apps:</p>" +
199 "<ul>" +
200 "<li>drivers</li>" +
201 "<li>openflow</li>" +
202 "<li>segmentrouting</li>" +
203 "<li>fpm</li>" +
204 "<li>dhcprelay</li>" +
205 "<li>netcfghostprovider</li>" +
206 "<li>routeradvertisement</li>" +
207 "<li>t3</li>" +
208 "<li>hostprobingprovider</li>" +
209 "</ul>" +
210 "<p>Topology:</p>" +
211 "<ul>" +
212 "<li>H-AGG</li>" +
213 "</ul>" +
214 "<p>For more details, check out the <a href=\"" + testPlan + "\"> test plans for CHO</a><br /></p>"
215
216 CHOevents = "https://jenkins.onosproject.org/view/QA/job/postjob-Fabric5/lastSuccessfulBuild/artifact/CHO_Events_onos-" + onos_v + "_168-maxData_graph.jpg"
217 CHOfailures = "https://jenkins.onosproject.org/view/QA/job/postjob-Fabric5/lastSuccessfulBuild/artifact/CHO_Failure-Check_onos-" + onos_v + "_168-maxData_graph.jpg"
218 CHOerrors = "https://jenkins.onosproject.org/job/postjob-Fabric5/lastSuccessfulBuild/artifact/CHO_Errors_onos-" + onos_v + "_168-maxData_graph.jpg"
219
220 imageClass = "confluence-embedded-image confluence-external-resource confluence-content-image-border"
221 images = makeImage( imageClass, CHOevents, 500 ) +
222 makeImage( imageClass, CHOfailures, 500 ) +
223 makeImage( imageClass, CHOerrors, 500 )
224
225 result = description + images
226
227 return result
228}
229
230def createGeneralPageContents( category ){
231 result = ""
232
233 overallTrendLink = "https://jenkins.onosproject.org/view/QA/job/postjob-VM/lastSuccessfulBuild/artifact/" + category + "_onos-" + onos_v + "_overview.jpg"
234 overallTrendClass = "confluence-embedded-image confluence-external-resource confluence-content-image-border"
235 overallTrendHTML = makeImage( overallTrendClass, overallTrendLink, 500 )
236
237 testTrendPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-VM/lastSuccessfulBuild/artifact/"
238 switch ( category ){
239 case "FUNC":
240 title = "Functionality (FUNC)"
241 testPlanLink = "https://wiki.onosproject.org/pages/viewpage.action?pageId=1048600"
242 break
243 case "HA":
244 title = "High Availability (HA)"
245 testPlanLink = "https://wiki.onosproject.org/pages/viewpage.action?pageId=1048602"
246 break
247 case "SR":
248 title = "Segment Routing (SR)"
249 testPlanLink = "https://wiki.opencord.org/display/CORD/Test+Plan+-+Fabric+Control"
250 testTrendPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-Fabric3/lastSuccessfulBuild/artifact/"
251 overallTrendHTML = ""
252 break
253 case "SRHA":
254 title = "Segment Routing High Availability (SRHA)"
255 testPlanLink = "https://wiki.opencord.org/display/CORD/Test+Plan+-+Fabric+Control"
256 testTrendPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-Fabric3/lastSuccessfulBuild/artifact/"
257 overallTrendHTML = ""
258 break
259 case "USECASE":
260 title = "USECASE"
261 testPlanLink = "https://wiki.onosproject.org/pages/viewpage.action?pageId=4163047"
262 testTrendPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
263 overallTrendHTML = ""
264 break
265 default:
266 echo "Invalid category: " + category
267 return
268 }
269
270 titleHTML = "<h1>Test Results - " + title + "</h1>"
271
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700272 testsFromCategory = test_list.getTestsFromCategory( category )
273 pageTreeHTML = pageTree( category, testsFromCategory )
Jeremy Ronquillod1833522019-05-06 16:51:59 -0700274
275 descriptionHTML = "<p>For test details, check out the <a href=\"" + testPlanLink + "\">test plans for " + category + " test cases</a>.</p>"
276
277 // get the image links for all category tests
278 testTrendSuffix = "_onos-" + onos_v + "_20-builds_graph.jpg"
279
280 testGraphsHTML = ""
281 testGraphsClass = "confluence-embedded-image confluence-external-resource confluence-content-image-border"
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700282
283
284 for ( String key in testsFromCategory.keySet() ){
Jeremy Ronquillod1833522019-05-06 16:51:59 -0700285 imageLink = testTrendPrefix + key + testTrendSuffix
286 testGraphsHTML += makeImage( testGraphsClass, imageLink, 500 )
287 }
Jeremy Ronquillod1833522019-05-06 16:51:59 -0700288 result = overallTrendHTML + titleHTML + pageTreeHTML + descriptionHTML + testGraphsHTML
289
290 return result
291}
292
293def createSCPFpageContents(){
294 result = ""
295
296 descriptionHTML = "<p>" +
297 "The purpose of this page is to track performane trend and regression through the last 50 Jenkins " +
298 "nightly builds on a subset of the full performance evaluation metrics. Child pages contain full " +
299 "result details on the latest build. Note that results in this tracking may fluctuate from build to " +
300 "build, due to various experiments and changes made in ONOS." +
301 "</p>"
302
303 testPlanLink = "https://wiki.onosproject.org/pages/viewpage.action?pageId=3441823"
304 testPlanHTML = "<p>For test details, check out the <a href=\"" + testPlanLink + "\">test plans for Scale-Out and Performance</a>.</p>"
305
306 graphsPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/SCPF_Front_Page_"
307
308 testLinkPrefix = "https://wiki.onosproject.org/display/ONOS/"
309 graphsClass = "confluence-embedded-image confluence-external-resource confluence-content-image-border"
310
311 switchPortLatencyLink = testLinkPrefix + onos_v + "%3A+Experiment+A%26B+-+Topology+%28Switch,+Link%29+Event+Latency"
312 switchLatencyGraphs = [ graphsPrefix + "Switch_Latency_Test_-_Switch_Up_onos-" + onos_v + "_50-dates_graph.jpg",
313 graphsPrefix + "Switch_Latency_Test_-_Switch_Down_onos-" + onos_v + "_50-dates_graph.jpg" ]
314
315 portLatencyGraphs = [ graphsPrefix + "Port_Latency_Test_-_Port_Down_onos-" + onos_v + "_50-dates_graph.jpg",
316 graphsPrefix + "Port_Latency_Test_-_Port_Up_onos-" + onos_v + "_50-dates_graph.jpg" ]
317
318 intentLatencyLink = testLinkPrefix + onos_v + "%3A+Experiment+C+-+Intent+Install%2FRemove%2FRe-route+Latency"
319 intentLatencyGraphs = [ graphsPrefix + "Intent_Installation_Test_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg",
320 graphsPrefix + "Intent_Withdrawal_Test_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg",
321 graphsPrefix + "Intent_Reroute_Test_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg" ]
322
323 intentThroughputLink = testLinkPrefix + onos_v + "%3A+Experiment+D+-+Intents+Operations+Throughput"
324 intentThroughputGraphs = [ graphsPrefix + "Intent_Throughput_Test_-_neighbors=0_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg" ,
325 graphsPrefix + "Intent_Throughput_Test_-_neighbors=4_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg"]
326
327 scaleTopoLink = testLinkPrefix + onos_v + "%3A+Experiment+E+-+Topology+Scaling+Operation"
328 scaleTopoGraphs = [ graphsPrefix + "Scale_Topology_Test_onos-" + onos_v + "_50-dates_graph.jpg" ]
329
330 flowTpLink = testLinkPrefix + onos_v + "%3A+Experiment+F+-+Flow+Subsystem+Burst+Throughput"
331 flowTpGraphs = [ graphsPrefix + "Flow_Throughput_Test_-_neighbors=0_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg",
332 graphsPrefix + "Flow_Throughput_Test_-_neighbors=4_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg" ]
333
334 cbenchLink = testLinkPrefix + onos_v + "%3A+Experiment+G+-+Single-node+ONOS+Cbench"
335 cbenchGraphs = [ graphsPrefix + "Cbench_Test_onos-" + onos_v + "_50-dates_graph.jpg" ]
336
337 batchFlowLink = testLinkPrefix + onos_v + "%3A+Experiment+I+-+Single+Bench+Flow+Latency+Test"
338 batchFlowGraphs = [ graphsPrefix + "Batch_Flow_Test_-_Post_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg",
339 graphsPrefix + "Batch_Flow_Test_-_Del_onos-" + onos_v + "_50-dates_OldFlow_graph.jpg" ]
340
341 hostAddLink = testLinkPrefix + onos_v + "%3A+Experiment+L+-+Host+Add+Latency"
342 hostAddLatencyGraphs = [ graphsPrefix + "Host_Latency_Test_onos-" + onos_v + "_50-dates_graph.jpg" ]
343
344 mastershipFailoverLatencyLink = testLinkPrefix + onos_v + "%3A+Experiment+M+-+Mastership+Failover+Latency"
345 mastershipFailoverLatencyGraphs = [ graphsPrefix + "Mastership_Failover_Test_onos-" + onos_v + "_50-dates_graph.jpg" ]
346
347 // Create the HTML for the SCPF page
348
349 switchLatencyHTML = "<h3><a href=\"" + switchPortLatencyLink + "\">Switch Latency</a>: Last 50 Builds - \"SwitchUp\" and \"SwitchDown\" Latency Tests</h3>" +
350 "<ul><li><h3>5-Node Cluster</h3></li></ul>" +
351 makeImage( graphsClass, switchLatencyGraphs[ 0 ], 500 ) +
352 makeImage( graphsClass, switchLatencyGraphs[ 1 ], 500 )
353
354 portLatencyHTML = "<h3><a href=\"" + switchPortLatencyLink + "\">Port Latency</a>: Last 50 Builds - \"PortUp\" and \"PortDown\" Latency Tests</h3>" +
355 "<ul><li><h3>5-Node Cluster</h3></li></ul>" +
356 makeImage( graphsClass, portLatencyGraphs[ 0 ], 500 ) +
357 makeImage( graphsClass, portLatencyGraphs[ 1 ], 500 )
358
359 intentLatencyHTML = "<h3><a href=\"" + intentLatencyLink + "\">Intent Latency</a>: Last 50 Builds - \"IntentInstallLat\", \"IntentWithdrawLat\" and \"IntentRerouteLat\"Tests</h3>" +
360 "<ul>" +
361 "<li><h3>5-Node Cluster</h3></li>" +
362 "<li><h3>100 Intent Batch Size</h3></li>" +
363 "</ul>" +
364 makeImage( graphsClass, intentLatencyGraphs[ 0 ], 500 ) +
365 makeImage( graphsClass, intentLatencyGraphs[ 1 ], 500 ) +
366 makeImage( graphsClass, intentLatencyGraphs[ 2 ], 500 )
367
368 intentThroughputHTML = "<h3><a href=\"" + intentThroughputLink + "\">Intent Latency</a>: Last 50 Builds - \"IntentEventTP\" Test</h3>" +
369 "<ul>" +
370 "<li><h3>5-Node Cluster</h3></li>" +
371 "</ul>" +
372 makeImage( graphsClass, intentThroughputGraphs[ 0 ], 500 ) +
373 makeImage( graphsClass, intentThroughputGraphs[ 1 ], 500 )
374
375 scaleTopoHTML = "<h3><a href=\"" + scaleTopoLink + "\">Scale Topo Test</a>: Last 50 Builds - \"scaleTopo\" Test</h3>" +
376 "<ul>" +
377 "<li><h3>3-Node Cluster</h3></li>" +
378 "<li><h3>20 Scaling</h3></li>" +
379 "</ul>" +
380 makeImage( graphsClass, scaleTopoGraphs[ 0 ], 500 )
381
382 flowThroughputHTML = "<h3><a href=\"" + flowTpLink + "\">Flow Throughput</a>: Last 50 Builds - \"flowTP1g\" Test</h3>" +
383 "<ul>" +
384 "<li><h3>5-Node Cluster</h3></li>" +
385 "</ul>" +
386 makeImage( graphsClass, flowTpGraphs[ 0 ], 500 ) +
387 makeImage( graphsClass, flowTpGraphs[ 1 ], 500 )
388
389 cbenchHTML = "<h3><a href=\"" + cbenchLink + "\">Cbench</a>: Last 50 Builds - \"CbenchBM\" Test</h3>" +
390 "<ul>" +
391 "<li><h3>Single-Node</h3></li>" +
392 "<li><h3>Throughput Mode</h3></li>" +
393 "</ul>" +
394 makeImage( graphsClass, cbenchGraphs[ 0 ], 500 )
395
396 batchFlowHTML = "<h3><a href=\"" + batchFlowLink + "\">Single Bench Flow Latency Test</a>: Last 50 Builds - \"SingleBenchFlow\" Latency Test</h3>" +
397 makeImage( graphsClass, batchFlowGraphs[ 0 ], 500 ) +
398 makeImage( graphsClass, batchFlowGraphs[ 1 ], 500 )
399
400 hostAddHTML = "<h3><a href=\"" + hostAddLink + "\">Host Add Latency</a>: Last 50 Builds - \"HostAddLatency\" Test</h3>" +
401 "<ul>" +
402 "<li><h3>5-Node Cluster</h3></li>" +
403 "</ul>" +
404 makeImage( graphsClass, hostAddLatencyGraphs[ 0 ], 500 )
405
406 mastershipFailoverLatencyHTML = "<h3><a href=\"" + mastershipFailoverLatencyLink + "\">Mastership Failover Latency</a>: Last 50 Builds - \"MastershipFailoverLat\" Test</h3>" +
407 "<ul>" +
408 "<li><h3>5-Node Cluster</h3></li>" +
409 "</ul>" +
410 makeImage( graphsClass, mastershipFailoverLatencyGraphs[ 0 ], 500 )
411
412 result = descriptionHTML +
413 testPlanHTML +
414 switchLatencyHTML +
415 portLatencyHTML +
416 intentLatencyHTML +
417 intentThroughputHTML +
418 scaleTopoHTML +
419 flowThroughputHTML +
420 cbenchHTML +
421 batchFlowHTML +
422 hostAddHTML +
423 mastershipFailoverLatencyHTML
424
425 return result
426}
427
428def makeSCPFInfoSection( title, list ){
429 result = "<p>" + title + ":</p><ul>"
430 for ( String app in list ){
431 result += "<li>" + app + "</li>"
432 }
433 result += "</ul>"
434 return result
435}
436
437def makeSCPFindividualGraphs( graphsList ){
438 result = ""
439 graphsClass = "confluence-embedded-image confluence-external-resource confluence-content-image-border"
440 for ( String graph in graphsList ){
441 result += makeImage( graphsClass, graph, 500 )
442 }
443 return result
444}
445
446def makeSCPFnote( note ){
447 return "<p>" + note + "</p>"
448}
449
450def makeErrorBarsDisclaimer(){
451 return "<p>Note: Error bars in the graphs below represent standard deviations. Only the upper error bars are shown.</p>"
452}
453
454def makeOldFlowDisclaimer(){
455 return "<p>Following graphs include results using flow rule stores with both strong consistency and eventual consistency models. The ONOS team is still working on performance improvements for flow rule store with strong consistency.</p>"
456}
457
458def createSwitchPortLatPage(){
459 result = ""
460 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
461
462 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
463 "metrics",
464 "openflow" ] )
465
466 result += makeSCPFInfoSection( "ONOS Config", [ "cfg set org.onosproject.net.topology.impl.DefaultTopologyProvider maxEvents 1",
467 "cfg set org.onosproject.net.topology.impl.DefaultTopologyProvider maxBatchMs 0",
468 "cfg set org.onosproject.net.topology.impl.DefaultTopologyProvider maxIdleMs 0" ] )
469
470 result += makeSCPFInfoSection( "Test Procedure", [ "Switch event generate on ONOS1 by connecting ovs switch to it.",
471 "Record tshark (tcp syn-ack) and graph event timestamp to calculate differences."] )
472
473 result += makeErrorBarsDisclaimer()
474
475 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
476 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFswitchLat_onos-" + onos_v + "_UpErrBarWithStack.jpg",
477 graphLinkPrefix + "SCPFswitchLat_onos-" + onos_v + "_DownErrBarWithStack.jpg",
478 graphLinkPrefix + "SCPFportLat_onos-" + onos_v + "_UpErrBarWithStack.jpg",
479 graphLinkPrefix + "SCPFportLat_onos-" + onos_v + "_DownErrBarWithStack.jpg" ] )
480
481 return result
482}
483
484def createIntentLatencyPage(){
485 result = ""
486 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
487
488 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
489 "null" ] )
490
491 result += makeSCPFInfoSection( "ONOS Config", [ "cfg set org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator useFlowObjectives true (when using flow objective intents compiler)",
492 "cfg set org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator defaultFlowObjectiveCompiler org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler (when using flow objective intents compiler)",
493 "cfg set org.onosproject.net.intent.impl.IntentManager skipReleaseResourcesOnWithdrawal true" ] )
494
495 result += makeSCPFInfoSection( "Test Procedure", [ "Intent batch installed from ONOS1",
496 "Record returned response time"] )
497
498 result += makeErrorBarsDisclaimer()
499 result += makeOldFlowDisclaimer()
500
501 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
502 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFIntentInstallWithdrawRerouteLat_onos-" + onos_v + "_OldFlow_1-batchSize_graph.jpg",
503 graphLinkPrefix + "SCPFIntentInstallWithdrawRerouteLat_onos-" + onos_v + "_OldFlow_100-batchSize_graph.jpg",
504 graphLinkPrefix + "SCPFIntentInstallWithdrawRerouteLat_onos-" + onos_v + "_OldFlow_1000-batchSize_graph.jpg",
505 graphLinkPrefix + "SCPFIntentInstallWithdrawRerouteLat_onos-" + onos_v + "_fobj_OldFlow_1-batchSize_graph.jpg",
506 graphLinkPrefix + "SCPFIntentInstallWithdrawRerouteLat_onos-" + onos_v + "_fobj_OldFlow_100-batchSize_graph.jpg",
507 graphLinkPrefix + "SCPFIntentInstallWithdrawRerouteLat_onos-" + onos_v + "_fobj_OldFlow_1000-batchSize_graph.jpg" ] )
508
509 return result
510}
511
512def createIntentEventThroughputPage(){
513 result = ""
514 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
515
516 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
517 "null",
518 "intentpref" ] )
519
520 result += makeSCPFInfoSection( "ONOS Config", [ "cfg set org.onosproject.net.intent.impl.IntentManager skipReleaseResourcesOnWithdrawal true",
521 "cfg set org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator useFlowObjectives true (when using flow objective intents compiler)",
522 "cfg set org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator defaultFlowObjectiveCompiler org.onosproject.net.intent.impl.compiler.LinkCollectionIntentObjectiveCompiler (when using flow objective intents compiler)" ] )
523
524 result += makeSCPFInfoSection( "\"Constant-Load\" Test Conditions", [ "new NumKeys - 40000",
525 "with eventually consistent flow rule - 40000",
526 "with Flow Obj - 4000"] )
527
528 result += makeOldFlowDisclaimer()
529
530 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
531 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFintentEventTp_onos-" + onos_v + "_no-neighbors_OldFlow_graph.jpg",
532 graphLinkPrefix + "SCPFintentEventTp_onos-" + onos_v + "_all-neighbors_OldFlow_graph.jpg",
533 graphLinkPrefix + "SCPFintentEventTpWithFlowObj_onos-" + onos_v + "_no-neighbors_flowObj_OldFlow_graph.jpg",
534 graphLinkPrefix + "SCPFintentEventTpWithFlowObj_onos-" + onos_v + "_all-neighbors_flowObj_OldFlow_graph.jpg" ] )
535
536 return result
537}
538
539def createScaleTopoPage(){
540 result = ""
541 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
542
543 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
544 "openflow" ] )
545
546 result += makeSCPFnote( "Note: We use 3-node ONOS cluster and torus Mininet topology in this test. In the figure below, scale N on x-axis means N x N torus topology. (E.g. scale 5 means 25 switches and 100 links)" )
547
548 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
549 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFscaleTopo_onos-" + onos_v + "_graph.jpg" ] )
550
551 return result
552}
553
554def createFlowThroughputPage(){
555 result = ""
556 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
557
558 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
559 "null",
560 "demo" ] )
561
562 result += makeSCPFInfoSection( "ONOS Config", [ "cfg set org.onosproject.provider.nil.NullProviders deviceCount 35",
563 "cfg set org.onosproject.provider.nil.NullProviders topoShape linear",
564 "cfg set org.onosproject.provider.nil.NullProviders enabled true" ] )
565
566 result += makeSCPFInfoSection( "\"Constant-Load\" Test Conditions", [ "F = eventually consistent flows rule - 122500, 10000 with FlowObj - total # of flows installed",
567 "N: # of neighboring ONOS's for flows to be installed when ONOS1 is the server installing flows",
568 "S: #servers installing flows",
569 "SW = 35 - total # of switches (Null Devices) connected to ONOS cluster evenly distributed to active ONOS nodes",
570 "FL: # flows to be installed on each switch" ] )
571
572 result += makeSCPFInfoSection( "Command", [ "python3 \$ONOS_ROOT/tools/tests/bin/flow-tester.py -f FL -n N -s servers" ] )
573
574 result += makeErrorBarsDisclaimer()
575 result += makeOldFlowDisclaimer()
576
577 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
578 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFflowTp1g_onos-" + onos_v + "_no-neighbors_OldFlow_graph.jpg",
579 graphLinkPrefix + "SCPFflowTp1g_onos-" + onos_v + "_all-neighbors_OldFlow_graph.jpg",
580 graphLinkPrefix + "SCPFflowTp1gWithFlowObj_onos-" + onos_v + "_no-neighbors_flowObj_OldFlow_graph.jpg",
581 graphLinkPrefix + "SCPFflowTp1gWithFlowObj_onos-" + onos_v + "_all-neighbors_flowObj_OldFlow_graph.jpg" ] )
582
583 return result
584}
585
586def createCbenchPage(){
587 result = ""
588 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
589
590 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
591 "openflow-base",
592 "_OldFlow_DelGraph" ] )
593
594 result += makeSCPFInfoSection( "ONOS Config", [ "cfg set org.onosproject.fwd.ReactiveForwarding packetOutOnly true" ] )
595
596 result += makeErrorBarsDisclaimer()
597
598 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
599 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFcbench_onos-" + onos_v + "_errGraph.jpg" ] )
600
601 return result
602}
603
604def createBatchFlowPage(){
605 result = ""
606 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
607
608 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
609 "openflow-base" ] )
610
611 result += makeSCPFInfoSection( "\"Constant-Load\" Test Conditions", [ "batchSize = eventually consistent flows rule - 200" ] )
612
613 result += makeOldFlowDisclaimer()
614
615 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
616 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFbatchFlowResp_onos-" + onos_v + "_OldFlow_PostGraph.jpg",
617 graphLinkPrefix + "SCPFbatchFlowResp_onos-" + onos_v + "_OldFlow_DelGraph.jpg" ] )
618
619 return result
620}
621
622def createHostAddLatencyPage(){
623 result = ""
624
625 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
626
627 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
628 "metrics",
629 "openflow",
630 "proxyarp" ] )
631
632 result += makeSCPFInfoSection( "ONOS Config", [ "cfg set org.onosproject.net.topology.impl.DefaultTopologyProvider maxEvents 1",
633 "cfg set org.onosproject.net.topology.impl.DefaultTopologyProvider maxBatchMs 0",
634 "cfg set org.onosproject.net.topology.impl.DefaultTopologyProvider maxIdleMs 0" ] )
635
636 result += makeErrorBarsDisclaimer()
637
638 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
639 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFhostLat_onos-" + onos_v + "_errGraph.jpg" ] )
640
641 return result
642}
643
644def createMastershipFailoverLatPage(){
645 result = ""
646
647 result += makeSCPFInfoSection( "System Env", SCPF_system_environment )
648
649 result += makeSCPFInfoSection( "ONOS Apps", [ "drivers",
650 "openflow",
651 "events" ] )
652
653 result += makeErrorBarsDisclaimer()
654
655 graphLinkPrefix = "https://jenkins.onosproject.org/view/QA/job/postjob-BM/lastSuccessfulBuild/artifact/"
656 result += makeSCPFindividualGraphs( [ graphLinkPrefix + "SCPFmastershipFailoverLat_onos-" + onos_v + "_stackedGraph.jpg",
657 graphLinkPrefix + "SCPFmastershipFailoverLat_onos-" + onos_v + "_errGraph.jpg" ] )
658
659 return result
660}