Merge "Add IOMMU to grub to support OVS/SRIOV SA contexts"
[yardstick.git] / yardstick / tests / unit / orchestrator / test_kubernetes.py
index cc1b375..2d5c4a2 100644 (file)
@@ -300,7 +300,7 @@ class ContainerObjectTestCase(base.BaseUnitTestCase):
             'cname', ssh_key='fake_sshkey', volumeMount=[volume_mount],
             args=args)
         expected = {'args': args,
-                    'command': [kubernetes.ContainerObject.COMMAND_DEFAULT],
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
                     'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
                     'name': 'cname-container',
                     'volumeMounts': container_obj._create_volume_mounts()}
@@ -314,7 +314,7 @@ class ContainerObjectTestCase(base.BaseUnitTestCase):
             'cname', ssh_key='fake_sshkey', volumeMount=[volume_mount],
             args=args, securityContext={'key': 'value'})
         expected = {'args': args,
-                    'command': [kubernetes.ContainerObject.COMMAND_DEFAULT],
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
                     'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
                     'name': 'cname-container',
                     'volumeMounts': container_obj._create_volume_mounts(),
@@ -330,7 +330,7 @@ class ContainerObjectTestCase(base.BaseUnitTestCase):
             args=args, env=[{'name': 'fake_var_name',
                              'value': 'fake_var_value'}])
         expected = {'args': args,
-                    'command': [kubernetes.ContainerObject.COMMAND_DEFAULT],
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
                     'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
                     'name': 'cname-container',
                     'volumeMounts': container_obj._create_volume_mounts(),
@@ -351,8 +351,7 @@ class ContainerObjectTestCase(base.BaseUnitTestCase):
                                'invalid_varible': 'fakeinvalid_varible',
                                'hostIP': 'fake_port_number'}])
         expected = {'args': args,
-                    'command': [
-                        kubernetes.ContainerObject.COMMAND_DEFAULT],
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
                     'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
                     'name': 'cname-container',
                     'volumeMounts': container_obj._create_volume_mounts(),
@@ -387,7 +386,7 @@ class ContainerObjectTestCase(base.BaseUnitTestCase):
             'cname', ssh_key='fake_sshkey', volumeMount=[volume_mount],
             args=args, resources=resources)
         expected = {'args': args,
-                    'command': [kubernetes.ContainerObject.COMMAND_DEFAULT],
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
                     'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
                     'name': 'cname-container',
                     'volumeMounts': container_obj._create_volume_mounts(),
@@ -395,6 +394,45 @@ class ContainerObjectTestCase(base.BaseUnitTestCase):
                                   'limits': {'key2': 'val2'}}}
         self.assertEqual(expected, container_obj.get_container_item())
 
+    def test_get_container_item_image_pull_policy(self):
+        container_obj = kubernetes.ContainerObject(
+            'cname', ssh_key='fake_sshkey', imagePullPolicy='Always')
+        expected = {'args': [],
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
+                    'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
+                    'name': 'cname-container',
+                    'volumeMounts': container_obj._create_volume_mounts(),
+                    'imagePullPolicy':'Always'}
+        self.assertEqual(expected, container_obj.get_container_item())
+
+    def test_get_container_item_with_tty_stdin(self):
+        args = ['arg1', 'arg2']
+        container_obj = kubernetes.ContainerObject(
+            'cname', 'fake_sshkey', args=args, tty=False, stdin=True)
+        expected = {'args': args,
+                    'command': kubernetes.ContainerObject.COMMAND_DEFAULT,
+                    'image': kubernetes.ContainerObject.IMAGE_DEFAULT,
+                    'name': 'cname-container',
+                    'volumeMounts': container_obj._create_volume_mounts(),
+                    'tty': False,
+                    'stdin': True}
+        self.assertEqual(expected, container_obj.get_container_item())
+
+    def test__parse_commands_string(self):
+        container_obj = kubernetes.ContainerObject('cname', 'fake_sshkey')
+        self.assertEqual(['fake command'],
+                         container_obj._parse_commands('fake command'))
+
+    def test__parse_commands_list(self):
+        container_obj = kubernetes.ContainerObject('cname', 'fake_sshkey')
+        self.assertEqual(['cmd1', 'cmd2'],
+                         container_obj._parse_commands(['cmd1', 'cmd2']))
+
+    def test__parse_commands_exception(self):
+        container_obj = kubernetes.ContainerObject('cname', 'fake_sshkey')
+        with self.assertRaises(exceptions.KubernetesContainerCommandType):
+            container_obj._parse_commands({})
+
 
 class CustomResourceDefinitionObjectTestCase(base.BaseUnitTestCase):
 
@@ -433,13 +471,10 @@ class NetworkObjectTestCase(base.BaseUnitTestCase):
     def test__init_missing_parameter(self):
         with self.assertRaises(
                 exceptions.KubernetesNetworkObjectDefinitionError):
-            kubernetes.NetworkObject(name='name', plugin='plugin')
+            kubernetes.NetworkObject('network_name', plugin='plugin')
         with self.assertRaises(
                 exceptions.KubernetesNetworkObjectDefinitionError):
-            kubernetes.NetworkObject(name='name', args='args')
-        with self.assertRaises(
-                exceptions.KubernetesNetworkObjectDefinitionError):
-            kubernetes.NetworkObject(args='args', plugin='plugin')
+            kubernetes.NetworkObject('network_name', args='args')
 
     @mock.patch.object(kubernetes_utils, 'get_custom_resource_definition')
     def test_crd(self, mock_get_crd):
