38
37
super(_ImageTestCase, self).setUp()
39
38
self.flags(instances_path=self.INSTANCES_PATH)
40
39
self.INSTANCE = 'instance'
43
41
self.TEMPLATE = 'template'
45
43
self.PATH = os.path.join(FLAGS.instances_path, self.INSTANCE,
46
self.NAME + self.SUFFIX)
47
45
self.TEMPLATE_DIR = os.path.join(FLAGS.instances_path,
49
47
self.TEMPLATE_PATH = os.path.join(self.TEMPLATE_DIR, 'template')
61
59
imagebackend.libvirt_utils.ensure_tree(self.TEMPLATE_DIR)
62
60
self.mox.ReplayAll()
64
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
62
image = self.image_class(self.INSTANCE, self.NAME)
65
63
self.mock_create_image(image)
66
64
image.cache(fn, self.TEMPLATE)
72
70
os.path.exists(self.PATH).AndReturn(True)
73
71
self.mox.ReplayAll()
75
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
73
image = self.image_class(self.INSTANCE, self.NAME)
76
74
image.cache(None, self.TEMPLATE)
78
76
self.mox.VerifyAll()
87
85
self.mox.StubOutWithMock(imagebackend.libvirt_utils, 'ensure_tree')
88
86
self.mox.ReplayAll()
90
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
88
image = self.image_class(self.INSTANCE, self.NAME)
91
89
self.mock_create_image(image)
92
90
image.cache(fn, self.TEMPLATE)
101
99
fn = self.mox.CreateMockAnything()
102
100
self.mox.ReplayAll()
104
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
102
image = self.image_class(self.INSTANCE, self.NAME)
105
103
self.mock_create_image(image)
106
104
image.cache(fn, self.TEMPLATE)
129
127
imagebackend.libvirt_utils.copy_image(self.TEMPLATE_PATH, self.PATH)
130
128
self.mox.ReplayAll()
132
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
130
image = self.image_class(self.INSTANCE, self.NAME)
133
131
image.create_image(fn, self.TEMPLATE_PATH, None, image_id=None)
135
133
self.mox.VerifyAll()
139
137
fn(target=self.PATH)
140
138
self.mox.ReplayAll()
142
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
140
image = self.image_class(self.INSTANCE, self.NAME)
143
141
image.create_image(fn, self.TEMPLATE_PATH, None)
145
143
self.mox.VerifyAll()
151
149
imagebackend.disk.extend(self.PATH, self.SIZE)
152
150
self.mox.ReplayAll()
154
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
152
image = self.image_class(self.INSTANCE, self.NAME)
155
153
image.create_image(fn, self.TEMPLATE_PATH, self.SIZE, image_id=None)
157
155
self.mox.VerifyAll()
183
181
self.mox.ReplayAll()
185
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
183
image = self.image_class(self.INSTANCE, self.NAME)
186
184
image.create_image(fn, self.TEMPLATE_PATH, None)
188
186
self.mox.VerifyAll()
200
198
self.mox.ReplayAll()
202
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
200
image = self.image_class(self.INSTANCE, self.NAME)
203
201
image.create_image(fn, self.TEMPLATE_PATH, self.SIZE)
205
203
self.mox.VerifyAll()
214
212
self.mox.ReplayAll()
216
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
214
image = self.image_class(self.INSTANCE, self.NAME)
217
215
image.create_image(fn, self.TEMPLATE_PATH, self.SIZE)
219
217
self.mox.VerifyAll()
228
226
self.image_class = imagebackend.Lvm
229
227
super(LvmTestCase, self).setUp()
230
228
self.flags(libvirt_images_volume_group=self.VG)
231
self.LV = '%s_%s' % (self.INSTANCE, self.NAME + self.SUFFIX)
229
self.LV = '%s_%s' % (self.INSTANCE, self.NAME)
232
230
self.PATH = os.path.join('/dev', self.VG, self.LV)
234
232
self.disk = imagebackend.disk
238
236
def prepare_mocks(self):
239
237
fn = self.mox.CreateMockAnything()
240
self.mox.StubOutWithMock(self.disk, 'get_image_virtual_size')
241
238
self.mox.StubOutWithMock(self.disk, 'resize2fs')
242
239
self.mox.StubOutWithMock(self.libvirt_utils, 'create_lvm_image')
240
self.mox.StubOutWithMock(self.disk, 'get_disk_size')
243
241
self.mox.StubOutWithMock(self.utils, 'execute')
246
244
def _create_image(self, sparse):
247
245
fn = self.prepare_mocks()
248
246
fn(target=self.TEMPLATE_PATH)
249
self.disk.get_image_virtual_size(self.TEMPLATE_PATH
250
).AndReturn(self.TEMPLATE_SIZE)
251
247
self.libvirt_utils.create_lvm_image(self.VG,
253
249
self.TEMPLATE_SIZE,
251
self.disk.get_disk_size(self.TEMPLATE_PATH
252
).AndReturn(self.TEMPLATE_SIZE)
255
253
cmd = ('dd', 'if=%s' % self.TEMPLATE_PATH,
256
254
'of=%s' % self.PATH, 'bs=4M')
257
255
self.utils.execute(*cmd, run_as_root=True)
258
256
self.mox.ReplayAll()
260
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
258
image = self.image_class(self.INSTANCE, self.NAME)
261
259
image.create_image(fn, self.TEMPLATE_PATH, None)
263
261
self.mox.VerifyAll()
269
267
fn(target=self.PATH, ephemeral_size=None)
270
268
self.mox.ReplayAll()
272
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
270
image = self.image_class(self.INSTANCE, self.NAME)
273
271
image.create_image(fn, self.TEMPLATE_PATH,
274
272
self.SIZE, ephemeral_size=None)
278
276
def _create_image_resize(self, sparse):
279
277
fn = self.prepare_mocks()
280
278
fn(target=self.TEMPLATE_PATH)
281
self.disk.get_image_virtual_size(self.TEMPLATE_PATH
282
).AndReturn(self.TEMPLATE_SIZE)
283
279
self.libvirt_utils.create_lvm_image(self.VG, self.LV,
284
280
self.SIZE, sparse=sparse)
281
self.disk.get_disk_size(self.TEMPLATE_PATH
282
).AndReturn(self.TEMPLATE_SIZE)
285
283
cmd = ('dd', 'if=%s' % self.TEMPLATE_PATH,
286
284
'of=%s' % self.PATH, 'bs=4M')
287
285
self.utils.execute(*cmd, run_as_root=True)
288
286
self.disk.resize2fs(self.PATH)
289
287
self.mox.ReplayAll()
291
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
289
image = self.image_class(self.INSTANCE, self.NAME)
292
290
image.create_image(fn, self.TEMPLATE_PATH, self.SIZE)
294
292
self.mox.VerifyAll()
317
315
def test_create_image_negative(self):
318
316
fn = self.prepare_mocks()
319
317
fn(target=self.TEMPLATE_PATH)
320
self.disk.get_image_virtual_size(self.TEMPLATE_PATH
321
).AndReturn(self.TEMPLATE_SIZE)
322
318
self.libvirt_utils.create_lvm_image(self.VG,
326
322
).AndRaise(RuntimeError())
323
self.disk.get_disk_size(self.TEMPLATE_PATH
324
).AndReturn(self.TEMPLATE_SIZE)
327
325
self.mox.StubOutWithMock(self.libvirt_utils, 'remove_logical_volumes')
328
326
self.libvirt_utils.remove_logical_volumes(self.PATH)
329
327
self.mox.ReplayAll()
331
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
329
image = self.image_class(self.INSTANCE, self.NAME)
333
331
self.assertRaises(RuntimeError, image.create_image, fn,
334
332
self.TEMPLATE_PATH, self.SIZE)
346
344
self.libvirt_utils.remove_logical_volumes(self.PATH)
347
345
self.mox.ReplayAll()
349
image = self.image_class(self.INSTANCE, self.NAME, self.SUFFIX)
347
image = self.image_class(self.INSTANCE, self.NAME)
351
349
self.assertRaises(RuntimeError, image.create_image, fn,
352
350
self.TEMPLATE_PATH, self.SIZE,
357
355
class BackendTestCase(test.TestCase):
358
356
INSTANCE = 'fake-instance'
357
NAME = 'fake-name.suffix'
362
359
def get_image(self, use_cow, image_type):
363
360
return imagebackend.Backend(use_cow).image(self.INSTANCE,
368
364
def _test_image(self, image_type, image_not_cow, image_cow):