From 2708ea7280b51bffb71093384dc49664c5440034 Mon Sep 17 00:00:00 2001 From: wym_libra Date: Tue, 8 Dec 2015 15:47:26 +0800 Subject: [PATCH] Add 'nodes' attribute to the scenario definition Defining the 'nodes' attribute which can include more node not only 'host' and 'target' Design etherpad link: https://etherpad.opnfv.org/p/yardstick_framework JIRA:- Change-Id: Ida18ebcda1c73c88d208aa11a10696d1063134ef Signed-off-by: wym_libra --- tests/unit/cmd/__init__.py | 0 tests/unit/cmd/commands/__init__.py | 0 tests/unit/cmd/commands/test_task.py | 38 ++++++++++++++++++++++++++++++++++++ yardstick/cmd/commands/task.py | 16 ++++++++++++++- 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tests/unit/cmd/__init__.py create mode 100644 tests/unit/cmd/commands/__init__.py create mode 100644 tests/unit/cmd/commands/test_task.py diff --git a/tests/unit/cmd/__init__.py b/tests/unit/cmd/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/cmd/commands/__init__.py b/tests/unit/cmd/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/cmd/commands/test_task.py b/tests/unit/cmd/commands/test_task.py new file mode 100644 index 000000000..89813cb98 --- /dev/null +++ b/tests/unit/cmd/commands/test_task.py @@ -0,0 +1,38 @@ +#!/usr/bin/env 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 +############################################################################## + +# Unittest for yardstick.cmd.commands.task + +import mock +import unittest + +from yardstick.cmd.commands import task + + +class TaskCommandsTestCase(unittest.TestCase): + + @mock.patch('yardstick.cmd.commands.task.Context') + def test_parse_nodes_host_target_same_context(self, mock_context): + nodes = { + "host": "node1.LF", + "target": "node2.LF" + } + scenario_cfg = {"nodes": nodes} + server_info = { + "ip": "10.20.0.3", + "user": "root", + "key_filename": "/root/.ssh/id_rsa" + } + mock_context.get_server.return_value = server_info + context_cfg = task.parse_nodes_with_context(scenario_cfg) + + self.assertEqual(context_cfg["host"], server_info) + self.assertEqual(context_cfg["target"], server_info) diff --git a/yardstick/cmd/commands/task.py b/yardstick/cmd/commands/task.py index 0d7e9e66d..d6cd6984c 100755 --- a/yardstick/cmd/commands/task.py +++ b/yardstick/cmd/commands/task.py @@ -287,7 +287,8 @@ def run_one_scenario(scenario_cfg, output_file): # TODO support get multi hosts/vms info context_cfg = {} - context_cfg['host'] = Context.get_server(scenario_cfg["host"]) + if "host" in scenario_cfg: + context_cfg['host'] = Context.get_server(scenario_cfg["host"]) if "target" in scenario_cfg: if is_ip_addr(scenario_cfg["target"]): @@ -303,6 +304,8 @@ def run_one_scenario(scenario_cfg, output_file): context_cfg["target"]["ipaddr"] = \ context_cfg["target"]["ip"] + if "nodes" in scenario_cfg: + context_cfg["nodes"] = parse_nodes_with_context(scenario_cfg) runner = base_runner.Runner.get(runner_cfg) print "Starting runner of type '%s'" % runner_cfg["type"] @@ -311,6 +314,17 @@ def run_one_scenario(scenario_cfg, output_file): return runner +def parse_nodes_with_context(scenario_cfg): + '''paras the 'nodes' fields in scenario ''' + nodes = scenario_cfg["nodes"] + + nodes_cfg = {} + for nodename in nodes: + nodes_cfg[nodename] = Context.get_server(nodes[nodename]) + + return nodes_cfg + + def runner_join(runner): '''join (wait for) a runner, exit process at runner failure''' status = runner.join() -- 2.16.6