X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=yardstick%2Ftests%2Funit%2Forchestrator%2Ftest_kubernetes.py;h=50c6b27734905f586de388eb6ecb6fea09c84526;hb=093ab6a10558456c0cf61091d69648638e311143;hp=21a12a0d3bbf8df84eca54558bd01711f3b7b224;hpb=1160225135e429ba8581ad162b08d710db4e96a2;p=yardstick.git diff --git a/yardstick/tests/unit/orchestrator/test_kubernetes.py b/yardstick/tests/unit/orchestrator/test_kubernetes.py index 21a12a0d3..50c6b2773 100644 --- a/yardstick/tests/unit/orchestrator/test_kubernetes.py +++ b/yardstick/tests/unit/orchestrator/test_kubernetes.py @@ -110,6 +110,36 @@ service ssh restart;while true ; do sleep 10000; done'] class KubernetesObjectTestCase(base.BaseUnitTestCase): + def test__init_one_container(self): + pod_name = 'pod_name' + _kwargs = {'args': ['arg1', 'arg2'], + 'image': 'fake_image', + 'command': 'fake_command'} + k8s_obj = kubernetes.KubernetesObject(pod_name, **_kwargs) + self.assertEqual(1, len(k8s_obj._containers)) + container = k8s_obj._containers[0] + self.assertEqual(['arg1', 'arg2'], container._args) + self.assertEqual('fake_image', container._image) + self.assertEqual(['fake_command'], container._command) + self.assertEqual([], container._volume_mounts) + + def test__init_multipe_containers(self): + pod_name = 'pod_name' + containers = [] + for i in range(5): + containers.append({'args': ['arg1', 'arg2'], + 'image': 'fake_image_%s' % i, + 'command': 'fake_command_%s' % i}) + _kwargs = {'containers': containers} + k8s_obj = kubernetes.KubernetesObject(pod_name, **_kwargs) + self.assertEqual(5, len(k8s_obj._containers)) + for i in range(5): + container = k8s_obj._containers[i] + self.assertEqual(['arg1', 'arg2'], container._args) + self.assertEqual('fake_image_%s' % i, container._image) + self.assertEqual(['fake_command_%s' % i], container._command) + self.assertEqual([], container._volume_mounts) + def test__add_volumes(self): volume1 = {'name': 'fake_sshkey', 'configMap': {'name': 'fake_sshkey'}} @@ -150,26 +180,57 @@ class KubernetesObjectTestCase(base.BaseUnitTestCase): with self.assertRaises(exceptions.KubernetesTemplateInvalidVolumeType): kubernetes.KubernetesObject._create_volume_item(volume) + def test__add_security_context(self): + k8s_obj = kubernetes.KubernetesObject('pod_name') + self.assertNotIn('securityContext', + k8s_obj.template['spec']['template']['spec']) + + k8s_obj._security_context = {'key_pod': 'value_pod'} + k8s_obj._add_security_context() + self.assertEqual( + {'key_pod': 'value_pod'}, + k8s_obj.template['spec']['template']['spec']['securityContext']) + + def test__add_security_context_by_init(self): + containers = [] + for i in range(5): + containers.append( + {'securityContext': {'key%s' % i: 'value%s' % i}}) + _kwargs = {'containers': containers, + 'securityContext': {'key_pod': 'value_pod'}} + k8s_obj = kubernetes.KubernetesObject('pod_name', **_kwargs) + self.assertEqual( + {'key_pod': 'value_pod'}, + k8s_obj.template['spec']['template']['spec']['securityContext']) + for i in range(5): + container = ( + k8s_obj.template['spec']['template']['spec']['containers'][i]) + self.assertEqual({'key%s' % i: 'value%s' % i}, + container['securityContext']) + + +class ContainerObjectTestCase(base.BaseUnitTestCase): + def test__create_volume_mounts(self): volume_mount = {'name': 'fake_name', 'mountPath': 'fake_path'} - ssh_vol = {'name': kubernetes.KubernetesObject.SSHKEY_DEFAULT, - 'mountPath': kubernetes.KubernetesObject.SSH_MOUNT_PATH, + ssh_vol = {'name': 'fake_ssh_key', + 'mountPath': kubernetes.ContainerObject.SSH_MOUNT_PATH, 'readOnly': False} expected = copy.deepcopy(volume_mount) expected['readOnly'] = False expected = [expected, ssh_vol] - k8s_obj = kubernetes.KubernetesObject('name', - volumeMounts=[volume_mount]) - output = k8s_obj._create_volume_mounts() + container_obj = kubernetes.ContainerObject( + 'cname', 'fake_ssh_key', volumeMounts=[volume_mount]) + output = container_obj._create_volume_mounts() self.assertEqual(expected, output) def test__create_volume_mounts_no_volume_mounts(self): - ssh_vol = {'name': kubernetes.KubernetesObject.SSHKEY_DEFAULT, - 'mountPath': kubernetes.KubernetesObject.SSH_MOUNT_PATH, + ssh_vol = {'name': 'fake_ssh_key2', + 'mountPath': kubernetes.ContainerObject.SSH_MOUNT_PATH, 'readOnly': False} - k8s_obj = kubernetes.KubernetesObject('name') - output = k8s_obj._create_volume_mounts() + container_obj = kubernetes.ContainerObject('name', 'fake_ssh_key2') + output = container_obj._create_volume_mounts() self.assertEqual([ssh_vol], output) def test__create_volume_mounts_item(self): @@ -177,20 +238,62 @@ class KubernetesObjectTestCase(base.BaseUnitTestCase): 'mountPath': 'fake_path'} expected = copy.deepcopy(volume_mount) expected['readOnly'] = False - output = kubernetes.KubernetesObject._create_volume_mounts_item( + output = kubernetes.ContainerObject._create_volume_mounts_item( volume_mount) self.assertEqual(expected, output) - def test__create_container_item(self): + def test_get_container_item(self): volume_mount = {'name': 'fake_name', 'mountPath': 'fake_path'} args = ['arg1', 'arg2'] - k8s_obj = kubernetes.KubernetesObject( + container_obj = kubernetes.ContainerObject( 'cname', ssh_key='fake_sshkey', volumeMount=[volume_mount], args=args) expected = {'args': args, - 'command': [kubernetes.KubernetesObject.COMMAND_DEFAULT], - 'image': kubernetes.KubernetesObject.IMAGE_DEFAULT, + 'command': [kubernetes.ContainerObject.COMMAND_DEFAULT], + 'image': kubernetes.ContainerObject.IMAGE_DEFAULT, 'name': 'cname-container', - 'volumeMounts': k8s_obj._create_volume_mounts()} - self.assertEqual(expected, k8s_obj._create_container_item()) + 'volumeMounts': container_obj._create_volume_mounts()} + self.assertEqual(expected, container_obj.get_container_item()) + + def test_get_container_item_with_security_context(self): + volume_mount = {'name': 'fake_name', + 'mountPath': 'fake_path'} + args = ['arg1', 'arg2'] + container_obj = kubernetes.ContainerObject( + 'cname', ssh_key='fake_sshkey', volumeMount=[volume_mount], + args=args, securityContext={'key': 'value'}) + expected = {'args': args, + 'command': [kubernetes.ContainerObject.COMMAND_DEFAULT], + 'image': kubernetes.ContainerObject.IMAGE_DEFAULT, + 'name': 'cname-container', + 'volumeMounts': container_obj._create_volume_mounts(), + 'securityContext': {'key': 'value'}} + self.assertEqual(expected, container_obj.get_container_item()) + + +class CustomResourceDefinitionObjectTestCase(base.BaseUnitTestCase): + + def test__init(self): + template = { + 'metadata': { + 'name': 'newcrds.ctx_name.com' + }, + 'spec': { + 'group': 'ctx_name.com', + 'version': 'v2', + 'scope': 'scope', + 'names': {'plural': 'newcrds', + 'singular': 'newcrd', + 'kind': 'Newcrd'} + } + } + crd_obj = kubernetes.CustomResourceDefinitionObject( + 'ctx_name', name='newcrd', version='v2', scope='scope') + self.assertEqual('newcrds.ctx_name.com', crd_obj._name) + self.assertEqual(template, crd_obj._template) + + def test__init_missing_parameter(self): + with self.assertRaises(exceptions.KubernetesCRDObjectDefinitionError): + kubernetes.CustomResourceDefinitionObject('ctx_name', + noname='name')