author | Danek Duvall <danek.duvall@oracle.com> |
Tue, 30 Sep 2014 13:39:00 -0700 | |
changeset 2127 | 9574188edd5d |
permissions | -rw-r--r-- |
2127
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
1 |
This upstream patch addresses CVE-2014-3608 and is tracked under Launchpad |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
2 |
bug 1319182. It is addressed in Juno 2014.2 and Icehouse 2014.1.3. It has |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
3 |
been modified to apply cleanly into our current Havana implementation. |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
4 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
5 |
From 8ff170dc95bf3101fe38a2624e941bfa3b7c1138 Mon Sep 17 00:00:00 2001 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
6 |
From: "Leandro I. Costantino" <[email protected]> |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
7 |
Date: Mon, 19 May 2014 19:58:47 -0300 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
8 |
Subject: [PATCH] VM in rescue state must have a restricted set of actions |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
9 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
10 |
Right now it is possible to pause, suspend and stop a VM in state RESCUED, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
11 |
so after the state is changed, it's not possible to trigger unrescue anymore |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
12 |
since the original state is lost. |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
13 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
14 |
This patch remove vm_states.RESCUED as valid state from stop, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
15 |
pause and suspend actions. |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
16 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
17 |
The vm_states devref is also updated to reflect this change including the |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
18 |
current reboot flow.( vm_states.RESCUED cannot be rebooted as per |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
19 |
today code) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
20 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
21 |
DocImpact |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
22 |
Closes-Bug: #1319182 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
23 |
Co-Authored-By: Cyril Roelandt <[email protected]> |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
24 |
Change-Id: I531dea5a5499bf93c24bea37850d562134dee281 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
25 |
--- |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
26 |
doc/source/devref/vmstates.rst | 7 ++++-- |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
27 |
nova/compute/api.py | 7 +++--- |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
28 |
nova/tests/compute/test_compute_api.py | 46 ++++++++++++++++++++++++++++++++-- |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
29 |
3 files changed, 52 insertions(+), 8 deletions(-) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
30 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
31 |
--- nova-2013.2.3/doc/source/devref/vmstates.rst 2014-04-03 11:49:38.000000000 -0700 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
32 |
+++ nova-2013.2.3/doc/source/devref/vmstates.rst 2014-09-29 10:32:35.921504377 -0700 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
33 |
@@ -88,6 +88,7 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
34 |
rescue -> error |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
35 |
active -> rescue |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
36 |
stopped -> rescue |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
37 |
+ error -> rescue |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
38 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
39 |
unrescue [shape="rectangle"] |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
40 |
unrescue -> active |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
41 |
@@ -139,7 +140,9 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
42 |
reboot -> error |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
43 |
active -> reboot |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
44 |
stopped -> reboot |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
45 |
- rescued -> reboot |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
46 |
+ paused -> reboot |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
47 |
+ suspended -> reboot |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
48 |
+ error -> reboot |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
49 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
50 |
live_migrate [shape="rectangle"] |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
51 |
live_migrate -> active |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
52 |
@@ -159,4 +162,4 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
53 |
power states when a new VM instance is created. |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
54 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
55 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
56 |
-.. image:: /images/run_instance_walkthrough.png |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
57 |
\ No newline at end of file |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
58 |
+.. image:: /images/run_instance_walkthrough.png |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
59 |
--- nova-2013.2.3/nova/compute/api.py 2014-04-03 11:49:46.000000000 -0700 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
60 |
+++ nova-2013.2.3/nova/compute/api.py 2014-09-29 10:32:50.868945930 -0700 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
61 |
@@ -1619,8 +1619,7 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
62 |
@check_instance_lock |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
63 |
@check_instance_host |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
64 |
@check_instance_cell |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
65 |
- @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
66 |
- vm_states.ERROR], |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
67 |
+ @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED], |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
68 |
task_state=[None]) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
69 |
def stop(self, context, instance, do_cast=True): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
70 |
"""Stop an instance.""" |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
71 |
@@ -2429,7 +2428,7 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
72 |
@wrap_check_policy |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
73 |
@check_instance_lock |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
74 |
@check_instance_cell |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
75 |
- @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED]) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
76 |
+ @check_instance_state(vm_state=[vm_states.ACTIVE]) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
77 |
def pause(self, context, instance): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
78 |
"""Pause the given instance.""" |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
79 |
instance.task_state = task_states.PAUSING |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
80 |
@@ -2456,7 +2455,7 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
81 |
@wrap_check_policy |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
82 |
@check_instance_lock |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
83 |
@check_instance_cell |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
84 |
- @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED]) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
85 |
+ @check_instance_state(vm_state=[vm_states.ACTIVE]) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
86 |
def suspend(self, context, instance): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
87 |
"""Suspend the given instance.""" |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
88 |
instance.task_state = task_states.SUSPENDING |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
89 |
--- nova-2013.2.3/nova/tests/compute/test_compute_api.py 2014-04-03 11:49:46.000000000 -0700 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
90 |
+++ nova-2013.2.3/nova/tests/compute/test_compute_api.py 2014-09-29 10:32:35.926521781 -0700 |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
91 |
@@ -56,6 +56,16 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
92 |
self.context = context.RequestContext(self.user_id, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
93 |
self.project_id) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
94 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
95 |
+ def _get_vm_states(self, exclude_states=None): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
96 |
+ vm_state = set([vm_states.ACTIVE, vm_states.BUILDING, vm_states.PAUSED, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
97 |
+ vm_states.SUSPENDED, vm_states.RESCUED, vm_states.STOPPED, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
98 |
+ vm_states.RESIZED, vm_states.SOFT_DELETED, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
99 |
+ vm_states.DELETED, vm_states.ERROR, vm_states.SHELVED, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
100 |
+ vm_states.SHELVED_OFFLOADED]) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
101 |
+ if not exclude_states: |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
102 |
+ exclude_states = set() |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
103 |
+ return vm_state - exclude_states |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
104 |
+ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
105 |
def _create_flavor(self, params=None): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
106 |
flavor = {'id': 1, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
107 |
'flavorid': 1, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
108 |
@@ -193,6 +203,19 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
109 |
self.assertEqual(task_states.SUSPENDING, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
110 |
instance.task_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
111 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
112 |
+ def _test_suspend_fails(self, vm_state): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
113 |
+ params = dict(vm_state=vm_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
114 |
+ instance = self._create_instance_obj(params=params) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
115 |
+ self.assertIsNone(instance.task_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
116 |
+ self.assertRaises(exception.InstanceInvalidState, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
117 |
+ self.compute_api.suspend, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
118 |
+ self.context, instance) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
119 |
+ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
120 |
+ def test_suspend_fails_invalid_states(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
121 |
+ invalid_vm_states = self._get_vm_states(set([vm_states.ACTIVE])) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
122 |
+ for state in invalid_vm_states: |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
123 |
+ self._test_suspend_fails(state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
124 |
+ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
125 |
def test_resume(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
126 |
# Ensure instance can be resumed (if suspended). |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
127 |
instance = self._create_instance_obj( |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
128 |
@@ -298,13 +321,19 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
129 |
def test_stop_stopped_instance_with_bypass(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
130 |
self._test_stop(vm_states.STOPPED, force=True) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
131 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
132 |
- def test_stop_invalid_state(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
133 |
- params = dict(vm_state=vm_states.PAUSED) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
134 |
+ def _test_stop_invalid_state(self, vm_state): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
135 |
+ params = dict(vm_state=vm_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
136 |
instance = self._create_instance_obj(params=params) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
137 |
self.assertRaises(exception.InstanceInvalidState, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
138 |
self.compute_api.stop, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
139 |
self.context, instance) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
140 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
141 |
+ def test_stop_fails_invalid_states(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
142 |
+ invalid_vm_states = self._get_vm_states(set([vm_states.ACTIVE, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
143 |
+ vm_states.ERROR])) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
144 |
+ for state in invalid_vm_states: |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
145 |
+ self._test_stop_invalid_state(state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
146 |
+ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
147 |
def test_stop_a_stopped_inst(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
148 |
params = {'vm_state': vm_states.STOPPED} |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
149 |
instance = self._create_instance_obj(params=params) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
150 |
@@ -1075,6 +1104,19 @@ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
151 |
self.assertEqual(task_states.PAUSING, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
152 |
instance.task_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
153 |
|
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
154 |
+ def _test_pause_fails(self, vm_state): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
155 |
+ params = dict(vm_state=vm_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
156 |
+ instance = self._create_instance_obj(params=params) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
157 |
+ self.assertIsNone(instance.task_state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
158 |
+ self.assertRaises(exception.InstanceInvalidState, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
159 |
+ self.compute_api.pause, |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
160 |
+ self.context, instance) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
161 |
+ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
162 |
+ def test_pause_fails_invalid_states(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
163 |
+ invalid_vm_states = self._get_vm_states(set([vm_states.ACTIVE])) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
164 |
+ for state in invalid_vm_states: |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
165 |
+ self._test_pause_fails(state) |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
166 |
+ |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
167 |
def test_unpause(self): |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
168 |
# Ensure instance can be unpaused. |
9574188edd5d
19715056 problem in SERVICE/NOVA
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
169 |
params = dict(vm_state=vm_states.PAUSED) |