3 ##############################################################################
4 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
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 ##############################################################################
12 # Unittest for yardstick.benchmark.contexts.kubernetes
14 from __future__ import absolute_import
18 from yardstick.benchmark.contexts.base import Context
19 from yardstick.benchmark.contexts.kubernetes import KubernetesContext
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']
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']
41 prefix = 'yardstick.benchmark.contexts.kubernetes'
44 class KubernetesTestCase(unittest.TestCase):
47 # clear kubernetes contexts from global list so we don't break other tests
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,
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)
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))
73 mock_wait_until_running):
75 k8s_context = KubernetesContext()
76 k8s_context.init(context_cfg)
77 with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
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)
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,
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)
100 @mock.patch('{}.k8s_utils.read_pod_status'.format(prefix))
101 def test_wait_until_running(self, mock_read_pod_status):
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()
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)
114 mock_get_pod_list.return_value.items = []
115 server = k8s_context._get_server('server')
116 self.assertIsNone(server)
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)
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)
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)
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)
151 if __name__ == '__main__':