aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJingLu5 <lvjing5@huawei.com>2016-07-01 11:05:51 +0800
committerJingLu5 <lvjing5@huawei.com>2016-07-04 15:07:38 +0800
commitd51cbf72b8fb2e5c6acc06248919b1401d09c853 (patch)
tree240c90a42656c609a7a698df6f6dded7c3934c20
parent14c7413448e4690fefd0ecad908ec86d6f774d6f (diff)
Add support for multiple VMs
Verify and add support for multiple target VMs. This is related to further work with SDNVPN project. In the task configration file, use 'target' for specifying one target VM and use 'targets' for specifying multiple target VMs. Change-Id: I682188ef4c2c2c012d5ab00417b69f5b31b87137 Signed-off-by: JingLu5 <lvjing5@huawei.com>
-rw-r--r--samples/ping-multiple-vm.yaml42
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping.py4
-rw-r--r--yardstick/benchmark/scenarios/networking/ping.py39
-rw-r--r--yardstick/cmd/commands/task.py14
4 files changed, 79 insertions, 20 deletions
diff --git a/samples/ping-multiple-vm.yaml b/samples/ping-multiple-vm.yaml
new file mode 100644
index 000000000..4055af14b
--- /dev/null
+++ b/samples/ping-multiple-vm.yaml
@@ -0,0 +1,42 @@
+---
+# Sample benchmark task config file measure network latency using ping
+# between mutiple virtual machines
+
+
+schema: "yardstick:task:0.1"
+
+scenarios:
+-
+ type: Ping
+ options:
+ packetsize: 200
+ host: athena.demo
+ # key 'targets' for multiple targets
+ targets:
+ - ares.demo
+ - kratos.demo
+
+ runner:
+ type: Duration
+ duration: 60
+ interval: 1
+
+ sla:
+ max_rtt: 10
+ action: monitor
+
+context:
+ name: demo
+ image: cirros-0.3.3
+ flavor: m1.tiny
+ user: cirros
+
+ servers:
+ athena:
+ floating_ip: true
+ ares:
+ kratos:
+
+ networks:
+ test:
+ cidr: '10.0.1.0/24'
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping.py b/tests/unit/benchmark/scenarios/networking/test_ping.py
index 3a897d0f8..600974510 100644
--- a/tests/unit/benchmark/scenarios/networking/test_ping.py
+++ b/tests/unit/benchmark/scenarios/networking/test_ping.py
@@ -43,7 +43,7 @@ class PingTestCase(unittest.TestCase):
mock_ssh.SSH().execute.return_value = (0, '100', '')
p.run(result)
- self.assertEqual(result, {'rtt': 100.0})
+ self.assertEqual(result, {'rtt': {'10.229.17.105': 100.0}})
@mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
def test_ping_successful_sla(self, mock_ssh):
@@ -58,7 +58,7 @@ class PingTestCase(unittest.TestCase):
mock_ssh.SSH().execute.return_value = (0, '100', '')
p.run(result)
- self.assertEqual(result, {'rtt': 100.0})
+ self.assertEqual(result, {'rtt': {'10.229.17.105': 100.0}})
@mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
def test_ping_unsuccessful_sla(self, mock_ssh):
diff --git a/yardstick/benchmark/scenarios/networking/ping.py b/yardstick/benchmark/scenarios/networking/ping.py
index ae2166687..3af354850 100644
--- a/yardstick/benchmark/scenarios/networking/ping.py
+++ b/yardstick/benchmark/scenarios/networking/ping.py
@@ -57,29 +57,32 @@ class Ping(base.Scenario):
else:
options = ""
- destination = self.context_cfg['target'].get("ipaddr", '127.0.0.1')
+ destination = self.context_cfg['target'].get('ipaddr', '127.0.0.1')
+ dest_list = [s.strip() for s in destination.split(',')]
- LOG.debug("ping '%s' '%s'", options, destination)
+ result["rtt"] = {}
+ rtt_result = result["rtt"]
- exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s {0} {1}".format(destination, options),
- stdin=open(self.target_script, "r"))
+ for dest in dest_list:
+ LOG.debug("ping '%s' '%s'", options, dest)
+ exit_status, stdout, stderr = self.connection.execute(
+ "/bin/sh -s {0} {1}".format(dest, options),
+ stdin=open(self.target_script, "r"))
- if exit_status != 0:
- raise RuntimeError(stderr)
+ if exit_status != 0:
+ raise RuntimeError(stderr)
- if stdout:
- result["rtt"] = float(stdout)
-
- if "sla" in self.scenario_cfg:
- sla_max_rtt = int(self.scenario_cfg["sla"]["max_rtt"])
- assert result["rtt"] <= sla_max_rtt, \
- "rtt %f > sla:max_rtt(%f); " % (result["rtt"], sla_max_rtt)
- else:
- LOG.error("ping '%s' '%s' timeout", options, destination)
+ if stdout:
+ rtt_result[dest] = float(stdout)
+ if "sla" in self.scenario_cfg:
+ sla_max_rtt = int(self.scenario_cfg["sla"]["max_rtt"])
+ assert rtt_result[dest] <= sla_max_rtt, "rtt %f > sla:\
+ max_rtt(%f); " % (rtt_result[dest], sla_max_rtt)
+ else:
+ LOG.error("ping '%s' '%s' timeout", options, dest)
-def _test():
+def _test(): # pragma: no cover
'''internal test function'''
key_filename = pkg_resources.resource_filename("yardstick.resources",
"files/yardstick_key")
@@ -104,5 +107,5 @@ def _test():
p.run(result)
print result
-if __name__ == '__main__':
+if __name__ == '__main__': # pragma: no cover
_test()
diff --git a/yardstick/cmd/commands/task.py b/yardstick/cmd/commands/task.py
index 55898e1cb..2bc5abe29 100644
--- a/yardstick/cmd/commands/task.py
+++ b/yardstick/cmd/commands/task.py
@@ -374,6 +374,20 @@ def run_one_scenario(scenario_cfg, output_file):
context_cfg["target"]["ipaddr"] = \
context_cfg["target"]["ip"]
+ if "targets" in scenario_cfg:
+ ip_list = []
+ for target in scenario_cfg["targets"]:
+ if is_ip_addr(target):
+ ip_list.append(target)
+ context_cfg['target'] = {}
+ else:
+ context_cfg['target'] = Context.get_server(target)
+ if _is_same_heat_context(scenario_cfg["host"], target):
+ ip_list.append(context_cfg["target"]["private_ip"])
+ else:
+ ip_list.append(context_cfg["target"]["ip"])
+ context_cfg['target']['ipaddr'] = ','.join(ip_list)
+
if "nodes" in scenario_cfg:
context_cfg["nodes"] = parse_nodes_with_context(scenario_cfg)
runner = base_runner.Runner.get(runner_cfg)