Moon testcase bug fix 77/50277/4
authorAce Lee <liyin11@huawei.com>
Tue, 9 Jan 2018 03:19:09 +0000 (03:19 +0000)
committerliyin <liyin11@huawei.com>
Mon, 26 Feb 2018 08:58:07 +0000 (08:58 +0000)
JIRA: BOTTLENECK-220

The JIRA ticket is to suit moon version 4.3.
There are some bugs to fix.

Change-Id: Idf8b9a2b4dea6508738283e76457b8d1d25ceae9
Signed-off-by: Ace Lee <liyin11@huawei.com>
14 files changed:
testsuites/posca/testcase_cfg/posca_feature_moon_resources.yaml
testsuites/posca/testcase_cfg/posca_feature_moon_tenants.yaml
testsuites/posca/testcase_dashboard/posca_feature_moon.py [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_moon_resources.py [new file with mode: 0644]
testsuites/posca/testcase_dashboard/posca_moon_tenants.py [new file with mode: 0644]
testsuites/posca/testcase_script/posca_feature_moon_resources.py
testsuites/posca/testcase_script/posca_feature_moon_tenants.py
utils/env_prepare/moon_prepare.bash [new file with mode: 0644]
utils/env_prepare/moon_prepare.py [new file with mode: 0644]

index d6b325f..bbf65ba 100644 (file)
@@ -11,20 +11,27 @@ load_manager:
   scenarios:
     tool: https request
     # info that the cpus and memes have the same number of data.
+    pdp_name: pdp
+    policy_name: "MLS Policy example"
+    model_name: MLS
     tenants: 1,5,10,20
+    subject_number: 10
+    object_number: 10
+    timeout: 0.2
 
   runners:
     stack_create: yardstick
     Debug: False
     yardstick_test_dir: "samples"
-    yardstick_testcase: "bottlenecks_moon_resources"
-
-  runner_exta:
-    # info this section is for yardstick do some exta env prepare.
-    installation_method: yardstick
-    installation_type: testpmd
+    yardstick_testcase: "moon_resource"
 
 contexts:
   # info that dashboard if have data, we will create the data dashboard.
   dashboard: "Bottlenecks-ELK"
-  yardstick: "Bottlenecks-yardstick"
\ No newline at end of file
+  yardstick: "Bottlenecks-yardstick"
+  moon_monitoring: True
+  moon_environment:
+    ip: "192.168.37.205"
+    user: "root"
+    password: "root"
+    consul_port: 30005
index 3b621a9..7feb6e4 100644 (file)
@@ -11,25 +11,30 @@ load_manager:
   scenarios:
     tool: https request
     # info that the cpus and memes have the same number of data.
-    resources: 20
-    initial: 0
-    threshhold: 5
-    timeout: 30
+    pdp_name: pdp
+    policy_name: "MLS Policy example"
+    model_name: MLS
+    subject_number: 20
+    object_number: 20
+    timeout: 0.003
+    initial_tenants: 0
+    steps_tenants: 1
+    tolerate_time: 20
     SLA: 5
 
-
   runners:
     stack_create: yardstick
     Debug: False
     yardstick_test_dir: "samples"
-    yardstick_testcase: "bottlenecks_moon_tenants"
-
-  runner_exta:
-    # info this section is for yardstick do some exta env prepare.
-    installation_method: yardstick
-    installation_type: testpmd
+    yardstick_testcase: "moon_tenant"
 
 contexts:
   # info that dashboard if have data, we will create the data dashboard.
   dashboard: "Bottlenecks-ELK"
-  yardstick: "Bottlenecks-yardstick"
\ No newline at end of file
+  yardstick: "Bottlenecks-yardstick"
+  moon_monitoring: True
+  moon_environment:
+    ip: "192.168.37.205"
+    user: "root"
+    password: "root"
+    consul_port: 30005
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon.py b/testsuites/posca/testcase_dashboard/posca_feature_moon.py
new file mode 100644 (file)
index 0000000..6819ea8
--- /dev/null
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+'''This file realize a function of creating dashboard of stress ping test'''
+import ConfigParser
+from elasticsearch import Elasticsearch
+import json
+import os
+import utils.logger as log
+from utils.parser import Parser as conf_parser
+
+LOG = log.Logger(__name__).getLogger()
+config = ConfigParser.ConfigParser()
+es = Elasticsearch()
+dashboard_path = os.path.join(conf_parser.test_dir,
+                              "posca",
+                              "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
+
+
+def dashboard_send_data(runner_config, test_data):
+    global es
+    print runner_config
+    es_ip = runner_config['dashboard_ip'].split(':')
+    es = Elasticsearch([{'host': es_ip[0]}])
+    print test_data["test_body"]
+    res = es.index(index="bottlenecks",
+                   doc_type=test_data["testcase"],
+                   body=test_data["test_body"][0])
+    if res['created'] == "False":
+        LOG.error("date send to kibana have errors ", test_data["data_body"])
+
+
+def posca_moon_init(runner_config):
+    global es
+    es_ip = runner_config['dashboard_ip'].split(':')
+    es = Elasticsearch([{'host': es_ip[0]}])
+    # Create bottlenecks index
+    with open(dashboard_dir + 'posca_feature_moon_index_pattern.json')\
+            as index_pattern:
+        doc = json.load(index_pattern)
+    res = es.index(
+        index=".kibana",
+        doc_type="index-pattern",
+        id="bottlenecks",
+        body=doc)
+    if res['created'] == "True":
+        LOG.info("bottlenecks index-pattern has created")
+    else:
+        LOG.info("bottlenecks index-pattern has existed")
+
+    with open(dashboard_dir + 'posca_system_bandwidth_config.json')\
+            as index_config:
+        doc = json.load(index_config)
+    res = es.index(index=".kibana", doc_type="config", id="4.6.1", body=doc)
+    if res['created'] == "True":
+        LOG.info("bottlenecks config has created")
+    else:
+        LOG.info("bottlenecks config has existed")
+
+    # Configure discover panel
+    with open(dashboard_dir + 'posca_feature_moon_discover.json')\
+            as index_discover:
+        doc = json.load(index_discover)
+    res = es.index(
+        index=".kibana",
+        doc_type="search",
+        id="moon",
+        body=doc)
+    if res['created'] == "True":
+        LOG.info("moon testcase search has created")
+    else:
+        LOG.info("moon testcase search has existed")
+
+    # Create testing data in line graph
+    with open(dashboard_dir + 'posca_feature_moon_resources_histogram.json')\
+            as line_data:
+        doc = json.load(line_data)
+    res = es.index(
+        index=".kibana",
+        doc_type="visualization",
+        id="resources",
+        body=doc)
+    if res['created'] == "True":
+        LOG.info("moon resources visualization has created")
+    else:
+        LOG.info("moon resources visualization has existed")
+
+    # Create comparison results in line chart
+    with open(dashboard_dir + 'posca_feature_moon_tenants_histogram.json')\
+            as line_char:
+        doc = json.load(line_char)
+    res = es.index(
+        index=".kibana",
+        doc_type="visualization",
+        id="tenants",
+        body=doc)
+    if res['created'] == "True":
+        LOG.info("moon tenants visualization has created")
+    else:
+        LOG.info("moon tenants visualization has existed")
+
+    # Create dashboard
+    with open(dashboard_dir + 'posca_feature_moon_dashboard.json')\
+            as dashboard:
+        doc = json.load(dashboard)
+    res = es.index(
+        index=".kibana",
+        doc_type="dashboard",
+        id="moon",
+        body=doc)
+    if res['created'] == "True":
+        LOG.info("moon testcases dashboard has created")
+    else:
+        LOG.info("moon testcases dashboard has existed")
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json
new file mode 100644 (file)
index 0000000..53a4a75
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "title": "moon",
+    "hits": 0,
+    "description": "",
+    "panelsJSON": "[{\"id\":\"resources\",\"type\":\"visualization\",\"panelIndex\":1,\"size_x\":8,\"size_y\":7,\"col\":1,\"row\":1},{\"id\":\"tenants\",\"type\":\"visualization\",\"panelIndex\":2,\"size_x\":3,\"size_y\":7,\"col\":9,\"row\":1}]",
+    "optionsJSON": "{\"darkTheme\":false}",
+    "uiStateJSON": "{}",
+    "version": 1,
+    "timeRestore": false,
+    "kibanaSavedObjectMeta": {
+        "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}}}]}"
+    }
+}
\ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json
new file mode 100644 (file)
index 0000000..2bff871
--- /dev/null
@@ -0,0 +1,4 @@
+{
+    "title": "bottlenecks",
+    "fields": "[{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"tenant_max\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"max_user\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"tenant_number\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]"
+}
\ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json
new file mode 100644 (file)
index 0000000..c8977a7
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "title": "resources",
+    "visState": "{\"title\":\"New Visualization\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"max_user\"}},{\"id\":\"2\",\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"tenant_number\",\"size\":5,\"order\":\"asc\",\"orderBy\":\"_term\"}}],\"listeners\":{}}",
+    "uiStateJSON": "{}",
+    "description": "",
+    "savedSearchId": "moon",
+    "version": 1,
+    "kibanaSavedObjectMeta": {
+        "searchSourceJSON": "{\"filter\":[]}"
+    }
+}
\ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json
new file mode 100644 (file)
index 0000000..03360f8
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    "_index": ".kibana",
+    "_type": "search",
+    "_id": "tenants",
+    "_version": 1,
+    "found": true,
+    "_source": {
+        "title": "tenants",
+        "description": "",
+        "hits": 0,
+        "columns": [
+            "_source"
+        ],
+        "sort": [
+            "_score",
+            "desc"
+        ],
+        "version": 1,
+        "kibanaSavedObjectMeta": {
+            "searchSourceJSON": "{\"index\":\"bottlenecks\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"_type:posca_factor_moon_tenants\",\"analyze_wildcard\":true}}}"
+        }
+    }
+}
\ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json
new file mode 100644 (file)
index 0000000..a731acf
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "title": "tenants",
+    "visState": "{\"title\":\"New Visualization\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"tenant_max\"}}],\"listeners\":{}}",
+    "uiStateJSON": "{}",
+    "description": "",
+    "savedSearchId": "moon",
+    "version": 1,
+    "kibanaSavedObjectMeta": {
+        "searchSourceJSON": "{\"filter\":[]}"
+    }
+}
\ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_moon_resources.py b/testsuites/posca/testcase_dashboard/posca_moon_resources.py
new file mode 100644 (file)
index 0000000..446facc
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+'''This file realize a function of creating dashboard of stress ping test'''
+import ConfigParser
+from elasticsearch import Elasticsearch
+import os
+import utils.logger as log
+from utils.parser import Parser as conf_parser
+
+LOG = log.Logger(__name__).getLogger()
+config = ConfigParser.ConfigParser()
+es = Elasticsearch()
+dashboard_path = os.path.join(conf_parser.test_dir,
+                              "posca",
+                              "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
+
+
+def dashboard_send_data(runner_config, test_data):
+    global es
+    print runner_config
+    es_ip = runner_config['dashboard_ip'].split(':')
+    es = Elasticsearch([{'host': es_ip[0]}])
+    print test_data["test_body"]
+    res = es.index(index="bottlenecks",
+                   doc_type=test_data["testcase"],
+                   body=test_data["test_body"][0])
+    if res['created'] == "False":
+        LOG.error("date send to kibana have errors ", test_data["data_body"])
diff --git a/testsuites/posca/testcase_dashboard/posca_moon_tenants.py b/testsuites/posca/testcase_dashboard/posca_moon_tenants.py
new file mode 100644 (file)
index 0000000..446facc
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+'''This file realize a function of creating dashboard of stress ping test'''
+import ConfigParser
+from elasticsearch import Elasticsearch
+import os
+import utils.logger as log
+from utils.parser import Parser as conf_parser
+
+LOG = log.Logger(__name__).getLogger()
+config = ConfigParser.ConfigParser()
+es = Elasticsearch()
+dashboard_path = os.path.join(conf_parser.test_dir,
+                              "posca",
+                              "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
+
+
+def dashboard_send_data(runner_config, test_data):
+    global es
+    print runner_config
+    es_ip = runner_config['dashboard_ip'].split(':')
+    es = Elasticsearch([{'host': es_ip[0]}])
+    print test_data["test_body"]
+    res = es.index(index="bottlenecks",
+                   doc_type=test_data["testcase"],
+                   body=test_data["test_body"][0])
+    if res['created'] == "False":
+        LOG.error("date send to kibana have errors ", test_data["data_body"])
index 3c66c7b..8b23824 100644 (file)
@@ -18,8 +18,9 @@ import uuid
 import json
 import utils.logger as log
 from utils.parser import Parser as conf_parser
-import utils.env_prepare.stack_prepare as stack_prepare
+import utils.env_prepare.moon_prepare as moon_env
 import utils.infra_setup.runner.docker_env as docker_env
+import testsuites.posca.testcase_dashboard.posca_feature_moon as DashBoard
 import utils.infra_setup.runner.yardstick as yardstick_task
 
 # --------------------------------------------------
@@ -29,35 +30,35 @@ LOG = log.Logger(__name__).getLogger()
 
 testfile = os.path.basename(__file__)
 testcase, file_format = os.path.splitext(testfile)
-# cidr = "/home/opnfv/repos/yardstick/samples/pvp_throughput_bottlenecks.yaml"
 runner_DEBUG = True
 
 
-def env_pre(con_dic):
-    LOG.info("yardstick environment prepare!")
-    stack_prepare._prepare_env_daemon(True)
+def env_pre(test_config):
+    if "moon_monitoring" in test_config["contexts"].keys():
+        if test_config["contexts"]['moon_envpre'] is True:
+            moon_environment = test_config["contexts"]['moon_environment']
+            moon_env.moon_envprepare(moon_environment)
+    LOG.info("moon environment prepare!")
 
 
 def config_to_result(test_config, test_result):
-    final_data = []
-    print(test_result)
+    final_data = {}
+    final_data["testcase"] = "posca_factor_moon_resources"
+    final_data["test_body"] = []
     out_data = test_result["result"]["testcases"]
-    test_data = out_data["pvp_throughput_bottlenecks"]["tc_data"]
+    test_data = out_data["moon_resource"]["tc_data"]
     for result in test_data:
         testdata = {}
-        testdata["vcpu"] = test_config["vcpu"]
-        testdata["memory"] = test_config["memory"]
-        testdata["nrFlows"] = result["data"]["nrFlows"]
-        testdata["packet_size"] = result["data"]["packet_size"]
-        testdata["throughput"] = result["data"]["throughput_rx_mbps"]
-        final_data.append(testdata)
+        testdata["tenant_number"] = int(test_config["tenant_number"])
+        testdata["max_user"] = result["data"]["max_user"]
+        final_data["test_body"].append(testdata)
     return final_data
 
 
 def testcase_parser(runner_conf, out_file="yardstick.out", **parameter_info):
     cidr = "/home/opnfv/repos/yardstick/" + \
-           runner_conf["yardstick_test_dir"] + \
-           runner_conf["yardstick_testcase"]
+           runner_conf["yardstick_test_dir"] + "/" + \
+           runner_conf["yardstick_testcase"] + ".yaml"
     cmd = yardstick_task.yardstick_command_parser(debug=runner_DEBUG,
                                                   cidr=cidr,
                                                   outfile=out_file,
@@ -84,24 +85,21 @@ def do_test(runner_conf, test_config, Use_Dashboard, context_conf):
             elif data["status"] == 2:
                 LOG.error("yardstick error exit")
                 exit()
-    # data = json.load(output)
 
     save_data = config_to_result(test_config, data)
     if Use_Dashboard is True:
         print("use dashboard")
-        # DashBoard.dashboard_send_data(context_conf, save_data)
-
-    # return save_data["data_body"]
+        DashBoard.dashboard_send_data(context_conf, save_data)
     return save_data
 
 
 def run(test_config):
     load_config = test_config["load_manager"]
     scenarios_conf = load_config["scenarios"]
-    runner_conf = test_config["runners"]
+    runner_conf = load_config["runners"]
+    contexts_conf = test_config["contexts"]
     Use_Dashboard = False
-
-    env_pre(None)
+    env_pre(test_config)
     if test_config["contexts"]["yardstick_ip"] is None:
         load_config["contexts"]["yardstick_ip"] =\
             conf_parser.ip_parser("yardstick_test_ip")
@@ -112,9 +110,14 @@ def run(test_config):
                 conf_parser.ip_parser("dashboard")
         LOG.info("Create Dashboard data")
         Use_Dashboard = True
-        # DashBoard.dashboard_system_bandwidth(test_config["contexts"])
+        DashBoard.posca_moon_init(test_config["contexts"])
 
     tenants_conf = conf_parser.str_to_list(scenarios_conf["tenants"])
+    subject_number = int(scenarios_conf["subject_number"])
+    object_number = int(scenarios_conf["object_number"])
+    timeout = scenarios_conf["timeout"]
+    consul_host = contexts_conf["moon_environment"]["ip"]
+    consul_port = contexts_conf["moon_environment"]["consul_port"]
 
     load_config["result_file"] = os.path.dirname(
         os.path.abspath(__file__)) + "/test_case/result"
@@ -122,7 +125,13 @@ def run(test_config):
     result = []
 
     for tenants in tenants_conf:
-        case_config = {"tenants": tenants}
+        print tenants
+        case_config = {"tenant_number": tenants,
+                       "subject_number": subject_number,
+                       "object_number": object_number,
+                       "timeout": timeout,
+                       "consul_host": consul_host,
+                       "consul_port": consul_port}
 
         data_reply = do_test(runner_conf, case_config,
                              Use_Dashboard, test_config["contexts"])
index 8f4061d..e932575 100644 (file)
@@ -15,14 +15,15 @@ This test is using yardstick as a tool to begin test.'''
 import os
 import time
 import uuid
-import json
 import Queue
 import multiprocessing
 import utils.logger as log
 from utils.parser import Parser as conf_parser
-import utils.env_prepare.stack_prepare as stack_prepare
+import utils.env_prepare.moon_prepare as moon_env
 import utils.infra_setup.runner.docker_env as docker_env
+
 import utils.infra_setup.runner.yardstick as yardstick_task
+import testsuites.posca.testcase_dashboard.posca_feature_moon as DashBoard
 
 # --------------------------------------------------
 # logging configuration
@@ -31,36 +32,31 @@ LOG = log.Logger(__name__).getLogger()
 
 testfile = os.path.basename(__file__)
 testcase, file_format = os.path.splitext(testfile)
-# cidr = "/home/opnfv/repos/yardstick/samples/pvp_throughput_bottlenecks.yaml"
-runner_switch = True
 runner_DEBUG = True
+manager = multiprocessing.Manager()
+switch = manager.Value('tmp', 0)
 
 
-def env_pre(con_dic):
+def env_pre(test_config):
+    if "moon_monitoring" in test_config["contexts"].keys():
+        if test_config["contexts"]['moon_envpre'] is True:
+            moon_environment = test_config["contexts"]['moon_environment']
+            moon_env.moon_envprepare(moon_environment)
     LOG.info("yardstick environment prepare!")
-    stack_prepare._prepare_env_daemon(True)
-
-
-def config_to_result(test_config, test_result):
-    final_data = []
-    print(test_result)
-    out_data = test_result["result"]["testcases"]
-    test_data = out_data["pvp_throughput_bottlenecks"]["tc_data"]
-    for result in test_data:
-        testdata = {}
-        testdata["vcpu"] = test_config["vcpu"]
-        testdata["memory"] = test_config["memory"]
-        testdata["nrFlows"] = result["data"]["nrFlows"]
-        testdata["packet_size"] = result["data"]["packet_size"]
-        testdata["throughput"] = result["data"]["throughput_rx_mbps"]
-        final_data.append(testdata)
+
+
+def config_to_result(test_result):
+    final_data = {}
+    final_data["testcase"] = "posca_factor_moon_tenants"
+    final_data["test_body"] = []
+    final_data["test_body"].append(test_result)
     return final_data
 
 
 def testcase_parser(runner_conf, out_file="yardstick.out", **parameter_info):
     cidr = "/home/opnfv/repos/yardstick/" + \
-           runner_conf["yardstick_test_dir"] + \
-           runner_conf["yardstick_testcase"]
+           runner_conf["yardstick_test_dir"] + "/" + \
+           runner_conf["yardstick_testcase"] + ".yaml"
     cmd = yardstick_task.yardstick_command_parser(debug=runner_DEBUG,
                                                   cidr=cidr,
                                                   outfile=out_file,
@@ -75,36 +71,19 @@ def do_test(runner_conf, test_config, Use_Dashboard, context_conf):
     print(cmd)
     stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
     LOG.info(stdout)
-    loop_value = 0
-    while loop_value < 60:
-        time.sleep(2)
-        loop_value = loop_value + 1
-        with open(out_file) as f:
-            data = json.load(f)
-            if data["status"] == 1:
-                LOG.info("yardstick run success")
-                break
-            elif data["status"] == 2:
-                LOG.error("yardstick error exit")
-                exit()
-    # data = json.load(output)
-
-    save_data = config_to_result(test_config, data)
-    if Use_Dashboard is True:
-        print("use dashboard")
-        # DashBoard.dashboard_send_data(context_conf, save_data)
-
-    # return save_data["data_body"]
-    return save_data
+    switch.value += 1
+    save_date = []
+    return save_date
 
 
 def run(test_config):
     load_config = test_config["load_manager"]
     scenarios_conf = load_config["scenarios"]
-    runner_conf = test_config["runners"]
+    contexts_conf = test_config["contexts"]
+    runner_conf = load_config["runners"]
     Use_Dashboard = False
 
-    env_pre(None)
+    env_pre(test_config)
     if test_config["contexts"]["yardstick_ip"] is None:
         load_config["contexts"]["yardstick_ip"] =\
             conf_parser.ip_parser("yardstick_test_ip")
@@ -115,15 +94,22 @@ def run(test_config):
                 conf_parser.ip_parser("dashboard")
         LOG.info("Create Dashboard data")
         Use_Dashboard = True
-        # DashBoard.dashboard_system_bandwidth(test_config["contexts"])
-
-    resources = conf_parser.str_to_list(scenarios_conf["resources"])
-    initial = conf_parser.str_to_list(scenarios_conf["initial"])
-    threshhold = conf_parser.str_to_list(scenarios_conf["threshhold"])
-    timeout = conf_parser.str_to_list(scenarios_conf["timeout"])
-    SLA = conf_parser.str_to_list(scenarios_conf["SLA"])
-    case_config = {"SLA": SLA,
-                   "resources": resources}
+        DashBoard.posca_moon_init(test_config["contexts"])
+
+    subject_number = int(scenarios_conf["subject_number"])
+    object_number = int(scenarios_conf["object_number"])
+    timeout = scenarios_conf["timeout"]
+    consul_host = contexts_conf["moon_environment"]["ip"]
+    consul_port = contexts_conf["moon_environment"]["consul_port"]
+
+    initial = scenarios_conf["initial_tenants"]
+    threshhold = scenarios_conf["steps_tenants"]
+    tolerate_time = scenarios_conf["tolerate_time"]
+    case_config = {"subject_number": subject_number,
+                   "object_number": object_number,
+                   "timeout": timeout,
+                   "consul_host": consul_host,
+                   "consul_port": consul_port}
 
     process_queue = Queue.Queue()
 
@@ -136,8 +122,8 @@ def run(test_config):
         tenant_number = threshhold
     else:
         tenant_number = initial
-
-    while runner_switch is True:
+    while switch.value == 0:
+        LOG.info("Start %d process", tenant_number)
         for tenant in range(0, tenant_number):
             process = multiprocessing.Process(target=do_test,
                                               args=(runner_conf,
@@ -150,7 +136,7 @@ def run(test_config):
 
         result = result + tenant_number
         tenant_number = threshhold
-        time.sleep(timeout)
+        time.sleep(tolerate_time)
 
     while process_queue.qsize():
         process = process_queue.get()
@@ -161,6 +147,12 @@ def run(test_config):
     else:
         result = result - threshhold
 
+    testdate = {"tenant_max": result}
+    testresult = config_to_result(testdate)
     LOG.info("Finished bottlenecks testcase")
-    LOG.info("The result data is %s", result)
-    return result
+    LOG.info("The result data is %d", result)
+    if Use_Dashboard is True:
+        print "Use Dashboard"
+        DashBoard.dashboard_send_data(test_config["contexts"], testresult)
+
+    return testresult
diff --git a/utils/env_prepare/moon_prepare.bash b/utils/env_prepare/moon_prepare.bash
new file mode 100644 (file)
index 0000000..7625418
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+##############################################################################
+# Copyright (c) 2018 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
+##############################################################################
+if grep -q "cadvisor" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+then
+    sed -e "/cadvisor-port=0/d" -i /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+    systemctl daemon-reload
+    systemctl restart kubelet
+
+fi
+if kubectl get po -n monitoring |grep prometheus-k8s |grep -q Running
+then
+    echo "monitoring k8s deployment has been done"
+else
+    git clone https://github.com/coreos/prometheus-operator.git
+    cd prometheus-operator
+    kubectl apply -n kube-system -f bundle.yaml
+    cd contrib/kube-prometheus
+    sleep 10
+    hack/cluster-monitoring/deploy
+fi
+
+while ! $(kubectl get po -n monitoring |grep prometheus-k8s |grep -q Running);do
+    echo "waiting for monitoring deployment finish!"
+    sleep 10
+done
+
+echo "waiting for monitoring tool works"
+sleep 60
diff --git a/utils/env_prepare/moon_prepare.py b/utils/env_prepare/moon_prepare.py
new file mode 100644 (file)
index 0000000..4173945
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2018 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
+##############################################################################
+import utils.infra_setup.passwordless_SSH.ssh as localssh
+
+
+def moon_envprepare(host_info):
+    if ("password") in host_info:
+        client = localssh.SSH(user=host_info["user"],
+                              host=host_info["ip"],
+                              password=host_info["password"])
+    else:
+        client = localssh.SSH(user=host_info["user"],
+                              host=host_info["ip"],
+                              key_filename=host_info["keyfile"])
+    with open("/home/opnfv/bottlenecks/utils/env_prepare/moon_prepare.bash",
+              "rb") as stdin_file:
+        client.run("cat > ~/bottlenecks_envprepare.bash", stdin=stdin_file)
+    client.execute("sudo bash ~/bottlenecks_envprepare.bash")