diff options
71 files changed, 4616 insertions, 416 deletions
diff --git a/dashboard/Yardstick-TC002-1456495853488 b/dashboard/Yardstick-TC002-1456495853488 index a0be68402..ca8ad2f8e 100644 --- a/dashboard/Yardstick-TC002-1456495853488 +++ b/dashboard/Yardstick-TC002-1456495853488 @@ -137,14 +137,14 @@ ], "hide": false, "measurement": "opnfv_yardstick_tc002", - "query": "SELECT \"rtt\" FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"task_id\", \"deploy_scenario\"", + "query": "SELECT \"rtt.ares\" FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"task_id\", \"deploy_scenario\"", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" } @@ -199,111 +199,6 @@ ] ], "tags": [] - }, - { - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": true, - "refId": "C", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - }, - { - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": true, - "refId": "D", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - }, - { - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": true, - "refId": "E", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] } ], "timeFrom": "14d", @@ -366,9 +261,9 @@ "repeat": "POD", "scopedVars": { "POD": { + "selected": true, "text": "ericsson-pod2", - "value": "ericsson\\-pod2", - "selected": true + "value": "ericsson\\-pod2" } }, "scroll": true, @@ -425,7 +320,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -433,7 +328,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -479,9 +374,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "huawei-pod1", - "value": "huawei\\-pod1", - "selected": true + "value": "huawei\\-pod1" } }, "scroll": true, @@ -538,7 +433,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -546,7 +441,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -576,7 +471,7 @@ "transform": "table", "transparent": false, "type": "table", - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 2 }, { @@ -594,9 +489,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "huawei-pod2", - "value": "huawei\\-pod2", - "selected": true + "value": "huawei\\-pod2" } }, "scroll": true, @@ -653,7 +548,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -661,7 +556,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -691,7 +586,7 @@ "transform": "table", "transparent": false, "type": "table", - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 2 }, { @@ -709,9 +604,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "intel-pod5", - "value": "intel\\-pod5", - "selected": true + "value": "intel\\-pod5" } }, "scroll": true, @@ -768,7 +663,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -776,7 +671,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -806,7 +701,7 @@ "transform": "table", "transparent": false, "type": "table", - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 2 }, { @@ -824,9 +719,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "intel-pod6", - "value": "intel\\-pod6", - "selected": true + "value": "intel\\-pod6" } }, "scroll": true, @@ -883,7 +778,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -891,7 +786,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -921,7 +816,7 @@ "transform": "table", "transparent": false, "type": "table", - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 2 }, { @@ -939,9 +834,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "lf-pod2", - "value": "lf\\-pod2", - "selected": true + "value": "lf\\-pod2" } }, "scroll": true, @@ -998,7 +893,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -1006,7 +901,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1036,7 +931,7 @@ "transform": "table", "transparent": false, "type": "table", - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 2 }, { @@ -1046,7 +941,7 @@ "error": false, "fontSize": "90%", "height": "", - "id": 18, + "id": 19, "isNew": true, "links": [], "minSpan": 2, @@ -1054,9 +949,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "zte-pod1", - "value": "zte\\-pod1", - "selected": true + "value": "zte\\-pod1" } }, "scroll": true, @@ -1113,7 +1008,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\"", "rawQuery": false, "refId": "A", "resultFormat": "table", @@ -1121,7 +1016,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1146,12 +1041,12 @@ ] } ], - "timeFrom": "24h", + "timeFrom": "14d", "title": "$POD", "transform": "table", "transparent": false, "type": "table", - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 2 } ], @@ -1212,9 +1107,9 @@ "repeat": "POD", "scopedVars": { "POD": { + "selected": true, "text": "ericsson-pod2", - "value": "ericsson\\-pod2", - "selected": true + "value": "ericsson\\-pod2" } }, "seriesOverrides": [ @@ -1281,7 +1176,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -1289,7 +1184,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1378,9 +1273,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "huawei-pod1", - "value": "huawei\\-pod1", - "selected": true + "value": "huawei\\-pod1" } }, "seriesOverrides": [ @@ -1447,7 +1342,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -1455,7 +1350,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1494,7 +1389,7 @@ "ms", "short" ], - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 3 }, { @@ -1546,9 +1441,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "huawei-pod2", - "value": "huawei\\-pod2", - "selected": true + "value": "huawei\\-pod2" } }, "seriesOverrides": [ @@ -1615,7 +1510,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -1623,7 +1518,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1662,7 +1557,7 @@ "ms", "short" ], - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 3 }, { @@ -1714,9 +1609,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "intel-pod5", - "value": "intel\\-pod5", - "selected": true + "value": "intel\\-pod5" } }, "seriesOverrides": [ @@ -1783,7 +1678,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -1791,7 +1686,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1830,7 +1725,7 @@ "ms", "short" ], - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 3 }, { @@ -1882,9 +1777,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "intel-pod6", - "value": "intel\\-pod6", - "selected": true + "value": "intel\\-pod6" } }, "seriesOverrides": [ @@ -1951,7 +1846,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -1959,7 +1854,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -1998,7 +1893,7 @@ "ms", "short" ], - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 3 }, { @@ -2050,9 +1945,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "lf-pod2", - "value": "lf\\-pod2", - "selected": true + "value": "lf\\-pod2" } }, "seriesOverrides": [ @@ -2119,7 +2014,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -2127,7 +2022,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -2166,7 +2061,7 @@ "ms", "short" ], - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 3 }, { @@ -2189,7 +2084,7 @@ "threshold2Color": "rgba(234, 112, 112, 0.22)" }, "height": "", - "id": 19, + "id": 20, "interval": "", "isNew": true, "leftYAxisLabel": "<RTT>", @@ -2218,9 +2113,9 @@ "repeat": null, "scopedVars": { "POD": { + "selected": true, "text": "zte-pod1", - "value": "zte\\-pod1", - "selected": true + "value": "zte\\-pod1" } }, "seriesOverrides": [ @@ -2287,7 +2182,7 @@ } ], "measurement": "opnfv_yardstick_tc002", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", + "query": "SELECT mean(\"rtt.ares\") FROM \"opnfv_yardstick_tc002\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"deploy_scenario\", \"pod_name\" fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", @@ -2295,7 +2190,7 @@ [ { "params": [ - "rtt" + "rtt.ares" ], "type": "field" }, @@ -2334,7 +2229,7 @@ "ms", "short" ], - "repeatIteration": 1467967293010, + "repeatIteration": 1469865492903, "repeatPanelId": 3 } ], @@ -2343,7 +2238,7 @@ } ], "time": { - "from": "now-24h", + "from": "now-7d", "to": "now" }, "timepicker": { @@ -2398,84 +2293,84 @@ "name": "POD", "options": [ { + "selected": false, "text": "All", - "value": "(elxg482ls42|ericsson\\-pod1|ericsson\\-pod2|huawei\\-pod1|huawei\\-pod2|huawei\\-us\\-deploy\\-bare\\-1|intel\\-pod5|intel\\-pod6|lf\\-pod1|lf\\-pod2|opnfv\\-jump\\-1|opnfv\\-jump\\-2|orange\\-fr\\-pod2|unknown|zte\\-pod1)", - "selected": false + "value": "(elxg482ls42|ericsson\\-pod1|ericsson\\-pod2|huawei\\-pod1|huawei\\-pod2|huawei\\-us\\-deploy\\-bare\\-1|intel\\-pod5|intel\\-pod6|lf\\-pod1|lf\\-pod2|opnfv\\-jump\\-1|opnfv\\-jump\\-2|orange\\-fr\\-pod2|unknown|zte\\-pod1)" }, { + "selected": false, "text": "elxg482ls42", - "value": "elxg482ls42", - "selected": false + "value": "elxg482ls42" }, { + "selected": false, "text": "ericsson-pod1", - "value": "ericsson\\-pod1", - "selected": false + "value": "ericsson\\-pod1" }, { + "selected": true, "text": "ericsson-pod2", - "value": "ericsson\\-pod2", - "selected": true + "value": "ericsson\\-pod2" }, { + "selected": true, "text": "huawei-pod1", - "value": "huawei\\-pod1", - "selected": true + "value": "huawei\\-pod1" }, { + "selected": true, "text": "huawei-pod2", - "value": "huawei\\-pod2", - "selected": true + "value": "huawei\\-pod2" }, { + "selected": false, "text": "huawei-us-deploy-bare-1", - "value": "huawei\\-us\\-deploy\\-bare\\-1", - "selected": false + "value": "huawei\\-us\\-deploy\\-bare\\-1" }, { + "selected": true, "text": "intel-pod5", - "value": "intel\\-pod5", - "selected": true + "value": "intel\\-pod5" }, { + "selected": true, "text": "intel-pod6", - "value": "intel\\-pod6", - "selected": true + "value": "intel\\-pod6" }, { + "selected": false, "text": "lf-pod1", - "value": "lf\\-pod1", - "selected": false + "value": "lf\\-pod1" }, { + "selected": true, "text": "lf-pod2", - "value": "lf\\-pod2", - "selected": true + "value": "lf\\-pod2" }, { + "selected": false, "text": "opnfv-jump-1", - "value": "opnfv\\-jump\\-1", - "selected": false + "value": "opnfv\\-jump\\-1" }, { + "selected": false, "text": "opnfv-jump-2", - "value": "opnfv\\-jump\\-2", - "selected": false + "value": "opnfv\\-jump\\-2" }, { + "selected": false, "text": "orange-fr-pod2", - "value": "orange\\-fr\\-pod2", - "selected": false + "value": "orange\\-fr\\-pod2" }, { + "selected": false, "text": "unknown", - "value": "unknown", - "selected": false + "value": "unknown" }, { + "selected": true, "text": "zte-pod1", - "value": "zte\\-pod1", - "selected": true + "value": "zte\\-pod1" } ], "query": "SHOW TAG VALUES WITH KEY = \"pod_name\"", @@ -2558,6 +2453,6 @@ }, "refresh": "15m", "schemaVersion": 8, - "version": 2, + "version": 5, "links": [] } diff --git a/dashboard/Yardstick-TC037-1456496078470 b/dashboard/Yardstick-TC037-1456496078470 index 271b76e29..7be2be86a 100644 --- a/dashboard/Yardstick-TC037-1456496078470 +++ b/dashboard/Yardstick-TC037-1456496078470 @@ -223,14 +223,14 @@ } ], "measurement": "opnfv_yardstick_tc037", - "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"pod_name\", \"deploy_scenario\"", + "query": "SELECT mean(\"rtt.poseidon\") FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"pod_name\", \"deploy_scenario\"", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ - "rtt" + "rtt.poseidon" ], "type": "field" }, @@ -646,14 +646,14 @@ } ], "measurement": "opnfv_yardstick_tc037", - "query": "SELECT \"rtt\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", + "query": "SELECT \"rtt.poseidon\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ - "rtt" + "rtt.poseidon" ], "type": "field" } @@ -945,10 +945,10 @@ ] } ], + "timeFrom": "14d", "title": "RTT mean - ping", "transform": "table", - "type": "table", - "timeFrom": "14d" + "type": "table" } ], "showTitle": false, @@ -981,27 +981,29 @@ }, "id": 3, "isNew": true, - "leftYAxisLabel": "System CPU-load", + "leftYAxisLabel": "CPU Load - User", "legend": { "alignAsTable": true, - "avg": true, - "current": false, + "avg": false, + "current": true, + "hideZero": false, "max": true, "min": true, "rightSide": false, "show": true, "total": false, - "values": true + "values": true, + "sortDesc": true }, "lines": true, - "linewidth": 2, + "linewidth": 1, "links": [], - "nullPointMode": "connected", + "nullPointMode": "null", "percentage": false, - "pointradius": 5, - "points": false, + "pointradius": 1, + "points": true, "renderer": "flot", - "rightYAxisLabel": "System CPU-load", + "rightYAxisLabel": "", "seriesOverrides": [], "span": 12, "stack": false, @@ -1031,16 +1033,16 @@ } ], "measurement": "opnfv_yardstick_tc037", - "query": "SELECT \"mpstat.cpu.%sys\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", + "query": "SELECT \"mpstat_average.cpu.%usr\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", "refId": "A", "resultFormat": "time_series", "select": [ [ { + "type": "field", "params": [ - "mpstat.cpu.%sys" - ], - "type": "field" + "mpstat_average.cpu.%usr" + ] } ] ], @@ -1064,7 +1066,7 @@ "title": "CPU load - mpstat", "tooltip": { "shared": true, - "value_type": "cumulative" + "value_type": "individual" }, "type": "graph", "x-axis": true, @@ -1072,7 +1074,8 @@ "y_formats": [ "percent", "short" - ] + ], + "decimals": null } ], "title": "Ping table" @@ -1132,84 +1135,84 @@ "name": "POD", "options": [ { + "selected": false, "text": "All", - "value": "(elxg482ls42|ericsson\\-pod1|ericsson\\-pod2|huawei\\-pod1|huawei\\-pod2|huawei\\-us\\-deploy\\-bare\\-1|intel\\-pod5|intel\\-pod6|lf\\-pod1|lf\\-pod2|opnfv\\-jump\\-1|opnfv\\-jump\\-2|orange\\-fr\\-pod2|unknown|zte\\-pod1)", - "selected": false + "value": "(elxg482ls42|ericsson\\-pod1|ericsson\\-pod2|huawei\\-pod1|huawei\\-pod2|huawei\\-us\\-deploy\\-bare\\-1|intel\\-pod5|intel\\-pod6|lf\\-pod1|lf\\-pod2|opnfv\\-jump\\-1|opnfv\\-jump\\-2|orange\\-fr\\-pod2|unknown|zte\\-pod1)" }, { + "selected": false, "text": "elxg482ls42", - "value": "elxg482ls42", - "selected": false + "value": "elxg482ls42" }, { + "selected": false, "text": "ericsson-pod1", - "value": "ericsson\\-pod1", - "selected": false + "value": "ericsson\\-pod1" }, { + "selected": true, "text": "ericsson-pod2", - "value": "ericsson\\-pod2", - "selected": true + "value": "ericsson\\-pod2" }, { + "selected": true, "text": "huawei-pod1", - "value": "huawei\\-pod1", - "selected": true + "value": "huawei\\-pod1" }, { + "selected": true, "text": "huawei-pod2", - "value": "huawei\\-pod2", - "selected": true + "value": "huawei\\-pod2" }, { + "selected": false, "text": "huawei-us-deploy-bare-1", - "value": "huawei\\-us\\-deploy\\-bare\\-1", - "selected": false + "value": "huawei\\-us\\-deploy\\-bare\\-1" }, { + "selected": false, "text": "intel-pod5", - "value": "intel\\-pod5", - "selected": false + "value": "intel\\-pod5" }, { + "selected": true, "text": "intel-pod6", - "value": "intel\\-pod6", - "selected": true + "value": "intel\\-pod6" }, { + "selected": false, "text": "lf-pod1", - "value": "lf\\-pod1", - "selected": false + "value": "lf\\-pod1" }, { + "selected": true, "text": "lf-pod2", - "value": "lf\\-pod2", - "selected": true + "value": "lf\\-pod2" }, { + "selected": false, "text": "opnfv-jump-1", - "value": "opnfv\\-jump\\-1", - "selected": false + "value": "opnfv\\-jump\\-1" }, { + "selected": false, "text": "opnfv-jump-2", - "value": "opnfv\\-jump\\-2", - "selected": false + "value": "opnfv\\-jump\\-2" }, { + "selected": false, "text": "orange-fr-pod2", - "value": "orange\\-fr\\-pod2", - "selected": false + "value": "orange\\-fr\\-pod2" }, { + "selected": false, "text": "unknown", - "value": "unknown", - "selected": false + "value": "unknown" }, { + "selected": true, "text": "zte-pod1", - "value": "zte\\-pod1", - "selected": true + "value": "zte\\-pod1" } ], "query": "SHOW TAG VALUES WITH KEY = \"pod_name\" ", @@ -1219,9 +1222,9 @@ { "allFormat": "regex values", "current": { + "tags": [], "text": "All", - "value": "(os\\-no_sdn\\-ovs\\-ha|os\\-nosdn\\-kvm\\-ha|os\\-nosdn\\-nofeature\\-ha|os\\-nosdn\\-nofeature\\-noha|os\\-nosdn\\-ovs\\-ha|os\\-ocl\\-nofeature\\-ha|os\\-odl_l2\\-bgpvpn\\-ha|os\\-odl_l2\\-nofeature\\-ha|os\\-odl_l2\\-nofeature\\-noha|os\\-odl_l2\\-sfc\\-ha|os\\-odl_l3\\-nofeature\\-ha|os\\-onos\\-nofeature\\-ha|os\\-onos\\-sfc\\-ha|os\\-ovs\\-nofeature\\-ha|unknown)", - "tags": [] + "value": "(os\\-no_sdn\\-ovs\\-ha|os\\-nosdn\\-kvm\\-ha|os\\-nosdn\\-nofeature\\-ha|os\\-nosdn\\-nofeature\\-noha|os\\-nosdn\\-ovs\\-ha|os\\-ocl\\-nofeature\\-ha|os\\-odl_l2\\-bgpvpn\\-ha|os\\-odl_l2\\-nofeature\\-ha|os\\-odl_l2\\-nofeature\\-noha|os\\-odl_l2\\-sfc\\-ha|os\\-odl_l3\\-nofeature\\-ha|os\\-onos\\-nofeature\\-ha|os\\-onos\\-sfc\\-ha|os\\-ovs\\-nofeature\\-ha|unknown)" }, "datasource": "yardstick-vtc", "includeAll": true, @@ -1230,84 +1233,84 @@ "name": "SCENARIO", "options": [ { + "selected": true, "text": "All", - "value": "(os\\-no_sdn\\-ovs\\-ha|os\\-nosdn\\-kvm\\-ha|os\\-nosdn\\-nofeature\\-ha|os\\-nosdn\\-nofeature\\-noha|os\\-nosdn\\-ovs\\-ha|os\\-ocl\\-nofeature\\-ha|os\\-odl_l2\\-bgpvpn\\-ha|os\\-odl_l2\\-nofeature\\-ha|os\\-odl_l2\\-nofeature\\-noha|os\\-odl_l2\\-sfc\\-ha|os\\-odl_l3\\-nofeature\\-ha|os\\-onos\\-nofeature\\-ha|os\\-onos\\-sfc\\-ha|os\\-ovs\\-nofeature\\-ha|unknown)", - "selected": true + "value": "(os\\-no_sdn\\-ovs\\-ha|os\\-nosdn\\-kvm\\-ha|os\\-nosdn\\-nofeature\\-ha|os\\-nosdn\\-nofeature\\-noha|os\\-nosdn\\-ovs\\-ha|os\\-ocl\\-nofeature\\-ha|os\\-odl_l2\\-bgpvpn\\-ha|os\\-odl_l2\\-nofeature\\-ha|os\\-odl_l2\\-nofeature\\-noha|os\\-odl_l2\\-sfc\\-ha|os\\-odl_l3\\-nofeature\\-ha|os\\-onos\\-nofeature\\-ha|os\\-onos\\-sfc\\-ha|os\\-ovs\\-nofeature\\-ha|unknown)" }, { + "selected": false, "text": "os-no_sdn-ovs-ha", - "value": "os\\-no_sdn\\-ovs\\-ha", - "selected": false + "value": "os\\-no_sdn\\-ovs\\-ha" }, { + "selected": false, "text": "os-nosdn-kvm-ha", - "value": "os\\-nosdn\\-kvm\\-ha", - "selected": false + "value": "os\\-nosdn\\-kvm\\-ha" }, { + "selected": false, "text": "os-nosdn-nofeature-ha", - "value": "os\\-nosdn\\-nofeature\\-ha", - "selected": false + "value": "os\\-nosdn\\-nofeature\\-ha" }, { + "selected": false, "text": "os-nosdn-nofeature-noha", - "value": "os\\-nosdn\\-nofeature\\-noha", - "selected": false + "value": "os\\-nosdn\\-nofeature\\-noha" }, { + "selected": false, "text": "os-nosdn-ovs-ha", - "value": "os\\-nosdn\\-ovs\\-ha", - "selected": false + "value": "os\\-nosdn\\-ovs\\-ha" }, { + "selected": false, "text": "os-ocl-nofeature-ha", - "value": "os\\-ocl\\-nofeature\\-ha", - "selected": false + "value": "os\\-ocl\\-nofeature\\-ha" }, { + "selected": false, "text": "os-odl_l2-bgpvpn-ha", - "value": "os\\-odl_l2\\-bgpvpn\\-ha", - "selected": false + "value": "os\\-odl_l2\\-bgpvpn\\-ha" }, { + "selected": false, "text": "os-odl_l2-nofeature-ha", - "value": "os\\-odl_l2\\-nofeature\\-ha", - "selected": false + "value": "os\\-odl_l2\\-nofeature\\-ha" }, { + "selected": false, "text": "os-odl_l2-nofeature-noha", - "value": "os\\-odl_l2\\-nofeature\\-noha", - "selected": false + "value": "os\\-odl_l2\\-nofeature\\-noha" }, { + "selected": false, "text": "os-odl_l2-sfc-ha", - "value": "os\\-odl_l2\\-sfc\\-ha", - "selected": false + "value": "os\\-odl_l2\\-sfc\\-ha" }, { + "selected": false, "text": "os-odl_l3-nofeature-ha", - "value": "os\\-odl_l3\\-nofeature\\-ha", - "selected": false + "value": "os\\-odl_l3\\-nofeature\\-ha" }, { + "selected": false, "text": "os-onos-nofeature-ha", - "value": "os\\-onos\\-nofeature\\-ha", - "selected": false + "value": "os\\-onos\\-nofeature\\-ha" }, { + "selected": false, "text": "os-onos-sfc-ha", - "value": "os\\-onos\\-sfc\\-ha", - "selected": false + "value": "os\\-onos\\-sfc\\-ha" }, { + "selected": false, "text": "os-ovs-nofeature-ha", - "value": "os\\-ovs\\-nofeature\\-ha", - "selected": false + "value": "os\\-ovs\\-nofeature\\-ha" }, { + "selected": false, "text": "unknown", - "value": "unknown", - "selected": false + "value": "unknown" } ], "query": "SHOW TAG VALUES WITH KEY = \"deploy_scenario\" ", @@ -1321,6 +1324,6 @@ }, "refresh": false, "schemaVersion": 8, - "version": 3, + "version": 15, "links": [] } diff --git a/dashboard/Yardstick-TC072-1469780190435 b/dashboard/Yardstick-TC072-1469780190435 new file mode 100644 index 000000000..7fc2d9342 --- /dev/null +++ b/dashboard/Yardstick-TC072-1469780190435 @@ -0,0 +1,1378 @@ +{ + "id": 34, + "title": "Yardstick-TC072", + "originalTitle": "Yardstick-TC072", + "tags": [ + "yardstick-tc" + ], + "style": "dark", + "timezone": "browser", + "editable": true, + "hideControls": false, + "sharedCrosshair": false, + "rows": [ + { + "collapse": false, + "editable": true, + "height": "25px", + "panels": [ + { + "content": "<h5 style=\"font-family:Verdana\"> <a style=\"color:#31A7D3\"><center>OPNFV_Yardstick_TC072 - Network Latency, Throughput, Packet Loss and Network Utilization</center> </a></h5>\n<center>\n<p>Visualisation of network latency (RTT - round trip time), packet throughput and Network interface utilization when doing variations to the amount of UDP flows between two VM instances running on different physical blades.\nFor more information see <a style=\"color:#31A7D3\"; href=\"http://artifacts.opnfv.org/yardstick/brahmaputra/docs/userguide/opnfv_yardstick_tc072.html\">TC072</a></p>\n</center>", + "editable": true, + "error": false, + "height": "", + "id": 10, + "isNew": true, + "links": [], + "mode": "html", + "span": 12, + "style": {}, + "title": "", + "type": "text" + } + ], + "title": "New row" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 8, + "isNew": true, + "leftYAxisLabel": "Packet throughput", + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 2, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "24h" + ], + "type": "time" + }, + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT mean(\"packets_per_second\") FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"pod_name\", \"deploy_scenario\"", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "packets_per_second" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "timeFrom": "14d", + "timeShift": null, + "title": "Throughput mean trend", + "tooltip": { + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "y-axis": true, + "y_formats": [ + "pps", + "pps" + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": 0, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 9, + "isNew": true, + "leftYAxisLabel": "RTT", + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 2, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "24h" + ], + "type": "time" + }, + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc071", + "query": "SELECT mean(\"rtt.poseidon\") FROM \"opnfv_yardstick_tc071\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY time(24h), \"pod_name\", \"deploy_scenario\"", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "rtt.poseidon" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "timeFrom": "14d", + "timeShift": null, + "title": "RTT mean trend", + "tooltip": { + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "y-axis": true, + "y_formats": [ + "ms", + "ms" + ] + } + ], + "title": "New row" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)", + "thresholdLine": false + }, + "height": "", + "id": 2, + "isNew": true, + "leftYAxisLabel": "No. flows", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 2, + "points": true, + "renderer": "flot", + "rightYAxisLabel": "Packet throughput", + "seriesOverrides": [], + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario - flows", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + }, + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "task_id" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT \"flows\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\", \"pod_name\", \"task_id\"", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "flows" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + }, + { + "alias": "$tag_pod_name - $tag_deploy_scenario - pps", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + }, + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "task_id" + ], + "type": "tag" + } + ], + "hide": false, + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT \"packets_per_second\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"deploy_scenario\", \"pod_name\", \"task_id\"", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "packets_per_second" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "No. flows & packet throughput - pktgen", + "tooltip": { + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "y-axis": true, + "y_formats": [ + "short", + "pps" + ] + } + ], + "showTitle": false, + "title": "Mpstat/cpuload graph" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 7, + "isNew": true, + "leftYAxisLabel": "Packet throughput", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 2, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "scenarios" + ], + "type": "tag" + }, + { + "params": [ + "task_id" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT \"packets_per_second\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"scenarios\", \"task_id\"", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "packets_per_second" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Packet throughput - pktgen", + "tooltip": { + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "y-axis": true, + "y_formats": [ + "pps", + "short" + ] + } + ], + "title": "Pktgen table" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "decimals": 0, + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 1, + "isNew": true, + "leftYAxisLabel": "RTT", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "rightYAxisLabel": "", + "seriesOverrides": [], + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + }, + { + "params": [ + "task_id" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc071", + "query": "SELECT \"rtt.poseidon\" FROM \"opnfv_yardstick_tc071\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "rtt.poseidon" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "timeFrom": "14d", + "timeShift": null, + "title": "Round-trip time - ping", + "tooltip": { + "shared": true, + "value_type": "cumulative" + }, + "transparent": false, + "type": "graph", + "x-axis": true, + "y-axis": true, + "y_formats": [ + "ms", + "ms" + ] + } + ], + "title": "New row" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "columns": [], + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fontSize": "100%", + "id": 5, + "isNew": true, + "links": [], + "pageSize": null, + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "span": 12, + "styles": [ + { + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "date" + }, + { + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "decimals": 2, + "pattern": "/.*/", + "thresholds": [], + "type": "number", + "unit": "none" + } + ], + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + } + ], + "hide": true, + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT \"packets_per_second\" FROM \"opnfv_yardstick_tc037\" WHERE $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\"", + "refId": "A", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "packets_per_second" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + }, + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT \"errors\", \"packets_sent\", \"packets_received\" FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\"", + "refId": "B", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "errors" + ], + "type": "field" + } + ], + [ + { + "params": [ + "packets_sent" + ], + "type": "field" + } + ], + [ + { + "params": [ + "packets_received" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "title": "No. packets & errors - pktgen", + "transform": "table", + "type": "table" + } + ], + "title": "Pktgen/flows graph" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "columns": [], + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fontSize": "100%", + "id": 4, + "isNew": true, + "links": [], + "minSpan": null, + "pageSize": null, + "scroll": true, + "showHeader": true, + "sort": { + "col": 2, + "desc": true + }, + "span": 12, + "styles": [ + { + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "date" + }, + { + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "decimals": 2, + "pattern": "/.*/", + "thresholds": [], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc037", + "query": "SELECT mean(\"rtt\") FROM \"opnfv_yardstick_tc037\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\"", + "refId": "A", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "rtt" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + } + ], + "timeFrom": "14d", + "title": "RTT mean - ping", + "transform": "table", + "type": "table" + } + ], + "showTitle": false, + "title": "Ping/rtt graph" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "editable": true, + "error": false, + "fill": 2, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": 0, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)", + "thresholdLine": false + }, + "id": 3, + "isNew": true, + "leftYAxisLabel": "Packet Per Second", + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 1, + "points": true, + "renderer": "flot", + "rightYAxisLabel": "", + "seriesOverrides": [], + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "$tag_pod_name - $tag_deploy_scenario - eth0 - Total number of packets received per second", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + }, + { + "params": [ + "task_id" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc072", + "query": "SELECT \"network_utilization_average.eth0.rxpck/s\" FROM \"opnfv_yardstick_tc072\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "network_utilization_average.eth0.rxpck/s" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ] + }, + { + "alias": "$tag_pod_name - $tag_deploy_scenario - eth0 - Total number of packets transmitted per second", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "pod_name" + ], + "type": "tag" + }, + { + "params": [ + "deploy_scenario" + ], + "type": "tag" + }, + { + "params": [ + "task_id" + ], + "type": "tag" + } + ], + "measurement": "opnfv_yardstick_tc072", + "query": "SELECT \"network_utilization_average.eth0.txpck/s\" FROM \"opnfv_yardstick_tc072\" WHERE \"pod_name\" =~ /$POD$/ AND \"deploy_scenario\" =~ /$SCENARIO$/ AND $timeFilter GROUP BY \"pod_name\", \"deploy_scenario\", \"task_id\"", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "network_utilization_average.eth0.txpck/s" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "pod_name", + "operator": "=~", + "value": "/$POD$/" + }, + { + "condition": "AND", + "key": "deploy_scenario", + "operator": "=~", + "value": "/$SCENARIO$/" + } + ], + "hide": false + } + ], + "timeFrom": "14d", + "timeShift": null, + "title": "Network Utilization - sar (system activity reporter)", + "tooltip": { + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "y-axis": true, + "y_formats": [ + "pps", + "mbytes" + ] + } + ], + "title": "Ping table" + } + ], + "time": { + "from": "now-7d", + "to": "now" + }, + "timepicker": { + "now": true, + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "templating": { + "list": [ + { + "allFormat": "regex values", + "current": { + "tags": [], + "text": "ericsson-pod2 + huawei-pod1 + huawei-pod2 + intel-pod6 + lf-pod2 + zte-pod1", + "value": [ + "ericsson\\-pod2", + "huawei\\-pod1", + "huawei\\-pod2", + "intel\\-pod6", + "lf\\-pod2", + "zte\\-pod1" + ] + }, + "datasource": "yardstick-vtc", + "includeAll": true, + "label": "", + "multi": true, + "multiFormat": "regex values", + "name": "POD", + "options": [ + { + "selected": false, + "text": "All", + "value": "(elxg482ls42|ericsson\\-pod1|ericsson\\-pod2|huawei\\-pod1|huawei\\-pod2|huawei\\-us\\-deploy\\-bare\\-1|intel\\-pod5|intel\\-pod6|lf\\-pod1|lf\\-pod2|opnfv\\-jump\\-1|opnfv\\-jump\\-2|orange\\-fr\\-pod2|unknown|zte\\-pod1)" + }, + { + "selected": false, + "text": "elxg482ls42", + "value": "elxg482ls42" + }, + { + "selected": false, + "text": "ericsson-pod1", + "value": "ericsson\\-pod1" + }, + { + "selected": true, + "text": "ericsson-pod2", + "value": "ericsson\\-pod2" + }, + { + "selected": true, + "text": "huawei-pod1", + "value": "huawei\\-pod1" + }, + { + "selected": true, + "text": "huawei-pod2", + "value": "huawei\\-pod2" + }, + { + "selected": false, + "text": "huawei-us-deploy-bare-1", + "value": "huawei\\-us\\-deploy\\-bare\\-1" + }, + { + "selected": false, + "text": "intel-pod5", + "value": "intel\\-pod5" + }, + { + "selected": true, + "text": "intel-pod6", + "value": "intel\\-pod6" + }, + { + "selected": false, + "text": "lf-pod1", + "value": "lf\\-pod1" + }, + { + "selected": true, + "text": "lf-pod2", + "value": "lf\\-pod2" + }, + { + "selected": false, + "text": "opnfv-jump-1", + "value": "opnfv\\-jump\\-1" + }, + { + "selected": false, + "text": "opnfv-jump-2", + "value": "opnfv\\-jump\\-2" + }, + { + "selected": false, + "text": "orange-fr-pod2", + "value": "orange\\-fr\\-pod2" + }, + { + "selected": false, + "text": "unknown", + "value": "unknown" + }, + { + "selected": true, + "text": "zte-pod1", + "value": "zte\\-pod1" + } + ], + "query": "SHOW TAG VALUES WITH KEY = \"pod_name\" ", + "refresh": false, + "type": "query" + }, + { + "allFormat": "regex values", + "current": { + "tags": [], + "text": "All", + "value": "(os\\-no_sdn\\-ovs\\-ha|os\\-nosdn\\-kvm\\-ha|os\\-nosdn\\-nofeature\\-ha|os\\-nosdn\\-nofeature\\-noha|os\\-nosdn\\-ovs\\-ha|os\\-ocl\\-nofeature\\-ha|os\\-odl_l2\\-bgpvpn\\-ha|os\\-odl_l2\\-nofeature\\-ha|os\\-odl_l2\\-nofeature\\-noha|os\\-odl_l2\\-sfc\\-ha|os\\-odl_l3\\-nofeature\\-ha|os\\-onos\\-nofeature\\-ha|os\\-onos\\-sfc\\-ha|os\\-ovs\\-nofeature\\-ha|unknown)" + }, + "datasource": "yardstick-vtc", + "includeAll": true, + "multi": true, + "multiFormat": "regex values", + "name": "SCENARIO", + "options": [ + { + "selected": true, + "text": "All", + "value": "(os\\-no_sdn\\-ovs\\-ha|os\\-nosdn\\-kvm\\-ha|os\\-nosdn\\-nofeature\\-ha|os\\-nosdn\\-nofeature\\-noha|os\\-nosdn\\-ovs\\-ha|os\\-ocl\\-nofeature\\-ha|os\\-odl_l2\\-bgpvpn\\-ha|os\\-odl_l2\\-nofeature\\-ha|os\\-odl_l2\\-nofeature\\-noha|os\\-odl_l2\\-sfc\\-ha|os\\-odl_l3\\-nofeature\\-ha|os\\-onos\\-nofeature\\-ha|os\\-onos\\-sfc\\-ha|os\\-ovs\\-nofeature\\-ha|unknown)" + }, + { + "selected": false, + "text": "os-no_sdn-ovs-ha", + "value": "os\\-no_sdn\\-ovs\\-ha" + }, + { + "selected": false, + "text": "os-nosdn-kvm-ha", + "value": "os\\-nosdn\\-kvm\\-ha" + }, + { + "selected": false, + "text": "os-nosdn-nofeature-ha", + "value": "os\\-nosdn\\-nofeature\\-ha" + }, + { + "selected": false, + "text": "os-nosdn-nofeature-noha", + "value": "os\\-nosdn\\-nofeature\\-noha" + }, + { + "selected": false, + "text": "os-nosdn-ovs-ha", + "value": "os\\-nosdn\\-ovs\\-ha" + }, + { + "selected": false, + "text": "os-ocl-nofeature-ha", + "value": "os\\-ocl\\-nofeature\\-ha" + }, + { + "selected": false, + "text": "os-odl_l2-bgpvpn-ha", + "value": "os\\-odl_l2\\-bgpvpn\\-ha" + }, + { + "selected": false, + "text": "os-odl_l2-nofeature-ha", + "value": "os\\-odl_l2\\-nofeature\\-ha" + }, + { + "selected": false, + "text": "os-odl_l2-nofeature-noha", + "value": "os\\-odl_l2\\-nofeature\\-noha" + }, + { + "selected": false, + "text": "os-odl_l2-sfc-ha", + "value": "os\\-odl_l2\\-sfc\\-ha" + }, + { + "selected": false, + "text": "os-odl_l3-nofeature-ha", + "value": "os\\-odl_l3\\-nofeature\\-ha" + }, + { + "selected": false, + "text": "os-onos-nofeature-ha", + "value": "os\\-onos\\-nofeature\\-ha" + }, + { + "selected": false, + "text": "os-onos-sfc-ha", + "value": "os\\-onos\\-sfc\\-ha" + }, + { + "selected": false, + "text": "os-ovs-nofeature-ha", + "value": "os\\-ovs\\-nofeature\\-ha" + }, + { + "selected": false, + "text": "unknown", + "value": "unknown" + } + ], + "query": "SHOW TAG VALUES WITH KEY = \"deploy_scenario\" ", + "refresh": false, + "type": "query" + } + ] + }, + "annotations": { + "list": [] + }, + "refresh": false, + "schemaVersion": 8, + "version": 5, + "links": [] +} diff --git a/docs/userguide/03-list-of-tcs.rst b/docs/userguide/03-list-of-tcs.rst index de48c7bc7..85846d1a1 100644 --- a/docs/userguide/03-list-of-tcs.rst +++ b/docs/userguide/03-list-of-tcs.rst @@ -28,6 +28,7 @@ Generic NFVI Test Case Descriptions opnfv_yardstick_tc001.rst opnfv_yardstick_tc002.rst + opnfv_yardstick_tc004.rst opnfv_yardstick_tc005.rst opnfv_yardstick_tc008.rst opnfv_yardstick_tc009.rst @@ -38,6 +39,14 @@ Generic NFVI Test Case Descriptions opnfv_yardstick_tc024.rst opnfv_yardstick_tc037.rst opnfv_yardstick_tc038.rst + opnfv_yardstick_tc043.rst + opnfv_yardstick_tc044.rst + opnfv_yardstick_tc055.rst + opnfv_yardstick_tc061.rst + opnfv_yardstick_tc069.rst + opnfv_yardstick_tc070.rst + opnfv_yardstick_tc071.rst + opnfv_yardstick_tc072.rst OPNFV Feature Test Cases ======================== diff --git a/docs/userguide/opnfv_yardstick_tc004.rst b/docs/userguide/opnfv_yardstick_tc004.rst new file mode 100644 index 000000000..301286126 --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc004.rst @@ -0,0 +1,77 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Huawei Technologies Co.,Ltd and others. + +************************************* +Yardstick Test Case Description TC004 +************************************* + +.. _cachestat: https://github.com/brendangregg/perf-tools/tree/master/fs + ++-----------------------------------------------------------------------------+ +|Cache Utilization | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC004_Cache Utilization | +| | | ++--------------+--------------------------------------------------------------+ +|metric | Cache Utilization | +| | | ++--------------+--------------------------------------------------------------+ +|test purpose | To evaluate the IaaS compute capability with regards to | +| | cache utilization.This test case should be run in parallel | +| | to other Yardstick test cases and not run as a stand-alone | +| | test case. | +| | Measure the cache usage statistics including cache hit, | +| | cache miss, hit ratio, page cache size and page cache size. | +| | Both average and maximun values are obtained. | +| | The purpose is also to be able to spot trends. | +| | Test results, graphs and similar shall be stored for | +| | comparison reasons and product evolution understanding | +| | between different OPNFV versions and/or configurations. | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | File: cachestat.yaml (in the 'samples' directory) | +| | | +| | * interval: 1 - repeat, pausing every 1 seconds in-between. | +| | | ++--------------+--------------------------------------------------------------+ +|test tool | cachestat | +| | | +| | cachestat is not always part of a Linux distribution, hence | +| | it needs to be installed. | +| | | ++--------------+--------------------------------------------------------------+ +|references | cachestat_ | +| | | +| | ETSI-NFV-TST001 | +| | | ++--------------+--------------------------------------------------------------+ +|applicability | Test can be configured with different: | +| | | +| | * interval; | +| | * runner Duration. | +| | | +| | There are default values for each above-mentioned option. | +| | Run in background with other test cases. | +| | | ++--------------+--------------------------------------------------------------+ +|pre-test | The test case image needs to be installed into Glance | +|conditions | with cachestat included in the image. | +| | | +| | No POD specific requirements have been identified. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | The host is installed as client. The related TC, or TCs, is | +| | invoked and cachestat logs are produced and stored. | +| | | +| | Result: logs are stored. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | None. Cache utilization results are fetched and stored. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc024.rst b/docs/userguide/opnfv_yardstick_tc024.rst index ffdacb106..8d15e8d2f 100644 --- a/docs/userguide/opnfv_yardstick_tc024.rst +++ b/docs/userguide/opnfv_yardstick_tc024.rst @@ -22,17 +22,17 @@ Yardstick Test Case Description TC024 |test purpose | To evaluate the CPU load performance of the IaaS. This test | | | case should be run in parallel to other Yardstick test cases | | | and not run as a stand-alone test case. | -| | | -| | The purpose is also to be able to spot trends. Test results, | -| | graphs ans similar shall be stored for comparison reasons and| -| | product evolution understanding between different OPNFV | -| | versions and/or configurations. | +| | Average, minimum and maximun values are obtained. | +| | The purpose is also to be able to spot trends. | +| | Test results, graphs and similar shall be stored for | +| | comparison reasons and product evolution understanding | +| | between different OPNFV versions and/or configurations. | | | | +--------------+--------------------------------------------------------------+ |configuration | file: cpuload.yaml (in the 'samples' directory) | | | | -| | There is are no additional configurations to be set for this | -| | TC. | +| | * interval: 1 - repeat, pausing every 1 seconds in-between. | +| | * count: 10 - display statistics 10 times, then exit. | | | | +--------------+--------------------------------------------------------------+ |test tool | mpstat | @@ -46,7 +46,14 @@ Yardstick Test Case Description TC024 |references | man-pages_ | | | | +--------------+--------------------------------------------------------------+ -|applicability | Run in background with other test cases. | +|applicability | Test can be configured with different: | +| | | +| | * interval; | +| | * count; | +| | * runner Iteration and intervals. | +| | | +| | There are default values for each above-mentioned option. | +| | Run in background with other test cases. | | | | +--------------+--------------------------------------------------------------+ |pre-test | The test case image needs to be installed into Glance | diff --git a/docs/userguide/opnfv_yardstick_tc050.rst b/docs/userguide/opnfv_yardstick_tc050.rst new file mode 100644 index 000000000..8890c9d53 --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc050.rst @@ -0,0 +1,135 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Yin Kanglin and others. +.. 14_ykl@tongji.edu.cn + +************************************* +Yardstick Test Case Description TC050 +************************************* + ++-----------------------------------------------------------------------------+ +|OpenStack Controller Node Network High Availability | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC050: OpenStack Controller Node Network | +| | High Availability | ++--------------+--------------------------------------------------------------+ +|test purpose | This test case will verify the high availability of control | +| | node. When one of the controller failed to connect the | +| | network, which breaks down the Openstack services on this | +| | node. These Openstack service should able to be accessed by | +| | other controller nodes, and the services on failed | +| | controller node should be isolated. | ++--------------+--------------------------------------------------------------+ +|test method | This test case turns off the network interfaces of a | +| | specified control node, then checks whether all services | +| | provided by the control node are OK with some monitor tools. | ++--------------+--------------------------------------------------------------+ +|attackers | In this test case, an attacker called "close-interface" is | +| | needed. This attacker includes three parameters: | +| | 1) fault_type: which is used for finding the attacker's | +| | scripts. It should be always set to "close-interface" in | +| | this test case. | +| | 2) host: which is the name of a control node being attacked. | +| | 3) interface: the network interface to be turned off. | +| | | +| | There are four instance of the "close-interface" monitor: | +| | attacker1(for public netork): | +| | -fault_type: "close-interface" | +| | -host: node1 | +| | -interface: "br-ex" | +| | attacker2(for management netork): | +| | -fault_type: "close-interface" | +| | -host: node1 | +| | -interface: "br-mgmt" | +| | attacker3(for storage netork): | +| | -fault_type: "close-interface" | +| | -host: node1 | +| | -interface: "br-storage" | +| | attacker4(for private netork): | +| | -fault_type: "close-interface" | +| | -host: node1 | +| | -interface: "br-mesh" | ++--------------+--------------------------------------------------------------+ +|monitors | In this test case, the monitor named "openstack-cmd" is | +| | needed. The monitor needs needs two parameters: | +| | 1) monitor_type: which is used for finding the monitor class | +| | and related scritps. It should be always set to | +| | "openstack-cmd" for this monitor. | +| | 2) command_name: which is the command name used for request | +| | | +| | There are four instance of the "openstack-cmd" monitor: | +| | monitor1: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "nova image-list" | +| | monitor2: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "neutron router-list" | +| | monitor3: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "heat stack-list" | +| | monitor4: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "cinder list" | ++--------------+--------------------------------------------------------------+ +|metrics | In this test case, there is one metric: | +| | 1)service_outage_time: which indicates the maximum outage | +| | time (seconds) of the specified Openstack command request. | ++--------------+--------------------------------------------------------------+ +|test tool | Developed by the project. Please see folder: | +| | "yardstick/benchmark/scenarios/availability/ha_tools" | +| | | ++--------------+--------------------------------------------------------------+ +|references | ETSI NFV REL001 | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | This test case needs two configuration files: | +| | 1) test case file: opnfv_yardstick_tc050.yaml | +| | -Attackers: see above "attackers" discription | +| | -waiting_time: which is the time (seconds) from the process | +| | being killed to stoping monitors the monitors | +| | -Monitors: see above "monitors" discription | +| | -SLA: see above "metrics" discription | +| | | +| | 2)POD file: pod.yaml | +| | The POD configuration should record on pod.yaml first. | +| | the "host" item in this test case will use the node name in | +| | the pod.yaml. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | start monitors: | +| | each monitor will run with independently process | +| | | +| | Result: The monitor info will be collected. | +| | | ++--------------+--------------------------------------------------------------+ +|step 2 | do attacker: connect the host through SSH, and then execute | +| | the turnoff network interface script with param value | +| | specified by "interface". | +| | | +| | Result: Network interfaces will be turned down. | +| | | ++--------------+--------------------------------------------------------------+ +|step 3 | stop monitors after a period of time specified by | +| | "waiting_time" | +| | | +| | Result: The monitor info will be aggregated. | +| | | ++--------------+--------------------------------------------------------------+ +|step 4 | verify the SLA | +| | | +| | Result: The test case is passed or not. | +| | | ++--------------+--------------------------------------------------------------+ +|post-action | It is the action when the test cases exist. It turns up the | +| | network interface of the control node if it is not turned | +| | up. | ++--------------+--------------------------------------------------------------+ +|test verdict | Fails only if SLA is not passed, or if there is a test case | +| | execution problem. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc051.rst b/docs/userguide/opnfv_yardstick_tc051.rst new file mode 100644 index 000000000..3402ccd92 --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc051.rst @@ -0,0 +1,117 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Yin Kanglin and others. +.. 14_ykl@tongji.edu.cn + +************************************* +Yardstick Test Case Description TC051 +************************************* + ++-----------------------------------------------------------------------------+ +|OpenStack Controller Node CPU Overload High Availability | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC051: OpenStack Controller Node CPU | +| | Overload High Availability | ++--------------+--------------------------------------------------------------+ +|test purpose | This test case will verify the high availability of control | +| | node. When the CPU usage of a specified controller node is | +| | stressed to 100%, which breaks down the Openstack services | +| | on this node. These Openstack service should able to be | +| | accessed by other controller nodes, and the services on | +| | failed controller node should be isolated. | ++--------------+--------------------------------------------------------------+ +|test method | This test case stresses the CPU uasge of a specified control | +| | node to 100%, then checks whether all services provided by | +| | the environment are OK with some monitor tools. | ++--------------+--------------------------------------------------------------+ +|attackers | In this test case, an attacker called "stress-cpu" is | +| | needed. This attacker includes two parameters: | +| | 1) fault_type: which is used for finding the attacker's | +| | scripts. It should be always set to "stress-cpu" in | +| | this test case. | +| | 2) host: which is the name of a control node being attacked. | +| | e.g. | +| | -fault_type: "stress-cpu" | +| | -host: node1 | ++--------------+--------------------------------------------------------------+ +|monitors | In this test case, the monitor named "openstack-cmd" is | +| | needed. The monitor needs needs two parameters: | +| | 1) monitor_type: which is used for finding the monitor class | +| | and related scritps. It should be always set to | +| | "openstack-cmd" for this monitor. | +| | 2) command_name: which is the command name used for request | +| | | +| | There are four instance of the "openstack-cmd" monitor: | +| | monitor1: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "nova image-list" | +| | monitor2: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "neutron router-list" | +| | monitor3: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "heat stack-list" | +| | monitor4: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "cinder list" | ++--------------+--------------------------------------------------------------+ +|metrics | In this test case, there is one metric: | +| | 1)service_outage_time: which indicates the maximum outage | +| | time (seconds) of the specified Openstack command request. | ++--------------+--------------------------------------------------------------+ +|test tool | Developed by the project. Please see folder: | +| | "yardstick/benchmark/scenarios/availability/ha_tools" | +| | | ++--------------+--------------------------------------------------------------+ +|references | ETSI NFV REL001 | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | This test case needs two configuration files: | +| | 1) test case file: opnfv_yardstick_tc051.yaml | +| | -Attackers: see above "attackers" discription | +| | -waiting_time: which is the time (seconds) from the process | +| | being killed to stoping monitors the monitors | +| | -Monitors: see above "monitors" discription | +| | -SLA: see above "metrics" discription | +| | | +| | 2)POD file: pod.yaml | +| | The POD configuration should record on pod.yaml first. | +| | the "host" item in this test case will use the node name in | +| | the pod.yaml. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | start monitors: | +| | each monitor will run with independently process | +| | | +| | Result: The monitor info will be collected. | +| | | ++--------------+--------------------------------------------------------------+ +|step 2 | do attacker: connect the host through SSH, and then execute | +| | the stress cpu script on the host. | +| | | +| | Result: The CPU usage of the host will be stressed to 100%. | +| | | ++--------------+--------------------------------------------------------------+ +|step 3 | stop monitors after a period of time specified by | +| | "waiting_time" | +| | | +| | Result: The monitor info will be aggregated. | +| | | ++--------------+--------------------------------------------------------------+ +|step 4 | verify the SLA | +| | | +| | Result: The test case is passed or not. | +| | | ++--------------+--------------------------------------------------------------+ +|post-action | It is the action when the test cases exist. It kills the | +| | process that stresses the CPU usage. | ++--------------+--------------------------------------------------------------+ +|test verdict | Fails only if SLA is not passed, or if there is a test case | +| | execution problem. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc053.rst b/docs/userguide/opnfv_yardstick_tc053.rst new file mode 100644 index 000000000..8808d12d9 --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc053.rst @@ -0,0 +1,142 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Yin Kanglin and others. +.. 14_ykl@tongji.edu.cn + +************************************* +Yardstick Test Case Description TC053 +************************************* + ++-----------------------------------------------------------------------------+ +|OpenStack Controller Load Balance Service High Availability | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC053: OpenStack Controller Load Balance | +| | Service High Availability- | ++--------------+--------------------------------------------------------------+ +|test purpose | This test case will verify the high availability of the | +| | load balance service(current is HAProxy) that supports | +| | OpenStack on controller node. When the load balance service | +| | of a specified controller node is killed, whether other load | +| | balancers on other controller nodes will work, and whether | +| | the controller node will restart the load balancer are | +| | checked. | ++--------------+--------------------------------------------------------------+ +|test method | This test case kills the processes of load balance service | +| | on a selected control node, then checks whether the request | +| | of the related Openstack command is OK and the killed | +| | processes are recovered. | ++--------------+--------------------------------------------------------------+ +|attackers | In this test case, an attacker called "kill-process" is | +| | needed. This attacker includes three parameters: | +| | 1) fault_type: which is used for finding the attacker's | +| | scripts. It should be always set to "kill-process" in this | +| | test case. | +| | 2) process_name: which is the process name of the specified | +| | OpenStack service. If there are multiple processes use the | +| | same name on the host, all of them are killed by this | +| | attacker. | +| | In this case. This parameter should always set to "swift- | +| | proxy". | +| | 3) host: which is the name of a control node being attacked. | +| | | +| | e.g. | +| | -fault_type: "kill-process" | +| | -process_name: "haproxy" | +| | -host: node1 | +| | | ++--------------+--------------------------------------------------------------+ +|monitors | In this test case, two kinds of monitor are needed: | +| | 1. the "openstack-cmd" monitor constantly request a specific | +| | Openstack command, which needs two parameters: | +| | 1) monitor_type: which is used for finding the monitor class | +| | and related scritps. It should be always set to | +| | "openstack-cmd" for this monitor. | +| | 2) command_name: which is the command name used for request. | +| | | +| | 2. the "process" monitor check whether a process is running | +| | on a specific node, which needs three parameters: | +| | 1) monitor_type: which used for finding the monitor class | +| | and related scripts. It should be always set to "process" | +| | for this monitor. | +| | 2) process_name: which is the process name for monitor | +| | 3) host: which is the name of the node runing the process | +| | In this case, the command_name of monitor1 should be | +| | services that is supported by load balancer and the process- | +| | name of monitor2 should be "haproxy", for example: | +| | | +| | e.g. | +| | monitor1: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "nova image-list" | +| | monitor2: | +| | -monitor_type: "process" | +| | -process_name: "haproxy" | +| | -host: node1 | +| | | ++--------------+--------------------------------------------------------------+ +|metrics | In this test case, there are two metrics: | +| | 1)service_outage_time: which indicates the maximum outage | +| | time (seconds) of the specified Openstack command request. | +| | 2)process_recover_time: which indicates the maximun time | +| | (seconds) from the process being killed to recovered | +| | | ++--------------+--------------------------------------------------------------+ +|test tool | Developed by the project. Please see folder: | +| | "yardstick/benchmark/scenarios/availability/ha_tools" | +| | | ++--------------+--------------------------------------------------------------+ +|references | ETSI NFV REL001 | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | This test case needs two configuration files: | +| | 1) test case file: opnfv_yardstick_tc053.yaml | +| | -Attackers: see above "attackers" discription | +| | -waiting_time: which is the time (seconds) from the process | +| | being killed to stoping monitors the monitors | +| | -Monitors: see above "monitors" discription | +| | -SLA: see above "metrics" discription | +| | | +| | 2)POD file: pod.yaml | +| | The POD configuration should record on pod.yaml first. | +| | the "host" item in this test case will use the node name in | +| | the pod.yaml. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | start monitors: | +| | each monitor will run with independently process | +| | | +| | Result: The monitor info will be collected. | +| | | ++--------------+--------------------------------------------------------------+ +|step 2 | do attacker: connect the host through SSH, and then execute | +| | the kill process script with param value specified by | +| | "process_name" | +| | | +| | Result: Process will be killed. | +| | | ++--------------+--------------------------------------------------------------+ +|step 3 | stop monitors after a period of time specified by | +| | "waiting_time" | +| | | +| | Result: The monitor info will be aggregated. | +| | | ++--------------+--------------------------------------------------------------+ +|step 4 | verify the SLA | +| | | +| | Result: The test case is passed or not. | +| | | ++--------------+--------------------------------------------------------------+ +|post-action | It is the action when the test cases exist. It will check | +| | the status of the specified process on the host, and restart | +| | the process if it is not running for next test cases. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | Fails only if SLA is not passed, or if there is a test case | +| | execution problem. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc054.rst b/docs/userguide/opnfv_yardstick_tc054.rst new file mode 100644 index 000000000..7f92be2bc --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc054.rst @@ -0,0 +1,125 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Yin Kanglin and others. +.. 14_ykl@tongji.edu.cn + +************************************* +Yardstick Test Case Description TC054 +************************************* + ++-----------------------------------------------------------------------------+ +|OpenStack Virtual IP High Availability | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC054: OpenStack Virtual IP High | +| | Availability | ++--------------+--------------------------------------------------------------+ +|test purpose | This test case will verify the high availability for virtual | +| | ip in the environment. When master node of virtual ip is | +| | abnormally shutdown, connection to virtual ip and | +| | the services binded to the virtual IP it should be OK. | ++--------------+--------------------------------------------------------------+ +|test method | This test case shutdowns the virtual IP master node with | +| | some fault injection tools, then checks whether virtual ips | +| | can be pinged and services binded to virtual ip are OK with | +| | some monitor tools. | ++--------------+--------------------------------------------------------------+ +|attackers | In this test case, an attacker called "control-shutdown" is | +| | needed. This attacker includes two parameters: | +| | 1) fault_type: which is used for finding the attacker's | +| | scripts. It should be always set to "control-shutdown" in | +| | this test case. | +| | 2) host: which is the name of a control node being attacked. | +| | | +| | In this case the host should be the virtual ip master node, | +| | that means the host ip is the virtual ip, for exapmle: | +| | -fault_type: "control-shutdown" | +| | -host: node1(the VIP Master node) | ++--------------+--------------------------------------------------------------+ +|monitors | In this test case, two kinds of monitor are needed: | +| | 1. the "ip_status" monitor that pings a specific ip to check | +| | the connectivity of this ip, which needs two parameters: | +| | 1) monitor_type: which is used for finding the monitor class | +| | and related scripts. It should be always set to "ip_status" | +| | for this monitor. | +| | 2) ip_address: The ip to be pinged. In this case, ip_address | +| | should be the virtual IP. | +| | | +| | 2. the "openstack-cmd" monitor constantly request a specific | +| | Openstack command, which needs two parameters: | +| | 1) monitor_type: which is used for finding the monitor class | +| | and related scripts. It should be always set to | +| | "openstack-cmd" for this monitor. | +| | 2) command_name: which is the command name used for request. | +| | | +| | e.g. | +| | monitor1: | +| | -monitor_type: "ip_status" | +| | -host: 192.168.0.2 | +| | monitor2: | +| | -monitor_type: "openstack-cmd" | +| | -command_name: "nova image-list" | +| | | ++--------------+--------------------------------------------------------------+ +|metrics | In this test case, there are two metrics: | +| | 1) ping_outage_time: which-indicates the maximum outage time | +| | to ping the specified host. | +| | 2)service_outage_time: which indicates the maximum outage | +| | time (seconds) of the specified Openstack command request. | ++--------------+--------------------------------------------------------------+ +|test tool | Developed by the project. Please see folder: | +| | "yardstick/benchmark/scenarios/availability/ha_tools" | +| | | ++--------------+--------------------------------------------------------------+ +|references | ETSI NFV REL001 | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | This test case needs two configuration files: | +| | 1) test case file: opnfv_yardstick_tc054.yaml | +| | -Attackers: see above "attackers" discription | +| | -waiting_time: which is the time (seconds) from the process | +| | being killed to stoping monitors the monitors | +| | -Monitors: see above "monitors" discription | +| | -SLA: see above "metrics" discription | +| | | +| | 2)POD file: pod.yaml | +| | The POD configuration should record on pod.yaml first. | +| | the "host" item in this test case will use the node name in | +| | the pod.yaml. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | start monitors: | +| | each monitor will run with independently process | +| | | +| | Result: The monitor info will be collected. | +| | | ++--------------+--------------------------------------------------------------+ +|step 2 | do attacker: connect the host through SSH, and then execute | +| | the shutdown script on the VIP master node. | +| | | +| | Result: VIP master node will be shutdown | +| | | ++--------------+--------------------------------------------------------------+ +|step 3 | stop monitors after a period of time specified by | +| | "waiting_time" | +| | | +| | Result: The monitor info will be aggregated. | +| | | ++--------------+--------------------------------------------------------------+ +|step 4 | verify the SLA | +| | | +| | Result: The test case is passed or not. | +| | | ++--------------+--------------------------------------------------------------+ +|post-action | It is the action when the test cases exist. It restarts the | +| | original VIP master node if it is not restarted. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | Fails only if SLA is not passed, or if there is a test case | +| | execution problem. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc061.rst b/docs/userguide/opnfv_yardstick_tc061.rst new file mode 100644 index 000000000..1d424414e --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc061.rst @@ -0,0 +1,88 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Huawei Technologies Co.,Ltd and others. + +************************************* +Yardstick Test Case Description TC061 +************************************* + +.. _man-pages: http://linux.die.net/man/1/sar + ++-----------------------------------------------------------------------------+ +|Network Utilization | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC061_Network Utilization | +| | | ++--------------+--------------------------------------------------------------+ +|metric | Network utilization | +| | | ++--------------+--------------------------------------------------------------+ +|test purpose | To evaluate the IaaS network capability with regards to | +| | network utilization, including Total number of packets | +| | received per second, Total number of packets transmitted per | +| | second, Total number of kilobytes received per second, Total | +| | number of kilobytes transmitted per second, Number of | +| | compressed packets received per second (for cslip etc.), | +| | Number of compressed packets transmitted per second, Number | +| | of multicast packets received per second, Utilization | +| | percentage of the network interface. | +| | This test case should be run in parallel to other Yardstick | +| | test cases and not run as a stand-alone test case. | +| | Measure the network usage statistics from the network devices| +| | Average, minimum and maximun values are obtained. | +| | The purpose is also to be able to spot trends. | +| | Test results, graphs and similar shall be stored for | +| | comparison reasons and product evolution understanding | +| | between different OPNFV versions and/or configurations. | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | File: netutilization.yaml (in the 'samples' directory) | +| | | +| | * interval: 1 - repeat, pausing every 1 seconds in-between. | +| | * count: 1 - display statistics 1 times, then exit. | +| | | ++--------------+--------------------------------------------------------------+ +|test tool | sar | +| | | +| | The sar command writes to standard output the contents of | +| | selected cumulative activity counters in the operating | +| | system. | +| | sar is normally part of a Linux distribution, hence it | +| | doesn't needs to be installed. | +| | | ++--------------+--------------------------------------------------------------+ +|references | man-pages_ | +| | | +| | ETSI-NFV-TST001 | +| | | ++--------------+--------------------------------------------------------------+ +|applicability | Test can be configured with different: | +| | | +| | * interval; | +| | * count; | +| | * runner Iteration and intervals. | +| | | +| | There are default values for each above-mentioned option. | +| | Run in background with other test cases. | +| | | ++--------------+--------------------------------------------------------------+ +|pre-test | The test case image needs to be installed into Glance | +|conditions | with sar included in the image. | +| | | +| | No POD specific requirements have been identified. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result. | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | The host is installed as client. The related TC, or TCs, is | +| | invoked and sar logs are produced and stored. | +| | | +| | Result: logs are stored. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | None. Network utilization results are fetched and stored. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc073.rst b/docs/userguide/opnfv_yardstick_tc073.rst new file mode 100644 index 000000000..a6499eabb --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc073.rst @@ -0,0 +1,81 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Huawei Technologies Co.,Ltd and others. + +************************************* +Yardstick Test Case Description TC073 +************************************* + +.. _netperf: http://www.netperf.org/netperf/training/Netperf.html + ++-----------------------------------------------------------------------------+ +|Throughput per NFVI node test | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC073_Network latency and throughput between | +| | nodes | +| | | ++--------------+--------------------------------------------------------------+ +|metric | Network latency and throughput | +| | | ++--------------+--------------------------------------------------------------+ +|test purpose | To evaluate the IaaS network performance with regards to | +| | flows and throughput, such as if and how different amounts | +| | of packet sizes and flows matter for the throughput between | +| | nodes in one pod. | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | file: opnfv_yardstick_tc073.yaml | +| | | +| | Packet size: default 1024 bytes. | +| | | +| | Test length: default 20 seconds. | +| | | +| | The client and server are distributed on different nodes. | +| | | +| | For SLA max_mean_latency is set to 100. | +| | | ++--------------+--------------------------------------------------------------+ +|test tool | netperf | +| | Netperf is a software application that provides network | +| | bandwidth testing between two hosts on a network. It | +| | supports Unix domain sockets, TCP, SCTP, DLPI and UDP via | +| | BSD Sockets. Netperf provides a number of predefined tests | +| | e.g. to measure bulk (unidirectional) data transfer or | +| | request response performance. | +| | (netperf is not always part of a Linux distribution, hence | +| | it needs to be installed.) | +| | | ++--------------+--------------------------------------------------------------+ +|references | netperf Man pages | +| | ETSI-NFV-TST001 | +| | | ++--------------+--------------------------------------------------------------+ +|applicability | Test can be configured with different packet sizes and | +| | test duration. Default values exist. | +| | | +| | SLA (optional): max_mean_latency | +| | | ++--------------+--------------------------------------------------------------+ +|pre-test | The POD can be reached by external ip and logged on via ssh | +|conditions | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | Install netperf tool on each specified node, one is as the | +| | server, and the other as the client. | +| | | ++--------------+--------------------------------------------------------------+ +|step 2 | Log on to the client node and use the netperf command to | +| | execute the network performance test | +| | | ++--------------+--------------------------------------------------------------+ +|step 3 | The throughput results stored. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | Fails only if SLA is not passed, or if there is a test case | +| | execution problem. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/docs/userguide/opnfv_yardstick_tc074.rst b/docs/userguide/opnfv_yardstick_tc074.rst new file mode 100644 index 000000000..c938f5dfd --- /dev/null +++ b/docs/userguide/opnfv_yardstick_tc074.rst @@ -0,0 +1,137 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Huawei Technologies Co.,Ltd and others. + +************************************* +Yardstick Test Case Description TC074 +************************************* + +.. Storperf: https://wiki.opnfv.org/display/storperf/Storperf + ++-----------------------------------------------------------------------------+ +|Storperf | +| | ++--------------+--------------------------------------------------------------+ +|test case id | OPNFV_YARDSTICK_TC074_Storperf | +| | | ++--------------+--------------------------------------------------------------+ +|metric | Storage performance | +| | | ++--------------+--------------------------------------------------------------+ +|test purpose | Storperf integration with yardstick. The purpose of StorPerf | +| | is to provide a tool to measure block and object storage | +| | performance in an NFVI. When complemented with a | +| | characterization of typical VF storage performance | +| | requirements, it can provide pass/fail thresholds for test, | +| | staging, and production NFVI environments. | +| | | +| | The benchmarks developed for block and object storage will | +| | be sufficiently varied to provide a good preview of expected | +| | storage performance behavior for any type of VNF workload. | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | file: opnfv_yardstick_tc074.yaml | +| | | +| | * agent_count: 1 - the number of VMs to be created | +| | * agent_image: "Ubuntu-14.04" - image used for creating VMs | +| | * public_network: "ext-net" - name of public network | +| | * volume_size: 2 - cinder volume size | +| | * block_sizes: "4096" - data block size | +| | * queue_depths: "4" | +| | * StorPerf_ip: "192.168.200.2" | +| | * query_interval: 10 - state query interval | +| | * timeout: 600 - maximum allowed job time | +| | | ++--------------+--------------------------------------------------------------+ +|test tool | Storperf | +| | | +| | StorPerf is a tool to measure block and object storage | +| | performance in an NFVI. | +| | | +| | StorPerf is delivered as a Docker container from | +| | https://hub.docker.com/r/opnfv/storperf/tags/. | +| | | ++--------------+--------------------------------------------------------------+ +|references | Storperf_ | +| | | +| | ETSI-NFV-TST001 | +| | | ++--------------+--------------------------------------------------------------+ +|applicability | Test can be configured with different: | +| | | +| | * agent_count | +| | * volume_size | +| | * block_sizes | +| | * queue_depths | +| | * query_interval | +| | * timeout | +| | * target=[device or path] | +| | The path to either an attached storage device | +| | (/dev/vdb, etc) or a directory path (/opt/storperf) that | +| | will be used to execute the performance test. In the case | +| | of a device, the entire device will be used. If not | +| | specified, the current directory will be used. | +| | * workload=[workload module] | +| | If not specified, the default is to run all workloads. The | +| | workload types are: | +| | - rs: 100% Read, sequential data | +| | - ws: 100% Write, sequential data | +| | - rr: 100% Read, random access | +| | - wr: 100% Write, random access | +| | - rw: 70% Read / 30% write, random access | +| | * nossd: Do not perform SSD style preconditioning. | +| | * nowarm: Do not perform a warmup prior to | +| | measurements. | +| | * report= [job_id] | +| | Query the status of the supplied job_id and report on | +| | metrics. If a workload is supplied, will report on only | +| | that subset. | +| | | +| | There are default values for each above-mentioned option. | +| | | ++--------------+--------------------------------------------------------------+ +|pre-test | If you do not have an Ubuntu 14.04 image in Glance, you will | +|conditions | need to add one. A key pair for launching agents is also | +| | required. | +| | | +| | Storperf is required to be installed in the environment. | +| | There are two possible methods for Storperf installation: | +| | Run container on Jump Host | +| | Run container in a VM | +| | | +| | Running StorPerf on Jump Host | +| | Requirements: | +| | - Docker must be installed | +| | - Jump Host must have access to the OpenStack Controller | +| | API | +| | - Jump Host must have internet connectivity for | +| | downloading docker image | +| | - Enough floating IPs must be available to match your | +| | agent count | +| | | +| | Running StorPerf in a VM | +| | Requirements: | +| | - VM has docker installed | +| | - VM has OpenStack Controller credentials and can | +| | communicate with the Controller API | +| | - VM has internet connectivity for downloading the | +| | docker image | +| | - Enough floating IPs must be available to match your | +| | agent count | +| | | +| | No POD specific requirements have been identified. | +| | | ++--------------+--------------------------------------------------------------+ +|test sequence | description and expected result | +| | | ++--------------+--------------------------------------------------------------+ +|step 1 | The Storperf is installed and Ubuntu 14.04 image is stored | +| | in glance. TC is invoked and logs are produced and stored. | +| | | +| | Result: Logs are stored. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | None. Storage performance results are fetched and stored. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/etc/yardstick/nodes/zte_pod1.yaml b/etc/yardstick/nodes/zte_pod1.yaml new file mode 100644 index 000000000..17829948b --- /dev/null +++ b/etc/yardstick/nodes/zte_pod1.yaml @@ -0,0 +1,42 @@ +--- +# sample config file about the POD information, including the +# name/IP/user/ssh key of Bare Metal and Controllers/Computes +# +# The options of this config file include: +# name: the name of this node +# role: node's role, support role: Master/Controller/Comupte/BareMetal +# ip: the node's IP address +# user: the username for login +# key_filename:the path of the private key file for login + +nodes: +- + name: node1 + role: Controller + ip: 10.20.0.20 + user: root + key_filename: /root/.ssh/id_rsa +- + name: node2 + role: Controller + ip: 10.20.0.21 + user: root + key_filename: /root/.ssh/id_rsa +- + name: node3 + role: Controller + ip: 10.20.0.22 + user: root + key_filename: /root/.ssh/id_rsa +- + name: node4 + role: Compute + ip: 10.20.0.23 + user: root + key_filename: /root/.ssh/id_rsa +- + name: node5 + role: Compute + ip: 10.20.0.24 + user: root + key_filename: /root/.ssh/id_rsa diff --git a/plugin/CI/storperf.yaml b/plugin/CI/storperf.yaml new file mode 100644 index 000000000..4407ddf8c --- /dev/null +++ b/plugin/CI/storperf.yaml @@ -0,0 +1,13 @@ +--- +# StorPerf plugin configration file for huawei-pod1 +# Used for integration StorPerf into Yardstick as a plugin + +schema: "yardstick:plugin:0.1" + +plugins: + name: storperf + +deployment: + ip: local + user: root + password: root diff --git a/samples/storagecapacity.yaml b/samples/storagecapacity.yaml new file mode 100644 index 000000000..93394be12 --- /dev/null +++ b/samples/storagecapacity.yaml @@ -0,0 +1,24 @@ +--- +# Sample benchmark task config file +# Measure storage capacity and scale. +# Including number of PVs, volume of disk size, +# and block size of each device. + +schema: "yardstick:task:0.1" + +scenarios: +- + type: StorageCapacity + options: + test_type: "disk_size" + + host: node5.LF + + runner: + type: Iteration + iterations: 1 + +context: + type: Node + name: LF + file: /root/yardstick/etc/yardstick/nodes/compass_sclab_virtual/pod.yaml diff --git a/samples/storperf.yaml b/samples/storperf.yaml new file mode 100644 index 000000000..815ef0d97 --- /dev/null +++ b/samples/storperf.yaml @@ -0,0 +1,31 @@ +--- +# Sample StorPerf benchmark task config file +# StorPerf is a tool to measure block and object storage performance in an NFVI + +schema: "yardstick:task:0.1" + +scenarios: +- + type: StorPerf + options: + agent_count: 1 + agent_image: "Ubuntu 14.04" + public_network: "ext-net" + volume_size: 2 + # target: + # deadline: + # nossd: + # nowarm: + block_sizes: "4096" + queue_depths: "4" + workload: "ws" + StorPerf_ip: "192.168.23.2" + query_interval: 10 + timeout: 600 + + runner: + type: Iteration + iterations: 1 + +context: + type: Dummy diff --git a/tests/ci/docker/yardstick-ci/Dockerfile b/tests/ci/docker/yardstick-ci/Dockerfile index cc23073d2..2d59fd69e 100644 --- a/tests/ci/docker/yardstick-ci/Dockerfile +++ b/tests/ci/docker/yardstick-ci/Dockerfile @@ -48,5 +48,6 @@ RUN cd ${YARDSTICK_REPO_DIR} && pip install -r tests/ci/requirements.txt RUN cd ${YARDSTICK_REPO_DIR} && pip install . ADD http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img /home/opnfv/images/ +ADD http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img /home/opnfv/images/ COPY ./exec_tests.sh /usr/local/bin/ diff --git a/tests/ci/prepare_env.sh b/tests/ci/prepare_env.sh index 723a04aa1..35118b12c 100755 --- a/tests/ci/prepare_env.sh +++ b/tests/ci/prepare_env.sh @@ -55,3 +55,28 @@ export EXTERNAL_NETWORK INSTALLER_TYPE DEPLOY_TYPE NODE_NAME # Prepare a admin-rc file for StorPerf integration $YARDSTICK_REPO_DIR/tests/ci/prepare_storperf_admin-rc.sh + +# Fetching id_rsa file from jump_server..." +verify_connectivity() { + local ip=$1 + echo "Verifying connectivity to $ip..." + for i in $(seq 0 10); do + if ping -c 1 -W 1 $ip > /dev/null; then + echo "$ip is reachable!" + return 0 + fi + sleep 1 + done + error "Can not talk to $ip." +} + +ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + +if [ "$INSTALLER_TYPE" == "fuel" ]; then + #ip_fuel="10.20.0.2" + verify_connectivity $INSTALLER_IP + echo "Fetching id_rsa file from jump_server $INSTALLER_IP..." + sshpass -p r00tme scp 2>/dev/null $ssh_options \ + root@${INSTALLER_IP}:~/.ssh/id_rsa /root/.ssh/id_rsa &> /dev/null +fi + diff --git a/tests/ci/yardstick-verify b/tests/ci/yardstick-verify index 31297f60f..0e234f54d 100755 --- a/tests/ci/yardstick-verify +++ b/tests/ci/yardstick-verify @@ -80,7 +80,7 @@ cleanup() return fi - for image in $(glance image-list | grep -e cirros-0.3.3 -e yardstick-trusty-server | awk '{print $2}'); do + for image in $(glance image-list | grep -e cirros-0.3.3 -e yardstick-trusty-server -e Ubuntu-14.04 | awk '{print $2}'); do echo "Deleting image $image..." glance image-delete $image || true done @@ -121,6 +121,20 @@ install_yardstick() pip install . } +install_storperf() +{ + # Install Storper on huawei-pod1 + if [ "$NODE_NAME" == "huawei-pod1" ]; then + echo + echo "========== Installing storperf ==========" + + if ! yardstick plugin install plugin/CI/storperf.yaml; then + echo "Install storperf plugin FAILED"; + exit 1 + fi + fi +} + build_yardstick_image() { echo @@ -174,6 +188,30 @@ load_cirros_image() echo "Cirros image id: $CIRROS_IMAGE_ID" } +load_ubuntu_image() +{ + echo + echo "========== Loading ubuntu cloud image ==========" + + local ubuntu_image_file=/home/opnfv/images/trusty-server-cloudimg-amd64-disk1.img + + output=$(glance image-create \ + --name Ubuntu-14.04 \ + --disk-format qcow2 \ + --container-format bare \ + --file $ubuntu_image_file) + echo "$output" + + UBUNTU_IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}') + + if [ -z "$UBUNTU_IMAGE_ID" ]; then + echo 'Failed uploading UBUNTU image to cloud'. + exit 1 + fi + + echo "Ubuntu image id: $UBUNTU_IMAGE_ID" +} + load_yardstick_image() { echo @@ -366,8 +404,10 @@ main() build_yardstick_image load_yardstick_image load_cirros_image + load_ubuntu_image create_nova_flavor + install_storperf run_test } diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc004.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc004.yaml deleted file mode 100644 index 2d10e4073..000000000 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc004.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -# Yardstick TC004 config file -# Measure cache hit/miss ratio and usage, network throughput and latency. -# Different amounts of flows are tested with, from 2 up to 1001000. -# All tests are run 2 times each. First 2 times with the least -# amount of ports, then 2 times with the next amount of ports, -# and so on until all packet sizes have been run with. -# -# During the measurements cache hit/miss ration, cache usage statistics and -# network latency are recorded/measured using cachestat and ping, respectively. - -schema: "yardstick:task:0.1" - -scenarios: -- - type: CACHEstat - run_in_background: true - - options: - interval: 1 - - host: demeter.yardstick -- - type: CACHEstat - run_in_background: true - - options: - interval: 1 - - host: poseidon.yardstick -- - type: Ping - run_in_background: true - - options: - packetsize: 100 - - host: demeter.yardstick - target: poseidon.yardstick - - sla: - max_rtt: 10 - action: monitor -{% for num_ports in [1, 10, 50, 100, 300, 500, 750, 1000] %} -- - type: Pktgen - options: - packetsize: 64 - number_of_ports: {{num_ports}} - duration: 20 - - host: demeter.yardstick - target: poseidon.yardstick - - runner: - type: Iteration - iterations: 2 - interval: 1 - - sla: - max_ppm: 1000 - action: monitor -{% endfor %} - -context: - name: yardstick - image: yardstick-trusty-server - flavor: yardstick-flavor - user: ubuntu - - placement_groups: - pgrp1: - policy: "availability" - - servers: - demeter: - floating_ip: true - placement: "pgrp1" - poseidon: - floating_ip: true - placement: "pgrp1" - - networks: - test: - cidr: '10.0.1.0/24' diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml new file mode 100644 index 000000000..0b21f8861 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml @@ -0,0 +1,139 @@ +--- +# Test case for TC050 :OpenStack Controller Node Network High Availability +# This test case is written by new scenario-based HA testing framework + +schema: "yardstick:task:0.1" +scenarios: + - + type: "GeneralHA" + options: + attackers: + - + fault_type: "general-attacker" + host: node1 + key: "close-br-public" + attack_key: "close-interface" + action_parameter: + interface: "br-ex" + rollback_parameter: + interface: "br-ex" + + - + fault_type: "general-attacker" + host: node1 + key: "close-br-mgmt" + attack_key: "close-interface" + action_parameter: + interface: "br-mgmt" + rollback_parameter: + interface: "br-mgmt" + + - + fault_type: "general-attacker" + host: node1 + key: "close-br-storage" + attack_key: "close-interface" + action_parameter: + interface: "br-storage" + rollback_parameter: + interface: "br-storage" + + - + fault_type: "general-attacker" + host: node1 + key: "close-br-private" + attack_key: "close-interface" + action_parameter: + interface: "br-mesh" + rollback_parameter: + interface: "br-mesh" + + monitors: + - + monitor_type: "openstack-cmd" + key: "nova-image-list" + command_name: "nova image-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "neutron-router-list" + command_name: "neutron router-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "heat-stack-list" + command_name: "heat stack-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "cinder-list" + command_name: "cinder list" + monitor_time: 10 + sla: + max_outage_time: 5 + + + steps: + - + actionKey: "close-br-public" + actionType: "attacker" + index: 1 + + - + actionKey: "close-br-mgmt" + actionType: "attacker" + index: 2 + + - + actionKey: "close-br-storage" + actionType: "attacker" + index: 3 + + - + actionKey: "close-br-private" + actionType: "attacker" + index: 4 + + - + actionKey: "nova-image-list" + actionType: "monitor" + index: 5 + + - + actionKey: "neutron-router-list" + actionType: "monitor" + index: 6 + + - + actionKey: "heat-stack-list" + actionType: "monitor" + index: 7 + + - + actionKey: "cinder-list" + actionType: "monitor" + index: 8 + + + nodes: + node1: node1.LF + runner: + type: Duration + duration: 1 + sla: + outage_time: 5 + action: monitor + +context: + type: Node + name: LF + file: etc/yardstick/nodes/fuel_virtual/pod.yaml diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml new file mode 100644 index 000000000..8e2e0c789 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml @@ -0,0 +1,90 @@ +--- +# Test case for TC051 :OpenStack Controller Node CPU Overload High Availability +# This test case is written by new scenario-based HA testing framework + +schema: "yardstick:task:0.1" +scenarios: + - + type: "GeneralHA" + options: + attackers: + - + fault_type: "general-attacker" + host: node1 + key: "stress-cpu" + attack_key: "stress-cpu" + + monitors: + - + monitor_type: "openstack-cmd" + key: "nova-image-list" + command_name: "nova image-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "neutron-router-list" + command_name: "neutron router-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "heat-stack-list" + command_name: "heat stack-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "cinder-list" + command_name: "cinder list" + monitor_time: 10 + sla: + max_outage_time: 5 + + + steps: + - + actionKey: "stress-cpu" + actionType: "attacker" + index: 1 + + - + actionKey: "nova-image-list" + actionType: "monitor" + index: 2 + + - + actionKey: "neutron-router-list" + actionType: "monitor" + index: 3 + + - + actionKey: "heat-stack-list" + actionType: "monitor" + index: 4 + + - + actionKey: "cinder-list" + actionType: "monitor" + index: 5 + + + nodes: + node1: node1.LF + runner: + type: Duration + duration: 1 + sla: + outage_time: 5 + action: monitor + +context: + type: Node + name: LF + file: etc/yardstick/nodes/fuel_virtual/pod.yaml diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml new file mode 100644 index 000000000..696ed3ba4 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml @@ -0,0 +1,61 @@ +--- +# Test case for TC053 :Openstack Controller Load Balance Service High Availability +# This test case is written by new scenario-based HA testing framework + +schema: "yardstick:task:0.1" +scenarios: + - + type: "GeneralHA" + options: + attackers: + - + fault_type: "kill-process" + host: node1 + key: "kill-process" + process_name: "haproxy" + + monitors: + - + monitor_type: "process" + key: "service-status" + process_name: "haproxy" + host: node1 + monitor_time: 20 + sla: + max_recover_time: 30 + + - + monitor_type: "openstack-cmd" + key: "list-images" + command_name: "nova image-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + steps: + - + actionKey: "kill-process" + actionType: "attacker" + index: 1 + - + actionKey: "service-status" + actionType: "monitor" + index: 2 + - + actionKey: "list-images" + actionType: "monitor" + index: 3 + + nodes: + node1: node1.LF + runner: + type: Duration + duration: 1 + sla: + outage_time: 5 + action: monitor + +context: + type: Node + name: LF + file: etc/yardstick/nodes/fuel_virtual/pod.yaml diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml new file mode 100644 index 000000000..7d94e3de8 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml @@ -0,0 +1,113 @@ +--- +# Test case for TC054 :OpenStack VIP Master Node abnormally shutdown High Availability +# This test case is written by new scenario-based HA testing framework + +schema: "yardstick:task:0.1" +scenarios: + - + type: "GeneralHA" + options: + attackers: + - + fault_type: "bare-metal-down" + host: node1 + key: "bare-metal-down" + + monitors: + - + monitor_type: "openstack-cmd" + key: "list-images" + command_name: "nova image-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "general-monitor" + monitor_key: "ip-status" + key: "vip-mgmt-status" + host: node2 + monitor_time: 10 + sla: + max_outage_time: 5 + parameter: + ip_address: "192.168.0.2" + + - + monitor_type: "general-monitor" + monitor_key: "ip-status" + key: "vip-routerp-status" + host: node2 + monitor_time: 10 + sla: + max_outage_time: 5 + parameter: + ip_address: "172.16.0.2" + + - + monitor_type: "general-monitor" + monitor_key: "ip-status" + key: "vip-router-status" + host: node2 + monitor_time: 10 + sla: + max_outage_time: 5 + parameter: + ip_address: "192.168.0.1" + + - + monitor_type: "general-monitor" + monitor_key: "ip-status" + key: "vip-pub" + host: node2 + monitor_time: 10 + sla: + max_outage_time: 5 + parameter: + ip_address: "172.16.0.3" + + + steps: + - + actionKey: "bare-metal-down" + actionType: "attacker" + index: 1 + - + actionKey: "list-images" + actionType: "monitor" + index: 2 + + - + actionKey: "vip-mgmt-status" + actionType: "monitor" + index: 3 + + - + actionKey: "vip-routerp-status" + actionType: "monitor" + index: 4 + + - + actionKey: "vip-router-status" + actionType: "monitor" + index: 5 + + - + actionKey: "vip-pub" + actionType: "monitor" + index: 6 + + nodes: + node1: node1.LF + node2: node2.LF + runner: + type: Duration + duration: 1 + sla: + outage_time: 5 + action: monitor + +context: + type: Node + name: LF + file: etc/yardstick/nodes/fuel_virtual/pod.yaml diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml new file mode 100755 index 000000000..fd95b8c9d --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml @@ -0,0 +1,37 @@ +--- +# Yardstick TC073 config file +# measure network latency and throughput using netperf +# There are two sample scenarios: bulk test and request/response test +# In bulk test, UDP_STREAM and TCP_STREAM can be used +# send_msg_size and recv_msg_size are options of bulk test +# In req/rsp test, TCP_RR TCP_CRR UDP_RR can be used +# req_rsp_size is option of req/rsp test + +schema: "yardstick:task:0.1" +{% set host = host or "node1.LF" %} +{% set target = target or "node2.LF" %} +{% set pod_info = pod_info or "etc/yardstick/nodes/compass_sclab_physical/pod.yaml" %} +scenarios: +- + type: NetperfNode + options: + testname: 'UDP_STREAM' + send_msg_size: 1024 + duration: 20 + + host: {{host}} + target: {{target}} + + runner: + type: Iteration + iterations: 1 + interval: 1 + sla: + mean_latency: 100 + action: monitor + +context: + type: Node + name: LF + file: {{pod_info}} + diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc074.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc074.yaml new file mode 100644 index 000000000..d506ccc1e --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc074.yaml @@ -0,0 +1,27 @@ +--- +# Test case for TC074 StorPerf benchmark task config file +# StorPerf is a tool to measure block and object storage performance in an NFVI + +schema: "yardstick:task:0.1" +{% set public_network = public_network or "ext-net" %} +{% set StorPerf_ip = StorPerf_ip or "192.168.200.2" %} +scenarios: +- + type: StorPerf + options: + agent_count: 1 + agent_image: "Ubuntu-14.04" + public_network: {{public_network}} + volume_size: 4 + block_sizes: "4096" + queue_depths: "4" + StorPerf_ip: {{StorPerf_ip}} + query_interval: 10 + timeout: 300 + + runner: + type: Iteration + iterations: 1 + +context: + type: Dummy diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-kvm-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm-ha_daily.yaml index 2840c1755..d38788e2e 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-kvm-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs-ha_daily.yaml index 0d139f137..13de81d42 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml index 08420dbe4..8bd95b655 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml index 8d55afb9c..fcd06638c 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-lxd-noha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml index 180ad165e..c5b59a8c5 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml @@ -26,7 +26,7 @@ test_cases: installer: compass pod: huawei-pod1 task_args: - huawei_pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", "host": "node4.LF","target": "node5.LF"}' - file_name: opnfv_yardstick_tc045.yaml @@ -50,6 +50,12 @@ test_cases: installer: fuel - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - @@ -58,3 +64,11 @@ test_cases: file_name: opnfv_yardstick_tc071.yaml - file_name: opnfv_yardstick_tc072.yaml +- + file_name: opnfv_yardstick_tc074.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"public_network": "ext-net", + "StorPerf_ip": "192.168.200.2"}' diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-noha_daily.yaml index 54c6a25c6..8d516b177 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-noha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-ovs-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-ovs-ha_daily.yaml index e497e1e85..97e0d66fe 100644 --- a/tests/opnfv/test_suites/opnfv_os-nosdn-ovs-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-nosdn-ovs-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-ha_daily.yaml index 2f0e87a1b..cf6b86aad 100644 --- a/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-noha_daily.yaml index 2d81db80b..f8e107927 100644 --- a/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-ocl-nofeature-noha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-odl_l2-bgpvpn-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-odl_l2-bgpvpn-ha_daily.yaml index ab34f67d5..d261bb884 100644 --- a/tests/opnfv/test_suites/opnfv_os-odl_l2-bgpvpn-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-odl_l2-bgpvpn-ha_daily.yaml @@ -22,3 +22,9 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' diff --git a/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-ha_daily.yaml index ed831ef82..8270006b2 100644 --- a/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-noha_daily.yaml index a9c55626f..68f46e03f 100644 --- a/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-odl_l2-nofeature-noha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-ha_daily.yaml index 5d0d6d1fa..29009b64d 100644 --- a/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-noha_daily.yaml index 69177b2ec..d60dd0557 100644 --- a/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-odl_l2-sfc-noha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-odl_l3-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-odl_l3-nofeature-ha_daily.yaml index db49b6ab5..56fdf4b0a 100644 --- a/tests/opnfv/test_suites/opnfv_os-odl_l3-nofeature-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-odl_l3-nofeature-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-onos-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-onos-nofeature-ha_daily.yaml index 503ff1033..1aa7db9a0 100644 --- a/tests/opnfv/test_suites/opnfv_os-onos-nofeature-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-onos-nofeature-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-onos-nofeature-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-onos-nofeature-noha_daily.yaml index 62ff86668..d08b10a38 100644 --- a/tests/opnfv/test_suites/opnfv_os-onos-nofeature-noha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-onos-nofeature-noha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/opnfv/test_suites/opnfv_os-onos-sfc-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-onos-sfc-ha_daily.yaml index 5af223723..639a127bf 100644 --- a/tests/opnfv/test_suites/opnfv_os-onos-sfc-ha_daily.yaml +++ b/tests/opnfv/test_suites/opnfv_os-onos-sfc-ha_daily.yaml @@ -22,6 +22,12 @@ test_cases: file_name: opnfv_yardstick_tc037.yaml - file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' - file_name: opnfv_yardstick_tc069.yaml - diff --git a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py b/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py new file mode 100644 index 000000000..cad5ba1d1 --- /dev/null +++ b/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# Unittest for yardstick.benchmark.scenarios.storage.storagecapacity.StorageCapacity + +import mock +import unittest +import os +import json + +from yardstick.benchmark.scenarios.storage import storagecapacity + +DISK_SIZE_SAMPLE_OUTPUT = '{"Numberf of devides": "2", "Total disk size": "1024000000 bytes"}' +BLOCK_SIZE_SAMPLE_OUTPUT = '{"/dev/sda": 1024, "/dev/sdb": 4096}' +DISK_UTIL_RAW_OUTPUT = "vda 10.00\nvda 0.00" +DISK_UTIL_SAMPLE_OUTPUT = '{"vda": {"avg_util": 5.0, "max_util": 10.0, "min_util": 0.0}}' + +@mock.patch('yardstick.benchmark.scenarios.storage.storagecapacity.ssh') +class StorageCapacityTestCase(unittest.TestCase): + + def setUp(self): + self.scn = { + "options": { + 'test_type': 'disk_size' + } + } + self.ctx = { + "host": { + 'ip': '172.16.0.137', + 'user': 'cirros', + 'password': "root" + } + } + self.result = {} + + def test_capacity_successful_setup(self, mock_ssh): + c = storagecapacity.StorageCapacity(self.scn, self.ctx) + + mock_ssh.SSH().execute.return_value = (0, '', '') + c.setup() + self.assertIsNotNone(c.client) + self.assertTrue(c.setup_done) + + def test_capacity_disk_size_successful(self, mock_ssh): + c = storagecapacity.StorageCapacity(self.scn, self.ctx) + + mock_ssh.SSH().execute.return_value = (0, DISK_SIZE_SAMPLE_OUTPUT, '') + c.run(self.result) + expected_result = json.loads(DISK_SIZE_SAMPLE_OUTPUT) + self.assertEqual(self.result, expected_result) + + def test_capacity_block_size_successful(self, mock_ssh): + args = { + "options": { + 'test_type': 'block_size' + } + } + c = storagecapacity.StorageCapacity(args, self.ctx) + + mock_ssh.SSH().execute.return_value = (0, BLOCK_SIZE_SAMPLE_OUTPUT, '') + c.run(self.result) + expected_result = json.loads(BLOCK_SIZE_SAMPLE_OUTPUT) + self.assertEqual(self.result, expected_result) + + def test_capacity_disk_utilization_successful(self, mock_ssh): + args = { + "options": { + 'test_type': 'disk_utilization', + 'interval': 1, + 'count': 2 + } + } + c = storagecapacity.StorageCapacity(args, self.ctx) + + mock_ssh.SSH().execute.return_value = (0, DISK_UTIL_RAW_OUTPUT, '') + c.run(self.result) + expected_result = json.loads(DISK_UTIL_SAMPLE_OUTPUT) + self.assertEqual(self.result, expected_result) + + def test_capacity_unsuccessful_script_error(self, mock_ssh): + c = storagecapacity.StorageCapacity(self.scn, self.ctx) + + mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR') + self.assertRaises(RuntimeError, c.run, self.result) + +def main(): + unittest.main() + +if __name__ == '__main__': + main() diff --git a/tests/unit/benchmark/scenarios/storage/test_storperf.py b/tests/unit/benchmark/scenarios/storage/test_storperf.py new file mode 100644 index 000000000..d87ed733c --- /dev/null +++ b/tests/unit/benchmark/scenarios/storage/test_storperf.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# Unittest for yardstick.benchmark.scenarios.storage.storperf.StorPerf + +import mock +import unittest +import requests +import json + +from yardstick.benchmark.scenarios.storage import storperf + + +def mocked_requests_config_post(*args, **kwargs): + class MockResponseConfigPost: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseConfigPost('{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622","stack_created": "false"}', 200) + + +def mocked_requests_config_get(*args, **kwargs): + class MockResponseConfigGet: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseConfigGet('{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622","stack_created": "true"}', 200) + + +def mocked_requests_job_get(*args, **kwargs): + class MockResponseJobGet: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseJobGet('{"_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}', 200) + + +def mocked_requests_job_post(*args, **kwargs): + class MockResponseJobPost: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseJobPost('{"job_id": \ + "d46bfb8c-36f4-4a40-813b-c4b4a437f728"}', 200) + + +def mocked_requests_job_delete(*args, **kwargs): + class MockResponseJobDelete: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseJobDelete('{}', 200) + + +def mocked_requests_delete(*args, **kwargs): + class MockResponseDelete: + def __init__(self, json_data, status_code): + self.json_data = json_data + self.status_code = status_code + + return MockResponseDelete('{}', 200) + + +def mocked_requests_delete_failed(*args, **kwargs): + class MockResponseDeleteFailed: + def __init__(self, json_data, status_code): + self.json_data = json_data + self.status_code = status_code + + if args[0] == "http://172.16.0.137:5000/api/v1.0/configurations": + return MockResponseDeleteFailed('{"message": "Teardown failed"}', 400) + + return MockResponseDeleteFailed('{}', 404) + + +class StorPerfTestCase(unittest.TestCase): + + def setUp(self): + self.ctx = { + 'host': { + 'ip': '172.16.0.137', + 'user': 'cirros', + 'key_filename': "mykey.key" + } + } + + self.result = {} + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post', + side_effect=mocked_requests_config_post) + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get', + side_effect=mocked_requests_config_get) + def test_successful_setup(self, mock_post, mock_get): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + + s.setup() + + self.assertTrue(s.setup_done) + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post', + side_effect=mocked_requests_job_post) + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get', + side_effect=mocked_requests_job_get) + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.delete', + side_effect=mocked_requests_job_delete) + def test_successful_run(self, mock_post, mock_get, mock_delete): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + s.setup_done = True + + sample_output = '{"_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}' + + expected_result = json.loads(sample_output) + + s.run(self.result) + + self.assertEqual(self.result, expected_result) + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.delete', side_effect=mocked_requests_delete) + def test_successful_teardown(self, mock_delete): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + + s.teardown() + + self.assertFalse(s.setup_done) + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.delete', side_effect=mocked_requests_delete_failed) + def test_failed_teardown(self, mock_delete): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + + self.assertRaises(AssertionError, s.teardown(), self.result) + + +def main(): + unittest.main() + +if __name__ == '__main__': + main() diff --git a/tools/dpdk_install.yml b/tools/dpdk_install.yml new file mode 100644 index 000000000..12c83e144 --- /dev/null +++ b/tools/dpdk_install.yml @@ -0,0 +1,124 @@ +heat_template_version: 2015-04-30 + +description: > + Used to run VMs with DPDK pktgen + +parameters: + image: + type: string + description: Name of the image + default: yardstick-wily-server + + timeout: + type: number + description: Timeout in seconds for WaitCondition, depends on your image and environment + default: 900 + + external_net_name: + type: string + description: Name of the external network which management network will connect to + default: admin_floating_net + +resources: + flavor: + type: OS::Nova::Flavor + properties: + ram: 4096 + vcpus: 4 + disk: 4 + + network: + type: OS::Neutron::Net + properties: + name: dpdk_net + + subnet: + type: OS::Neutron::Subnet + properties: + name: dpdk_subnet + ip_version: 4 + cidr: 192.168.0.0/24 + network: { get_resource: network } + + management_router: + type: OS::Neutron::Router + properties: + name: management_router + external_gateway_info: + network: { get_param: external_net_name } + + management_router_interface: + type: OS::Neutron::RouterInterface + properties: + router: { get_resource: management_router } + subnet: { get_resource: subnet } + + floating_ip: + type: OS::Neutron::FloatingIP + properties: + floating_network: { get_param: external_net_name } + + floating_ip_association: + type: OS::Nova::FloatingIPAssociation + properties: + floating_ip: { get_resource: floating_ip } + server_id: {get_resource: dpdk_vm} + + keypair: + type: OS::Nova::KeyPair + properties: + name: yardstick-key + public_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0RkXfW6pksd1cZmXuvXZF/Mlqqq3ahIGcGoULOC97XMpu0vdxMpcUwdjwGqMwEXTVyfHidu0l99bLqOCpSUKCmbWx3ONJ+1kqFx4HwsKEWLiyDYqsuMrDeZT1eFjC5avCoTcrIw2wq5NaBb00lDGagNZOeopaL5YIa4+PizEY23+cir24D67NU21Fg3JE92AIeGlNa4j66L3a+lL0hZq74Dilmp42wm4GsbplRO6KJfyaraowHb1X+TmhCjBgHk6M/OJ9yPAroZyJNcwjMAuuxhAYWRuT3SdbnoUR0RG2VhfDh0qNid7vOqLbhKPeaLLFmzkN+9w3WdCp6LbSYt87 yardstick@yardstick.opnfv.org + + wait_handle: + type: OS::Heat::WaitConditionHandle + + wait_condition: + type: OS::Heat::WaitCondition + properties: + handle: { get_resource: wait_handle } + count: 1 + timeout: { get_param: timeout } + + dpdk_vm: + type: OS::Nova::Server + depends_on: [subnet, keypair, flavor] + properties: + name: { get_param: "OS::stack_name" } + image: { get_param: image } + flavor: { get_resource: flavor } + key_name: {get_resource: keypair} + networks: + - network: { get_resource: network } + config_drive: True + user_data_format : RAW + user_data: + str_replace: + template: | + #!/bin/sh + cat <<'CEOF' > /tmp/dpdk_post_build.sh + export RTE_SDK=/dpdk + export RTE_TARGET=x86_64-native-linuxapp-gcc + cd /dpdk + make install T=x86_64-native-linuxapp-gcc DESTDIR=destdir + modprobe uio + insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko + insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/rte_kni.ko + cd /pktgen-dpdk + make RTE_SDK=/dpdk + echo "PCKTGEN BUILT" + rm -rf /var/lib/cloud/instances + echo "rm succesfull" + ls /dpdk/x86_64-native-linuxapp-gcc/kmod/ + $NOTIFY --data-binary '{"status": "SUCCESS"}' + CEOF + chmod +x /tmp/dpdk_post_build.sh + echo "chmod" + nohup /tmp/dpdk_post_build.sh & + params: + $NOTIFY: { get_attr: ['wait_handle', 'curl_cli'] } + +outputs: + vm_uuid: + description: uuid of the VM + value: { get_attr: [ dpdk_vm, show,id ] } diff --git a/tools/ubuntu-server-cloudimg-dpdk-modify.sh b/tools/ubuntu-server-cloudimg-dpdk-modify.sh new file mode 100755 index 000000000..aa4e252ea --- /dev/null +++ b/tools/ubuntu-server-cloudimg-dpdk-modify.sh @@ -0,0 +1,98 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# installs required packages +# must be run from inside the image (either chrooted or running) + +set -ex + +if [ $# -eq 1 ]; then + nameserver_ip=$1 + + # /etc/resolv.conf is a symbolic link to /run, restore at end + rm /etc/resolv.conf + echo "nameserver $nameserver_ip" > /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf + echo "nameserver 8.8.4.4" >> /etc/resolv.conf +fi + +# iperf3 only available for wily in backports +grep wily /etc/apt/sources.list && \ + echo "deb http://archive.ubuntu.com/ubuntu/ wily-backports main restricted universe multiverse" >> /etc/apt/sources.list + +# Workaround for building on CentOS (apt-get is not working with http sources) +# sed -i 's/http/ftp/' /etc/apt/sources.list + +# Force apt to use ipv4 due to build problems on LF POD. +echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99force-ipv4 + +echo 'GRUB_CMDLINE_LINUX="resume=/dev/sda1 default_hugepagesz=1G hugepagesz=1G hugepages=2 iommu=on iommu=pt intel_iommu=on"' >> /etc/default/grub +echo 'vm.nr_hugepages=1024' >> /etc/sysctl.conf +echo 'huge /mnt/huge hugetlbfs defaults 0 0' >> vi /etc/fstab + +mkdir /mnt/huge +chmod 777 /mnt/huge + +for i in {1..2} +do + touch /etc/network/interfaces.d/eth$i.cfg + chmod 777 /etc/network/interfaces.d/eth$i.cfg + echo "auto eth$i" >> /etc/network/interfaces.d/eth$i.cfg + echo "iface eth$i inet dhcp" >> /etc/network/interfaces.d/eth$i.cfg +done + +# this needs for checking dpdk status, adding interfaces to dpdk, bind, unbind etc.. + +# Add hostname to /etc/hosts. +# Allow console access via pwd +cat <<EOF >/etc/cloud/cloud.cfg.d/10_etc_hosts.cfg +manage_etc_hosts: True +password: RANDOM +chpasswd: { expire: False } +ssh_pwauth: True +EOF + +linuxheadersversion=`echo ls boot/vmlinuz* | cut -d- -f2-` + +apt-get update +apt-get install -y \ + fio \ + gcc \ + git \ + iperf3 \ + linux-tools-common \ + linux-tools-generic \ + lmbench \ + make \ + netperf \ + patch \ + perl \ + rt-tests \ + stress \ + sysstat \ + linux-headers-$linuxheadersversion \ + libpcap-dev \ + lua5.2 + +git clone http://dpdk.org/git/dpdk +git clone http://dpdk.org/git/apps/pktgen-dpdk + +git clone https://github.com/kdlucas/byte-unixbench.git /opt/tempT +make --directory /opt/tempT/UnixBench/ + +git clone https://github.com/beefyamoeba5/ramspeed.git /opt/tempT/RAMspeed +cd /opt/tempT/RAMspeed/ramspeed-2.6.0 +mkdir temp +bash build.sh + +git clone https://github.com/beefyamoeba5/cachestat.git /opt/tempT/Cachestat + +# restore symlink +ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf diff --git a/tools/yardstick-img-dpdk-finalize.sh b/tools/yardstick-img-dpdk-finalize.sh new file mode 100644 index 000000000..7a450e269 --- /dev/null +++ b/tools/yardstick-img-dpdk-finalize.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# installs dpdk and pktgen packages on modified image + +# PREREQUISITES +# modified image (yardstick-wily-server) must be uploaded to OpenStack +# heat must be installed: apt-get install python-heatclient, python-glanceclient, python-nova +# must have a public yardstick-key uploaded in openstack +# must have a proper flavor for the image (i.e. m1.small) + + +stackname="yardstick-modify-stack" +template=dpdk_install.yml +new_image_name="yardstick-image-pktgen-ready" + +openstack stack create $stackname -f yaml -t $template +progress="WARMING_UP" + +while [ "$progress" != "CREATE_COMPLETE" ] +do + sleep 10 + echo "check stack status......." + show_output=$(openstack stack show $stackname) + progress=$(echo $show_output | sed 's/^.*stack_status . \([^ ]*\).*$/\1/') + echo "$progress" + if [ "$progress" == "CREATE_FAILED" ];then + echo "create $stackname failed" + exit 1 + fi +done + +# workaround: Without wait time, the file size of pktgen is zero in the snapshot. +sleep 60 + +status=$(nova image-create --poll $stackname $new_image_name) +if [[ "$status" =~ "Finished" ]];then + echo "$new_image_name finished" +fi + +nova delete $stackname +sleep 10 +openstack stack delete --yes $stackname diff --git a/tools/yardstick-img-dpdk-modify b/tools/yardstick-img-dpdk-modify new file mode 100644 index 000000000..ec2672d27 --- /dev/null +++ b/tools/yardstick-img-dpdk-modify @@ -0,0 +1,162 @@ +#!/bin/bash + +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# yardstick-img-dpdk-modify - download and modify a Ubuntu cloud image +# +# The actual customization is done by a script passed with an absolute path as +# the only single argument. The command needs to be invoked as sudo +# +# Example invocation: +# yardstick-img-dpdk-modify /home/yardstick/tools/ubuntu-server-cloudimg-dpdk-modify.sh +# +# Warning: the script will create files by default in: +# /tmp/workspace/yardstick +# the files will be owned by root! +# +# TODO: image resize is needed if the base image is too small +# + +set -e +set -x + +die() { + echo "error: $1" >&2 + exit 1 +} + +test $# -eq 1 || die "no image specific script as argument" +test $(id -u) -eq 0 || die "should invoke using sudo" + +cmd=$1 +test -x $cmd +mountdir="/mnt/yardstick" + +workspace=${WORKSPACE:-"/tmp/workspace/yardstick"} +host=${HOST:-"cloud-images.ubuntu.com"} +release=${RELEASE:-"wily"} +image_path="${release}/current/${release}-server-cloudimg-amd64-disk1.img" +image_url=${IMAGE_URL:-"https://${host}/${image_path}"} +md5sums_path="${release}/current/MD5SUMS" +md5sums_url=${MD5SUMS_URL:-"https://${host}/${md5sums_path}"} + +imgfile="${workspace}/yardstick-${release}-server" +raw_imgfile="${workspace}/yardstick-${release}-server.raw" +filename=$(basename $image_url) + +# download and checksum base image, conditionally if local copy is outdated +download() { + test -d $workspace || mkdir -p $workspace + cd $workspace + rm -f MD5SUMS # always download the checksum file to a detect stale image + wget $md5sums_url + test -e $filename || wget -nc $image_url + grep $filename MD5SUMS | md5sum -c || + if [ $? -ne 0 ]; then + rm $filename + wget -nc $image_url + grep $filename MD5SUMS | md5sum -c + fi + qemu-img convert $filename $raw_imgfile + cd - +} + +# mount image +setup() { + mkdir -p $mountdir + + for i in $(seq 0 9); do + [ -a /dev/loop$i ] || mknod -m 660 /dev/loop$i b 7 $i + done + + loopdevice=$(kpartx -l $raw_imgfile | head -1 | cut -f1 -d ' ') + + kpartx -a $raw_imgfile + + mount /dev/mapper/$loopdevice $mountdir + mount -t proc none $mountdir/proc + + echo $loopdevice + + sudo resize2fs /dev/mapper/$loopdevice + + cp $cmd $mountdir/$(basename $cmd) +} + +# modify image running a script using in a chrooted environment +modify() { + # resolv.conf does not exist in base image, pass nameserver value from host + nameserver_ip=$(grep -m 1 '^nameserver' \ + /etc/resolv.conf | awk '{ print $2 '}) + + # prevent init scripts from running during install + echo $'#!/bin/sh\nexit 101' >$mountdir/usr/sbin/policy-rc.d + chmod a+x $mountdir/usr/sbin/policy-rc.d + + chroot $mountdir /$(basename $cmd) $nameserver_ip + + rm -rf $mountdir/usr/sbin/policy-rc.d + + umount -f $mountdir/proc + umount $mountdir + + qemu-img convert -c -o compat=0.10 -O qcow2 $raw_imgfile $imgfile +# qemu-img convert -O vmdk $raw_imgfile $imgfile + + if dmsetup table | grep $loopdevice; then + dmsetup clear $loopdevice || true + fi +} + +# cleanup (umount) the image +cleanup() { + # designed to be idempotent + mount | grep $mountdir/proc && umount $mountdir/proc + mount | grep $mountdir && umount $mountdir + if [ -f $raw_imgfile ]; then + kpartx -dv $raw_imgfile || true + fi + rm -f $raw_imgfile + rm -rf $mountdir +} + +exitcode="" +error_trap() +{ + local rc=$? + + set +e + + if [ -z "$exitcode" ]; then + exitcode=$rc + fi + + cleanup + + echo "Image build failed with $exitcode" + + exit $exitcode +} + +main() { + cleanup + + trap "error_trap" EXIT SIGTERM + + download + setup + modify + trap - EXIT SIGTERM + cleanup + + echo "the modified image is found here: $imgfile" +} + +main diff --git a/yardstick/benchmark/contexts/model.py b/yardstick/benchmark/contexts/model.py index 2cf31f6ea..d31f4afc0 100644 --- a/yardstick/benchmark/contexts/model.py +++ b/yardstick/benchmark/contexts/model.py @@ -201,12 +201,12 @@ class Server(Object): port_name, network.router.stack_if_name, self.secgroup_name) - self.floating_ip_assoc["stack_name"] = \ - server_name + "-fip-assoc" - template.add_floating_ip_association( - self.floating_ip_assoc["stack_name"], - self.floating_ip["stack_name"], - port_name) + self.floating_ip_assoc["stack_name"] = \ + server_name + "-fip-assoc" + template.add_floating_ip_association( + self.floating_ip_assoc["stack_name"], + self.floating_ip["stack_name"], + port_name) template.add_server(server_name, self.image, self.flavor, ports=port_name_list, diff --git a/yardstick/benchmark/scenarios/availability/attacker_conf.yaml b/yardstick/benchmark/scenarios/availability/attacker_conf.yaml index e5d1b9f0b..d37d66964 100644 --- a/yardstick/benchmark/scenarios/availability/attacker_conf.yaml +++ b/yardstick/benchmark/scenarios/availability/attacker_conf.yaml @@ -15,3 +15,15 @@ bare-metal-down: stop-service: inject_script: ha_tools/stop_service.bash recovery_script: ha_tools/start_service.bash + +close-interface: + inject_script: ha_tools/network/close_interface.bash + recovery_script: ha_tools/network/open_interface.bash + +stress-cpu: + inject_script: ha_tools/node/stress_cpu.bash + recovery_script: ha_tools/node/release_cpu.bash + +block-io: + inject_script: ha_tools/disk/block_io.bash + recovery_script: ha_tools/disk/recovery_disk_io.bash
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/disk/block_io.bash b/yardstick/benchmark/scenarios/availability/ha_tools/disk/block_io.bash new file mode 100644 index 000000000..2ccf7eeab --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/disk/block_io.bash @@ -0,0 +1,14 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# make a disk IO jam + +sudo dd if=/dev/zero of=/test.dbf bs=8k count=30000000 & diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/disk/recovery_disk_io.bash b/yardstick/benchmark/scenarios/availability/ha_tools/disk/recovery_disk_io.bash new file mode 100644 index 000000000..dbe8519ba --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/disk/recovery_disk_io.bash @@ -0,0 +1,15 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# recover a node from disk io block status + +sudo kill `pidof dd` + diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/network/close_interface.bash b/yardstick/benchmark/scenarios/availability/ha_tools/network/close_interface.bash new file mode 100644 index 000000000..02c8d4736 --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/network/close_interface.bash @@ -0,0 +1,15 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# close a network interface. +# parameter: $1 - interface-name + +ifconfig $1 down
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/network/open_interface.bash b/yardstick/benchmark/scenarios/availability/ha_tools/network/open_interface.bash new file mode 100644 index 000000000..953d5d30d --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/network/open_interface.bash @@ -0,0 +1,15 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# open a network interface. +# parameter: $1 - interfaced-name + +ifconfig $1 up
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/node/release_cpu.bash b/yardstick/benchmark/scenarios/availability/ha_tools/node/release_cpu.bash new file mode 100644 index 000000000..8e25fae5c --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/node/release_cpu.bash @@ -0,0 +1,14 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# release CPU stress. + +ps -ef|grep "dd if=/dev/zero of=/dev/null"|awk '{print$2}'|xargs kill -9
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/node/stress_cpu.bash b/yardstick/benchmark/scenarios/availability/ha_tools/node/stress_cpu.bash new file mode 100644 index 000000000..30aa70748 --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/node/stress_cpu.bash @@ -0,0 +1,14 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# stress CPU usage to 100%. + +for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash new file mode 100644 index 000000000..5c2d6d70e --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash @@ -0,0 +1,19 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# create flavor +# parameter: $1-name $2-id $3-ram $4-disk $5-vcpus + +set -e + +source /root/openrc + +nova flavor-create $1 $2 $3 $4 $5 diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash new file mode 100644 index 000000000..67d0c902e --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash @@ -0,0 +1,19 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# delete a flavor +# parameter: $1 - flavor name/id + +set -e + +source /root/openrc + +nova flavor-delete $1
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash new file mode 100644 index 000000000..0b1a9f056 --- /dev/null +++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash @@ -0,0 +1,18 @@ +#!/bin/bash + +############################################################################## +# (c) OPNFV, Yin Kanglin and others. +# 14_ykl@tongji.edu.cn +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# show all of the flavors + +set -e + +source /root/openrc + +nova flavor-list
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/operation_conf.yaml b/yardstick/benchmark/scenarios/availability/operation_conf.yaml index 1e6746302..309a03de8 100644 --- a/yardstick/benchmark/scenarios/availability/operation_conf.yaml +++ b/yardstick/benchmark/scenarios/availability/operation_conf.yaml @@ -14,3 +14,7 @@ swift-upload-file: swift-download-file: action_script: ha_tools/swift/download.bash rollback_script: ha_tools/file/remove_file.bash + +nova-create-flavor: + action_script: ha_tools/nova/create_flavor.bash + rollback_script: ha_tools/nova/delete_flavor.bash
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml b/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml index 638c39a6e..faa4eb57d 100644 --- a/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml +++ b/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml @@ -8,4 +8,6 @@ process-checker: service-checker: verify_script: ha_tools/check_service.bash nova-instance-checker: - verify_script: ha_tools/nova/show_instances.bash
\ No newline at end of file + verify_script: ha_tools/nova/show_instances.bash +nova-flavor-checker: + verify_script: ha_tools/nova/show_flavors.bash
\ No newline at end of file diff --git a/yardstick/benchmark/scenarios/storage/storagecapacity.bash b/yardstick/benchmark/scenarios/storage/storagecapacity.bash new file mode 100644 index 000000000..6ed4b2811 --- /dev/null +++ b/yardstick/benchmark/scenarios/storage/storagecapacity.bash @@ -0,0 +1,69 @@ +#!/bin/bash + +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# Measure storage capacity and scale of a host + +set -e +OUTPUT_FILE=/tmp/storagecapacity-out.log + +# run disk_size test +run_disk_size() +{ + fdisk -l | grep '^Disk.*bytes$' | awk -F [:,\ ] '{print $2,$7}' > $OUTPUT_FILE +} + +# write the disk size to stdout in json format +output_disk_size() +{ + DEVICENUM=`awk 'END{print NR}' $OUTPUT_FILE` + DISKSIZE=`awk 'BEGIN{cnt=0;} {cnt=cnt+$2} END{print cnt}' $OUTPUT_FILE` + echo -e "{\ + \"Number of devices\":\"$DEVICENUM\", \ + \"Total disk size\":\"$DISKSIZE bytes\" \ + }" +} + +# run block_size test +run_block_size() +{ + echo -n "" > $OUTPUT_FILE + blkdevices=`fdisk -l | grep '^Disk.*bytes$' | awk -F [:,\ ] '{print $2}'` + blkdevices=($blkdevices) + for bd in "${blkdevices[@]}";do + blk_size=`blockdev --getbsz $bd` + echo '"'$bd'" '$blk_size >> $OUTPUT_FILE + done +} + +# write the block size to stdout in json format +output_block_size() +{ + BLK_SIZE_STR=`awk 'BEGIN{r="{";} {r=r""$1":"$2","} END{print r}' $OUTPUT_FILE` + BLK_SIZE_STR=${BLK_SIZE_STR%,}"}" + echo $BLK_SIZE_STR +} + +main() +{ + test_type=$1 + case $test_type in + "disk_size" ) + run_disk_size + output_disk_size + ;; + "block_size" ) + run_block_size + output_block_size + ;; + esac +} + +main $1 diff --git a/yardstick/benchmark/scenarios/storage/storagecapacity.py b/yardstick/benchmark/scenarios/storage/storagecapacity.py new file mode 100644 index 000000000..49e3a0339 --- /dev/null +++ b/yardstick/benchmark/scenarios/storage/storagecapacity.py @@ -0,0 +1,133 @@ +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd and other. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +import pkg_resources +import logging +import json + +import yardstick.ssh as ssh +from yardstick.benchmark.scenarios import base + +LOG = logging.getLogger(__name__) + + +class StorageCapacity(base.Scenario): + """Measure storage capacity and scale. + + Parameters: + test_type - specified whether to measure. + valid test type are disk_size, block_size, disk_utilization + type: string + unit: na + default: "disk_size" + interval - specified how ofter to stat disk utilization + type: int + unit: seconds + default: 1 + count - specified how many times to stat disk utilization + type: int + unit: na + default: 15 + + This scenario reads hardware specification, + disk size, block size and disk utilization. + """ + __scenario_type__ = "StorageCapacity" + TARGET_SCRIPT = "storagecapacity.bash" + + def __init__(self, scenario_cfg, context_cfg): + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg + self.setup_done = False + + def setup(self): + """scenario setup""" + self.target_script = pkg_resources.resource_filename( + "yardstick.benchmark.scenarios.storage", + StorageCapacity.TARGET_SCRIPT) + host = self.context_cfg['host'] + if host is None: + raise RuntimeError('No right node.Please check the configuration') + host_user = host.get('user', 'ubuntu') + host_ip = host.get('ip', None) + host_pwd = host.get('password', 'root') + LOG.debug("user:%s, host:%s", host_user, host_ip) + + self.client = ssh.SSH(host_user, host_ip, password=host_pwd) + self.client.wait(timeout=600) + + # copy script to host + self.client.run("cat > ~/storagecapacity.sh", + stdin=open(self.target_script, 'rb')) + + self.setup_done = True + + def _get_disk_utilization(self): + """Get disk utilization using iostat.""" + options = self.scenario_cfg["options"] + interval = options.get('interval', 1) + count = options.get('count', 15) + + cmd = "sudo iostat -dx %d %d | awk 'NF==14 && \ + $1 !~ /Device/ {print $1,$14}'" % (interval, count) + + LOG.debug("Executing command: %s", cmd) + status, stdout, stderr = self.client.execute(cmd) + if status: + raise RuntimeError(stderr) + + device_name_arr = [] + min_util_arr = [] + max_util_arr = [] + avg_util_arr = [] + for row in stdout.split('\n'): + kv = row.split(' ') + if len(kv) != 2: + continue + name = kv[0] + util = float(kv[1]) + if name not in device_name_arr: + device_name_arr.append(name) + min_util_arr.append(util) + max_util_arr.append(util) + avg_util_arr.append(util) + else: + i = device_name_arr.index(name) + min_util_arr[i] = min_util_arr[i] \ + if min_util_arr[i] < util else util + max_util_arr[i] = max_util_arr[i] \ + if max_util_arr[i] > util else util + avg_util_arr[i] += util + r = {} + for i in range(len(device_name_arr)): + r[device_name_arr[i]] = {"min_util": min_util_arr[i], + "max_util": max_util_arr[i], + "avg_util": avg_util_arr[i]/count} + return r + + def run(self, result): + """execute the benchmark""" + + if not self.setup_done: + self.setup() + + options = self.scenario_cfg["options"] + test_type = options.get('test_type', 'disk_size') + + if test_type == "disk_utilization": + r = self._get_disk_utilization() + result.update(r) + else: + cmd = "sudo bash storagecapacity.sh " + test_type + + LOG.debug("Executing command: %s", cmd) + status, stdout, stderr = self.client.execute(cmd) + if status: + raise RuntimeError(stderr) + + result.update(json.loads(stdout)) diff --git a/yardstick/benchmark/scenarios/storage/storperf.py b/yardstick/benchmark/scenarios/storage/storperf.py new file mode 100644 index 000000000..d39c23aa2 --- /dev/null +++ b/yardstick/benchmark/scenarios/storage/storperf.py @@ -0,0 +1,208 @@ +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +import logging +import json +import requests +import time + +from yardstick.benchmark.scenarios import base + +LOG = logging.getLogger(__name__) + + +class StorPerf(base.Scenario): + """Execute StorPerf benchmark. + Once the StorPerf container has been started and the ReST API exposed, + you can interact directly with it using the ReST API. StorPerf comes with a + Swagger interface that is accessible through the exposed port at: + http://StorPerf:5000/swagger/index.html + + Command line options: + target = [device or path] (Optional): + The path to either an attached storage device (/dev/vdb, etc) or a + directory path (/opt/storperf) that will be used to execute the performance + test. In the case of a device, the entire device will be used. + If not specified, the current directory will be used. + + workload = [workload module] (Optional): + If not specified, the default is to run all workloads. + The workload types are: + rs: 100% Read, sequential data + ws: 100% Write, sequential data + rr: 100% Read, random access + wr: 100% Write, random access + rw: 70% Read / 30% write, random access + + nossd (Optional): + Do not perform SSD style preconditioning. + + nowarm (Optional): + Do not perform a warmup prior to measurements. + + report = [job_id] (Optional): + Query the status of the supplied job_id and report on metrics. + If a workload is supplied, will report on only that subset. + + """ + __scenario_type__ = "StorPerf" + + def __init__(self, scenario_cfg, context_cfg): + """Scenario construction.""" + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg + self.options = self.scenario_cfg["options"] + + self.target = self.options.get("StorPerf_ip", None) + self.query_interval = self.options.get("query_interval", 10) + # Maximum allowed job time + self.timeout = self.options.get('timeout', 3600) + + self.setup_done = False + self.job_completed = False + + def _query_setup_state(self): + """Query the stack status.""" + LOG.info("Querying the stack state...") + setup_query = requests.get('http://%s:5000/api/v1.0/configurations' + % self.target) + + setup_query_content = json.loads(setup_query.content) + if setup_query_content["stack_created"]: + self.setup_done = True + LOG.debug("stack_created: %s" + % setup_query_content["stack_created"]) + + def setup(self): + """Set the configuration.""" + env_args = {} + env_args_payload_list = ["agent_count", "public_network", + "agent_image", "volume_size"] + + for env_argument in env_args_payload_list: + if env_argument in self.options: + env_args[env_argument] = self.options[env_argument] + + LOG.info("Creating a stack on node %s with parameters %s" % + (self.target, env_args)) + setup_res = requests.post('http://%s:5000/api/v1.0/configurations' + % self.target, json=env_args) + + setup_res_content = json.loads(setup_res.content) + + if setup_res.status_code == 400: + raise RuntimeError("Failed to create a stack, error message:", + setup_res_content["message"]) + elif setup_res.status_code == 200: + LOG.info("stack_id: %s" % setup_res_content["stack_id"]) + + while not self.setup_done: + self._query_setup_state() + time.sleep(self.query_interval) + + # TODO: Support Storperf job status. + + # def _query_job_state(self, job_id): + # """Query the status of the supplied job_id and report on metrics""" + # LOG.info("Fetching report for %s..." % job_id) + # report_res = requests.get('http://%s:5000/api/v1.0/jobs?id=%s' % + # (self.target, job_id)) + + # report_res_content = json.loads(report_res.content) + + # if report_res.status_code == 400: + # raise RuntimeError("Failed to fetch report, error message:", + # report_res_content["message"]) + # else: + # job_status = report_res_content["status"] + + # LOG.debug("Job is: %s..." % job_status) + # if job_status == "completed": + # self.job_completed = True + + # TODO: Support using StorPerf ReST API to read Job ETA. + + # if job_status == "completed": + # self.job_completed = True + # ETA = 0 + # elif job_status == "running": + # ETA = report_res_content['time'] + # + # return ETA + + def run(self, result): + """Execute StorPerf benchmark""" + if not self.setup_done: + self.setup() + + job_args = {} + job_args_payload_list = ["block_sizes", "queue_depths", "deadline", + "target", "nossd", "nowarm", "workload"] + + for job_argument in job_args_payload_list: + if job_argument in self.options: + job_args[job_argument] = self.options[job_argument] + + LOG.info("Starting a job with parameters %s" % job_args) + job_res = requests.post('http://%s:5000/api/v1.0/jobs' % self.target, + json=job_args) + + job_res_content = json.loads(job_res.content) + + if job_res.status_code == 400: + raise RuntimeError("Failed to start a job, error message:", + job_res_content["message"]) + elif job_res.status_code == 200: + job_id = job_res_content["job_id"] + LOG.info("Started job id: %s..." % job_id) + + time.sleep(self.timeout) + terminate_res = requests.delete('http://%s:5000/api/v1.0/jobs' % + self.target) + + if terminate_res.status_code == 400: + terminate_res_content = json.loads(terminate_res.content) + raise RuntimeError("Failed to start a job, error message:", + terminate_res_content["message"]) + + # TODO: Support Storperf job status. + + # while not self.job_completed: + # self._query_job_state(job_id) + # time.sleep(self.query_interval) + + # TODO: Support using ETA to polls for completion. + # Read ETA, next poll in 1/2 ETA time slot. + # If ETA is greater than the maximum allowed job time, + # then terminate job immediately. + + # while not self.job_completed: + # esti_time = self._query_state(job_id) + # if esti_time > self.timeout: + # terminate_res = requests.delete('http://%s:5000/api/v1.0 + # /jobs' % self.target) + # else: + # time.sleep(int(est_time)/2) + + result_res = requests.get('http://%s:5000/api/v1.0/jobs?id=%s' % + (self.target, job_id)) + result_res_content = json.loads(result_res.content) + + result.update(result_res_content) + + def teardown(self): + """Deletes the agent configuration and the stack""" + teardown_res = requests.delete('http://%s:5000/api/v1.0/\ + configurations' % self.target) + + if teardown_res.status_code == 400: + teardown_res_content = json.loads(teardown_res.content) + raise RuntimeError("Failed to reset environment, error message:", + teardown_res_content['message']) + + self.setup_done = False diff --git a/yardstick/cmd/commands/plugin.py b/yardstick/cmd/commands/plugin.py index 8e3ddb5a5..0ab24fcfc 100644 --- a/yardstick/cmd/commands/plugin.py +++ b/yardstick/cmd/commands/plugin.py @@ -9,6 +9,7 @@ """ Handler for yardstick command 'plugin' """ +import os import sys import yaml import time @@ -80,12 +81,20 @@ class PluginCommands(object): deployment_user = deployment.get("user") deployment_ip = deployment.get("ip") - deployment_password = deployment.get("password") - LOG.debug("user:%s, host:%s", deployment_user, deployment_ip) - self.client = ssh.SSH(deployment_user, deployment_ip, - password=deployment_password) - self.client.wait(timeout=600) + + if deployment_ip == "local": + installer_ip = os.environ.get("INSTALLER_IP", None) + + LOG.debug("user:%s, host:%s", deployment_user, installer_ip) + self.client = ssh.SSH(deployment_user, installer_ip, + password=deployment_password) + self.client.wait(timeout=600) + else: + LOG.debug("user:%s, host:%s", deployment_user, deployment_ip) + self.client = ssh.SSH(deployment_user, deployment_ip, + password=deployment_password) + self.client.wait(timeout=600) # copy script to host cmd = "cat > ~/%s.sh" % plugin_name @@ -99,12 +108,20 @@ class PluginCommands(object): deployment_user = deployment.get("user") deployment_ip = deployment.get("ip") - deployment_password = deployment.get("password") - LOG.debug("user:%s, host:%s", deployment_user, deployment_ip) - self.client = ssh.SSH(deployment_user, deployment_ip, - password=deployment_password) - self.client.wait(timeout=600) + + if deployment_ip == "local": + installer_ip = os.environ.get("INSTALLER_IP", None) + + LOG.debug("user:%s, host:%s", deployment_user, installer_ip) + self.client = ssh.SSH(deployment_user, installer_ip, + password=deployment_password) + self.client.wait(timeout=600) + else: + LOG.debug("user:%s, host:%s", deployment_user, deployment_ip) + self.client = ssh.SSH(deployment_user, deployment_ip, + password=deployment_password) + self.client.wait(timeout=600) # copy script to host cmd = "cat > ~/%s.sh" % plugin_name diff --git a/yardstick/cmd/commands/task.py b/yardstick/cmd/commands/task.py index 18b72e726..b38e084ac 100644 --- a/yardstick/cmd/commands/task.py +++ b/yardstick/cmd/commands/task.py @@ -206,7 +206,7 @@ class TaskParser(object): test_cases_dir += os.sep cur_pod = os.environ.get('NODE_NAME', None) - cur_installer = os.environ.get('INSTALL_TYPE', None) + cur_installer = os.environ.get('INSTALLER_TYPE', None) valid_task_files = [] valid_task_args = [] @@ -275,10 +275,16 @@ class TaskParser(object): for cfg_attrs in context_cfgs: context_type = cfg_attrs.get("type", "Heat") if "Heat" == context_type and "networks" in cfg_attrs: + # bugfix: if there are more than one network, + # only add "external_network" on first one. + # the name of netwrok should follow this rule: + # test, test2, test3 ... + # sort network with the length of network's name + sorted_networks = sorted(cfg_attrs["networks"].keys()) # config external_network based on env var - for _, attrs in cfg_attrs["networks"].items(): - attrs["external_network"] = os.environ.get( - 'EXTERNAL_NETWORK', 'net04_ext') + cfg_attrs["networks"][sorted_networks[0]]["external_network"] \ + = os.environ.get("EXTERNAL_NETWORK", "net04_ext") + context = Context.get(context_type) context.init(cfg_attrs) diff --git a/yardstick/resources/script/install/storperf.bash b/yardstick/resources/scripts/install/storperf.bash index 9bbec7206..9bbec7206 100644 --- a/yardstick/resources/script/install/storperf.bash +++ b/yardstick/resources/scripts/install/storperf.bash diff --git a/yardstick/resources/script/remove/storperf.bash b/yardstick/resources/scripts/remove/storperf.bash index a8eb51c89..a8eb51c89 100644 --- a/yardstick/resources/script/remove/storperf.bash +++ b/yardstick/resources/scripts/remove/storperf.bash |