73
def test_convert_image(self):
75
mox.StubOutWithMock(utils, 'execute')
77
TEST_OUT_FORMAT = 'vmdk'
78
TEST_SOURCE = 'img/qemu.img'
79
TEST_DEST = '/img/vmware.vmdk'
81
utils.execute('qemu-img', 'convert', '-O', TEST_OUT_FORMAT,
82
TEST_SOURCE, TEST_DEST, run_as_root=True)
86
image_utils.convert_image(TEST_SOURCE, TEST_DEST, TEST_OUT_FORMAT)
90
def test_qemu_img_info(self):
91
TEST_PATH = "img/qemu.qcow2"
92
TEST_RETURN = "image: qemu.qcow2\n"\
93
"backing_file: qemu.qcow2 (actual path: qemu.qcow2)\n"\
94
"file_format: qcow2\n"\
95
"virtual_size: 50M (52428800 bytes)\n"\
96
"cluster_size: 65536\n"\
97
"disk_size: 196K (200704 bytes)\n"\
99
"ID TAG VM SIZE DATE VM CLOCK\n"\
100
"1 snap1 1.7G 2011-10-04 19:04:00 32:06:34.974"
101
TEST_STR = "image: qemu.qcow2\n"\
102
"file_format: qcow2\n"\
103
"virtual_size: 52428800\n"\
104
"disk_size: 200704\n"\
105
"cluster_size: 65536\n"\
106
"backing_file: qemu.qcow2\n"\
107
"snapshots: [{'date': '2011-10-04', "\
108
"'vm_clock': '19:04:00 32:06:34.974', "\
109
"'vm_size': '1.7G', 'tag': 'snap1', 'id': '1'}]"
112
mox.StubOutWithMock(utils, 'execute')
115
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
116
TEST_PATH, run_as_root=True).AndReturn(
117
(TEST_RETURN, 'ignored')
122
inf = image_utils.qemu_img_info(TEST_PATH)
124
self.assertEquals(inf.image, 'qemu.qcow2')
125
self.assertEquals(inf.backing_file, 'qemu.qcow2')
126
self.assertEquals(inf.file_format, 'qcow2')
127
self.assertEquals(inf.virtual_size, 52428800)
128
self.assertEquals(inf.cluster_size, 65536)
129
self.assertEquals(inf.disk_size, 200704)
131
self.assertEquals(inf.snapshots[0]['id'], '1')
132
self.assertEquals(inf.snapshots[0]['tag'], 'snap1')
133
self.assertEquals(inf.snapshots[0]['vm_size'], '1.7G')
134
self.assertEquals(inf.snapshots[0]['date'], '2011-10-04')
135
self.assertEquals(inf.snapshots[0]['vm_clock'],
136
'19:04:00 32:06:34.974')
138
self.assertEquals(str(inf), TEST_STR)
140
def test_fetch_to_raw(self):
141
TEST_RET = "image: qemu.qcow2\n"\
142
"file_format: qcow2 \n"\
143
"virtual_size: 50M (52428800 bytes)\n"\
144
"cluster_size: 65536\n"\
145
"disk_size: 196K (200704 bytes)"
146
TEST_RETURN_RAW = "image: qemu.raw\n"\
147
"file_format: raw\n"\
148
"virtual_size: 50M (52428800 bytes)\n"\
149
"cluster_size: 65536\n"\
150
"disk_size: 196K (200704 bytes)\n"\
152
fake_image_service = FakeImageService()
155
mox.StubOutWithMock(image_utils, 'create_temporary_file')
156
mox.StubOutWithMock(utils, 'execute')
157
mox.StubOutWithMock(image_utils, 'fetch')
159
image_utils.create_temporary_file().AndReturn(self.TEST_DEV_PATH)
160
image_utils.fetch(context, fake_image_service,
161
self.TEST_IMAGE_ID, self.TEST_DEV_PATH, None, None)
164
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
165
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
166
(TEST_RET, 'ignored')
169
utils.execute('qemu-img', 'convert', '-O', 'raw',
170
self.TEST_DEV_PATH, self.TEST_DEV_PATH, run_as_root=True)
173
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
174
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
175
(TEST_RETURN_RAW, 'ignored')
180
image_utils.fetch_to_raw(context, fake_image_service,
181
self.TEST_IMAGE_ID, self.TEST_DEV_PATH)
184
def test_fetch_to_raw_on_error_parsing_failed(self):
185
TEST_RET = "image: qemu.qcow2\n"\
186
"virtual_size: 50M (52428800 bytes)\n"\
187
"cluster_size: 65536\n"\
188
"disk_size: 196K (200704 bytes)"
190
fake_image_service = FakeImageService()
193
mox.StubOutWithMock(image_utils, 'create_temporary_file')
194
mox.StubOutWithMock(utils, 'execute')
195
mox.StubOutWithMock(image_utils, 'fetch')
197
image_utils.create_temporary_file().AndReturn(self.TEST_DEV_PATH)
198
image_utils.fetch(context, fake_image_service,
199
self.TEST_IMAGE_ID, self.TEST_DEV_PATH, None, None)
202
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
203
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
204
(TEST_RET, 'ignored')
209
self.assertRaises(exception.ImageUnacceptable,
210
image_utils.fetch_to_raw, context,
211
fake_image_service, self.TEST_IMAGE_ID,
214
def test_fetch_to_raw_on_error_backing_file(self):
215
TEST_RET = "image: qemu.qcow2\n"\
216
"backing_file: qemu.qcow2 (actual path: qemu.qcow2)\n"\
217
"file_format: qcow2 \n"\
218
"virtual_size: 50M (52428800 bytes)\n"\
219
"cluster_size: 65536\n"\
220
"disk_size: 196K (200704 bytes)"
222
fake_image_service = FakeImageService()
225
mox.StubOutWithMock(image_utils, 'create_temporary_file')
226
mox.StubOutWithMock(utils, 'execute')
227
mox.StubOutWithMock(image_utils, 'fetch')
229
image_utils.create_temporary_file().AndReturn(self.TEST_DEV_PATH)
230
image_utils.fetch(context, fake_image_service,
231
self.TEST_IMAGE_ID, self.TEST_DEV_PATH, None, None)
234
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
235
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
236
(TEST_RET, 'ignored')
240
self.assertRaises(exception.ImageUnacceptable,
241
image_utils.fetch_to_raw,
242
context, fake_image_service,
243
self.TEST_IMAGE_ID, self.TEST_DEV_PATH)
245
def test_fetch_to_raw_on_error_not_convert_to_raw(self):
246
TEST_RET = "image: qemu.qcow2\n"\
247
"file_format: qcow2 \n"\
248
"virtual_size: 50M (52428800 bytes)\n"\
249
"cluster_size: 65536\n"\
250
"disk_size: 196K (200704 bytes)"
252
fake_image_service = FakeImageService()
255
mox.StubOutWithMock(image_utils, 'create_temporary_file')
256
mox.StubOutWithMock(utils, 'execute')
257
mox.StubOutWithMock(image_utils, 'fetch')
259
image_utils.create_temporary_file().AndReturn(self.TEST_DEV_PATH)
260
image_utils.fetch(context, fake_image_service,
261
self.TEST_IMAGE_ID, self.TEST_DEV_PATH, None, None)
264
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
265
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
266
(TEST_RET, 'ignored')
269
utils.execute('qemu-img', 'convert', '-O', 'raw',
270
self.TEST_DEV_PATH, self.TEST_DEV_PATH, run_as_root=True)
273
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
274
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
275
(TEST_RET, 'ignored')
280
self.assertRaises(exception.ImageUnacceptable,
281
image_utils.fetch_to_raw,
282
context, fake_image_service,
283
self.TEST_IMAGE_ID, self.TEST_DEV_PATH)
285
def test_fetch_verify_image_with_backing_file(self):
286
TEST_RETURN = "image: qemu.qcow2\n"\
287
"backing_file: qemu.qcow2 (actual path: qemu.qcow2)\n"\
288
"file_format: qcow2\n"\
289
"virtual_size: 50M (52428800 bytes)\n"\
290
"cluster_size: 65536\n"\
291
"disk_size: 196K (200704 bytes)\n"\
293
"ID TAG VM SIZE DATE VM CLOCK\n"\
294
"1 snap1 1.7G 2011-10-04 19:04:00 32:06:34.974"
296
fake_image_service = FakeImageService()
298
mox.StubOutWithMock(image_utils, 'fetch')
299
mox.StubOutWithMock(utils, 'execute')
300
image_utils.fetch(context, fake_image_service,
301
self.TEST_IMAGE_ID, self.TEST_DEV_PATH, None, None)
304
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
305
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
306
(TEST_RETURN, 'ignored')
311
self.assertRaises(exception.ImageUnacceptable,
312
image_utils.fetch_verify_image,
313
context, fake_image_service,
314
self.TEST_IMAGE_ID, self.TEST_DEV_PATH)
316
def test_fetch_verify_image_without_file_format(self):
317
TEST_RETURN = "image: qemu.qcow2\n"\
318
"virtual_size: 50M (52428800 bytes)\n"\
319
"cluster_size: 65536\n"\
320
"disk_size: 196K (200704 bytes)\n"\
322
"ID TAG VM SIZE DATE VM CLOCK\n"\
323
"1 snap1 1.7G 2011-10-04 19:04:00 32:06:34.974"
325
fake_image_service = FakeImageService()
327
mox.StubOutWithMock(image_utils, 'fetch')
328
mox.StubOutWithMock(utils, 'execute')
329
image_utils.fetch(context, fake_image_service,
330
self.TEST_IMAGE_ID, self.TEST_DEV_PATH, None, None)
333
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
334
self.TEST_DEV_PATH, run_as_root=True).AndReturn(
335
(TEST_RETURN, 'ignored')
340
self.assertRaises(exception.ImageUnacceptable,
341
image_utils.fetch_verify_image,
342
context, fake_image_service,
343
self.TEST_IMAGE_ID, self.TEST_DEV_PATH)
345
def test_upload_volume(self):
346
image_meta = {'id': 1, 'disk_format': 'qcow2'}
347
TEST_RET = "image: qemu.qcow2\n"\
348
"file_format: qcow2 \n"\
349
"virtual_size: 50M (52428800 bytes)\n"\
350
"cluster_size: 65536\n"\
351
"disk_size: 196K (200704 bytes)"
354
m.StubOutWithMock(utils, 'execute')
356
utils.execute('qemu-img', 'convert', '-O', 'qcow2',
357
mox.IgnoreArg(), mox.IgnoreArg(), run_as_root=True)
359
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
360
mox.IgnoreArg(), run_as_root=True).AndReturn(
361
(TEST_RET, 'ignored')
366
image_utils.upload_volume(context, FakeImageService(),
367
image_meta, '/dev/loop1')
370
def test_upload_volume_with_raw_image(self):
371
image_meta = {'id': 1, 'disk_format': 'raw'}
374
mox.StubOutWithMock(image_utils, 'convert_image')
378
with tempfile.NamedTemporaryFile() as f:
379
image_utils.upload_volume(context, FakeImageService(),
383
def test_upload_volume_on_error(self):
384
image_meta = {'id': 1, 'disk_format': 'qcow2'}
385
TEST_RET = "image: qemu.vhd\n"\
386
"file_format: vhd \n"\
387
"virtual_size: 50M (52428800 bytes)\n"\
388
"cluster_size: 65536\n"\
389
"disk_size: 196K (200704 bytes)"
392
m.StubOutWithMock(utils, 'execute')
394
utils.execute('qemu-img', 'convert', '-O', 'qcow2',
395
mox.IgnoreArg(), mox.IgnoreArg(), run_as_root=True)
397
'env', 'LC_ALL=C', 'LANG=C', 'qemu-img', 'info',
398
mox.IgnoreArg(), run_as_root=True).AndReturn(
399
(TEST_RET, 'ignored')
404
self.assertRaises(exception.ImageUnacceptable,
405
image_utils.upload_volume,
406
context, FakeImageService(),
407
image_meta, '/dev/loop1')
51
411
class TestExtractTo(test.TestCase):
52
412
def test_extract_to_calls_tar(self):