Statistics
| Branch: | Revision:

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()