Merge "Open storperf testcase to huawei-pod2"
[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.kubernetes import KubernetesContext
19
20
21 context_cfg = {
22     'type': 'Kubernetes',
23     'name': 'k8s',
24     'servers': {
25         'host': {
26             'image': 'openretriever/yardstick',
27             'command': '/bin/bash',
28             'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
29 service ssh restart;while true ; do sleep 10000; done']
30         },
31         'target': {
32             'image': 'openretriever/yardstick',
33             'command': '/bin/bash',
34             'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
35 service ssh restart;while true ; do sleep 10000; done']
36         }
37     }
38 }
39
40 prefix = 'yardstick.benchmark.contexts.kubernetes'
41
42
43 class UndeployTestCase(unittest.TestCase):
44
45     @mock.patch('{}.KubernetesContext._delete_ssh_key'.format(prefix))
46     @mock.patch('{}.KubernetesContext._delete_rcs'.format(prefix))
47     @mock.patch('{}.KubernetesContext._delete_pods'.format(prefix))
48     def test_undeploy(self,
49                       mock_delete_pods,
50                       mock_delete_rcs,
51                       mock_delete_ssh):
52
53         k8s_context = KubernetesContext()
54         k8s_context.init(context_cfg)
55         k8s_context.undeploy()
56         self.assertTrue(mock_delete_ssh.called)
57         self.assertTrue(mock_delete_rcs.called)
58         self.assertTrue(mock_delete_pods.called)
59
60
61 class DeployTestCase(unittest.TestCase):
62
63     @mock.patch('{}.KubernetesContext._wait_until_running'.format(prefix))
64     @mock.patch('{}.KubernetesTemplate.get_rc_pods'.format(prefix))
65     @mock.patch('{}.KubernetesContext._create_rcs'.format(prefix))
66     @mock.patch('{}.KubernetesContext._set_ssh_key'.format(prefix))
67     def test_deploy(self,
68                     mock_set_ssh_key,
69                     mock_create_rcs,
70                     mock_get_rc_pods,
71                     mock_wait_until_running):
72
73         k8s_context = KubernetesContext()
74         k8s_context.init(context_cfg)
75         k8s_context.deploy()
76         self.assertTrue(mock_set_ssh_key.called)
77         self.assertTrue(mock_create_rcs.called)
78         self.assertTrue(mock_get_rc_pods.called)
79         self.assertTrue(mock_wait_until_running.called)
80
81
82 class SSHKeyTestCase(unittest.TestCase):
83
84     @mock.patch('{}.k8s_utils.delete_config_map'.format(prefix))
85     @mock.patch('{}.k8s_utils.create_config_map'.format(prefix))
86     def test_ssh_key(self, mock_create, mock_delete):
87
88         k8s_context = KubernetesContext()
89         k8s_context.init(context_cfg)
90         k8s_context._set_ssh_key()
91         k8s_context._delete_ssh_key()
92         self.assertTrue(mock_create.called)
93         self.assertTrue(mock_delete.called)
94
95
96 class WaitUntilRunningTestCase(unittest.TestCase):
97
98     @mock.patch('{}.k8s_utils.read_pod_status'.format(prefix))
99     def test_wait_until_running(self, mock_read_pod_status):
100
101         k8s_context = KubernetesContext()
102         k8s_context.init(context_cfg)
103         k8s_context.template.pods = ['server']
104         mock_read_pod_status.return_value = 'Running'
105         k8s_context._wait_until_running()
106
107
108 class GetServerTestCase(unittest.TestCase):
109
110     @mock.patch('{}.k8s_utils.get_pod_list'.format(prefix))
111     def test_get_server(self, mock_get_pod_list):
112         k8s_context = KubernetesContext()
113         k8s_context.init(context_cfg)
114
115         mock_get_pod_list.return_value.items = []
116         server = k8s_context._get_server('server')
117         self.assertIsNone(server)
118
119
120 class CreateRcsTestCase(unittest.TestCase):
121
122     @mock.patch('{}.KubernetesContext._create_rc'.format(prefix))
123     def test_create_rcs(self, mock_create_rc):
124         k8s_context = KubernetesContext()
125         k8s_context.init(context_cfg)
126         k8s_context._create_rcs()
127         self.assertTrue(mock_create_rc.called)
128
129
130 class CreateRcTestCase(unittest.TestCase):
131
132     @mock.patch('{}.k8s_utils.create_replication_controller'.format(prefix))
133     def test_create_rc(self, mock_create_replication_controller):
134         k8s_context = KubernetesContext()
135         k8s_context.init(context_cfg)
136         k8s_context._create_rc({})
137         self.assertTrue(mock_create_replication_controller.called)
138
139
140 class DeleteRcsTestCases(unittest.TestCase):
141
142     @mock.patch('{}.KubernetesContext._delete_rc'.format(prefix))
143     def test_delete_rcs(self, mock_delete_rc):
144         k8s_context = KubernetesContext()
145         k8s_context.init(context_cfg)
146         k8s_context._delete_rcs()
147         self.assertTrue(mock_delete_rc.called)
148
149
150 class DeleteRcTestCase(unittest.TestCase):
151
152     @mock.patch('{}.k8s_utils.delete_replication_controller'.format(prefix))
153     def test_delete_rc(self, mock_delete_replication_controller):
154         k8s_context = KubernetesContext()
155         k8s_context.init(context_cfg)
156         k8s_context._delete_rc({})
157         self.assertTrue(mock_delete_replication_controller.called)
158
159
160 def main():
161     unittest.main()
162
163
164 if __name__ == '__main__':
165     main()