Fix retrieving "options" section in "scenario" 85/53785/2
authorRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Wed, 14 Mar 2018 11:46:53 +0000 (11:46 +0000)
committerRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Wed, 14 Mar 2018 11:58:38 +0000 (11:58 +0000)
In [1] a new method to rename the "scenario" host names was implemented.
This method parses all sections with host names and applies the
"qualified" name.

Some malformed test cases define the "options" section without content.
This causes that [2] retrieves "None" value instead of an empty
dictionary. This possibility must be handled in the new method.

[1]I44da30dac562c1a4166e084645ae91c17798651d
[2]https://github.com/opnfv/yardstick/blob/4b8b674b65830a24230faed71e8d9a1048139c89/yardstick/benchmark/core/task.py#L630

JIRA: YARDSTICK-1073

Change-Id: I8864b428734ead8c5aa39de5091d3a2a691be060
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
yardstick/benchmark/core/task.py
yardstick/tests/unit/benchmark/core/test_task.py

index e7acde6..4272a6d 100644 (file)
@@ -344,7 +344,8 @@ class Task(object):     # pragma: no cover
 
         # TODO support get multi hosts/vms info
         context_cfg = {}
-        server_name = scenario_cfg.get('options', {}).get('server_name', {})
+        options = scenario_cfg.get('options') or {}
+        server_name = options.get('server_name') or {}
 
         def config_context_target(cfg):
             target = cfg['target']
@@ -627,7 +628,8 @@ class TaskParser(object):       # pragma: no cover
             scenario['host'] = qualified_name(scenario['host'])
         if 'target' in scenario:
             scenario['target'] = qualified_name(scenario['target'])
-        server_name = scenario.get('options', {}).get('server_name', {})
+        options = scenario.get('options') or {}
+        server_name = options.get('server_name') or {}
         if 'host' in server_name:
             server_name['host'] = qualified_name(server_name['host'])
         if 'target' in server_name:
index 1ce30ea..9e8e4e9 100644 (file)
@@ -421,6 +421,34 @@ key2:
         self.parser._change_node_names(scenario, [my_context])
         self.assertEqual(scenario, expected_scenario)
 
+    def test__change_node_names_options_empty(self):
+        ctx_attrs = {
+            'name': 'demo',
+            'task_id': '1234567890'
+        }
+
+        my_context = dummy.DummyContext()
+        my_context.init(ctx_attrs)
+        scenario = copy.deepcopy(self.scenario)
+        scenario['options'] = None
+
+        self.parser._change_node_names(scenario, [my_context])
+        self.assertIsNone(scenario['options'])
+
+    def test__change_node_names_options_server_name_empty(self):
+        ctx_attrs = {
+            'name': 'demo',
+            'task_id': '1234567890'
+        }
+
+        my_context = dummy.DummyContext()
+        my_context.init(ctx_attrs)
+        scenario = copy.deepcopy(self.scenario)
+        scenario['options']['server_name'] = None
+
+        self.parser._change_node_names(scenario, [my_context])
+        self.assertIsNone(scenario['options']['server_name'])
+
     def test__parse_tasks(self):
         task_obj = task.Task()
         _uuid = uuid.uuid4()