79
90
root_uuid = '12345678-1234-1234-12345678-12345678abcdef'
81
92
name_list = ['get_dev', 'get_image_mb', 'discovery', 'login_iscsi',
82
'logout_iscsi', 'make_partitions', 'is_block_device',
83
'dd', 'mkswap', 'block_uuid', 'switch_pxe_config',
85
patch_list = [mock.patch.object(utils, name) for name in name_list]
86
mock_list = [patcher.start() for patcher in patch_list]
87
for patcher in patch_list:
88
self.addCleanup(patcher.stop)
90
parent_mock = mock.MagicMock()
91
for mocker, name in zip(mock_list, name_list):
92
parent_mock.attach_mock(mocker, name)
94
parent_mock.get_dev.return_value = dev
95
parent_mock.get_image_mb.return_value = 1
96
parent_mock.is_block_device.return_value = True
97
parent_mock.block_uuid.return_value = root_uuid
98
calls_expected = [mock.call.get_dev(address, port, iqn, lun),
99
mock.call.get_image_mb(image_path),
100
mock.call.discovery(address, port),
101
mock.call.login_iscsi(address, port, iqn),
102
mock.call.is_block_device(dev),
103
mock.call.make_partitions(dev, root_mb, swap_mb),
104
mock.call.is_block_device(root_part),
105
mock.call.is_block_device(swap_part),
106
mock.call.dd(image_path, root_part),
107
mock.call.mkswap(swap_part),
108
mock.call.block_uuid(root_part),
109
mock.call.logout_iscsi(address, port, iqn),
110
mock.call.switch_pxe_config(pxe_config_path,
112
mock.call.notify(address, 10000)]
114
utils.deploy(address, port, iqn, lun, image_path, pxe_config_path,
117
self.assertEqual(calls_expected, parent_mock.mock_calls)
119
def test_always_logout_iscsi(self):
120
"""logout_iscsi() must be called once login_iscsi() is called."""
121
address = '127.0.0.1'
125
image_path = '/tmp/xyz/image'
126
pxe_config_path = '/tmp/abc/pxeconfig'
93
'logout_iscsi', 'delete_iscsi', 'make_partitions',
94
'is_block_device', 'dd', 'mkswap', 'block_uuid',
95
'switch_pxe_config', 'notify']
96
parent_mock = self._mock_calls(name_list)
97
parent_mock.get_dev.return_value = dev
98
parent_mock.get_image_mb.return_value = 1
99
parent_mock.is_block_device.return_value = True
100
parent_mock.block_uuid.return_value = root_uuid
101
calls_expected = [mock.call.get_dev(address, port, iqn, lun),
102
mock.call.get_image_mb(image_path),
103
mock.call.discovery(address, port),
104
mock.call.login_iscsi(address, port, iqn),
105
mock.call.is_block_device(dev),
106
mock.call.make_partitions(dev, root_mb, swap_mb,
108
mock.call.is_block_device(root_part),
109
mock.call.is_block_device(swap_part),
110
mock.call.dd(image_path, root_part),
111
mock.call.mkswap(swap_part),
112
mock.call.block_uuid(root_part),
113
mock.call.logout_iscsi(address, port, iqn),
114
mock.call.delete_iscsi(address, port, iqn),
115
mock.call.switch_pxe_config(pxe_config_path,
117
mock.call.notify(address, 10000)]
119
utils.deploy(address, port, iqn, lun, image_path, pxe_config_path,
120
root_mb, swap_mb, ephemeral_mb, ephemeral_format)
122
self.assertEqual(calls_expected, parent_mock.mock_calls)
124
def test_deploy_with_ephemeral(self):
125
"""Check loosely all functions are called with right args."""
126
address = '127.0.0.1'
130
image_path = '/tmp/xyz/image'
131
pxe_config_path = '/tmp/abc/pxeconfig'
135
ephemeral_format = 'exttest'
138
ephemeral_part = '/dev/fake-part1'
139
swap_part = '/dev/fake-part2'
140
root_part = '/dev/fake-part3'
141
root_uuid = '12345678-1234-1234-12345678-12345678abcdef'
143
name_list = ['get_dev', 'get_image_mb', 'discovery', 'login_iscsi',
144
'logout_iscsi', 'delete_iscsi', 'make_partitions',
145
'is_block_device', 'dd', 'mkswap', 'block_uuid',
146
'switch_pxe_config', 'notify', 'mkfs_ephemeral']
147
parent_mock = self._mock_calls(name_list)
148
parent_mock.get_dev.return_value = dev
149
parent_mock.get_image_mb.return_value = 1
150
parent_mock.is_block_device.return_value = True
151
parent_mock.block_uuid.return_value = root_uuid
152
calls_expected = [mock.call.get_dev(address, port, iqn, lun),
153
mock.call.get_image_mb(image_path),
154
mock.call.discovery(address, port),
155
mock.call.login_iscsi(address, port, iqn),
156
mock.call.is_block_device(dev),
157
mock.call.make_partitions(dev, root_mb, swap_mb,
159
mock.call.is_block_device(root_part),
160
mock.call.is_block_device(swap_part),
161
mock.call.is_block_device(ephemeral_part),
162
mock.call.dd(image_path, root_part),
163
mock.call.mkswap(swap_part),
164
mock.call.mkfs_ephemeral(ephemeral_part,
166
mock.call.block_uuid(root_part),
167
mock.call.logout_iscsi(address, port, iqn),
168
mock.call.delete_iscsi(address, port, iqn),
169
mock.call.switch_pxe_config(pxe_config_path,
171
mock.call.notify(address, 10000)]
173
utils.deploy(address, port, iqn, lun, image_path, pxe_config_path,
174
root_mb, swap_mb, ephemeral_mb, ephemeral_format)
176
self.assertEqual(calls_expected, parent_mock.mock_calls)
178
def test_deploy_preserve_ephemeral(self):
179
"""Check if all functions are called with right args."""
180
address = '127.0.0.1'
184
image_path = '/tmp/xyz/image'
185
pxe_config_path = '/tmp/abc/pxeconfig'
189
ephemeral_format = 'exttest'
192
ephemeral_part = '/dev/fake-part1'
193
swap_part = '/dev/fake-part2'
194
root_part = '/dev/fake-part3'
195
root_uuid = '12345678-1234-1234-12345678-12345678abcdef'
197
mock_mkfs_eph = mock.patch.object(utils, 'mkfs_ephemeral').start()
198
self.addCleanup(mock_mkfs_eph.stop)
200
name_list = ['get_dev', 'get_image_mb', 'discovery', 'login_iscsi',
201
'logout_iscsi', 'delete_iscsi', 'make_partitions',
202
'is_block_device', 'dd', 'mkswap', 'block_uuid',
203
'switch_pxe_config', 'notify']
204
parent_mock = self._mock_calls(name_list)
205
parent_mock.get_dev.return_value = dev
206
parent_mock.get_image_mb.return_value = 1
207
parent_mock.is_block_device.return_value = True
208
parent_mock.block_uuid.return_value = root_uuid
209
calls_expected = [mock.call.get_dev(address, port, iqn, lun),
210
mock.call.get_image_mb(image_path),
211
mock.call.discovery(address, port),
212
mock.call.login_iscsi(address, port, iqn),
213
mock.call.is_block_device(dev),
214
mock.call.make_partitions(dev, root_mb, swap_mb,
216
mock.call.is_block_device(root_part),
217
mock.call.is_block_device(swap_part),
218
mock.call.is_block_device(ephemeral_part),
219
mock.call.dd(image_path, root_part),
220
mock.call.mkswap(swap_part),
221
mock.call.block_uuid(root_part),
222
mock.call.logout_iscsi(address, port, iqn),
223
mock.call.delete_iscsi(address, port, iqn),
224
mock.call.switch_pxe_config(pxe_config_path,
226
mock.call.notify(address, 10000)]
228
utils.deploy(address, port, iqn, lun, image_path, pxe_config_path,
229
root_mb, swap_mb, ephemeral_mb, ephemeral_format,
230
preserve_ephemeral=True)
231
self.assertEqual(calls_expected, parent_mock.mock_calls)
232
# mkfs_ephemeral should not be called
233
self.assertFalse(mock_mkfs_eph.called)
235
def test_always_logout_and_delete_iscsi(self):
236
"""Check if logout_iscsi() and delete_iscsi() are called.
238
Make sure that logout_iscsi() and delete_iscsi() are called once
239
login_iscsi() is invoked.
242
address = '127.0.0.1'
246
image_path = '/tmp/xyz/image'
247
pxe_config_path = '/tmp/abc/pxeconfig'
251
ephemeral_format = 'exttest'
130
253
dev = '/dev/fake'