73c59c1b84dd431226819054b40fb8f0daa80828
[yardstick.git] / yardstick / tests / unit / benchmark / contexts / test_kubernetes.py
1 ##############################################################################
2 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
3 #
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 ##############################################################################
9
10 import mock
11 import unittest
12
13 from yardstick.benchmark.contexts import kubernetes
14
15
16 context_cfg = {
17     'type': 'Kubernetes',
18     'name': 'k8s',
19     'task_id': '1234567890',
20     'servers': {
21         'host': {
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']
26         },
27         'target': {
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']
32         }
33     }
34 }
35
36 prefix = 'yardstick.benchmark.contexts.kubernetes'
37
38
39 class KubernetesTestCase(unittest.TestCase):
40
41     def setUp(self):
42         self.k8s_context = kubernetes.KubernetesContext()
43         self.addCleanup(self._remove_contexts)
44         self.k8s_context.init(context_cfg)
45
46     def _remove_contexts(self):
47         if self.k8s_context in self.k8s_context.list:
48             self.k8s_context._delete_context()
49
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,
55                       mock_delete_pods,
56                       mock_delete_rcs,
57                       mock_delete_ssh,
58                       mock_delete_services):
59
60         self.k8s_context.undeploy()
61         self.assertTrue(mock_delete_ssh.called)
62         self.assertTrue(mock_delete_rcs.called)
63         self.assertTrue(mock_delete_pods.called)
64         self.assertTrue(mock_delete_services.called)
65
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')
71     def test_deploy(self,
72                     mock_set_ssh_key,
73                     mock_create_rcs,
74                     mock_get_rc_pods,
75                     mock_wait_until_running,
76                     mock_create_services):
77
78         with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
79             self.k8s_context.deploy()
80         self.assertTrue(mock_set_ssh_key.called)
81         self.assertTrue(mock_create_rcs.called)
82         self.assertTrue(mock_create_services.called)
83         self.assertTrue(mock_get_rc_pods.called)
84         self.assertTrue(mock_wait_until_running.called)
85
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()
95
96         self.assertTrue(mock_create.called)
97         self.assertTrue(mock_delete.called)
98
99     @mock.patch.object(kubernetes.k8s_utils, 'read_pod_status')
100     def test_wait_until_running(self, mock_read_pod_status):
101
102         self.k8s_context.template.pods = ['server']
103         mock_read_pod_status.return_value = 'Running'
104         self.k8s_context._wait_until_running()
105
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,
111                         mock_get_node_ip,
112                         mock_get_pod_by_name):
113         class Service(object):
114             def __init__(self):
115                 self.name = 'yardstick'
116                 self.node_port = 30000
117
118         class Services(object):
119             def __init__(self):
120                 self.ports = [Service()]
121
122         class Status(object):
123             def __init__(self):
124                 self.pod_ip = '172.16.10.131'
125
126         class Pod(object):
127             def __init__(self):
128                 self.status = Status()
129
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'
133
134         self.assertIsNotNone(self.k8s_context._get_server('server'))
135
136     @mock.patch.object(kubernetes.KubernetesContext, '_create_rc')
137     def test_create_rcs(self, mock_create_rc):
138         self.k8s_context._create_rcs()
139         self.assertTrue(mock_create_rc.called)
140
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         self.assertTrue(mock_create_replication_controller.called)
145
146     @mock.patch.object(kubernetes.KubernetesContext, '_delete_rc')
147     def test_delete_rcs(self, mock_delete_rc):
148         self.k8s_context._delete_rcs()
149         self.assertTrue(mock_delete_rc.called)
150
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         self.assertTrue(mock_delete_replication_controller.called)
155
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         self.assertTrue(mock_get_node_list.called)
160
161     @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
162     def test_create_services(self, mock_create):
163         self.k8s_context._create_services()
164         self.assertTrue(mock_create.called)
165
166     @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
167     def test_delete_services(self, mock_delete):
168         self.k8s_context._delete_services()
169         self.assertTrue(mock_delete.called)
170
171
172 def main():
173     unittest.main()
174
175
176 if __name__ == '__main__':
177     main()