diff options
author | JingLu5 <lvjing5@huawei.com> | 2016-07-01 11:05:51 +0800 |
---|---|---|
committer | JingLu5 <lvjing5@huawei.com> | 2016-07-04 15:07:38 +0800 |
commit | d51cbf72b8fb2e5c6acc06248919b1401d09c853 (patch) | |
tree | 240c90a42656c609a7a698df6f6dded7c3934c20 | |
parent | 14c7413448e4690fefd0ecad908ec86d6f774d6f (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.yaml | 42 | ||||
-rw-r--r-- | tests/unit/benchmark/scenarios/networking/test_ping.py | 4 | ||||
-rw-r--r-- | yardstick/benchmark/scenarios/networking/ping.py | 39 | ||||
-rw-r--r-- | yardstick/cmd/commands/task.py | 14 |
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) |