root / svc_extstorage / tests.py @ 2eba2338
History | View | Annotate | Download (35.1 kB)
1 | 2eba2338 | Stratos Psomadakis | #!/usr/bin/env python
|
---|---|---|---|
2 | 2eba2338 | Stratos Psomadakis | #
|
3 | 2eba2338 | Stratos Psomadakis | # Copyright (c) 2010-2013 Greek Research and Technology Network S.A.
|
4 | 2eba2338 | Stratos Psomadakis | #
|
5 | 2eba2338 | Stratos Psomadakis | # This program is free software; you can redistribute it and/or modify
|
6 | 2eba2338 | Stratos Psomadakis | # it under the terms of the GNU General Public License as published by
|
7 | 2eba2338 | Stratos Psomadakis | # the Free Software Foundation; either version 2 of the License, or
|
8 | 2eba2338 | Stratos Psomadakis | # (at your option) any later version.
|
9 | 2eba2338 | Stratos Psomadakis | #
|
10 | 2eba2338 | Stratos Psomadakis | # This program is distributed in the hope that it will be useful, but
|
11 | 2eba2338 | Stratos Psomadakis | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 | 2eba2338 | Stratos Psomadakis | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13 | 2eba2338 | Stratos Psomadakis | # General Public License for more details.
|
14 | 2eba2338 | Stratos Psomadakis | #
|
15 | 2eba2338 | Stratos Psomadakis | # You should have received a copy of the GNU General Public License
|
16 | 2eba2338 | Stratos Psomadakis | # along with this program; if not, write to the Free Software
|
17 | 2eba2338 | Stratos Psomadakis | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18 | 2eba2338 | Stratos Psomadakis | # 02110-1301, USA.
|
19 | 2eba2338 | Stratos Psomadakis | |
20 | 2eba2338 | Stratos Psomadakis | |
21 | 2eba2338 | Stratos Psomadakis | try:
|
22 | 2eba2338 | Stratos Psomadakis | import unittest2 as unittest |
23 | 2eba2338 | Stratos Psomadakis | except ImportError: |
24 | 2eba2338 | Stratos Psomadakis | import unittest |
25 | 2eba2338 | Stratos Psomadakis | |
26 | 2eba2338 | Stratos Psomadakis | import os |
27 | 2eba2338 | Stratos Psomadakis | from mock import patch |
28 | 2eba2338 | Stratos Psomadakis | from storwize_svc import * |
29 | 2eba2338 | Stratos Psomadakis | import subprocess |
30 | 2eba2338 | Stratos Psomadakis | |
31 | 2eba2338 | Stratos Psomadakis | |
32 | 2eba2338 | Stratos Psomadakis | @patch('paramiko.SSHClient', autospec=True) |
33 | 2eba2338 | Stratos Psomadakis | class SVCConnectionTest(unittest.TestCase): |
34 | 2eba2338 | Stratos Psomadakis | def test_ssh_injection_1(self, ssh_conn): |
35 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
36 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', '- l'] |
37 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, self.conn.run_ssh_cmd, cmd_list) |
38 | 2eba2338 | Stratos Psomadakis | |
39 | 2eba2338 | Stratos Psomadakis | def test_ssh_injection_2(self, ssh_conn): |
40 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
41 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', ';cat>/dev/sda</dev/zero'] |
42 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, self.conn.run_ssh_cmd, cmd_list) |
43 | 2eba2338 | Stratos Psomadakis | |
44 | 2eba2338 | Stratos Psomadakis | @patch('paramiko.ChannelFile') |
45 | 2eba2338 | Stratos Psomadakis | def test_initial_connection_ok(self, chan, ssh_conn): |
46 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
47 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', '-l'] |
48 | 2eba2338 | Stratos Psomadakis | chan.channel.recv_exit_status.return_value = 0
|
49 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.exec_command.return_value = (chan, chan, chan) |
50 | 2eba2338 | Stratos Psomadakis | self.conn.run_ssh_cmd(cmd_list)
|
51 | 2eba2338 | Stratos Psomadakis | kwargs = {'port': 22, |
52 | 2eba2338 | Stratos Psomadakis | 'username': 'user', |
53 | 2eba2338 | Stratos Psomadakis | 'password': 'userpass', |
54 | 2eba2338 | Stratos Psomadakis | 'timeout': 30, |
55 | 2eba2338 | Stratos Psomadakis | 'look_for_keys': False, |
56 | 2eba2338 | Stratos Psomadakis | 'allow_agent': False} |
57 | 2eba2338 | Stratos Psomadakis | |
58 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.connect.assert_called_once_with('127.0.0.1',
|
59 | 2eba2338 | Stratos Psomadakis | **kwargs) |
60 | 2eba2338 | Stratos Psomadakis | |
61 | 2eba2338 | Stratos Psomadakis | @patch('paramiko.ChannelFile') |
62 | 2eba2338 | Stratos Psomadakis | def test_initial_connection_pooled(self, chan, ssh_conn): |
63 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
64 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', '-l'] |
65 | 2eba2338 | Stratos Psomadakis | chan.channel.recv_exit_status.return_value = 0
|
66 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.exec_command.return_value = (chan, chan, chan) |
67 | 2eba2338 | Stratos Psomadakis | self.conn.run_ssh_cmd(cmd_list)
|
68 | 2eba2338 | Stratos Psomadakis | self.conn.run_ssh_cmd(cmd_list)
|
69 | 2eba2338 | Stratos Psomadakis | kwargs = {'port': 22, |
70 | 2eba2338 | Stratos Psomadakis | 'username': 'user', |
71 | 2eba2338 | Stratos Psomadakis | 'password': 'userpass', |
72 | 2eba2338 | Stratos Psomadakis | 'timeout': 30, |
73 | 2eba2338 | Stratos Psomadakis | 'look_for_keys': False, |
74 | 2eba2338 | Stratos Psomadakis | 'allow_agent': False} |
75 | 2eba2338 | Stratos Psomadakis | |
76 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.connect.assert_called_once_with('127.0.0.1',
|
77 | 2eba2338 | Stratos Psomadakis | **kwargs) |
78 | 2eba2338 | Stratos Psomadakis | |
79 | 2eba2338 | Stratos Psomadakis | @patch('paramiko.ChannelFile') |
80 | 2eba2338 | Stratos Psomadakis | def test_initial_connection_fail(self, chan, ssh_conn): |
81 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
82 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', '-l'] |
83 | 2eba2338 | Stratos Psomadakis | chan.channel.recv_exit_status.return_value = -1
|
84 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.exec_command.return_value = (chan, chan, chan) |
85 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, self.conn.run_ssh_cmd, cmd_list) |
86 | 2eba2338 | Stratos Psomadakis | |
87 | 2eba2338 | Stratos Psomadakis | @patch('paramiko.ChannelFile') |
88 | 2eba2338 | Stratos Psomadakis | def test_initial_connection_out(self, chan, ssh_conn): |
89 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
90 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', '-l'] |
91 | 2eba2338 | Stratos Psomadakis | chan.channel.recv_exit_status.return_value = 0
|
92 | 2eba2338 | Stratos Psomadakis | chan.read.return_value = "test"
|
93 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.exec_command.return_value = (chan, chan, chan) |
94 | 2eba2338 | Stratos Psomadakis | out, err = self.conn.run_ssh_cmd(cmd_list)
|
95 | 2eba2338 | Stratos Psomadakis | self.assertEqual(out, "test") |
96 | 2eba2338 | Stratos Psomadakis | self.assertEqual(err, "test") |
97 | 2eba2338 | Stratos Psomadakis | |
98 | 2eba2338 | Stratos Psomadakis | @patch('paramiko.ChannelFile') |
99 | 2eba2338 | Stratos Psomadakis | def test_initial_connection_pooled_retry(self, chan, ssh_conn): |
100 | 2eba2338 | Stratos Psomadakis | self.conn = SVCConnection('127.0.0.1', 22, 'user', 'userpass') |
101 | 2eba2338 | Stratos Psomadakis | cmd_list = ['ls', '-l'] |
102 | 2eba2338 | Stratos Psomadakis | chan.channel.recv_exit_status.return_value = 0
|
103 | 2eba2338 | Stratos Psomadakis | ssh_conn.return_value.exec_command.return_value = (chan, chan, chan) |
104 | 2eba2338 | Stratos Psomadakis | self.conn.run_ssh_cmd(cmd_list)
|
105 | 2eba2338 | Stratos Psomadakis | transport = ssh_conn.return_value.get_transport.return_value |
106 | 2eba2338 | Stratos Psomadakis | transport.is_active.return_value = False
|
107 | 2eba2338 | Stratos Psomadakis | self.conn.run_ssh_cmd(cmd_list)
|
108 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ssh_conn.return_value.connect.call_count, 2) |
109 | 2eba2338 | Stratos Psomadakis | |
110 | 2eba2338 | Stratos Psomadakis | |
111 | 2eba2338 | Stratos Psomadakis | @patch('storwize_svc.SVCConnection', autospec=True) |
112 | 2eba2338 | Stratos Psomadakis | class SVCInitTest(unittest.TestCase): |
113 | 2eba2338 | Stratos Psomadakis | def test_missing_config(self, svc_conn): |
114 | 2eba2338 | Stratos Psomadakis | self.assertRaises(TypeError, SVCProvider) |
115 | 2eba2338 | Stratos Psomadakis | |
116 | 2eba2338 | Stratos Psomadakis | def test_missing_env(self, svc_conn): |
117 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './test_configs/some_config') |
118 | 2eba2338 | Stratos Psomadakis | |
119 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_SIZE': '1', 'EXTP_SVC_SAN': 'mysan'}) |
120 | 2eba2338 | Stratos Psomadakis | def test_missing_vol_name(self, svc_conn): |
121 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './test_configs/some_config') |
122 | 2eba2338 | Stratos Psomadakis | |
123 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '1'}) |
124 | 2eba2338 | Stratos Psomadakis | def test_missing_san(self, svc_conn): |
125 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './test_configs/some_config') |
126 | 2eba2338 | Stratos Psomadakis | |
127 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '1', |
128 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'mysan'}) |
129 | 2eba2338 | Stratos Psomadakis | def test_bad_config_path(self, svc_conn): |
130 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './test_configs/some_config') |
131 | 2eba2338 | Stratos Psomadakis | |
132 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'EXTP_SVC_SAN': 'mysan'}) |
133 | 2eba2338 | Stratos Psomadakis | def test_bad_identifier(self, svc_conn): |
134 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './test_configs/good_config') |
135 | 2eba2338 | Stratos Psomadakis | |
136 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', |
137 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
138 | 2eba2338 | Stratos Psomadakis | def test_missing_size(self, svc_conn): |
139 | 2eba2338 | Stratos Psomadakis | |
140 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
141 | 2eba2338 | Stratos Psomadakis | |
142 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_name, 'myvol') |
143 | 2eba2338 | Stratos Psomadakis | self.assertIsNone(svc._vol_size)
|
144 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._svc_pool, 'VM_POOL_SYNNEFO') |
145 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._host_id, 2) |
146 | 2eba2338 | Stratos Psomadakis | |
147 | 2eba2338 | Stratos Psomadakis | svc_conn.assert_called_once_with('10.0.2.1', 22, 'myuser', |
148 | 2eba2338 | Stratos Psomadakis | 'uberpass')
|
149 | 2eba2338 | Stratos Psomadakis | |
150 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
151 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
152 | 2eba2338 | Stratos Psomadakis | def test_good_config(self, svc_conn): |
153 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
154 | 2eba2338 | Stratos Psomadakis | |
155 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_name, 'myvol') |
156 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_size, 100) |
157 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._svc_pool, 'VM_POOL_SYNNEFO') |
158 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._host_id, 2) |
159 | 2eba2338 | Stratos Psomadakis | |
160 | 2eba2338 | Stratos Psomadakis | svc_conn.assert_called_once_with('10.0.2.1', 22, 'myuser', |
161 | 2eba2338 | Stratos Psomadakis | 'uberpass')
|
162 | 2eba2338 | Stratos Psomadakis | |
163 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
164 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
165 | 2eba2338 | Stratos Psomadakis | def test_good_config_extra_sections(self, svc_conn): |
166 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config_extra_sections')
|
167 | 2eba2338 | Stratos Psomadakis | |
168 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_name, 'myvol') |
169 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_size, 100) |
170 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._svc_pool, 'synnefo') |
171 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._host_id, 2) |
172 | 2eba2338 | Stratos Psomadakis | |
173 | 2eba2338 | Stratos Psomadakis | svc_conn.assert_called_once_with('10.0.2.1', 22, 'myuser', |
174 | 2eba2338 | Stratos Psomadakis | 'uberpass')
|
175 | 2eba2338 | Stratos Psomadakis | |
176 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
177 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
178 | 2eba2338 | Stratos Psomadakis | def test_good_config_extra_empty_sections(self, svc_conn): |
179 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config_extra_empty_sections')
|
180 | 2eba2338 | Stratos Psomadakis | |
181 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_name, 'myvol') |
182 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._vol_size, 100) |
183 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._svc_pool, 'synnefo') |
184 | 2eba2338 | Stratos Psomadakis | self.assertEqual(svc._host_id, 2) |
185 | 2eba2338 | Stratos Psomadakis | |
186 | 2eba2338 | Stratos Psomadakis | svc_conn.assert_called_once_with('10.0.2.1', 22, 'myuser', |
187 | 2eba2338 | Stratos Psomadakis | 'uberpass')
|
188 | 2eba2338 | Stratos Psomadakis | |
189 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
190 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
191 | 2eba2338 | Stratos Psomadakis | def test_bad_config_section(self, svc_conn): |
192 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
193 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_section')
|
194 | 2eba2338 | Stratos Psomadakis | |
195 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
196 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
197 | 2eba2338 | Stratos Psomadakis | def test_bad_config_missing_section(self, svc_conn): |
198 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
199 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_missing_section')
|
200 | 2eba2338 | Stratos Psomadakis | |
201 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
202 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
203 | 2eba2338 | Stratos Psomadakis | def test_bad_config_missing_fields(self, svc_conn): |
204 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
205 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_missing_fields')
|
206 | 2eba2338 | Stratos Psomadakis | |
207 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
208 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
209 | 2eba2338 | Stratos Psomadakis | def test_bad_config_invalid_format(self, svc_conn): |
210 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
211 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_invalid_format')
|
212 | 2eba2338 | Stratos Psomadakis | |
213 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
214 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
215 | 2eba2338 | Stratos Psomadakis | def test_bad_config_empty_host(self, svc_conn): |
216 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
217 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_empty_host')
|
218 | 2eba2338 | Stratos Psomadakis | |
219 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
220 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
221 | 2eba2338 | Stratos Psomadakis | def test_bad_config_bad_port(self, svc_conn): |
222 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
223 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_bad_port')
|
224 | 2eba2338 | Stratos Psomadakis | |
225 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
226 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
227 | 2eba2338 | Stratos Psomadakis | def test_bad_config_bad_hostid(self, svc_conn): |
228 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider,
|
229 | 2eba2338 | Stratos Psomadakis | './test_configs/bad_config_bad_hostid')
|
230 | 2eba2338 | Stratos Psomadakis | |
231 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': '', 'VOL_SIZE': '1', |
232 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'mysan'}) |
233 | 2eba2338 | Stratos Psomadakis | def test_empty_volume_name(self, svc_conn): |
234 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './some_config') |
235 | 2eba2338 | Stratos Psomadakis | |
236 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '', |
237 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'mysan'}) |
238 | 2eba2338 | Stratos Psomadakis | def test_empty_volume_size(self, svc_conn): |
239 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './some_config') |
240 | 2eba2338 | Stratos Psomadakis | |
241 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': 'test', |
242 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'mysan'}) |
243 | 2eba2338 | Stratos Psomadakis | def test_bad_volume_size(self, svc_conn): |
244 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './some_config') |
245 | 2eba2338 | Stratos Psomadakis | |
246 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '-1', |
247 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'mysan'}) |
248 | 2eba2338 | Stratos Psomadakis | def test_negative_volume_size(self, svc_conn): |
249 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './some_config') |
250 | 2eba2338 | Stratos Psomadakis | |
251 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '-1', |
252 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': ''}) |
253 | 2eba2338 | Stratos Psomadakis | def test_empty_svc_identifier(self, svc_conn): |
254 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider, './some_config') |
255 | 2eba2338 | Stratos Psomadakis | |
256 | 2eba2338 | Stratos Psomadakis | |
257 | 2eba2338 | Stratos Psomadakis | class SVCEnvOpsTest(unittest.TestCase): |
258 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', |
259 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
260 | 2eba2338 | Stratos Psomadakis | def test_create_no_size(self): |
261 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
262 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.create)
|
263 | 2eba2338 | Stratos Psomadakis | |
264 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', |
265 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
266 | 2eba2338 | Stratos Psomadakis | def test_grow_no_size(self): |
267 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
268 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.grow)
|
269 | 2eba2338 | Stratos Psomadakis | |
270 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
271 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
272 | 2eba2338 | Stratos Psomadakis | def test_detach_size(self): |
273 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
274 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.detach)
|
275 | 2eba2338 | Stratos Psomadakis | |
276 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
277 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
278 | 2eba2338 | Stratos Psomadakis | def test_attach_size(self): |
279 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
280 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.attach)
|
281 | 2eba2338 | Stratos Psomadakis | |
282 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
283 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
284 | 2eba2338 | Stratos Psomadakis | def test_verify_size(self): |
285 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
286 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.verify)
|
287 | 2eba2338 | Stratos Psomadakis | |
288 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
289 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
290 | 2eba2338 | Stratos Psomadakis | def test_remove_size(self): |
291 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
292 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.remove)
|
293 | 2eba2338 | Stratos Psomadakis | |
294 | 2eba2338 | Stratos Psomadakis | |
295 | 2eba2338 | Stratos Psomadakis | @patch('subprocess.check_output', autospec=True) |
296 | 2eba2338 | Stratos Psomadakis | @patch('subprocess.check_call', autospec=True) |
297 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
298 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
299 | 2eba2338 | Stratos Psomadakis | class SVCInternalHostOpsTest(unittest.TestCase): |
300 | 2eba2338 | Stratos Psomadakis | def test_check_call_ok(self, call, out): |
301 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
302 | 2eba2338 | Stratos Psomadakis | svc._check_call(['ls', '-l']) |
303 | 2eba2338 | Stratos Psomadakis | |
304 | 2eba2338 | Stratos Psomadakis | def test_check_call_exc(self, call, out): |
305 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
306 | 2eba2338 | Stratos Psomadakis | call.side_effect = subprocess.CalledProcessError(1, "test", |
307 | 2eba2338 | Stratos Psomadakis | output="test")
|
308 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._check_call, ['ls', '-l']) |
309 | 2eba2338 | Stratos Psomadakis | |
310 | 2eba2338 | Stratos Psomadakis | def test_check_output_ok(self, call, out): |
311 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
312 | 2eba2338 | Stratos Psomadakis | out.return_value = "test"
|
313 | 2eba2338 | Stratos Psomadakis | ret = svc._check_output(['ls', '-l']) |
314 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, "test") |
315 | 2eba2338 | Stratos Psomadakis | |
316 | 2eba2338 | Stratos Psomadakis | def test_check_output_empty(self, call, out): |
317 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
318 | 2eba2338 | Stratos Psomadakis | out.return_value = ""
|
319 | 2eba2338 | Stratos Psomadakis | ret = svc._check_output(['ls', '-l']) |
320 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, "") |
321 | 2eba2338 | Stratos Psomadakis | |
322 | 2eba2338 | Stratos Psomadakis | def test_check_output_exc(self, call, out): |
323 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
324 | 2eba2338 | Stratos Psomadakis | out.return_value = "test"
|
325 | 2eba2338 | Stratos Psomadakis | out.side_effect = subprocess.CalledProcessError(1, "test", |
326 | 2eba2338 | Stratos Psomadakis | output="test")
|
327 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._check_output, ['ls', '-l']) |
328 | 2eba2338 | Stratos Psomadakis | |
329 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=["/dev/sda", "/dev/sdb", "/dev/sdc", |
330 | 2eba2338 | Stratos Psomadakis | "/dev/sdd"], autospec=True) |
331 | 2eba2338 | Stratos Psomadakis | def test_devices_add_ok(self, glob, call, out): |
332 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
333 | 2eba2338 | Stratos Psomadakis | svc._devices_add(12)
|
334 | 2eba2338 | Stratos Psomadakis | |
335 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=[], autospec=True) |
336 | 2eba2338 | Stratos Psomadakis | def test_devices_add_not_discovered(self, glob, call, out): |
337 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
338 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._devices_add, 12) |
339 | 2eba2338 | Stratos Psomadakis | |
340 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=["/dev/sda", "/dev/sdc"], autospec=True) |
341 | 2eba2338 | Stratos Psomadakis | def test_devices_add_partial_discovered(self, glob, call, out): |
342 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
343 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._devices_add, 12) |
344 | 2eba2338 | Stratos Psomadakis | |
345 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=["/dev/sda", "/dev/sdc"], autospec=True) |
346 | 2eba2338 | Stratos Psomadakis | def test_devices_add_scan_exc(self, glob, call, out): |
347 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
348 | 2eba2338 | Stratos Psomadakis | call.side_effect = SVCError("failed")
|
349 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._devices_add, 12) |
350 | 2eba2338 | Stratos Psomadakis | |
351 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=["/dev/sda", "/dev/sdb", "/dev/sdc", |
352 | 2eba2338 | Stratos Psomadakis | "/dev/sdd"], autospec=True) |
353 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_devices_discovered', return_value=False, |
354 | 2eba2338 | Stratos Psomadakis | autospec=True)
|
355 | 2eba2338 | Stratos Psomadakis | def test_devices_remove_ok(self, glob, disc, call, out): |
356 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
357 | 2eba2338 | Stratos Psomadakis | with patch('__builtin__.open', autospec=True): |
358 | 2eba2338 | Stratos Psomadakis | svc._devices_remove(12)
|
359 | 2eba2338 | Stratos Psomadakis | |
360 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=["/dev/sda", "/dev/sdb", "/dev/sdc", |
361 | 2eba2338 | Stratos Psomadakis | "/dev/sdd"], autospec=True) |
362 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_devices_discovered', return_value=True, |
363 | 2eba2338 | Stratos Psomadakis | autospec=True)
|
364 | 2eba2338 | Stratos Psomadakis | def test_devices_remove_fail(self, glob, disc, call, out): |
365 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
366 | 2eba2338 | Stratos Psomadakis | with patch('__builtin__.open', autospec=True): |
367 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._devices_remove, 12) |
368 | 2eba2338 | Stratos Psomadakis | |
369 | 2eba2338 | Stratos Psomadakis | @patch('glob.glob', return_value=["/dev/sda", "/dev/sdb", "/dev/sdc", |
370 | 2eba2338 | Stratos Psomadakis | "/dev/sdd"], autospec=True) |
371 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_devices_discovered', return_value=True, |
372 | 2eba2338 | Stratos Psomadakis | autospec=True)
|
373 | 2eba2338 | Stratos Psomadakis | def test_devices_remove_exc(self, glob, disc, call, out): |
374 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
375 | 2eba2338 | Stratos Psomadakis | with patch('__builtin__.open', autospec=True) as op: |
376 | 2eba2338 | Stratos Psomadakis | op.side_effect = IOError("foo") |
377 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._devices_remove, 12) |
378 | 2eba2338 | Stratos Psomadakis | |
379 | 2eba2338 | Stratos Psomadakis | def test_multipath_ok_ok(self, call, out): |
380 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
381 | 2eba2338 | Stratos Psomadakis | out.return_value = "multipath -ll command output not empty"
|
382 | 2eba2338 | Stratos Psomadakis | ret = svc._multipath_ok("/dev/mapper/3123")
|
383 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, True) |
384 | 2eba2338 | Stratos Psomadakis | |
385 | 2eba2338 | Stratos Psomadakis | def test_multipath_ok_fail(self, call, out): |
386 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
387 | 2eba2338 | Stratos Psomadakis | out.return_value = ""
|
388 | 2eba2338 | Stratos Psomadakis | ret = svc._multipath_ok("/dev/mapper/3123")
|
389 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, False) |
390 | 2eba2338 | Stratos Psomadakis | |
391 | 2eba2338 | Stratos Psomadakis | def test_multipath_ok_exc(self, call, out): |
392 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
393 | 2eba2338 | Stratos Psomadakis | call.side_effect = SVCError("command failed")
|
394 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._multipath_ok, "/dev/mapper/3123") |
395 | 2eba2338 | Stratos Psomadakis | |
396 | 2eba2338 | Stratos Psomadakis | def test_multipath_setup_ok(self, call, out): |
397 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
398 | 2eba2338 | Stratos Psomadakis | out.return_value = "multipath -ll command output not empty"
|
399 | 2eba2338 | Stratos Psomadakis | svc._multipath_setup("/dev/mapper/3123")
|
400 | 2eba2338 | Stratos Psomadakis | |
401 | 2eba2338 | Stratos Psomadakis | def test_multipath_setup_fail(self, call, out): |
402 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
403 | 2eba2338 | Stratos Psomadakis | out.return_value = ""
|
404 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._multipath_setup, "/dev/mapper/3123") |
405 | 2eba2338 | Stratos Psomadakis | |
406 | 2eba2338 | Stratos Psomadakis | def test_multipath_setup_exc(self, call, out): |
407 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
408 | 2eba2338 | Stratos Psomadakis | call.side_effect = SVCError("command failed")
|
409 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._multipath_setup, "/dev/mapper/3123") |
410 | 2eba2338 | Stratos Psomadakis | |
411 | 2eba2338 | Stratos Psomadakis | def test_multipath_remove_ok(self, call, out): |
412 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
413 | 2eba2338 | Stratos Psomadakis | out.return_value = ""
|
414 | 2eba2338 | Stratos Psomadakis | svc._multipath_remove("/dev/mapper/3123")
|
415 | 2eba2338 | Stratos Psomadakis | |
416 | 2eba2338 | Stratos Psomadakis | def test_multipath_remove_fail(self, call, out): |
417 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
418 | 2eba2338 | Stratos Psomadakis | out.return_value = "multipath -ll cmd out"
|
419 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._multipath_remove, "/dev/mapper/3123") |
420 | 2eba2338 | Stratos Psomadakis | |
421 | 2eba2338 | Stratos Psomadakis | def test_multipath_remove_exc(self, call, out): |
422 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
423 | 2eba2338 | Stratos Psomadakis | call.side_effect = SVCError("command failed")
|
424 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._multipath_remove, "/dev/mapper/3123") |
425 | 2eba2338 | Stratos Psomadakis | #TODO: host_device_setup/remove , fix testing for devices_* methods, rename
|
426 | 2eba2338 | Stratos Psomadakis | # devices to device
|
427 | 2eba2338 | Stratos Psomadakis | |
428 | 2eba2338 | Stratos Psomadakis | |
429 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCConnection, 'run_ssh_cmd', autospec=True) |
430 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
431 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
432 | 2eba2338 | Stratos Psomadakis | class SVCInternalRemoteOpsTest(unittest.TestCase): |
433 | 2eba2338 | Stratos Psomadakis | def test_get_device_info_ok(self, run_ssh_cmd): |
434 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
435 | 2eba2338 | Stratos Psomadakis | ret_str = "vdisk_UID!1\nSCSI_id!2\ntest3!3\ntest4!4\n"
|
436 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
437 | 2eba2338 | Stratos Psomadakis | ret = svc._get_device_info('myvol')
|
438 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lsvdisk', '-bytes', '-delim', '!', 'myvol'] |
439 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_with(svc._svc_connection, ssh_cmd) |
440 | 2eba2338 | Stratos Psomadakis | self.assertEqual(run_ssh_cmd.call_count, 2) |
441 | 2eba2338 | Stratos Psomadakis | exp_ret = ("/dev/mapper/31", 2) |
442 | 2eba2338 | Stratos Psomadakis | self.assertTupleEqual(ret, exp_ret)
|
443 | 2eba2338 | Stratos Psomadakis | |
444 | 2eba2338 | Stratos Psomadakis | def test_get_device_info_malformed(self, run_ssh_cmd): |
445 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
446 | 2eba2338 | Stratos Psomadakis | ret_str = "vdisk_UID!ab\nSCSI_id!2\ntest3!3\ntest4!4\n"
|
447 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
448 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._get_device_info, 'myvol') |
449 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lsvdisk', '-bytes', '-delim', '!', 'myvol'] |
450 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_with(svc._svc_connection, ssh_cmd) |
451 | 2eba2338 | Stratos Psomadakis | self.assertEqual(run_ssh_cmd.call_count, 2) |
452 | 2eba2338 | Stratos Psomadakis | |
453 | 2eba2338 | Stratos Psomadakis | def test_get_device_info_missing(self, run_ssh_cmd): |
454 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
455 | 2eba2338 | Stratos Psomadakis | ret_str = "vdisk_UID!ab\nsome_field!2\ntest3!3\ntest4!4\n"
|
456 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
457 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._get_device_info, 'myvol') |
458 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lsvdisk', '-bytes', '-delim', '!', 'myvol'] |
459 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_with(svc._svc_connection, ssh_cmd) |
460 | 2eba2338 | Stratos Psomadakis | self.assertEqual(run_ssh_cmd.call_count, 2) |
461 | 2eba2338 | Stratos Psomadakis | |
462 | 2eba2338 | Stratos Psomadakis | def test_get_device_info_empty(self, run_ssh_cmd): |
463 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
464 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
465 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._get_device_info, 'myvol') |
466 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lsvdisk', '-bytes', '-delim', '!', 'myvol'] |
467 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_with(svc._svc_connection, ssh_cmd) |
468 | 2eba2338 | Stratos Psomadakis | self.assertEqual(run_ssh_cmd.call_count, 1) |
469 | 2eba2338 | Stratos Psomadakis | |
470 | 2eba2338 | Stratos Psomadakis | def test_vdisk_defined(self, run_ssh_cmd): |
471 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
472 | 2eba2338 | Stratos Psomadakis | ret_str = "test1!1\ntest2!2\ntest3!3\ntest4!4\n"
|
473 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
474 | 2eba2338 | Stratos Psomadakis | ret = svc._is_vdisk_defined('myvol')
|
475 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lsvdisk', '-bytes', '-delim', '!', 'myvol'] |
476 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
477 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, True) |
478 | 2eba2338 | Stratos Psomadakis | |
479 | 2eba2338 | Stratos Psomadakis | #FIXME:
|
480 | 2eba2338 | Stratos Psomadakis | def test_vdisk_not_defined(self, run_ssh_cmd): |
481 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
482 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
483 | 2eba2338 | Stratos Psomadakis | ret = svc._is_vdisk_defined('myvol')
|
484 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lsvdisk', '-bytes', '-delim', '!', 'myvol'] |
485 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
486 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, False) |
487 | 2eba2338 | Stratos Psomadakis | |
488 | 2eba2338 | Stratos Psomadakis | def test_driver_assert_ok(self, run_ssh_cmd): |
489 | 2eba2338 | Stratos Psomadakis | SVCProvider._driver_assert(1, 'ok') |
490 | 2eba2338 | Stratos Psomadakis | |
491 | 2eba2338 | Stratos Psomadakis | def test_driver_assert_fail(self, run_ssh_cmd): |
492 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, SVCProvider._driver_assert, 0, 'fail') |
493 | 2eba2338 | Stratos Psomadakis | |
494 | 2eba2338 | Stratos Psomadakis | def test_assert_ssh_return_ok(self, run_ssh_cmd): |
495 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
496 | 2eba2338 | Stratos Psomadakis | svc._assert_ssh_return(1, 'fun', ['ls', '-l'], 'test', 'test') |
497 | 2eba2338 | Stratos Psomadakis | |
498 | 2eba2338 | Stratos Psomadakis | def test_assert_ssh_return_fail(self, run_ssh_cmd): |
499 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
500 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._assert_ssh_return, 0, |
501 | 2eba2338 | Stratos Psomadakis | 'fun', ['ls', '-l'], 'test', 'test') |
502 | 2eba2338 | Stratos Psomadakis | |
503 | 2eba2338 | Stratos Psomadakis | def test_exec_cmd_parse_ok(self, run_ssh_cmd): |
504 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
505 | 2eba2338 | Stratos Psomadakis | ret_str = "test1!1\ntest2!2\ntest3!3\ntest4!4\n"
|
506 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
507 | 2eba2338 | Stratos Psomadakis | ret = svc._exec_cmd_and_parse_attrs('ssh_cmd placeholder')
|
508 | 2eba2338 | Stratos Psomadakis | ret_dict = {'test1': '1', 'test2': '2', 'test3': '3', 'test4': '4'} |
509 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
510 | 2eba2338 | Stratos Psomadakis | |
511 | 2eba2338 | Stratos Psomadakis | def test_exec_cmd_parse_empty(self, run_ssh_cmd): |
512 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
513 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
514 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._exec_cmd_and_parse_attrs,
|
515 | 2eba2338 | Stratos Psomadakis | 'ssh_cmd placeholder')
|
516 | 2eba2338 | Stratos Psomadakis | |
517 | 2eba2338 | Stratos Psomadakis | def test_exec_cmd_parse_malformed(self, run_ssh_cmd): |
518 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
519 | 2eba2338 | Stratos Psomadakis | ret_str = "test11 a\ntest2=2\ntest3\ntest4 test\n"
|
520 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
521 | 2eba2338 | Stratos Psomadakis | ret = svc._exec_cmd_and_parse_attrs('ssh_cmd placeholder')
|
522 | 2eba2338 | Stratos Psomadakis | ret_dict = {'test11 a': '', 'test2=2': '', 'test3': '', |
523 | 2eba2338 | Stratos Psomadakis | 'test4 test': ''} |
524 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
525 | 2eba2338 | Stratos Psomadakis | |
526 | 2eba2338 | Stratos Psomadakis | def test_get_vdisk_attributes_ok(self, run_ssh_cmd): |
527 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
528 | 2eba2338 | Stratos Psomadakis | ret_str = "test1!1\ntest2!2\ntest3!3\ntest4!4\n"
|
529 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
530 | 2eba2338 | Stratos Psomadakis | ret = svc._get_vdisk_attributes('ssh_cmd placeholder')
|
531 | 2eba2338 | Stratos Psomadakis | ret_dict = {'test1': '1', 'test2': '2', 'test3': '3', 'test4': '4'} |
532 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
533 | 2eba2338 | Stratos Psomadakis | |
534 | 2eba2338 | Stratos Psomadakis | def test_get_vdisk_attributes_empty(self, run_ssh_cmd): |
535 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
536 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
537 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._get_vdisk_attributes,
|
538 | 2eba2338 | Stratos Psomadakis | 'ssh_cmd placeholder')
|
539 | 2eba2338 | Stratos Psomadakis | |
540 | 2eba2338 | Stratos Psomadakis | def test_get_vdisk_attributes_malformed(self, run_ssh_cmd): |
541 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
542 | 2eba2338 | Stratos Psomadakis | ret_str = "test11 a\ntest2=2\ntest3\ntest4 test\n"
|
543 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
544 | 2eba2338 | Stratos Psomadakis | ret = svc._get_vdisk_attributes('ssh_cmd placeholder')
|
545 | 2eba2338 | Stratos Psomadakis | ret_dict = {'test11 a': '', 'test2=2': '', 'test3': '', |
546 | 2eba2338 | Stratos Psomadakis | 'test4 test': ''} |
547 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
548 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
549 | 2eba2338 | Stratos Psomadakis | |
550 | 2eba2338 | Stratos Psomadakis | def test_get_hdr_dic_ok(self, run_ssh_cmd): |
551 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
552 | 2eba2338 | Stratos Psomadakis | hdr_str = "field1!field2!field3!field4"
|
553 | 2eba2338 | Stratos Psomadakis | row_str = "test1!test2!test3!test4"
|
554 | 2eba2338 | Stratos Psomadakis | ret = svc._get_hdr_dic(hdr_str, row_str, '!')
|
555 | 2eba2338 | Stratos Psomadakis | ret_dict = dict(zip(hdr_str.split('!'), row_str.split('!'))) |
556 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
557 | 2eba2338 | Stratos Psomadakis | |
558 | 2eba2338 | Stratos Psomadakis | def test_get_hdr_dic_malformed(self, run_ssh_cmd): |
559 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
560 | 2eba2338 | Stratos Psomadakis | hdr_str = "field1!field2!field3!field4"
|
561 | 2eba2338 | Stratos Psomadakis | row_str = "test1!test2!test3"
|
562 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._get_hdr_dic, hdr_str, row_str, '!') |
563 | 2eba2338 | Stratos Psomadakis | |
564 | 2eba2338 | Stratos Psomadakis | def test_get_hdr_dic_empty(self, run_ssh_cmd): |
565 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
566 | 2eba2338 | Stratos Psomadakis | ret = svc._get_hdr_dic("", "", '!') |
567 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, {"": ""}) |
568 | 2eba2338 | Stratos Psomadakis | |
569 | 2eba2338 | Stratos Psomadakis | def test_get_hostvdisk_maps_ok(self, run_ssh_cmd): |
570 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
571 | 2eba2338 | Stratos Psomadakis | hdr_str = "field1!vdisk_name!field3!field4\n"
|
572 | 2eba2338 | Stratos Psomadakis | row1_str = "test1!test2!test3!test4\n"
|
573 | 2eba2338 | Stratos Psomadakis | row2_str = "test11!test12!test13!test14\n"
|
574 | 2eba2338 | Stratos Psomadakis | ret_str = hdr_str + row1_str + row2_str |
575 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
576 | 2eba2338 | Stratos Psomadakis | ret = svc._get_hostvdisk_mappings(5)
|
577 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svcinfo', 'lshostvdiskmap', '-delim', '!', '5'] |
578 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
579 | 2eba2338 | Stratos Psomadakis | row1_dict = {'field1': 'test1', |
580 | 2eba2338 | Stratos Psomadakis | 'vdisk_name': 'test2', |
581 | 2eba2338 | Stratos Psomadakis | 'field3': 'test3', |
582 | 2eba2338 | Stratos Psomadakis | 'field4': 'test4'} |
583 | 2eba2338 | Stratos Psomadakis | row2_dict = {'field1': 'test11', |
584 | 2eba2338 | Stratos Psomadakis | 'vdisk_name': 'test12', |
585 | 2eba2338 | Stratos Psomadakis | 'field3': 'test13', |
586 | 2eba2338 | Stratos Psomadakis | 'field4': 'test14'} |
587 | 2eba2338 | Stratos Psomadakis | ret_dict = {'test2': row1_dict, 'test12': row2_dict} |
588 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, ret_dict)
|
589 | 2eba2338 | Stratos Psomadakis | |
590 | 2eba2338 | Stratos Psomadakis | def test_get_hostvdisk_maps_malformed(self, run_ssh_cmd): |
591 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
592 | 2eba2338 | Stratos Psomadakis | hdr_str = "field1!field2!field3!field4\n"
|
593 | 2eba2338 | Stratos Psomadakis | row1_str = "test1!test2!test3!test4\n"
|
594 | 2eba2338 | Stratos Psomadakis | row2_str = "test11!test12!test13!test14\n"
|
595 | 2eba2338 | Stratos Psomadakis | ret_str = hdr_str + row1_str + row2_str |
596 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
597 | 2eba2338 | Stratos Psomadakis | self.assertRaises(Exception, svc._get_hostvdisk_mappings, 5) |
598 | 2eba2338 | Stratos Psomadakis | |
599 | 2eba2338 | Stratos Psomadakis | def test_get_hostvdisk_maps_empty(self, run_ssh_cmd): |
600 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
601 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
602 | 2eba2338 | Stratos Psomadakis | ret = svc._get_hostvdisk_mappings(5)
|
603 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, {})
|
604 | 2eba2338 | Stratos Psomadakis | |
605 | 2eba2338 | Stratos Psomadakis | def test_get_hostvdisk_maps_only_header(self, run_ssh_cmd): |
606 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
607 | 2eba2338 | Stratos Psomadakis | hdr_str = "field1!vdisk_name!field3!field4\n"
|
608 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (hdr_str, "")
|
609 | 2eba2338 | Stratos Psomadakis | ret = svc._get_hostvdisk_mappings(5)
|
610 | 2eba2338 | Stratos Psomadakis | self.assertDictEqual(ret, {})
|
611 | 2eba2338 | Stratos Psomadakis | |
612 | 2eba2338 | Stratos Psomadakis | def test_get_hostvdisk_maps_exc(self, run_ssh_cmd): |
613 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
614 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.side_effect = SVCError("Cannot run ssh cmd")
|
615 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._get_hostvdisk_mappings, 5) |
616 | 2eba2338 | Stratos Psomadakis | |
617 | 2eba2338 | Stratos Psomadakis | def test_map_vol_to_host(self, run_ssh_cmd): |
618 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
619 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("successfully created vol", "") |
620 | 2eba2338 | Stratos Psomadakis | svc._map_vol_to_host('myvol', 7) |
621 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svctask', 'mkvdiskhostmap', '-host', '7', 'myvol'] |
622 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
623 | 2eba2338 | Stratos Psomadakis | |
624 | 2eba2338 | Stratos Psomadakis | def test_map_vol_to_host_malformed(self, run_ssh_cmd): |
625 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
626 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("malformed output", "") |
627 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._map_vol_to_host, 'myvol', 7) |
628 | 2eba2338 | Stratos Psomadakis | |
629 | 2eba2338 | Stratos Psomadakis | def test_map_vol_to_host_empty(self, run_ssh_cmd): |
630 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
631 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
632 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._map_vol_to_host, 'myvol', 7) |
633 | 2eba2338 | Stratos Psomadakis | |
634 | 2eba2338 | Stratos Psomadakis | def test_map_vol_to_host_assert(self, run_ssh_cmd): |
635 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
636 | 2eba2338 | Stratos Psomadakis | self.assertRaises(AssertionError, svc._map_vol_to_host, 'myvol', 5) |
637 | 2eba2338 | Stratos Psomadakis | |
638 | 2eba2338 | Stratos Psomadakis | def test_unmap_vol_from_host(self, run_ssh_cmd): |
639 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
640 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
641 | 2eba2338 | Stratos Psomadakis | svc._unmap_vol_from_host('myvol', 7) |
642 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svctask', 'rmvdiskhostmap', '-host', '7', 'myvol'] |
643 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
644 | 2eba2338 | Stratos Psomadakis | |
645 | 2eba2338 | Stratos Psomadakis | def test_unmap_vol_from_host_assert(self, run_ssh_cmd): |
646 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
647 | 2eba2338 | Stratos Psomadakis | self.assertRaises(AssertionError, svc._unmap_vol_from_host, 'myvol', 5) |
648 | 2eba2338 | Stratos Psomadakis | |
649 | 2eba2338 | Stratos Psomadakis | def test_unmap_vol_from_host_malformed(self, run_ssh_cmd): |
650 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
651 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("malformed output", "") |
652 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc._unmap_vol_from_host, 'myvol', 7) |
653 | 2eba2338 | Stratos Psomadakis | |
654 | 2eba2338 | Stratos Psomadakis | |
655 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCConnection, 'run_ssh_cmd', autospec=True) |
656 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_is_vdisk_defined', autospec=True) |
657 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', 'VOL_SIZE': '100', |
658 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
659 | 2eba2338 | Stratos Psomadakis | class SVCOpsTest(unittest.TestCase): |
660 | 2eba2338 | Stratos Psomadakis | def test_create_ok(self, is_vdisk_defined, run_ssh_cmd): |
661 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
662 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.return_value = False
|
663 | 2eba2338 | Stratos Psomadakis | ret_str = "Virtual Disk, id [1], successfully created"
|
664 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = (ret_str, "")
|
665 | 2eba2338 | Stratos Psomadakis | svc.create() |
666 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.assert_called_once_with(svc, 'myvol')
|
667 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svctask', 'mkvdisk', '-name', 'myvol', '-mdiskgrp', |
668 | 2eba2338 | Stratos Psomadakis | 'VM_POOL_SYNNEFO', '-size', '100'] |
669 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
670 | 2eba2338 | Stratos Psomadakis | |
671 | 2eba2338 | Stratos Psomadakis | def test_create_exists(self, is_vdisk_defined, run_ssh_cmd): |
672 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
673 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.return_value = True
|
674 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.create)
|
675 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.assert_called_once_with(svc, 'myvol')
|
676 | 2eba2338 | Stratos Psomadakis | |
677 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_get_vdisk_attributes', autospec=True, |
678 | 2eba2338 | Stratos Psomadakis | return_value={'capacity': '83886080', |
679 | 2eba2338 | Stratos Psomadakis | 'mdisk_grp_name': 'VM_POOL_SYNNEFO'}) |
680 | 2eba2338 | Stratos Psomadakis | def test_grow_expand_ok(self, attrs, is_vdisk_defined, run_ssh_cmd): |
681 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
682 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
683 | 2eba2338 | Stratos Psomadakis | svc.grow() |
684 | 2eba2338 | Stratos Psomadakis | attrs.assert_called_once_with(svc, 'myvol')
|
685 | 2eba2338 | Stratos Psomadakis | diff = (100 << 20) - (80 << 20) |
686 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svctask', 'expandvdisksize', '-size', str(diff), '-unit', |
687 | 2eba2338 | Stratos Psomadakis | 'bytes', 'myvol'] |
688 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
689 | 2eba2338 | Stratos Psomadakis | |
690 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_get_vdisk_attributes', autospec=True, |
691 | 2eba2338 | Stratos Psomadakis | return_value={'capacity': str(120 << 20), |
692 | 2eba2338 | Stratos Psomadakis | 'mdisk_grp_name': 'VM_POOL_SYNNEFO'}) |
693 | 2eba2338 | Stratos Psomadakis | def test_grow_shrink_ok(self, attrs, is_vdisk_defined, run_ssh_cmd): |
694 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
695 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
696 | 2eba2338 | Stratos Psomadakis | svc.grow() |
697 | 2eba2338 | Stratos Psomadakis | attrs.assert_called_once_with(svc, 'myvol')
|
698 | 2eba2338 | Stratos Psomadakis | diff = (120 << 20) - (100 << 20) |
699 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svctask', 'shrinkvdisksize', '-size', str(diff), '-unit', |
700 | 2eba2338 | Stratos Psomadakis | 'bytes', 'myvol'] |
701 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
702 | 2eba2338 | Stratos Psomadakis | #FIXME: failure tests
|
703 | 2eba2338 | Stratos Psomadakis | |
704 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_verify_checklist', autospec=True, |
705 | 2eba2338 | Stratos Psomadakis | return_value=[True] * 4) |
706 | 2eba2338 | Stratos Psomadakis | def test_verify_ok(self, check, is_vdisk_defined, run_ssh_cmd): |
707 | 2eba2338 | Stratos Psomadakis | del os.environ['VOL_SIZE'] |
708 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
709 | 2eba2338 | Stratos Psomadakis | svc.verify() |
710 | 2eba2338 | Stratos Psomadakis | |
711 | 2eba2338 | Stratos Psomadakis | @patch.dict(os.environ, {'VOL_NAME': 'myvol', |
712 | 2eba2338 | Stratos Psomadakis | 'EXTP_SVC_SAN': 'svc_san_identifier'}) |
713 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_verify_checklist', autospec=True, |
714 | 2eba2338 | Stratos Psomadakis | return_value=[False] * 4) |
715 | 2eba2338 | Stratos Psomadakis | def test_verify_not_ok(self, check, is_vdisk_defined, run_ssh_cmd): |
716 | 2eba2338 | Stratos Psomadakis | del os.environ['VOL_SIZE'] |
717 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
718 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.verify)
|
719 | 2eba2338 | Stratos Psomadakis | |
720 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_verify_checklist', autospec=True, |
721 | 2eba2338 | Stratos Psomadakis | return_value=[False] * 2 + [True] * 2) |
722 | 2eba2338 | Stratos Psomadakis | def test_inconsistent_unmap(self, check, is_vdisk_defined, run_ssh_cmd): |
723 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
724 | 2eba2338 | Stratos Psomadakis | ret = svc._consistent_unmap(svc._verify_checklist()) |
725 | 2eba2338 | Stratos Psomadakis | self.assertEqual(ret, False) |
726 | 2eba2338 | Stratos Psomadakis | |
727 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_is_vdisk_mapped', autospec=True, |
728 | 2eba2338 | Stratos Psomadakis | return_value=False)
|
729 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_get_vdisk_attributes', autospec=True, |
730 | 2eba2338 | Stratos Psomadakis | return_value={'mdisk_grp_name': 'VM_POOL_SYNNEFO'}) |
731 | 2eba2338 | Stratos Psomadakis | def test_remove_ok(self, attrs, check, is_vdisk_defined, run_ssh_cmd): |
732 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.return_value = True
|
733 | 2eba2338 | Stratos Psomadakis | del os.environ['VOL_SIZE'] |
734 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
735 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
736 | 2eba2338 | Stratos Psomadakis | svc.remove() |
737 | 2eba2338 | Stratos Psomadakis | ssh_cmd = ['svctask', 'rmvdisk', '-force', 'myvol'] |
738 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.assert_called_once_with(svc._svc_connection, ssh_cmd) |
739 | 2eba2338 | Stratos Psomadakis | |
740 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_is_vdisk_mapped', autospec=True, |
741 | 2eba2338 | Stratos Psomadakis | return_value=True)
|
742 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_get_vdisk_attributes', autospec=True, |
743 | 2eba2338 | Stratos Psomadakis | return_value={'mdisk_grp_name': 'VM_POOL_SYNNEFO'}) |
744 | 2eba2338 | Stratos Psomadakis | def test_remove_mapped(self, attrs, check, is_vdisk_defined, run_ssh_cmd): |
745 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.return_value = True
|
746 | 2eba2338 | Stratos Psomadakis | del os.environ['VOL_SIZE'] |
747 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
748 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
749 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.remove)
|
750 | 2eba2338 | Stratos Psomadakis | |
751 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_is_vdisk_mapped', autospec=True, |
752 | 2eba2338 | Stratos Psomadakis | return_value=False)
|
753 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_get_vdisk_attributes', autospec=True, |
754 | 2eba2338 | Stratos Psomadakis | return_value={'mdisk_grp_name': 'VM_POOL_SYNNEFO'}) |
755 | 2eba2338 | Stratos Psomadakis | def test_remove_undef(self, attrs, check, is_vdisk_defined, run_ssh_cmd): |
756 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.return_value = False
|
757 | 2eba2338 | Stratos Psomadakis | del os.environ['VOL_SIZE'] |
758 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
759 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
760 | 2eba2338 | Stratos Psomadakis | self.assertRaises(SVCError, svc.remove)
|
761 | 2eba2338 | Stratos Psomadakis | |
762 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_is_vdisk_mapped', autospec=True, |
763 | 2eba2338 | Stratos Psomadakis | return_value=False)
|
764 | 2eba2338 | Stratos Psomadakis | @patch.object(SVCProvider, '_get_vdisk_attributes', autospec=True, |
765 | 2eba2338 | Stratos Psomadakis | return_value={'mdisk_grp_name': 'VM_POOL_SYNNEFO1'}) |
766 | 2eba2338 | Stratos Psomadakis | def test_remove_assert(self, attrs, check, is_vdisk_defined, run_ssh_cmd): |
767 | 2eba2338 | Stratos Psomadakis | is_vdisk_defined.return_value = True
|
768 | 2eba2338 | Stratos Psomadakis | del os.environ['VOL_SIZE'] |
769 | 2eba2338 | Stratos Psomadakis | run_ssh_cmd.return_value = ("", "") |
770 | 2eba2338 | Stratos Psomadakis | svc = SVCProvider('./test_configs/good_config')
|
771 | 2eba2338 | Stratos Psomadakis | self.assertRaises(AssertionError, svc.remove) |
772 | 2eba2338 | Stratos Psomadakis | #TODO: Detach, attach tests
|
773 | 2eba2338 | Stratos Psomadakis | |
774 | 2eba2338 | Stratos Psomadakis | if __name__ == '__main__': |
775 | 2eba2338 | Stratos Psomadakis | unittest.main() |