Merge lp:~gandelman-a/ironic/icehouse_rc2 into lp:~ubuntu-server-dev/ironic/icehouse
- icehouse_rc2
- Merge into icehouse
Proposed by
Adam Gandelman
Status: | Rejected |
---|---|
Rejected by: | Martin Pitt |
Proposed branch: | lp:~gandelman-a/ironic/icehouse_rc2 |
Merge into: | lp:~ubuntu-server-dev/ironic/icehouse |
Diff against target: |
575 lines (+537/-2) 4 files modified
debian/changelog (+10/-0) debian/control (+2/-2) debian/patches/cleanup_conductors_in_tests.patch (+524/-0) debian/patches/series (+1/-0) |
To merge this branch: | bzr merge lp:~gandelman-a/ironic/icehouse_rc2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu Server Developers | Pending | ||
Review via email: mp+215985@code.launchpad.net |
Commit message
Description of the change
RC2 and some minor fixes, including a cherry-picked patch that will fix a potential for memory exhaustion during test suite run (saw this a few times on PPA buildds)
To post a comment you must log in.
Revision history for this message
Martin Pitt (pitti) wrote : | # |
Unmerged revisions
- 18. By Adam Gandelman
-
d/control: Fix lintian warnings: bump debhelper version requirement
and standards version. - 17. By Adam Gandelman
-
d/control: Bump standards to 3.9.5.
- 16. By Adam Gandelman
-
d/p/cleanup_
conductors_ in_tests. patch: Cherry-pick upstream patch that
fixes possible memory exhaustion and deadlock during test suite runs. - 15. By Adam Gandelman
-
New upstream release.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'debian/changelog' |
2 | --- debian/changelog 2014-04-04 18:58:26 +0000 |
3 | +++ debian/changelog 2014-04-15 23:19:36 +0000 |
4 | @@ -1,3 +1,13 @@ |
5 | +ironic (2014.1~rc2-0ubuntu1) trusty; urgency=medium |
6 | + |
7 | + * New upstream release. |
8 | + * d/p/cleanup_conductors_in_tests.patch: Cherry-pick upstream patch that |
9 | + fixes possible memory exhaustion and deadlock during test suite runs. |
10 | + * d/control: Fix lintian warnings: bump debhelper version requirement |
11 | + and standards version. |
12 | + |
13 | + -- Adam Gandelman <adamg@ubuntu.com> Tue, 15 Apr 2014 16:04:16 -0700 |
14 | + |
15 | ironic (2014.1~rc1-0ubuntu1) trusty; urgency=medium |
16 | |
17 | [ Adam Gandelman ] |
18 | |
19 | === modified file 'debian/control' |
20 | --- debian/control 2014-04-04 18:16:52 +0000 |
21 | +++ debian/control 2014-04-15 23:19:36 +0000 |
22 | @@ -2,7 +2,7 @@ |
23 | Section: net |
24 | Priority: extra |
25 | Maintainer: Chuck Short <zulcss@ubuntu.com> |
26 | -Build-Depends: debhelper (>= 8.0.0), |
27 | +Build-Depends: debhelper (>= 9.0.0), |
28 | alembic (>= 0.4.1), |
29 | python-setuptools, |
30 | python-all (>= 2.6), |
31 | @@ -40,7 +40,7 @@ |
32 | python-subunit, |
33 | testrepository (>= 0.0.17), |
34 | python-testtools (>= 0.9.32) |
35 | -Standards-Version: 3.9.4 |
36 | +Standards-Version: 3.9.5 |
37 | Vcs-Browser: http://bazaar.launchpad.net/~ubuntu-server-dev/ironic/icehouse/files |
38 | Vcs-Bzr: https://code.launchpad.net/~ubuntu-server-dev/ironic/icehouse |
39 | |
40 | |
41 | === added file 'debian/patches/cleanup_conductors_in_tests.patch' |
42 | --- debian/patches/cleanup_conductors_in_tests.patch 1970-01-01 00:00:00 +0000 |
43 | +++ debian/patches/cleanup_conductors_in_tests.patch 2014-04-15 23:19:36 +0000 |
44 | @@ -0,0 +1,524 @@ |
45 | +From a4cf03c7e66a829400d69da295f54f5c2beb6812 Mon Sep 17 00:00:00 2001 |
46 | +From: Adam Gandelman <adamg@ubuntu.com> |
47 | +Date: Wed, 9 Apr 2014 16:50:05 -0700 |
48 | +Subject: [PATCH 1/1] Cleanup running conductor services in tests |
49 | + |
50 | +The conductor manager tests are not stopping services that are |
51 | +started, instead relying strickly on database cleanup. This is |
52 | +causing condcutor periodic tasks to bleed into other test cases |
53 | +and cause occasional unrelated deadlocks in logging later on during |
54 | +test runs. |
55 | + |
56 | +Change-Id: I7502df5dec7c42fe1a20bebad8f9ad393572d17d |
57 | +Closes-bug: #1300420 |
58 | +--- |
59 | + ironic/tests/conductor/test_manager.py | 121 ++++++++++++++++++--------------- |
60 | + 1 file changed, 66 insertions(+), 55 deletions(-) |
61 | + |
62 | +diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py |
63 | +index 307b7c9..68e2ba3 100644 |
64 | +--- a/ironic/tests/conductor/test_manager.py |
65 | ++++ b/ironic/tests/conductor/test_manager.py |
66 | +@@ -55,16 +55,27 @@ class ManagerTestCase(base.DbTestCase): |
67 | + mgr_utils.mock_the_extension_manager() |
68 | + self.driver = driver_factory.get_driver("fake") |
69 | + |
70 | ++ def _stop_service(self): |
71 | ++ try: |
72 | ++ self.dbapi.get_conductor(self.hostname) |
73 | ++ except exception.ConductorNotFound: |
74 | ++ return |
75 | ++ self.service.stop() |
76 | ++ |
77 | ++ def _start_service(self): |
78 | ++ self.service.start() |
79 | ++ self.addCleanup(self._stop_service) |
80 | ++ |
81 | + def test_start_registers_conductor(self): |
82 | + self.assertRaises(exception.ConductorNotFound, |
83 | + self.dbapi.get_conductor, |
84 | + self.hostname) |
85 | +- self.service.start() |
86 | ++ self._start_service() |
87 | + res = self.dbapi.get_conductor(self.hostname) |
88 | + self.assertEqual(self.hostname, res['hostname']) |
89 | + |
90 | + def test_stop_unregisters_conductor(self): |
91 | +- self.service.start() |
92 | ++ self._start_service() |
93 | + res = self.dbapi.get_conductor(self.hostname) |
94 | + self.assertEqual(self.hostname, res['hostname']) |
95 | + self.service.stop() |
96 | +@@ -80,24 +91,24 @@ class ManagerTestCase(base.DbTestCase): |
97 | + with mock.patch.object(df._extension_manager, 'names') as mock_names: |
98 | + # verify driver names are registered |
99 | + mock_names.return_value = init_names |
100 | +- self.service.start() |
101 | ++ self._start_service() |
102 | + res = self.dbapi.get_conductor(self.hostname) |
103 | + self.assertEqual(init_names, res['drivers']) |
104 | + |
105 | + # verify that restart registers new driver names |
106 | + mock_names.return_value = restart_names |
107 | +- self.service.start() |
108 | ++ self._start_service() |
109 | + res = self.dbapi.get_conductor(self.hostname) |
110 | + self.assertEqual(restart_names, res['drivers']) |
111 | + |
112 | + def test__conductor_service_record_keepalive(self): |
113 | +- self.service.start() |
114 | ++ self._start_service() |
115 | + with mock.patch.object(self.dbapi, 'touch_conductor') as mock_touch: |
116 | + self.service._conductor_service_record_keepalive(self.context) |
117 | + mock_touch.assert_called_once_with(self.hostname) |
118 | + |
119 | + def test__sync_power_state_no_sync(self): |
120 | +- self.service.start() |
121 | ++ self._start_service() |
122 | + n = utils.get_test_node(driver='fake', power_state='fake-power') |
123 | + self.dbapi.create_node(n) |
124 | + with mock.patch.object(self.driver.power, |
125 | +@@ -109,7 +120,7 @@ class ManagerTestCase(base.DbTestCase): |
126 | + self.assertEqual('fake-power', node['power_state']) |
127 | + |
128 | + def test__sync_power_state_not_set(self): |
129 | +- self.service.start() |
130 | ++ self._start_service() |
131 | + n = utils.get_test_node(driver='fake', power_state=None) |
132 | + self.dbapi.create_node(n) |
133 | + with mock.patch.object(self.driver.power, |
134 | +@@ -122,7 +133,7 @@ class ManagerTestCase(base.DbTestCase): |
135 | + |
136 | + @mock.patch.object(objects.node.Node, 'save') |
137 | + def test__sync_power_state_unchanged(self, save_mock): |
138 | +- self.service.start() |
139 | ++ self._start_service() |
140 | + n = utils.get_test_node(driver='fake', power_state=states.POWER_ON) |
141 | + self.dbapi.create_node(n) |
142 | + with mock.patch.object(self.driver.power, |
143 | +@@ -135,7 +146,7 @@ class ManagerTestCase(base.DbTestCase): |
144 | + @mock.patch.object(conductor_utils, 'node_power_action') |
145 | + @mock.patch.object(objects.node.Node, 'save') |
146 | + def test__sync_power_state_changed_sync(self, save_mock, npa_mock): |
147 | +- self.service.start() |
148 | ++ self._start_service() |
149 | + self.config(force_power_state_during_sync=True, group='conductor') |
150 | + n = utils.get_test_node(driver='fake', power_state=states.POWER_ON) |
151 | + self.dbapi.create_node(n) |
152 | +@@ -154,7 +165,7 @@ class ManagerTestCase(base.DbTestCase): |
153 | + """Force sync node power state and check if max retry |
154 | + limit for force sync is honoured |
155 | + """ |
156 | +- self.service.start() |
157 | ++ self._start_service() |
158 | + self.config(force_power_state_during_sync=True, group='conductor') |
159 | + self.config(power_state_sync_max_retries=1, group='conductor') |
160 | + n = utils.get_test_node(driver='fake', power_state=states.POWER_ON) |
161 | +@@ -180,7 +191,7 @@ class ManagerTestCase(base.DbTestCase): |
162 | + @mock.patch.object(conductor_utils, 'node_power_action') |
163 | + @mock.patch.object(objects.node.Node, 'save') |
164 | + def test__sync_power_state_changed_failed(self, save_mock, npa_mock): |
165 | +- self.service.start() |
166 | ++ self._start_service() |
167 | + self.config(force_power_state_during_sync=True, group='conductor') |
168 | + n = utils.get_test_node(driver='fake', power_state=states.POWER_ON) |
169 | + self.dbapi.create_node(n) |
170 | +@@ -199,7 +210,7 @@ class ManagerTestCase(base.DbTestCase): |
171 | + @mock.patch.object(conductor_utils, 'node_power_action') |
172 | + @mock.patch.object(objects.node.Node, 'save') |
173 | + def test__sync_power_state_changed_save(self, save_mock, npa_mock): |
174 | +- self.service.start() |
175 | ++ self._start_service() |
176 | + self.config(force_power_state_during_sync=False, group='conductor') |
177 | + n = utils.get_test_node(driver='fake', power_state=states.POWER_OFF) |
178 | + self.dbapi.create_node(n) |
179 | +@@ -212,7 +223,7 @@ class ManagerTestCase(base.DbTestCase): |
180 | + self.assertTrue(save_mock.called) |
181 | + |
182 | + def test__sync_power_state_node_locked(self): |
183 | +- self.service.start() |
184 | ++ self._start_service() |
185 | + n = utils.get_test_node(driver='fake', power_state='fake-power') |
186 | + self.dbapi.create_node(n) |
187 | + self.dbapi.reserve_nodes('fake-reserve', [n['id']]) |
188 | +@@ -224,7 +235,7 @@ class ManagerTestCase(base.DbTestCase): |
189 | + self.assertEqual('fake-power', node['power_state']) |
190 | + |
191 | + def test__sync_power_state_multiple_nodes(self): |
192 | +- self.service.start() |
193 | ++ self._start_service() |
194 | + self.config(force_power_state_during_sync=False, group='conductor') |
195 | + |
196 | + # create three nodes |
197 | +@@ -257,7 +268,7 @@ class ManagerTestCase(base.DbTestCase): |
198 | + self.assertEqual(states.POWER_ON, n3['power_state']) |
199 | + |
200 | + def test__sync_power_state_node_no_power_state(self): |
201 | +- self.service.start() |
202 | ++ self._start_service() |
203 | + self.config(force_power_state_during_sync=False, group='conductor') |
204 | + |
205 | + # create three nodes |
206 | +@@ -292,7 +303,7 @@ class ManagerTestCase(base.DbTestCase): |
207 | + self.assertEqual(final[i], n.power_state) |
208 | + |
209 | + def test__sync_power_state_node_deploywait(self): |
210 | +- self.service.start() |
211 | ++ self._start_service() |
212 | + n = utils.get_test_node(provision_state=states.DEPLOYWAIT) |
213 | + self.dbapi.create_node(n) |
214 | + |
215 | +@@ -307,7 +318,7 @@ class ManagerTestCase(base.DbTestCase): |
216 | + n = utils.get_test_node(driver='fake', |
217 | + power_state=states.POWER_OFF) |
218 | + db_node = self.dbapi.create_node(n) |
219 | +- self.service.start() |
220 | ++ self._start_service() |
221 | + |
222 | + with mock.patch.object(self.driver.power, 'get_power_state') \ |
223 | + as get_power_mock: |
224 | +@@ -338,7 +349,7 @@ class ManagerTestCase(base.DbTestCase): |
225 | + power_state=pwr_state, |
226 | + reservation=fake_reservation) |
227 | + db_node = self.dbapi.create_node(n) |
228 | +- self.service.start() |
229 | ++ self._start_service() |
230 | + |
231 | + exc = self.assertRaises(messaging.ClientException, |
232 | + self.service.change_node_power_state, |
233 | +@@ -364,7 +375,7 @@ class ManagerTestCase(base.DbTestCase): |
234 | + n = utils.get_test_node(driver='fake', |
235 | + power_state=initial_state) |
236 | + db_node = self.dbapi.create_node(n) |
237 | +- self.service.start() |
238 | ++ self._start_service() |
239 | + |
240 | + with mock.patch.object(self.service, '_spawn_worker') \ |
241 | + as spawn_mock: |
242 | +@@ -395,7 +406,7 @@ class ManagerTestCase(base.DbTestCase): |
243 | + n = utils.get_test_node(driver='fake', |
244 | + power_state=initial_state) |
245 | + db_node = self.dbapi.create_node(n) |
246 | +- self.service.start() |
247 | ++ self._start_service() |
248 | + |
249 | + with mock.patch.object(self.driver.power, 'get_power_state') \ |
250 | + as get_power_mock: |
251 | +@@ -512,7 +523,7 @@ class ManagerTestCase(base.DbTestCase): |
252 | + n = utils.get_test_node(driver='fake') |
253 | + node = self.dbapi.create_node(n) |
254 | + info = {'bar': 'baz'} |
255 | +- self.service.start() |
256 | ++ self._start_service() |
257 | + |
258 | + self.service.vendor_passthru( |
259 | + self.context, n['uuid'], 'first_method', info) |
260 | +@@ -529,7 +540,7 @@ class ManagerTestCase(base.DbTestCase): |
261 | + n = utils.get_test_node(driver='fake', reservation=fake_reservation) |
262 | + node = self.dbapi.create_node(n) |
263 | + info = {'bar': 'baz'} |
264 | +- self.service.start() |
265 | ++ self._start_service() |
266 | + |
267 | + exc = self.assertRaises(messaging.ClientException, |
268 | + self.service.vendor_passthru, |
269 | +@@ -546,7 +557,7 @@ class ManagerTestCase(base.DbTestCase): |
270 | + n = utils.get_test_node(driver='fake') |
271 | + node = self.dbapi.create_node(n) |
272 | + info = {'bar': 'baz'} |
273 | +- self.service.start() |
274 | ++ self._start_service() |
275 | + |
276 | + exc = self.assertRaises(messaging.ClientException, |
277 | + self.service.vendor_passthru, |
278 | +@@ -565,7 +576,7 @@ class ManagerTestCase(base.DbTestCase): |
279 | + n = utils.get_test_node(driver='fake') |
280 | + node = self.dbapi.create_node(n) |
281 | + info = {'invalid_param': 'whatever'} |
282 | +- self.service.start() |
283 | ++ self._start_service() |
284 | + |
285 | + exc = self.assertRaises(messaging.ClientException, |
286 | + self.service.vendor_passthru, |
287 | +@@ -583,7 +594,7 @@ class ManagerTestCase(base.DbTestCase): |
288 | + node = self.dbapi.create_node(n) |
289 | + info = {'bar': 'baz'} |
290 | + self.driver.vendor = None |
291 | +- self.service.start() |
292 | ++ self._start_service() |
293 | + |
294 | + exc = self.assertRaises(messaging.ClientException, |
295 | + self.service.vendor_passthru, |
296 | +@@ -601,7 +612,7 @@ class ManagerTestCase(base.DbTestCase): |
297 | + n = utils.get_test_node(driver='fake') |
298 | + node = self.dbapi.create_node(n) |
299 | + info = {'bar': 'baz'} |
300 | +- self.service.start() |
301 | ++ self._start_service() |
302 | + |
303 | + with mock.patch.object(self.service, '_spawn_worker') \ |
304 | + as spawn_mock: |
305 | +@@ -701,7 +712,7 @@ class ManagerTestCase(base.DbTestCase): |
306 | + mock_deploy.assert_called_once_with(mock.ANY, mock.ANY) |
307 | + |
308 | + def test_do_node_deploy_partial_ok(self): |
309 | +- self.service.start() |
310 | ++ self._start_service() |
311 | + thread = self.service._spawn_worker(lambda: None) |
312 | + with mock.patch.object(self.service, '_spawn_worker') as mock_spawn: |
313 | + mock_spawn.return_value = thread |
314 | +@@ -724,7 +735,7 @@ class ManagerTestCase(base.DbTestCase): |
315 | + def test_do_node_deploy_worker_pool_full(self): |
316 | + ndict = utils.get_test_node(driver='fake') |
317 | + node = self.dbapi.create_node(ndict) |
318 | +- self.service.start() |
319 | ++ self._start_service() |
320 | + |
321 | + with mock.patch.object(self.service, '_spawn_worker') as mock_spawn: |
322 | + mock_spawn.side_effect = exception.NoFreeConductorWorker() |
323 | +@@ -773,7 +784,7 @@ class ManagerTestCase(base.DbTestCase): |
324 | + node = self.dbapi.create_node(ndict) |
325 | + |
326 | + task = task_manager.TaskManager(self.context, node.uuid) |
327 | +- self.service.start() |
328 | ++ self._start_service() |
329 | + mock_tear_down.side_effect = exception.InstanceDeployFailure('test') |
330 | + self.assertRaises(exception.InstanceDeployFailure, |
331 | + self.service._do_node_tear_down, |
332 | +@@ -792,7 +803,7 @@ class ManagerTestCase(base.DbTestCase): |
333 | + node = self.dbapi.create_node(ndict) |
334 | + |
335 | + task = task_manager.TaskManager(self.context, node.uuid) |
336 | +- self.service.start() |
337 | ++ self._start_service() |
338 | + mock_tear_down.return_value = states.DELETED |
339 | + self.service._do_node_tear_down(self.context, task) |
340 | + node.refresh(self.context) |
341 | +@@ -808,7 +819,7 @@ class ManagerTestCase(base.DbTestCase): |
342 | + provision_state=states.ACTIVE) |
343 | + node = self.dbapi.create_node(ndict) |
344 | + |
345 | +- self.service.start() |
346 | ++ self._start_service() |
347 | + task = task_manager.TaskManager(self.context, node.uuid) |
348 | + mock_tear_down.return_value = states.DELETING |
349 | + self.service._do_node_tear_down(self.context, task) |
350 | +@@ -822,7 +833,7 @@ class ManagerTestCase(base.DbTestCase): |
351 | + ndict = utils.get_test_node(driver='fake', |
352 | + provision_state=states.ACTIVE) |
353 | + node = self.dbapi.create_node(ndict) |
354 | +- self.service.start() |
355 | ++ self._start_service() |
356 | + |
357 | + mock_spawn.side_effect = exception.NoFreeConductorWorker() |
358 | + |
359 | +@@ -904,7 +915,7 @@ class ManagerTestCase(base.DbTestCase): |
360 | + func_mock = mock.Mock() |
361 | + args = (1, 2, "test") |
362 | + kwargs = dict(kw1='test1', kw2='test2') |
363 | +- self.service.start() |
364 | ++ self._start_service() |
365 | + |
366 | + thread = self.service._spawn_worker(func_mock, *args, **kwargs) |
367 | + self.service._worker_pool.waitall() |
368 | +@@ -919,7 +930,7 @@ class ManagerTestCase(base.DbTestCase): |
369 | + def func(): |
370 | + time.sleep(1) |
371 | + link_callback = mock.Mock() |
372 | +- self.service.start() |
373 | ++ self._start_service() |
374 | + |
375 | + thread = self.service._spawn_worker(func) |
376 | + # func_mock executing at this moment |
377 | +@@ -932,7 +943,7 @@ class ManagerTestCase(base.DbTestCase): |
378 | + def func(): |
379 | + pass |
380 | + link_callback = mock.Mock() |
381 | +- self.service.start() |
382 | ++ self._start_service() |
383 | + |
384 | + thread = self.service._spawn_worker(func) |
385 | + self.service._worker_pool.waitall() |
386 | +@@ -946,7 +957,7 @@ class ManagerTestCase(base.DbTestCase): |
387 | + time.sleep(1) |
388 | + raise Exception() |
389 | + link_callback = mock.Mock() |
390 | +- self.service.start() |
391 | ++ self._start_service() |
392 | + |
393 | + thread = self.service._spawn_worker(func) |
394 | + # func_mock executing at this moment |
395 | +@@ -959,7 +970,7 @@ class ManagerTestCase(base.DbTestCase): |
396 | + def func(): |
397 | + raise Exception() |
398 | + link_callback = mock.Mock() |
399 | +- self.service.start() |
400 | ++ self._start_service() |
401 | + |
402 | + thread = self.service._spawn_worker(func) |
403 | + self.service._worker_pool.waitall() |
404 | +@@ -969,7 +980,7 @@ class ManagerTestCase(base.DbTestCase): |
405 | + link_callback.assert_called_once_with(thread) |
406 | + |
407 | + def test_destroy_node(self): |
408 | +- self.service.start() |
409 | ++ self._start_service() |
410 | + ndict = utils.get_test_node(driver='fake') |
411 | + node = self.dbapi.create_node(ndict) |
412 | + self.service.destroy_node(self.context, node.uuid) |
413 | +@@ -978,7 +989,7 @@ class ManagerTestCase(base.DbTestCase): |
414 | + node.uuid) |
415 | + |
416 | + def test_destroy_node_reserved(self): |
417 | +- self.service.start() |
418 | ++ self._start_service() |
419 | + fake_reservation = 'fake-reserv' |
420 | + ndict = utils.get_test_node(reservation=fake_reservation) |
421 | + node = self.dbapi.create_node(ndict) |
422 | +@@ -993,7 +1004,7 @@ class ManagerTestCase(base.DbTestCase): |
423 | + self.assertEqual(fake_reservation, node.reservation) |
424 | + |
425 | + def test_destroy_node_associated(self): |
426 | +- self.service.start() |
427 | ++ self._start_service() |
428 | + ndict = utils.get_test_node(instance_uuid='fake-uuid') |
429 | + node = self.dbapi.create_node(ndict) |
430 | + |
431 | +@@ -1013,7 +1024,7 @@ class ManagerTestCase(base.DbTestCase): |
432 | + past = datetime.datetime(2000, 1, 1, 0, 0) |
433 | + present = past + datetime.timedelta(minutes=5) |
434 | + mock_utcnow.return_value = past |
435 | +- self.service.start() |
436 | ++ self._start_service() |
437 | + n = utils.get_test_node(provision_state=states.DEPLOYWAIT, |
438 | + target_provision_state=states.DEPLOYDONE, |
439 | + provision_updated_at=past) |
440 | +@@ -1034,7 +1045,7 @@ class ManagerTestCase(base.DbTestCase): |
441 | + past = datetime.datetime(2000, 1, 1, 0, 0) |
442 | + present = past + datetime.timedelta(minutes=5) |
443 | + mock_utcnow.return_value = past |
444 | +- self.service.start() |
445 | ++ self._start_service() |
446 | + n = utils.get_test_node(provision_state=states.DEPLOYWAIT, |
447 | + target_provision_state=states.DEPLOYDONE, |
448 | + provision_updated_at=past) |
449 | +@@ -1050,7 +1061,7 @@ class ManagerTestCase(base.DbTestCase): |
450 | + |
451 | + def test__check_deploy_timeouts_disabled(self): |
452 | + self.config(deploy_callback_timeout=0, group='conductor') |
453 | +- self.service.start() |
454 | ++ self._start_service() |
455 | + with mock.patch.object(self.dbapi, 'get_nodeinfo_list') as get_mock: |
456 | + self.service._check_deploy_timeouts(self.context) |
457 | + self.assertFalse(get_mock.called) |
458 | +@@ -1061,7 +1072,7 @@ class ManagerTestCase(base.DbTestCase): |
459 | + past = datetime.datetime(2000, 1, 1, 0, 0) |
460 | + present = past + datetime.timedelta(minutes=5) |
461 | + mock_utcnow.return_value = past |
462 | +- self.service.start() |
463 | ++ self._start_service() |
464 | + n = utils.get_test_node(provision_state=states.DEPLOYWAIT, |
465 | + target_provision_state=states.DEPLOYDONE, |
466 | + provision_updated_at=past) |
467 | +@@ -1081,7 +1092,7 @@ class ManagerTestCase(base.DbTestCase): |
468 | + def test_set_console_mode_worker_pool_full(self): |
469 | + ndict = utils.get_test_node(driver='fake') |
470 | + node = self.dbapi.create_node(ndict) |
471 | +- self.service.start() |
472 | ++ self._start_service() |
473 | + with mock.patch.object(self.service, '_spawn_worker') \ |
474 | + as spawn_mock: |
475 | + spawn_mock.side_effect = exception.NoFreeConductorWorker() |
476 | +@@ -1097,7 +1108,7 @@ class ManagerTestCase(base.DbTestCase): |
477 | + def test_set_console_mode_enabled(self): |
478 | + ndict = utils.get_test_node(driver='fake') |
479 | + node = self.dbapi.create_node(ndict) |
480 | +- self.service.start() |
481 | ++ self._start_service() |
482 | + self.service.set_console_mode(self.context, node.uuid, True) |
483 | + self.service._worker_pool.waitall() |
484 | + node.refresh(self.context) |
485 | +@@ -1106,7 +1117,7 @@ class ManagerTestCase(base.DbTestCase): |
486 | + def test_set_console_mode_disabled(self): |
487 | + ndict = utils.get_test_node(driver='fake') |
488 | + node = self.dbapi.create_node(ndict) |
489 | +- self.service.start() |
490 | ++ self._start_service() |
491 | + self.service.set_console_mode(self.context, node.uuid, False) |
492 | + self.service._worker_pool.waitall() |
493 | + node.refresh(self.context) |
494 | +@@ -1115,7 +1126,7 @@ class ManagerTestCase(base.DbTestCase): |
495 | + def test_set_console_mode_not_supported(self): |
496 | + ndict = utils.get_test_node(driver='fake', last_error=None) |
497 | + node = self.dbapi.create_node(ndict) |
498 | +- self.service.start() |
499 | ++ self._start_service() |
500 | + # null the console interface |
501 | + self.driver.console = None |
502 | + exc = self.assertRaises(messaging.ClientException, |
503 | +@@ -1131,7 +1142,7 @@ class ManagerTestCase(base.DbTestCase): |
504 | + def test_set_console_mode_validation_fail(self): |
505 | + ndict = utils.get_test_node(driver='fake', last_error=None) |
506 | + node = self.dbapi.create_node(ndict) |
507 | +- self.service.start() |
508 | ++ self._start_service() |
509 | + with mock.patch.object(self.driver.console, 'validate') as mock_val: |
510 | + mock_val.side_effect = exception.InvalidParameterValue('error') |
511 | + exc = self.assertRaises(messaging.ClientException, |
512 | +@@ -1144,7 +1155,7 @@ class ManagerTestCase(base.DbTestCase): |
513 | + ndict = utils.get_test_node(driver='fake', last_error=None, |
514 | + console_enabled=False) |
515 | + node = self.dbapi.create_node(ndict) |
516 | +- self.service.start() |
517 | ++ self._start_service() |
518 | + with mock.patch.object(self.driver.console, 'start_console') \ |
519 | + as mock_sc: |
520 | + mock_sc.side_effect = exception.IronicException('test-error') |
521 | +@@ -1158,7 +1169,7 @@ class ManagerTestCase(base.DbTestCase): |
522 | + ndict = utils.get_test_node(driver='fake', last_error=None, |
523 | + console_enabled=True) |
524 | + node = self.dbapi.create_node(ndict) |
525 | +- self.service.start() |
526 | ++ self._start_service() |
527 | + with mock.patch.object(self.driver.console, 'stop_console') \ |
528 | + as mock_sc: |
529 | + mock_sc.side_effect = exception.IronicException('test-error') |
530 | +@@ -1171,7 +1182,7 @@ class ManagerTestCase(base.DbTestCase): |
531 | + def test_enable_console_already_enabled(self): |
532 | + ndict = utils.get_test_node(driver='fake', console_enabled=True) |
533 | + node = self.dbapi.create_node(ndict) |
534 | +- self.service.start() |
535 | ++ self._start_service() |
536 | + with mock.patch.object(self.driver.console, 'start_console') \ |
537 | + as mock_sc: |
538 | + self.service.set_console_mode(self.context, node.uuid, True) |
539 | +@@ -1181,7 +1192,7 @@ class ManagerTestCase(base.DbTestCase): |
540 | + def test_disable_console_already_disabled(self): |
541 | + ndict = utils.get_test_node(driver='fake', console_enabled=False) |
542 | + node = self.dbapi.create_node(ndict) |
543 | +- self.service.start() |
544 | ++ self._start_service() |
545 | + with mock.patch.object(self.driver.console, 'stop_console') \ |
546 | + as mock_sc: |
547 | + self.service.set_console_mode(self.context, node.uuid, False) |
548 | +@@ -1231,7 +1242,7 @@ class ManagerTestCase(base.DbTestCase): |
549 | + self.assertEqual(exc._exc_info[0], exception.InvalidParameterValue) |
550 | + |
551 | + def test_destroy_node_power_on(self): |
552 | +- self.service.start() |
553 | ++ self._start_service() |
554 | + ndict = utils.get_test_node(power_state=states.POWER_ON) |
555 | + node = self.dbapi.create_node(ndict) |
556 | + |
557 | +@@ -1245,7 +1256,7 @@ class ManagerTestCase(base.DbTestCase): |
558 | + self.assertIsNone(node.reservation) |
559 | + |
560 | + def test_destroy_node_power_off(self): |
561 | +- self.service.start() |
562 | ++ self._start_service() |
563 | + ndict = utils.get_test_node(power_state=states.POWER_OFF) |
564 | + node = self.dbapi.create_node(ndict) |
565 | + self.service.destroy_node(self.context, node.uuid) |
566 | +-- |
567 | +1.9.1 |
568 | + |
569 | |
570 | === modified file 'debian/patches/series' |
571 | --- debian/patches/series 2014-04-01 22:53:05 +0000 |
572 | +++ debian/patches/series 2014-04-15 23:19:36 +0000 |
573 | @@ -1,1 +1,2 @@ |
574 | set_logdir.patch |
575 | +cleanup_conductors_in_tests.patch |
ironic is much newer in wily, and for trusty we probably won't update to newer upstream versions any more, so this seems obsolete. If this is still relevant, please reopen.