Merge "Resolve NameError in test_utils.py"
[yardstick.git] / yardstick / tests / unit / benchmark / contexts / test_heat.py
index c54a7ab..7605ef2 100644 (file)
@@ -8,7 +8,6 @@
 ##############################################################################
 
 from collections import OrderedDict
-from itertools import count
 import logging
 import os
 
@@ -20,6 +19,7 @@ from yardstick.benchmark.contexts import heat
 from yardstick.benchmark.contexts import model
 from yardstick.common import constants as consts
 from yardstick.common import exceptions as y_exc
+from yardstick.common import openstack_utils
 from yardstick import ssh
 
 
@@ -28,9 +28,28 @@ LOG = logging.getLogger(__name__)
 
 class HeatContextTestCase(unittest.TestCase):
 
+    HEAT_POD_SAMPLE = {
+        "nodes": [
+            {
+                "name": "node1",
+                "role": "Controller",
+                "ip": "10.229.47.137",
+                "user": "root",
+                "key_filename": "/root/.yardstick_key"
+            },
+            {
+                "name": "node2",
+                "role": "Compute",
+                "ip": "10.229.47.139",
+                "user": "root",
+                "key_filename": "/root/.yardstick_key"
+            }
+        ]
+    }
+
     def __init__(self, *args, **kwargs):
+
         super(HeatContextTestCase, self).__init__(*args, **kwargs)
-        self.name_iter = ('vnf{:03}'.format(x) for x in count(0, step=3))
 
     def setUp(self):
         self.test_context = heat.HeatContext()
@@ -61,24 +80,29 @@ class HeatContextTestCase(unittest.TestCase):
         self.assertIsNone(self.test_context.heat_parameters)
         self.assertIsNone(self.test_context.key_filename)
 
+    @mock.patch('yardstick.common.utils.read_yaml_file')
     @mock.patch('yardstick.benchmark.contexts.heat.PlacementGroup')
     @mock.patch('yardstick.benchmark.contexts.heat.ServerGroup')
     @mock.patch('yardstick.benchmark.contexts.heat.Network')
     @mock.patch('yardstick.benchmark.contexts.heat.Server')
-    def test_init(self, mock_server, mock_network, mock_sg, mock_pg):
+    def test_init(self, mock_server, mock_network, mock_sg, mock_pg, mock_read_yaml):
 
+        mock_read_yaml.return_value = self.HEAT_POD_SAMPLE
         pgs = {'pgrp1': {'policy': 'availability'}}
         sgs = {'servergroup1': {'policy': 'affinity'}}
         networks = {'bar': {'cidr': '10.0.1.0/24'}}
         servers = {'baz': {'floating_ip': True, 'placement': 'pgrp1'}}
         attrs = {'name': 'foo',
+                 'file': 'pod.yaml',
                  'task_id': '1234567890',
                  'placement_groups': pgs,
                  'server_groups': sgs,
                  'networks': networks,
                  'servers': servers}
 
-        self.test_context.init(attrs)
+        with mock.patch.object(openstack_utils, 'get_shade_client'), \
+             mock.patch.object(openstack_utils, 'get_shade_operator_client'):
+            self.test_context.init(attrs)
 
         self.assertFalse(self.test_context._flags.no_setup)
         self.assertFalse(self.test_context._flags.no_teardown)
@@ -132,13 +156,17 @@ class HeatContextTestCase(unittest.TestCase):
                  'server_groups': {},
                  'networks': {},
                  'servers': {},
+                 'file': "pod.yaml",
                  'flags': {
                      'no_setup': True,
                      'no_teardown': True,
                      },
                 }
 
-        self.test_context.init(attrs)
+        with mock.patch.object(openstack_utils, 'get_shade_client'), \
+             mock.patch.object(openstack_utils, 'get_shade_operator_client'):
+            self.test_context.init(attrs)
+
         self.assertTrue(self.test_context._flags.no_setup)
         self.assertTrue(self.test_context._flags.no_teardown)
 
@@ -229,12 +257,12 @@ class HeatContextTestCase(unittest.TestCase):
         self.assertRaises(y_exc.HeatTemplateError,
                           self.test_context.deploy)
 
-        mock_path_exists.assert_called_once()
+        mock_path_exists.assert_called()
         mock_resources_template.assert_called_once()
 
     @mock.patch.object(os.path, 'exists', return_value=False)
     @mock.patch.object(ssh.SSH, 'gen_keys')
-    @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+    @mock.patch.object(heat, 'HeatTemplate')
     def test_deploy(self, mock_template, mock_genkeys, mock_path_exists):
         self.test_context._name = 'foo'
         self.test_context._task_id = '1234567890'
@@ -245,16 +273,17 @@ class HeatContextTestCase(unittest.TestCase):
         self.test_context.get_neutron_info = mock.MagicMock()
         self.test_context.deploy()
 
-        mock_template.assert_called_with('foo-12345678',
-                                         '/bar/baz/some-heat-file',
-                                         {'image': 'cirros'})
+        mock_template.assert_called_with(
+            'foo-12345678', template_file='/bar/baz/some-heat-file',
+            heat_parameters={'image': 'cirros'},
+            os_cloud_config=self.test_context._flags.os_cloud_config)
         self.assertIsNotNone(self.test_context.stack)
         key_filename = ''.join(
             [consts.YARDSTICK_ROOT_PATH,
              'yardstick/resources/files/yardstick_key-',
              self.test_context._name_task_id])
         mock_genkeys.assert_called_once_with(key_filename)
