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