Add 'nodes' attribute to the scenario definition 49/4049/4
authorwym_libra <yimin.wang@huawei.com>
Tue, 8 Dec 2015 07:47:26 +0000 (15:47 +0800)
committerJörgen Karlsson <jorgen.w.karlsson@ericsson.com>
Fri, 11 Dec 2015 11:29:23 +0000 (11:29 +0000)
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 <yimin.wang@huawei.com>
tests/unit/cmd/__init__.py [new file with mode: 0644]
tests/unit/cmd/commands/__init__.py [new file with mode: 0644]
tests/unit/cmd/commands/test_task.py [new file with mode: 0644]
yardstick/cmd/commands/task.py

diff --git a/tests/unit/cmd/__init__.py b/tests/unit/cmd/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/unit/cmd/commands/__init__.py b/tests/unit/cmd/commands/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/unit/cmd/commands/test_task.py b/tests/unit/cmd/commands/test_task.py
new file mode 100644 (file)
index 0000000..89813cb
--- /dev/null
@@ -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)
index 0d7e9e6..d6cd698 100755 (executable)
@@ -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()