@@ -494,9 +529,10 @@ class NetworkObjectTestCase(base.BaseUnitTestCase):
         net_obj._version = 'version'
         net_obj._plural = 'plural'
         net_obj._template = 'template'
+        net_obj._name = 'fake_name'
         net_obj.create()
         mock_create_network.assert_called_once_with(
-            'scope', 'group', 'version', 'plural', 'template')
+            'scope', 'group', 'version', 'plural', 'template', 'fake_name')
 
     @mock.patch.object(kubernetes_utils, 'delete_network')
     def test_delete(self, mock_delete_network):
@@ -508,7 +544,7 @@ class NetworkObjectTestCase(base.BaseUnitTestCase):
         net_obj._name = 'name'
         net_obj.delete()
         mock_delete_network.assert_called_once_with(
-            'scope', 'group', 'version', 'plural', 'name')
+            'scope', 'group', 'version', 'plural', 'name', skip_codes=[404])
 
 
 class ServiceNodePortObjectTestCase(base.BaseUnitTestCase):
@@ -516,24 +552,52 @@ class ServiceNodePortObjectTestCase(base.BaseUnitTestCase):
     def test__init(self):
         with mock.patch.object(kubernetes.ServiceNodePortObject, '_add_port') \
                 as mock_add_port:
-            kubernetes.ServiceNodePortObject('fake_name',
-                                             node_ports=[{'port': 80}])
+            kubernetes.ServiceNodePortObject(
+                'fake_name', node_ports=[{'port': 80, 'name': 'web'}])
+
+        mock_add_port.assert_has_calls([mock.call(22, 'ssh', protocol='TCP'),
+                                        mock.call(80, 'web')])
 
-        mock_add_port.assert_has_calls([mock.call(22, protocol='TCP'),
-                                        mock.call(80)])
+    @mock.patch.object(kubernetes.ServiceNodePortObject, '_add_port')
+    def test__init_missing_mandatory_parameters(self, *args):
+        with self.assertRaises(
+                exceptions.KubernetesServiceObjectDefinitionError):
+            kubernetes.ServiceNodePortObject(
+                'fake_name', node_ports=[{'port': 80}])
+        with self.assertRaises(
+                exceptions.KubernetesServiceObjectDefinitionError):
+            kubernetes.ServiceNodePortObject(
+                'fake_name', node_ports=[{'name': 'web'}])
+
+    @mock.patch.object(kubernetes.ServiceNodePortObject, '_add_port')
+    def test__init_missing_bad_name(self, *args):
+        with self.assertRaises(
+                exceptions.KubernetesServiceObjectNameError):
+            kubernetes.ServiceNodePortObject(
+                'fake_name', node_ports=[{'port': 80, 'name': '-web'}])
+        with self.assertRaises(
+                exceptions.KubernetesServiceObjectNameError):
+            kubernetes.ServiceNodePortObject(
+                'fake_name', node_ports=[{'port': 80, 'name': 'Web'}])
+        with self.assertRaises(
+                exceptions.KubernetesServiceObjectNameError):
+            kubernetes.ServiceNodePortObject(
+                'fake_name', node_ports=[{'port': 80, 'name': 'web-'}])
 
     def test__add_port(self):
         nodeport_object = kubernetes.ServiceNodePortObject('fake_name')
-        port_ssh = {'port': 22,
-                    'protocol': 'TCP',}
+        port_ssh = {'name': 'ssh',
+                    'port': 22,
+                    'protocol': 'TCP'}
         port_definition = {'port': 80,
                            'protocol': 'TCP',
                            'name': 'web',
                            'targetPort': 10080,
                            'nodePort': 30080}
         port = copy.deepcopy(port_definition)
-        port.pop('port')
-        nodeport_object._add_port(80, **port)
+        _port = port.pop('port')
+        name = port.pop('name')
+        nodeport_object._add_port(_port, name, **port)
         self.assertEqual([port_ssh, port_definition],
                          nodeport_object.template['spec']['ports'])
 
@@ -548,4 +612,32 @@ class ServiceNodePortObjectTestCase(base.BaseUnitTestCase):
     def test_delete(self, mock_delete_service):
         nodeport_object = kubernetes.ServiceNodePortObject('fake_name')
         nodeport_object.delete()
-        mock_delete_service.assert_called_once_with('fake_name-service')
+        mock_delete_service.assert_called_once_with('fake_name-service',
+                                                    skip_codes=[404])
+
+
+class KubernetesTemplate(base.BaseUnitTestCase):
+
+    def test_get_rc_by_name(self):
+        ctx_cfg = {
+            'servers': {
+                'host1': {'args': 'some data'}
+            }
+        }
+        k_template = kubernetes.KubernetesTemplate('k8s_name', ctx_cfg)
+        rc = k_template.get_rc_by_name('host1-k8s_name')
+        self.assertTrue(isinstance(rc, kubernetes.ReplicationControllerObject))
+
+    def test_get_rc_by_name_wrong_name(self):
+        ctx_cfg = {
+            'servers': {
+                'host1': {'args': 'some data'}
+            }
+        }
+        k_template = kubernetes.KubernetesTemplate('k8s_name', ctx_cfg)
+        self.assertIsNone(k_template.get_rc_by_name('wrong_host_name'))
+
+    def test_get_rc_by_name_no_rcs(self):
+        ctx_cfg = {'servers': {}}
+        k_template = kubernetes.KubernetesTemplate('k8s_name', ctx_cfg)
+        self.assertIsNone(k_template.get_rc_by_name('any_host_name'))