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.base import Context
14 from yardstick.benchmark.contexts import kubernetes
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.k8s_context.init(context_cfg)
46 # clear kubernetes contexts from global list so we don't break other tests
49 @mock.patch.object(kubernetes.KubernetesContext, '_delete_services')
50 @mock.patch.object(kubernetes.KubernetesContext, '_delete_ssh_key')
51 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rcs')
52 @mock.patch.object(kubernetes.KubernetesContext, '_delete_pods')
53 def test_undeploy(self,
57 mock_delete_services):
59 self.k8s_context.undeploy()
60 self.assertTrue(mock_delete_ssh.called)
61 self.assertTrue(mock_delete_rcs.called)
62 self.assertTrue(mock_delete_pods.called)
63 self.assertTrue(mock_delete_services.called)
65 @mock.patch.object(kubernetes.KubernetesContext, '_create_services')
66 @mock.patch.object(kubernetes.KubernetesContext, '_wait_until_running')
67 @mock.patch.object(kubernetes.KubernetesTemplate, 'get_rc_pods')
68 @mock.patch.object(kubernetes.KubernetesContext, '_create_rcs')
69 @mock.patch.object(kubernetes.KubernetesContext, '_set_ssh_key')
74 mock_wait_until_running,
75 mock_create_services):
77 with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
78 self.k8s_context.deploy()
79 self.assertTrue(mock_set_ssh_key.called)
80 self.assertTrue(mock_create_rcs.called)
81 self.assertTrue(mock_create_services.called)
82 self.assertTrue(mock_get_rc_pods.called)
83 self.assertTrue(mock_wait_until_running.called)
85 @mock.patch.object(kubernetes, 'paramiko', **{"resource_filename.return_value": ""})
86 @mock.patch.object(kubernetes, 'pkg_resources', **{"resource_filename.return_value": ""})
87 @mock.patch.object(kubernetes, 'utils')
88 @mock.patch.object(kubernetes, 'open', create=True)
89 @mock.patch.object(kubernetes.k8s_utils, 'delete_config_map')
90 @mock.patch.object(kubernetes.k8s_utils, 'create_config_map')
91 def test_ssh_key(self, mock_create, mock_delete, *args):
92 self.k8s_context._set_ssh_key()
93 self.k8s_context._delete_ssh_key()
95 self.assertTrue(mock_create.called)
96 self.assertTrue(mock_delete.called)
98 @mock.patch.object(kubernetes.k8s_utils, 'read_pod_status')
99 def test_wait_until_running(self, mock_read_pod_status):
101 self.k8s_context.template.pods = ['server']
102 mock_read_pod_status.return_value = 'Running'
103 self.k8s_context._wait_until_running()
105 @mock.patch.object(kubernetes.k8s_utils, 'get_pod_by_name')
106 @mock.patch.object(kubernetes.KubernetesContext, '_get_node_ip')
107 @mock.patch.object(kubernetes.k8s_utils, 'get_service_by_name')
108 def test_get_server(self,
109 mock_get_service_by_name,
111 mock_get_pod_by_name):
112 class Service(object):
114 self.name = 'yardstick'
115 self.node_port = 30000
117 class Services(object):
119 self.ports = [Service()]
121 class Status(object):
123 self.pod_ip = '172.16.10.131'
127 self.status = Status()
129 mock_get_service_by_name.return_value = Services()
130 mock_get_pod_by_name.return_value = Pod()
131 mock_get_node_ip.return_value = '172.16.10.131'
133 self.assertIsNotNone(self.k8s_context._get_server('server'))
135 @mock.patch.object(kubernetes.KubernetesContext, '_create_rc')
136 def test_create_rcs(self, mock_create_rc):
137 self.k8s_context._create_rcs()
138 self.assertTrue(mock_create_rc.called)
140 @mock.patch.object(kubernetes.k8s_utils, 'create_replication_controller')
141 def test_create_rc(self, mock_create_replication_controller):
142 self.k8s_context._create_rc({})
143 self.assertTrue(mock_create_replication_controller.called)
145 @mock.patch.object(kubernetes.KubernetesContext, '_delete_rc')
146 def test_delete_rcs(self, mock_delete_rc):
147 self.k8s_context._delete_rcs()
148 self.assertTrue(mock_delete_rc.called)
150 @mock.patch.object(kubernetes.k8s_utils, 'delete_replication_controller')
151 def test_delete_rc(self, mock_delete_replication_controller):
152 self.k8s_context._delete_rc({})
153 self.assertTrue(mock_delete_replication_controller.called)
155 @mock.patch.object(kubernetes.k8s_utils, 'get_node_list')
156 def test_get_node_ip(self, mock_get_node_list):
157 self.k8s_context._get_node_ip()
158 self.assertTrue(mock_get_node_list.called)
160 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
161 def test_create_services(self, mock_create):
162 self.k8s_context._create_services()
163 self.assertTrue(mock_create.called)
165 @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
166 def test_delete_services(self, mock_delete):
167 self.k8s_context._delete_services()
168 self.assertTrue(mock_delete.called)
175 if __name__ == '__main__':