Merge "decrease default hugepages, depends on VNF of course"
[yardstick.git] / tests / unit / benchmark / contexts / test_kubernetes.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
5 #
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 ##############################################################################
11
12 # Unittest for yardstick.benchmark.contexts.kubernetes
13
14 from __future__ import absolute_import
15 import unittest
16 import mock
17
18 from yardstick.benchmark.contexts.base import Context
19 from yardstick.benchmark.contexts.kubernetes import KubernetesContext
20
21
22 context_cfg = {
23     'type': 'Kubernetes',
24     'name': 'k8s',
25     'servers': {
26         'host': {
27             'image': 'openretriever/yardstick',
28             'command': '/bin/bash',
29             'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
30 service ssh restart;while true ; do sleep 10000; done']
31         },
32         'target': {
33             'image': 'openretriever/yardstick',
34             'command': '/bin/bash',
35             'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
36 service ssh restart;while true ; do sleep 10000; done']
37         }
38     }
39 }
40
41 prefix = 'yardstick.benchmark.contexts.kubernetes'
42
43
44 class KubernetesTestCase(unittest.TestCase):
45
46     def tearDown(self):
47         # clear kubernetes contexts from global list so we don't break other tests
48         Context.list = []
49
50     @mock.patch('{}.KubernetesContext._delete_ssh_key'.format(prefix))
51     @mock.patch('{}.KubernetesContext._delete_rcs'.format(prefix))
52     @mock.patch('{}.KubernetesContext._delete_pods'.format(prefix))
53     def test_undeploy(self,
54                       mock_delete_pods,
55                       mock_delete_rcs,
56                       mock_delete_ssh):
57
58         k8s_context = KubernetesContext()
59         k8s_context.init(context_cfg)
60         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
65     @mock.patch('{}.KubernetesContext._wait_until_running'.format(prefix))
66     @mock.patch('{}.KubernetesTemplate.get_rc_pods'.format(prefix))
67     @mock.patch('{}.KubernetesContext._create_rcs'.format(prefix))
68     @mock.patch('{}.KubernetesContext._set_ssh_key'.format(prefix))
69     def test_deploy(self,
70                     mock_set_ssh_key,
71                     mock_create_rcs,
72                     mock_get_rc_pods,
73                     mock_wait_until_running):
74
75         k8s_context = KubernetesContext()
76         k8s_context.init(context_cfg)
77         with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
78             k8s_context.deploy()
79         self.assertTrue(mock_set_ssh_key.called)
80         self.assertTrue(mock_create_rcs.called)
81         self.assertTrue(mock_get_rc_pods.called)
82         self.assertTrue(mock_wait_until_running.called)
83
84     @mock.patch('{}.paramiko'.format(prefix), **{"resource_filename.return_value": ""})
85     @mock.patch('{}.pkg_resources'.format(prefix), **{"resource_filename.return_value": ""})
86     @mock.patch('{}.utils'.format(prefix))
87     @mock.patch('{}.open'.format(prefix), create=True)
88     @mock.patch('{}.k8s_utils.delete_config_map'.format(prefix))
89     @mock.patch('{}.k8s_utils.create_config_map'.format(prefix))
90     def test_ssh_key(self, mock_create, mock_delete, mock_open, mock_utils, mock_resources,
91                      mock_paramiko):
92
93         k8s_context = KubernetesContext()
94         k8s_context.init(context_cfg)
95         k8s_context._set_ssh_key()
96         k8s_context._delete_ssh_key()
97         self.assertTrue(mock_create.called)
98         self.assertTrue(mock_delete.called)
99
100     @mock.patch('{}.k8s_utils.read_pod_status'.format(prefix))
101     def test_wait_until_running(self, mock_read_pod_status):
102
103         k8s_context = KubernetesContext()
104         k8s_context.init(context_cfg)
105         k8s_context.template.pods = ['server']
106         mock_read_pod_status.return_value = 'Running'
107         k8s_context._wait_until_running()
108
109     @mock.patch('{}.k8s_utils.get_pod_list'.format(prefix))
110     def test_get_server(self, mock_get_pod_list):
111         k8s_context = KubernetesContext()
112         k8s_context.init(context_cfg)
113
114         mock_get_pod_list.return_value.items = []
115         server = k8s_context._get_server('server')
116         self.assertIsNone(server)
117
118     @mock.patch('{}.KubernetesContext._create_rc'.format(prefix))
119     def test_create_rcs(self, mock_create_rc):
120         k8s_context = KubernetesContext()
121         k8s_context.init(context_cfg)
122         k8s_context._create_rcs()
123         self.assertTrue(mock_create_rc.called)
124
125     @mock.patch('{}.k8s_utils.create_replication_controller'.format(prefix))
126     def test_create_rc(self, mock_create_replication_controller):
127         k8s_context = KubernetesContext()
128         k8s_context.init(context_cfg)
129         k8s_context._create_rc({})
130         self.assertTrue(mock_create_replication_controller.called)
131
132     @mock.patch('{}.KubernetesContext._delete_rc'.format(prefix))
133     def test_delete_rcs(self, mock_delete_rc):
134         k8s_context = KubernetesContext()
135         k8s_context.init(context_cfg)
136         k8s_context._delete_rcs()
137         self.assertTrue(mock_delete_rc.called)
138
139     @mock.patch('{}.k8s_utils.delete_replication_controller'.format(prefix))
140     def test_delete_rc(self, mock_delete_replication_controller):
141         k8s_context = KubernetesContext()
142         k8s_context.init(context_cfg)
143         k8s_context._delete_rc({})
144         self.assertTrue(mock_delete_replication_controller.called)
145
146
147 def main():
148     unittest.main()
149
150
151 if __name__ == '__main__':
152     main()