190
217
{'id': 'ANY_ID'}, [], 's3cr3t', fake_net_info)
219
def test_snapshot(self):
221
def update_task_state(task_state, expected_state=None):
222
self._loc_task_state = task_state
223
self._loc_expected_task_state = expected_state
225
loc_context = context.get_admin_context()
226
properties = {'instance_id': self.instance['id'],
227
'user_id': str(loc_context.user_id)}
228
sent_meta = {'name': 'fake_snap', 'is_public': False,
229
'status': 'creating', 'properties': properties}
230
image_service = fake.FakeImageService()
231
recv_meta = image_service.create(loc_context, sent_meta)
233
self.powervm_connection.snapshot(loc_context,
234
self.instance, recv_meta['id'],
237
self.assertTrue(self._loc_task_state == task_states.IMAGE_UPLOADING and
238
self._loc_expected_task_state == task_states.IMAGE_PENDING_UPLOAD)
192
240
def test_destroy(self):
193
241
self.powervm_connection.destroy(self.instance, None)
194
242
self.stubs.Set(FakeIVMOperator, 'get_lpar', lambda x, y: None)
230
278
joined_path = common.aix_path_join(path_one, path_two)
231
279
expected_path = '/some/file/path/filename'
232
280
self.assertEqual(joined_path, expected_path)
282
def _test_finish_revert_migration_after_crash(self, backup_made, new_made):
283
inst = {'name': 'foo'}
285
self.mox.StubOutWithMock(self.powervm_connection, 'instance_exists')
286
self.mox.StubOutWithMock(self.powervm_connection._powervm, 'destroy')
287
self.mox.StubOutWithMock(self.powervm_connection._powervm._operator,
289
self.mox.StubOutWithMock(self.powervm_connection._powervm, 'power_on')
291
self.powervm_connection.instance_exists('rsz_foo').AndReturn(
295
self.powervm_connection.instance_exists('foo').AndReturn(new_made)
297
self.powervm_connection._powervm.destroy('foo')
298
self.powervm_connection._powervm._operator.rename_lpar('rsz_foo',
300
self.powervm_connection._powervm.power_on('foo')
304
self.powervm_connection.finish_revert_migration(inst, [])
306
def test_finish_revert_migration_after_crash(self):
307
self._test_finish_revert_migration_after_crash(True, True)
309
def test_finish_revert_migration_after_crash_before_new(self):
310
self._test_finish_revert_migration_after_crash(True, False)
312
def test_finish_revert_migration_after_crash_before_backup(self):
313
self._test_finish_revert_migration_after_crash(False, False)
315
def test_migrate_volume_use_instance_name(self):
316
inst_name = 'instance-00000000'
317
lv_name = 'logical-vol-name'
318
src_host = 'compute_host_1'
319
dest = 'compute_host_1'
320
image_path = 'some/image/path'
321
fake_noop = lambda *args, **kwargs: None
323
self.stubs.Set(self.powervm_connection._powervm._disk_adapter,
324
'_copy_device_to_file', fake_noop)
326
self.stubs.Set(self.powervm_connection._powervm._disk_adapter,
327
'run_vios_command_as_root', fake_noop)
328
blockdev_op = self.powervm_connection._powervm._disk_adapter
329
file_path = blockdev_op.migrate_volume(lv_name, src_host, dest,
330
image_path, inst_name)
331
expected_path = 'some/image/path/instance-00000000_rsz.gz'
332
self.assertEqual(file_path, expected_path)
334
def test_migrate_volume_use_lv_name(self):
335
lv_name = 'logical-vol-name'
336
src_host = 'compute_host_1'
337
dest = 'compute_host_1'
338
image_path = 'some/image/path'
339
fake_noop = lambda *args, **kwargs: None
341
self.stubs.Set(self.powervm_connection._powervm._disk_adapter,
342
'_copy_device_to_file', fake_noop)
344
self.stubs.Set(self.powervm_connection._powervm._disk_adapter,
345
'run_vios_command_as_root', fake_noop)
346
blockdev_op = self.powervm_connection._powervm._disk_adapter
347
file_path = blockdev_op.migrate_volume(lv_name, src_host, dest,
349
expected_path = 'some/image/path/logical-vol-name_rsz.gz'
350
self.assertEqual(file_path, expected_path)
352
def test_migrate_build_scp_command(self):
353
lv_name = 'logical-vol-name'
354
src_host = 'compute_host_1'
355
dest = 'compute_host_2'
356
image_path = 'some/image/path'
357
fake_noop = lambda *args, **kwargs: None
359
@contextlib.contextmanager
360
def fake_vios_to_vios_auth(*args, **kwargs):
361
key_name = 'some_key'
363
self.stubs.Set(common, 'vios_to_vios_auth',
364
fake_vios_to_vios_auth)
366
self.stubs.Set(self.powervm_connection._powervm._disk_adapter,
367
'run_vios_command_as_root', fake_noop)
369
def fake_run_vios_command(*args, **kwargs):
371
exp_cmd = ' '.join(['scp -o "StrictHostKeyChecking no" -i',
373
'some/image/path/logical-vol-name_rsz.gz',
374
'fake_user@compute_host_2:some/image/path'])
375
self.assertEqual(exp_cmd, cmd)
377
self.stubs.Set(self.powervm_connection._powervm._disk_adapter,
379
fake_run_vios_command)
381
blockdev_op = self.powervm_connection._powervm._disk_adapter
382
file_path = blockdev_op.migrate_volume(lv_name, src_host, dest,
385
def test_get_resize_name(self):
386
inst_name = 'instance-00000001'
387
expected_name = 'rsz_instance-00000001'
388
result = self.powervm_connection._get_resize_name(inst_name)
389
self.assertEqual(expected_name, result)
391
def test_get_long_resize_name(self):
392
inst_name = 'some_really_long_instance_name_00000001'
393
expected_name = 'rsz__really_long_instance_name_00000001'
394
result = self.powervm_connection._get_resize_name(inst_name)
395
self.assertEqual(expected_name, result)
397
def test_get_host_stats(self):
398
host_stats = self.powervm_connection.get_host_stats(True)
399
self.assertIsNotNone(host_stats)
400
self.assertEquals(host_stats['vcpus'], 8.0)
401
self.assertEquals(round(host_stats['vcpus_used'], 1), 1.7)
402
self.assertEquals(host_stats['host_memory_total'], 65536)
403
self.assertEquals(host_stats['host_memory_free'], 46336)
404
self.assertEquals(host_stats['disk_total'], 10168)
405
self.assertEquals(host_stats['disk_used'], 0)
406
self.assertEquals(host_stats['disk_available'], 10168)
407
self.assertEquals(host_stats['disk_total'],
408
host_stats['disk_used'] +
409
host_stats['disk_available'])
411
self.assertEquals(host_stats['cpu_info'], ('ppc64', 'powervm', '3940'))
412
self.assertEquals(host_stats['hypervisor_type'], 'powervm')
413
self.assertEquals(host_stats['hypervisor_version'], '7.1')
415
self.assertEquals(host_stats['hypervisor_hostname'], "fake-powervm")
416
self.assertEquals(host_stats['supported_instances'][0][0], "ppc64")
417
self.assertEquals(host_stats['supported_instances'][0][1], "powervm")
418
self.assertEquals(host_stats['supported_instances'][0][2], "hvm")