-        mock_path_exists.assert_called_once_with(key_filename)
+        mock_path_exists.assert_any_call(key_filename)
 
     @mock.patch.object(heat, 'HeatTemplate')
     @mock.patch.object(os.path, 'exists', return_value=False)
@@ -280,7 +309,7 @@ class HeatContextTestCase(unittest.TestCase):
              'yardstick/resources/files/yardstick_key-',
              self.test_context._name])
         mock_genkeys.assert_called_once_with(key_filename)
-        mock_path_exists.assert_called_once_with(key_filename)
+        mock_path_exists.assert_any_call(key_filename)
 
     @mock.patch.object(heat, 'HeatTemplate')
     @mock.patch.object(os.path, 'exists', return_value=False)
@@ -296,7 +325,6 @@ class HeatContextTestCase(unittest.TestCase):
         self.test_context._flags.no_setup = True
         self.test_context.template_file = '/bar/baz/some-heat-file'
         self.test_context.get_neutron_info = mock.MagicMock()
-
         self.test_context.deploy()
 
         mock_retrieve_stack.assert_called_once_with(self.test_context._name)
@@ -306,7 +334,7 @@ class HeatContextTestCase(unittest.TestCase):
              'yardstick/resources/files/yardstick_key-',
              self.test_context._name])
         mock_genkeys.assert_called_once_with(key_filename)
-        mock_path_exists.assert_called_once_with(key_filename)
+        mock_path_exists.assert_any_call(key_filename)
 
     @mock.patch.object(heat, 'HeatTemplate', return_value='heat_template')
     @mock.patch.object(heat.HeatContext, '_add_resources_to_template')
@@ -334,7 +362,7 @@ class HeatContextTestCase(unittest.TestCase):
              'yardstick/resources/files/yardstick_key-',
              self.test_context._name_task_id])
         mock_genkeys.assert_called_once_with(key_filename)
-        mock_path_exists.assert_called_with(key_filename)
+        mock_path_exists.assert_any_call(key_filename)
 
         mock_call_gen_keys = mock.call.gen_keys(key_filename)
         mock_call_add_resources = (
@@ -420,7 +448,7 @@ class HeatContextTestCase(unittest.TestCase):
         self.test_context.key_filename = 'foo/bar/foobar'
         self.test_context.undeploy()
         mock_delete_key.assert_called()
-        self.assertTrue(mock_template.delete.called)
+        mock_template.delete.assert_called_once()
 
     @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
     def test_undeploy_no_teardown(self, mock_template):
@@ -725,3 +753,56 @@ class HeatContextTestCase(unittest.TestCase):
         }
         result = self.test_context._get_network(attr_name)
         self.assertDictEqual(result, expected)
+
+    def _get_file_abspath(self, filename):
+        curr_path = os.path.dirname(os.path.abspath(__file__))
+        file_path = os.path.join(curr_path, filename)
+        return file_path
+
+    def test__get_physical_nodes(self):
+        self.test_context.nodes = {}
+        nodes = self.test_context._get_physical_nodes()
+        self.assertEquals(nodes, {})
+
+    @mock.patch('yardstick.common.utils.read_yaml_file')
+    def test__get_physical_node_for_server(self, mock_read_yaml):
+        attrs = {'name': 'foo',
+                 'task_id': '12345678',
+                 'file': "pod.yaml",
+                 'servers': {'vnf': {}},
+                 'networks': {'mgmt': {'cidr': '10.0.1.0/24'}}
+                 }
+
+        with mock.patch.object(openstack_utils, 'get_shade_client'), \
+             mock.patch.object(openstack_utils, 'get_shade_operator_client'):
+            mock_read_yaml.return_value = self.HEAT_POD_SAMPLE
+            self.test_context.init(attrs)
+
+        with mock.patch('yardstick.common.openstack_utils.get_server') as mock_get_server:
+            mock_get_server.return_value = {'vnf': {}}
+
+            # When server is not from this context
+            result = self.test_context._get_physical_node_for_server('node1.foo-context')
+            self.assertIsNone(result)
+
+            # When node_name is not from this context
+            result = self.test_context._get_physical_node_for_server('fake.foo-12345678')
+            self.assertIsNone(result)
+
+            mock_munch = mock.Mock()
+            mock_munch.toDict = mock.Mock(return_value={
+                'OS-EXT-SRV-ATTR:hypervisor_hostname': 'hypervisor_hostname'
+            })
+            mock_get_server.return_value = mock_munch
+
+            hypervisor = mock.Mock()
+            hypervisor.hypervisor_hostname = 'hypervisor_hostname'
+            hypervisor.host_ip = '10.229.47.137'
+
+            self.test_context.operator_client.list_hypervisors = mock.Mock(
+                return_value=[hypervisor])
+
+            mock_get_server.return_value = mock_munch
+
+            result = self.test_context._get_physical_node_for_server('vnf.foo-12345678')
+            self.assertEqual(result, 'node1.foo')