summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-06-01 02:52:57 +0000
committerVishvananda Ishaya <vishvananda@gmail.com>2012-06-06 15:17:44 -0700
commit7c847bc659e7c493cf009adc417be2e884c3c616 (patch)
tree2042f2b65e03a3e6c6358671cd6b57443ffffeff /nova/tests
parentae878fc8b9761d099a4145617e4a48cbeb390623 (diff)
Cleans up power_off and power_on semantics
compute.api changes: * improves state handling for delete/restrore * removes hack to deal with SHUTOFF on start * fixes api tests (volume shouldn't detach on stop) compute.manager changes: * uses power_off/power_on for stop/start virt.libvirt changes: * implements power_off/power_on for libvirt * synchronizes usage of domain.create() * cleans up usage of instance.name * added tests for power_on and power_off * fixes bug 1006950 Change-Id: I91845a643e3f97955e7c81ca57c6ee5aa0a3d295
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/ec2/test_cloud.py10
-rw-r--r--nova/tests/compute/test_compute.py40
-rw-r--r--nova/tests/test_virt_drivers.py16
3 files changed, 41 insertions, 25 deletions
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index 58cba6d15..31f6abf5f 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -1963,9 +1963,10 @@ class CloudTestCase(test.TestCase):
self.assertTrue(result)
vol = db.volume_get(self.context, vol1['id'])
- self._assert_volume_detached(vol)
+ self._assert_volume_attached(vol, instance_uuid, '/dev/vdb')
+
vol = db.volume_get(self.context, vol2['id'])
- self._assert_volume_detached(vol)
+ self._assert_volume_attached(vol, instance_uuid, '/dev/vdc')
self.cloud.start_instances(self.context, [ec2_instance_id])
vols = db.volume_get_all_by_instance_uuid(self.context, instance_uuid)
@@ -2034,9 +2035,8 @@ class CloudTestCase(test.TestCase):
result = self.cloud.stop_instances(self.context, [ec2_instance_id])
self.assertTrue(result)
- for vol_id in (vol1['id'], vol2['id']):
- vol = db.volume_get(self.context, vol_id)
- self._assert_volume_detached(vol)
+ vol = db.volume_get(self.context, vol2['id'])
+ self._assert_volume_attached(vol, instance_uuid, '/dev/vdc')
self.cloud.start_instances(self.context, [ec2_instance_id])
vols = db.volume_get_all_by_instance_uuid(self.context, instance_uuid)
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 6f03e9c84..03fee4703 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -445,7 +445,7 @@ class ComputeTestCase(BaseTestCase):
def fake_driver_power_on(self, instance):
called['power_on'] = True
- self.stubs.Set(nova.virt.driver.ComputeDriver, 'power_on',
+ self.stubs.Set(nova.virt.fake.FakeDriver, 'power_on',
fake_driver_power_on)
instance = self._create_fake_instance()
@@ -463,7 +463,7 @@ class ComputeTestCase(BaseTestCase):
def fake_driver_power_off(self, instance):
called['power_off'] = True
- self.stubs.Set(nova.virt.driver.ComputeDriver, 'power_off',
+ self.stubs.Set(nova.virt.fake.FakeDriver, 'power_off',
fake_driver_power_off)
instance = self._create_fake_instance()
@@ -1700,8 +1700,8 @@ class ComputeTestCase(BaseTestCase):
).AndReturn([instance])
self.mox.StubOutWithMock(self.compute, "_shutdown_instance")
- self.compute._shutdown_instance(admin_context, instance,
- 'Terminating').AndReturn(None)
+ self.compute._shutdown_instance(admin_context,
+ instance).AndReturn(None)
self.mox.StubOutWithMock(self.compute, "_cleanup_volumes")
self.compute._cleanup_volumes(admin_context,
@@ -2256,13 +2256,8 @@ class ComputeAPITestCase(BaseTestCase):
check_state(instance_uuid, power_state.NOSTATE, vm_states.SHUTOFF,
None)
- start_check_state(instance_uuid,
- power_state.NOSTATE, vm_states.SHUTOFF, None)
-
- db.instance_update(self.context, instance_uuid,
- {'shutdown_terminate': False})
start_check_state(instance_uuid, power_state.NOSTATE,
- vm_states.STOPPED, task_states.STARTING)
+ vm_states.SHUTOFF, task_states.STARTING)
db.instance_destroy(self.context, instance['id'])
@@ -2338,6 +2333,10 @@ class ComputeAPITestCase(BaseTestCase):
instance = db.instance_get_by_uuid(self.context, instance_uuid)
self.assertEqual(instance['task_state'], task_states.POWERING_OFF)
+ # set the state that the instance gets when soft_delete finishes
+ instance = db.instance_update(self.context, instance['uuid'],
+ {'vm_state': vm_states.SOFT_DELETE})
+
self.compute_api.force_delete(self.context, instance)
instance = db.instance_get_by_uuid(self.context, instance_uuid)
@@ -2402,9 +2401,8 @@ class ComputeAPITestCase(BaseTestCase):
self.compute.pause_instance(self.context, instance_uuid)
# set the state that the instance gets when pause finishes
- db.instance_update(self.context, instance['uuid'],
+ instance = db.instance_update(self.context, instance['uuid'],
{'vm_state': vm_states.PAUSED})
- instance = db.instance_get_by_uuid(self.context, instance['uuid'])
self.compute_api.unpause(self.context, instance)
@@ -2425,6 +2423,10 @@ class ComputeAPITestCase(BaseTestCase):
instance = db.instance_get_by_uuid(self.context, instance_uuid)
self.assertEqual(instance['task_state'], task_states.POWERING_OFF)
+ # set the state that the instance gets when soft_delete finishes
+ instance = db.instance_update(self.context, instance['uuid'],
+ {'vm_state': vm_states.SOFT_DELETE})
+
self.compute_api.restore(self.context, instance)
instance = db.instance_get_by_uuid(self.context, instance_uuid)
@@ -2766,10 +2768,9 @@ class ComputeAPITestCase(BaseTestCase):
{'instance_uuid': instance['uuid'],
'status': 'finished'})
# set the state that the instance gets when resize finishes
- db.instance_update(self.context, instance['uuid'],
- {'task_state': task_states.RESIZE_VERIFY,
- 'vm_state': vm_states.ACTIVE})
- instance = db.instance_get_by_uuid(context, instance['uuid'])
+ instance = db.instance_update(self.context, instance['uuid'],
+ {'task_state': task_states.RESIZE_VERIFY,
+ 'vm_state': vm_states.ACTIVE})
self.compute_api.confirm_resize(context, instance)
self.compute.terminate_instance(context, instance['uuid'])
@@ -2787,10 +2788,9 @@ class ComputeAPITestCase(BaseTestCase):
{'instance_uuid': instance['uuid'],
'status': 'finished'})
# set the state that the instance gets when resize finishes
- db.instance_update(self.context, instance['uuid'],
- {'task_state': task_states.RESIZE_VERIFY,
- 'vm_state': vm_states.ACTIVE})
- instance = db.instance_get_by_uuid(context, instance['uuid'])
+ instance = db.instance_update(self.context, instance['uuid'],
+ {'task_state': task_states.RESIZE_VERIFY,
+ 'vm_state': vm_states.ACTIVE})
self.compute_api.revert_resize(context, instance)
diff --git a/nova/tests/test_virt_drivers.py b/nova/tests/test_virt_drivers.py
index d4be2b463..774450e02 100644
--- a/nova/tests/test_virt_drivers.py
+++ b/nova/tests/test_virt_drivers.py
@@ -177,6 +177,22 @@ class _VirtDriverTestCase(test.TestCase):
network_info)
@catch_notimplementederror
+ def test_power_off(self):
+ instance_ref, network_info = self._get_running_instance()
+ self.connection.power_off(instance_ref)
+
+ @catch_notimplementederror
+ def test_test_power_on_running(self):
+ instance_ref, network_info = self._get_running_instance()
+ self.connection.power_on(instance_ref)
+
+ @catch_notimplementederror
+ def test_test_power_on_powered_off(self):
+ instance_ref, network_info = self._get_running_instance()
+ self.connection.power_off(instance_ref)
+ self.connection.power_on(instance_ref)
+
+ @catch_notimplementederror
def test_pause(self):
instance_ref, network_info = self._get_running_instance()
self.connection.pause(instance_ref)