diff options
-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) |