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 base
14 from yardstick.benchmark.contexts import kubernetes
20 'task_id': '1234567890',
23 'image': 'openretriever/yardstick',
24 'command': '/bin/bash',
25 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
26 service ssh restart;while true ; do sleep 10000; done']
29 'image': 'openretriever/yardstick',
30 'command': '/bin/bash',
31 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
32 service ssh restart;while true ; do sleep 10000; done']
37 prefix = 'yardstick.benchmark.contexts.kubernetes'
40 class KubernetesTestCase(unittest.TestCase):
43 self.k8s_context = kubernetes.KubernetesContext()
44 self.addCleanup(self._remove_contexts)
45 self.k8s_context.init(context_cfg)
48 def _remove_contexts():
49 for context in base.Context.list:
50 context._delete_context()
51 base.Context.list = []
53 @mock.patch.object(kubernetes.KubernetesContext, '_delete_services')
54 @mock.patch.object(kubernetes.KubernetesContext, '_delete_ssh_key')
55 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rcs')
56 @mock.patch.object(kubernetes.KubernetesContext, '_delete_pods')
57 def test_undeploy(self,
61 mock_delete_services):
63 self.k8s_context.undeploy()
64 mock_delete_ssh.assert_called_once()
65 mock_delete_rcs.assert_called_once()
66 mock_delete_pods.assert_called_once()
67 mock_delete_services.assert_called_once()
69 @mock.patch.object(kubernetes.KubernetesContext, '_create_services')
70 @mock.patch.object(kubernetes.KubernetesContext, '_wait_until_running')
71 @mock.patch.object(kubernetes.KubernetesTemplate, 'get_rc_pods')
72 @mock.patch.object(kubernetes.KubernetesContext, '_create_rcs')
73 @mock.patch.object(kubernetes.KubernetesContext, '_set_ssh_key')
78 mock_wait_until_running,
79 mock_create_services):
81 with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
82 self.k8s_context.deploy()
83 mock_set_ssh_key.assert_called_once()
84 mock_create_rcs.assert_called_once()
85 mock_create_services.assert_called_once()
86 mock_get_rc_pods.assert_called_once()
87 mock_wait_until_running.assert_called_once()
89 @mock.patch.object(kubernetes, 'paramiko', **{"resource_filename.return_value": ""})
90 @mock.patch.object(kubernetes, 'pkg_resources', **{"resource_filename.return_value": ""})
91 @mock.patch.object(kubernetes, 'utils')
92 @mock.patch.object(kubernetes, 'open', create=True)
93 @mock.patch.object(kubernetes.k8s_utils, 'delete_config_map')
94 @mock.patch.object(kubernetes.k8s_utils, 'create_config_map')
95 def test_ssh_key(self, mock_create, mock_delete, *args):
96 self.k8s_context._set_ssh_key()
97 self.k8s_context._delete_ssh_key()
99 mock_create.assert_called_once()
100 mock_delete.assert_called_once()
102 @mock.patch.object(kubernetes.k8s_utils, 'read_pod_status')
103 def test_wait_until_running(self, mock_read_pod_status):
105 self.k8s_context.template.pods = ['server']
106 mock_read_pod_status.return_value = 'Running'
107 self.k8s_context._wait_until_running()
109 @mock.patch.object(kubernetes.k8s_utils, 'get_pod_by_name')
110 @mock.patch.object(kubernetes.KubernetesContext, '_get_node_ip')
111 @mock.patch.object(kubernetes.k8s_utils, 'get_service_by_name')
112 def test_get_server(self,
113 mock_get_service_by_name,
115 mock_get_pod_by_name):
116 class Service(object):
118 self.name = 'yardstick'
119 self.node_port = 30000
121 class Services(object):
123 self.ports = [Service()]
125 class Status(object):
127 self.pod_ip = '172.16.10.131'
131 self.status = Status()
133 mock_get_service_by_name.return_value = Services()
134 mock_get_pod_by_name.return_value = Pod()
135 mock_get_node_ip.return_value = '172.16.10.131'
137 self.assertIsNotNone(self.k8s_context._get_server('server'))
139 @mock.patch.object(kubernetes.KubernetesContext, '_create_rc')
140 def test_create_rcs(self, mock_create_rc):
141 self.k8s_context._create_rcs()
142 mock_create_rc.assert_called()
144 @mock.patch.object(kubernetes.k8s_utils, 'create_replication_controller')
145 def test_create_rc(self, mock_create_replication_controller):
146 self.k8s_context._create_rc({})
147 mock_create_replication_controller.assert_called_once()
149 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rc')
150 def test_delete_rcs(self, mock_delete_rc):
151 self.k8s_context._delete_rcs()
152 mock_delete_rc.assert_called()
154 @mock.patch.object(kubernetes.k8s_utils, 'delete_replication_controller')
155 def test_delete_rc(self, mock_delete_replication_controller):
156 self.k8s_context._delete_rc({})
157 mock_delete_replication_controller.assert_called_once()
159 @mock.patch.object(kubernetes.k8s_utils, 'get_node_list')
160 def test_get_node_ip(self, mock_get_node_list):
161 self.k8s_context._get_node_ip()
162 mock_get_node_list.assert_called_once()
164 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
165 def test_create_services(self, mock_create):
166 self.k8s_context._create_services()
167 mock_create.assert_called()
169 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
170 def test_delete_services(self, mock_delete):
171 self.k8s_context._delete_services()
172 mock_delete.assert_called()