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.contexts import kubernetes
19 'task_id': '1234567890',
22 'image': 'openretriever/yardstick',
23 'command': '/bin/bash',
24 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
25 service ssh restart;while true ; do sleep 10000; done']
28 'image': 'openretriever/yardstick',
29 'command': '/bin/bash',
30 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
31 service ssh restart;while true ; do sleep 10000; done']
36 prefix = 'yardstick.benchmark.contexts.kubernetes'
39 class KubernetesTestCase(unittest.TestCase):
42 self.k8s_context = kubernetes.KubernetesContext()
43 self.addCleanup(self._remove_contexts)
44 self.k8s_context.init(context_cfg)
46 def _remove_contexts(self):
47 if self.k8s_context in self.k8s_context.list:
48 self.k8s_context._delete_context()
50 @mock.patch.object(kubernetes.KubernetesContext, '_delete_services')
51 @mock.patch.object(kubernetes.KubernetesContext, '_delete_ssh_key')
52 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rcs')
53 @mock.patch.object(kubernetes.KubernetesContext, '_delete_pods')
54 def test_undeploy(self,
58 mock_delete_services):
60 self.k8s_context.undeploy()
61 mock_delete_ssh.assert_called_once()
62 mock_delete_rcs.assert_called_once()
63 mock_delete_pods.assert_called_once()
64 mock_delete_services.assert_called_once()
66 @mock.patch.object(kubernetes.KubernetesContext, '_create_services')
67 @mock.patch.object(kubernetes.KubernetesContext, '_wait_until_running')
68 @mock.patch.object(kubernetes.KubernetesTemplate, 'get_rc_pods')
69 @mock.patch.object(kubernetes.KubernetesContext, '_create_rcs')
70 @mock.patch.object(kubernetes.KubernetesContext, '_set_ssh_key')
75 mock_wait_until_running,
76 mock_create_services):
78 with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
79 self.k8s_context.deploy()
80 mock_set_ssh_key.assert_called_once()
81 mock_create_rcs.assert_called_once()
82 mock_create_services.assert_called_once()
83 mock_get_rc_pods.assert_called_once()
84 mock_wait_until_running.assert_called_once()
86 @mock.patch.object(kubernetes, 'paramiko', **{"resource_filename.return_value": ""})
87 @mock.patch.object(kubernetes, 'pkg_resources', **{"resource_filename.return_value": ""})
88 @mock.patch.object(kubernetes, 'utils')
89 @mock.patch.object(kubernetes, 'open', create=True)
90 @mock.patch.object(kubernetes.k8s_utils, 'delete_config_map')
91 @mock.patch.object(kubernetes.k8s_utils, 'create_config_map')
92 def test_ssh_key(self, mock_create, mock_delete, *args):
93 self.k8s_context._set_ssh_key()
94 self.k8s_context._delete_ssh_key()
96 mock_create.assert_called_once()
97 mock_delete.assert_called_once()
99 @mock.patch.object(kubernetes.k8s_utils, 'read_pod_status')
100 def test_wait_until_running(self, mock_read_pod_status):
102 self.k8s_context.template.pods = ['server']
103 mock_read_pod_status.return_value = 'Running'
104 self.k8s_context._wait_until_running()
106 @mock.patch.object(kubernetes.k8s_utils, 'get_pod_by_name')
107 @mock.patch.object(kubernetes.KubernetesContext, '_get_node_ip')
108 @mock.patch.object(kubernetes.k8s_utils, 'get_service_by_name')
109 def test_get_server(self,
110 mock_get_service_by_name,
112 mock_get_pod_by_name):
113 class Service(object):
115 self.name = 'yardstick'
116 self.node_port = 30000
118 class Services(object):
120 self.ports = [Service()]
122 class Status(object):
124 self.pod_ip = '172.16.10.131'
128 self.status = Status()
130 mock_get_service_by_name.return_value = Services()
131 mock_get_pod_by_name.return_value = Pod()
132 mock_get_node_ip.return_value = '172.16.10.131'
134 self.assertIsNotNone(self.k8s_context._get_server('server'))
136 @mock.patch.object(kubernetes.KubernetesContext, '_create_rc')
137 def test_create_rcs(self, mock_create_rc):
138 self.k8s_context._create_rcs()
139 mock_create_rc.assert_called()
141 @mock.patch.object(kubernetes.k8s_utils, 'create_replication_controller')
142 def test_create_rc(self, mock_create_replication_controller):
143 self.k8s_context._create_rc({})
144 mock_create_replication_controller.assert_called_once()
146 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rc')
147 def test_delete_rcs(self, mock_delete_rc):
148 self.k8s_context._delete_rcs()
149 mock_delete_rc.assert_called()
151 @mock.patch.object(kubernetes.k8s_utils, 'delete_replication_controller')
152 def test_delete_rc(self, mock_delete_replication_controller):
153 self.k8s_context._delete_rc({})
154 mock_delete_replication_controller.assert_called_once()
156 @mock.patch.object(kubernetes.k8s_utils, 'get_node_list')
157 def test_get_node_ip(self, mock_get_node_list):
158 self.k8s_context._get_node_ip()
159 mock_get_node_list.assert_called_once()
161 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
162 def test_create_services(self, mock_create):
163 self.k8s_context._create_services()
164 mock_create.assert_called()
166 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
167 def test_delete_services(self, mock_delete):
168 self.k8s_context._delete_services()
169 mock_delete.assert_called()