1 ##############################################################################
2 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
13 from yardstick.benchmark import contexts
14 from yardstick.benchmark.contexts import base
15 from yardstick.benchmark.contexts import kubernetes
16 from yardstick.orchestrator import kubernetes as orchestrator_kubernetes
20 'type': contexts.CONTEXT_KUBERNETES,
22 'task_id': '1234567890',
25 'image': 'openretriever/yardstick',
26 'command': '/bin/bash',
27 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; '
28 'service ssh restart;while true ; do sleep 10000; done']
31 'image': 'openretriever/yardstick',
32 'command': '/bin/bash',
33 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; '
34 'service ssh restart;while true ; do sleep 10000; done']
39 prefix = 'yardstick.benchmark.contexts.kubernetes'
42 class KubernetesTestCase(unittest.TestCase):
45 self.k8s_context = kubernetes.KubernetesContext()
46 self.addCleanup(self._remove_contexts)
47 self.k8s_context.init(CONTEXT_CFG)
50 def _remove_contexts():
51 for context in base.Context.list:
52 context._delete_context()
53 base.Context.list = []
55 @mock.patch.object(kubernetes.KubernetesContext, '_delete_services')
56 @mock.patch.object(kubernetes.KubernetesContext, '_delete_ssh_key')
57 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rcs')
58 @mock.patch.object(kubernetes.KubernetesContext, '_delete_pods')
59 def test_undeploy(self,
63 mock_delete_services):
65 self.k8s_context.undeploy()
66 mock_delete_ssh.assert_called_once()
67 mock_delete_rcs.assert_called_once()
68 mock_delete_pods.assert_called_once()
69 mock_delete_services.assert_called_once()
71 @mock.patch.object(kubernetes.KubernetesContext, '_create_services')
72 @mock.patch.object(kubernetes.KubernetesContext, '_wait_until_running')
73 @mock.patch.object(orchestrator_kubernetes.KubernetesTemplate,
75 @mock.patch.object(kubernetes.KubernetesContext, '_create_rcs')
76 @mock.patch.object(kubernetes.KubernetesContext, '_set_ssh_key')
81 mock_wait_until_running,
82 mock_create_services):
84 with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
85 self.k8s_context.deploy()
86 mock_set_ssh_key.assert_called_once()
87 mock_create_rcs.assert_called_once()
88 mock_create_services.assert_called_once()
89 mock_get_rc_pods.assert_called_once()
90 mock_wait_until_running.assert_called_once()
92 @mock.patch.object(kubernetes, 'paramiko', **{"resource_filename.return_value": ""})
93 @mock.patch.object(kubernetes, 'pkg_resources', **{"resource_filename.return_value": ""})
94 @mock.patch.object(kubernetes, 'utils')
95 @mock.patch.object(kubernetes, 'open', create=True)
96 @mock.patch.object(kubernetes.k8s_utils, 'delete_config_map')
97 @mock.patch.object(kubernetes.k8s_utils, 'create_config_map')
98 def test_ssh_key(self, mock_create, mock_delete, *args):
99 self.k8s_context._set_ssh_key()
100 self.k8s_context._delete_ssh_key()
102 mock_create.assert_called_once()
103 mock_delete.assert_called_once()
105 @mock.patch.object(kubernetes.k8s_utils, 'read_pod_status')
106 def test_wait_until_running(self, mock_read_pod_status):
108 self.k8s_context.template.pods = ['server']
109 mock_read_pod_status.return_value = 'Running'
110 self.k8s_context._wait_until_running()
112 @mock.patch.object(kubernetes.k8s_utils, 'get_pod_by_name')
113 @mock.patch.object(kubernetes.KubernetesContext, '_get_node_ip')
114 @mock.patch.object(kubernetes.k8s_utils, 'get_service_by_name')
115 def test_get_server(self,
116 mock_get_service_by_name,
118 mock_get_pod_by_name):
119 class Service(object):
121 self.name = 'yardstick'
122 self.node_port = 30000
124 class Services(object):
126 self.ports = [Service()]
128 class Status(object):
130 self.pod_ip = '172.16.10.131'
134 self.status = Status()
136 mock_get_service_by_name.return_value = Services()
137 mock_get_pod_by_name.return_value = Pod()
138 mock_get_node_ip.return_value = '172.16.10.131'
140 self.assertIsNotNone(self.k8s_context._get_server('server'))
142 @mock.patch.object(kubernetes.KubernetesContext, '_create_rc')
143 def test_create_rcs(self, mock_create_rc):
144 self.k8s_context._create_rcs()
145 mock_create_rc.assert_called()
147 @mock.patch.object(kubernetes.k8s_utils, 'create_replication_controller')
148 def test_create_rc(self, mock_create_replication_controller):
149 self.k8s_context._create_rc({})
150 mock_create_replication_controller.assert_called_once()
152 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rc')
153 def test_delete_rcs(self, mock_delete_rc):
154 self.k8s_context._delete_rcs()
155 mock_delete_rc.assert_called()
157 @mock.patch.object(kubernetes.k8s_utils, 'delete_replication_controller')
158 def test_delete_rc(self, mock_delete_replication_controller):
159 self.k8s_context._delete_rc({})
160 mock_delete_replication_controller.assert_called_once()
162 @mock.patch.object(kubernetes.k8s_utils, 'get_node_list')
163 def test_get_node_ip(self, mock_get_node_list):
164 self.k8s_context._get_node_ip()
165 mock_get_node_list.assert_called_once()
167 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
168 def test_create_services(self, mock_create):
169 self.k8s_context._create_services()
170 mock_create.assert_called()
172 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
173 def test_delete_services(self, mock_delete):
174 self.k8s_context._delete_services()
175 mock_delete.assert_called()
178 self.k8s_context._delete_context()
179 with mock.patch.object(orchestrator_kubernetes, 'KubernetesTemplate',
180 return_value='fake_template') as mock_k8stemplate:
181 self.k8s_context = kubernetes.KubernetesContext()
182 self.k8s_context.init(CONTEXT_CFG)
183 mock_k8stemplate.assert_called_once_with(self.k8s_context.name,
185 self.assertEqual('fake_template', self.k8s_context.template)
187 def test__get_physical_nodes(self):
188 result = self.k8s_context._get_physical_nodes()
189 self.assertIsNone(result)
191 def test__get_physical_node_for_server(self):
192 result = self.k8s_context._get_physical_node_for_server("fake")
193 self.assertIsNone(result)