Merge lp:~sinzui/juju-ci-tools/teardown-before-next into lp:juju-ci-tools

Proposed by Curtis Hovey
Status: Merged
Merged at revision: 1912
Proposed branch: lp:~sinzui/juju-ci-tools/teardown-before-next
Merge into: lp:juju-ci-tools
Diff against target: 390 lines (+130/-142)
2 files modified
assess_storage.py (+96/-108)
tests/test_assess_storage.py (+34/-34)
To merge this branch: bzr merge lp:~sinzui/juju-ci-tools/teardown-before-next
Reviewer Review Type Date Requested Status
Juju Release Engineering Pending
Review via email: mp+318300@code.launchpad.net

Description of the change

Remove services when each test finishes.

The assess_storage test has often failed because AWS cannot delete all the machines in the allotted 10 minutes. The test is failing more frequently now that juju is doing a better job of cleanup storage.

This branch updates the main test to call client.remove_service after each sub-test. The speeds the test up because AWS can delete services faster than it cna deploy the next charm for testing. destroy-controller has fewer machines to delete.

The subtests are no-longer sequential. This fix allowed me to remove the previous test results from the current test. \o/

I reformatted and named the results so that we do not need to guess that expected_tmpfs is for the tmpfs test.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'assess_storage.py'
2--- assess_storage.py 2017-02-21 15:12:54 +0000
3+++ assess_storage.py 2017-02-25 04:02:02 +0000
4@@ -47,106 +47,87 @@
5 'provider': 'loop'},
6 'rootfs': {
7 'provider': 'rootfs'}
8-}
9+ }
10
11
12 storage_pool_details = {
13- "loopy":
14- {
15- "provider": "loop",
16- "attrs":
17- {
18- "size": "1G"
19- }},
20- "rooty":
21- {
22- "provider": "rootfs",
23- "attrs":
24- {
25- "size": "1G"
26- }},
27- "tempy":
28- {
29- "provider": "tmpfs",
30- "attrs":
31- {
32- "size": "1G"
33- }},
34- "ebsy":
35- {
36- "provider": "ebs",
37- "attrs":
38- {
39- "size": "1G"
40- }}
41-}
42-
43+ "loopy": {
44+ "provider": "loop",
45+ "attrs": {"size": "1G"}
46+ },
47+ "rooty": {
48+ "provider": "rootfs",
49+ "attrs": {"size": "1G"}
50+ },
51+ "tempy": {
52+ "provider": "tmpfs",
53+ "attrs": {"size": "1G"}
54+ },
55+ "ebsy": {
56+ "provider": "ebs",
57+ "attrs": {"size": "1G"}
58+ },
59+ }
60 storage_pool_1x = copy.deepcopy(storage_pool_details)
61 storage_pool_1x["ebs-ssd"] = {
62 "provider": "ebs",
63- "attrs":
64- {
65- "volume-type": "ssd"
66- }
67-}
68-
69-storage_list_expected = {
70- "storage":
71- {"data/0":
72- {
73- "kind": "filesystem",
74- "attachments":
75- {
76- "units":
77- {
78- "dummy-storage-fs/0":
79- {"location": "/srv/data"}}}}}}
80-
81-storage_list_expected_2 = copy.deepcopy(storage_list_expected)
82-storage_list_expected_2["storage"]["disks/1"] = {
83- "kind": "block",
84- "attachments":
85- {
86- "units":
87- {"dummy-storage-lp/0":
88- {
89- "location": ""}}}}
90-storage_list_expected_3 = copy.deepcopy(storage_list_expected_2)
91-storage_list_expected_3["storage"]["disks/2"] = {
92- "kind": "block",
93- "attachments":
94- {
95- "units":
96- {"dummy-storage-lp/0":
97- {
98- "location": ""}}}}
99-storage_list_expected_4 = copy.deepcopy(storage_list_expected_3)
100-storage_list_expected_4["storage"]["data/3"] = {
101- "kind": "filesystem",
102- "attachments":
103- {
104- "units":
105- {"dummy-storage-tp/0":
106- {
107- "location": "/srv/data"}}}}
108-storage_list_expected_5 = copy.deepcopy(storage_list_expected_4)
109-storage_list_expected_5["storage"]["data/4"] = {
110- "kind": "filesystem",
111- "attachments":
112- {
113- "units":
114- {"dummy-storage-np/0":
115- {
116- "location": "/srv/data"}}}}
117-storage_list_expected_6 = copy.deepcopy(storage_list_expected_5)
118-storage_list_expected_6["storage"]["data/5"] = {
119- "kind": "filesystem",
120- "attachments":
121- {
122- "units":
123- {"dummy-storage-mp/0":
124- {
125- "location": "/srv/data"}}}}
126+ "attrs": {"volume-type": "ssd"}
127+ }
128+
129+expected_filesystem = {
130+ "storage": {
131+ "data/0": {
132+ "kind": "filesystem",
133+ "attachments": {
134+ "units": {"dummy-storage-fs/0": {"location": "/srv/data"}}}
135+ }
136+ }
137+ }
138+expected_block1 = {
139+ "storage": {
140+ "disks/1": {
141+ "kind": "block",
142+ "attachments": {
143+ "units": {"dummy-storage-lp/0": {"location": ""}}}
144+ }
145+ }
146+ }
147+expected_block2 = copy.deepcopy(expected_block1)
148+expected_block2["storage"]["disks/2"] = {
149+ "kind": "block",
150+ "attachments": {
151+ "units": {
152+ "dummy-storage-lp/0": {"location": ""}
153+ }
154+ }
155+ }
156+expected_tmpfs = {
157+ "storage": {
158+ "data/3": {
159+ "kind": "filesystem",
160+ "attachments": {
161+ "units": {"dummy-storage-tp/0": {"location": "/srv/data"}}}
162+ }
163+ }
164+ }
165+expected_default_tmpfs = {
166+ "storage": {
167+ "data/4": {
168+ "kind": "filesystem",
169+ "attachments": {
170+ "units": {"dummy-storage-np/0": {"location": "/srv/data"}}}
171+ }
172+ }
173+ }
174+expected_mulitfilesystem = {
175+ "storage": {
176+ "data/5": {
177+ "kind": "filesystem",
178+ "attachments": {
179+ "units": {"dummy-storage-mp/0": {"location": "/srv/data"}}}
180+ }
181+ }
182+ }
183
184
185 def storage_list(client):
186@@ -296,7 +277,11 @@
187
188
189 def assess_storage(client, charm_series):
190- """Test the storage feature."""
191+ """Test the storage feature.
192+
193+ Each storage test is deployed as a charm. The application is removed
194+ when the test succeeds. Logs will be retrieved from failing machines.
195+ """
196
197 log.info('Assessing create-pool')
198 assess_create_pool(client)
199@@ -318,40 +303,43 @@
200 log.info('Assessing filesystem rootfs')
201 assess_deploy_storage(client, charm_series,
202 'dummy-storage-fs', 'filesystem', 'rootfs')
203- check_storage_list(client, storage_list_expected)
204+ check_storage_list(client, expected_filesystem)
205 log.info('Filesystem rootfs PASSED')
206+ client.remove_service('dummy-storage-fs')
207
208- log.info('Assessing block loop')
209+ log.info('Assessing block loop disk 1')
210 assess_deploy_storage(client, charm_series,
211 'dummy-storage-lp', 'block', 'loop')
212- check_storage_list(client, storage_list_expected_2)
213- log.info('Block loop PASSED')
214+ check_storage_list(client, expected_block1)
215+ log.info('Block loop disk 1 PASSED')
216
217- log.info('Assessing disk 1')
218+ log.info('Assessing block loop disk 2')
219 assess_add_storage(client, 'dummy-storage-lp/0', 'disks', "1")
220- check_storage_list(client, storage_list_expected_3)
221- log.info('Disk 1 PASSED')
222+ check_storage_list(client, expected_block2)
223+ log.info('Block loop disk 2 PASSED')
224+ client.remove_service('dummy-storage-lp')
225
226 log.info('Assessing filesystem tmpfs')
227 assess_deploy_storage(client, charm_series,
228 'dummy-storage-tp', 'filesystem', 'tmpfs')
229- check_storage_list(client, storage_list_expected_4)
230+ check_storage_list(client, expected_tmpfs)
231 log.info('Filesystem tmpfs PASSED')
232+ client.remove_service('dummy-storage-tp')
233
234 log.info('Assessing filesystem')
235 assess_deploy_storage(client, charm_series,
236 'dummy-storage-np', 'filesystem')
237- check_storage_list(client, storage_list_expected_5)
238+ check_storage_list(client, expected_default_tmpfs)
239 log.info('Filesystem tmpfs PASSED')
240+ client.remove_service('dummy-storage-np')
241
242 log.info('Assessing multiple filesystem, block, rootfs, loop')
243 assess_multiple_provider(client, charm_series, "1G", 'dummy-storage-mp',
244 'filesystem', 'block', 'rootfs', 'loop')
245- check_storage_list(client, storage_list_expected_6)
246+ check_storage_list(client, expected_mulitfilesystem)
247 log.info('Multiple filesystem, block, rootfs, loop PASSED')
248- # storage with provider 'ebs' is only available under 'aws'
249- # assess_deploy_storage(client, charm_series,
250- # 'dummy-storage-eb', 'filesystem', 'ebs')
251+ client.remove_service('dummy-storage-mp')
252+ log.info('All storage tests PASSED')
253
254
255 def parse_args(argv):
256
257=== modified file 'tests/test_assess_storage.py'
258--- tests/test_assess_storage.py 2017-02-21 15:46:23 +0000
259+++ tests/test_assess_storage.py 2017-02-25 04:02:02 +0000
260@@ -12,13 +12,13 @@
261 assess_storage,
262 parse_args,
263 main,
264- storage_list_expected,
265+ expected_filesystem,
266 storage_pool_1x,
267- storage_list_expected_2,
268- storage_list_expected_3,
269- storage_list_expected_4,
270- storage_list_expected_5,
271- storage_list_expected_6,
272+ expected_block1,
273+ expected_block2,
274+ expected_tmpfs,
275+ expected_default_tmpfs,
276+ expected_mulitfilesystem,
277 storage_pool_details,
278 )
279 from jujupy import JujuData
280@@ -95,7 +95,7 @@
281
282 def test_storage_1x(self):
283 mock_client = Mock(spec=["juju", "wait_for_started",
284- "create_storage_pool",
285+ "create_storage_pool", "remove_service",
286 "list_storage_pool", "deploy",
287 "get_juju_output", "add_storage",
288 "list_storage", "is_juju1x"])
289@@ -107,12 +107,12 @@
290 json.dumps(storage_pool_1x)
291 ]
292 mock_client.list_storage.side_effect = [
293- json.dumps(storage_list_expected),
294- json.dumps(storage_list_expected_2),
295- json.dumps(storage_list_expected_3),
296- json.dumps(storage_list_expected_4),
297- json.dumps(storage_list_expected_5),
298- json.dumps(storage_list_expected_6)
299+ json.dumps(expected_filesystem),
300+ json.dumps(expected_block1),
301+ json.dumps(expected_block2),
302+ json.dumps(expected_tmpfs),
303+ json.dumps(expected_default_tmpfs),
304+ json.dumps(expected_mulitfilesystem)
305 ]
306 assess_storage(mock_client, mock_client.series)
307 self.assertEqual(
308@@ -132,7 +132,7 @@
309
310 def test_storage_2x(self):
311 mock_client = Mock(spec=["juju", "wait_for_started",
312- "create_storage_pool",
313+ "create_storage_pool", "remove_service",
314 "list_storage_pool", "deploy",
315 "get_juju_output", "add_storage",
316 "list_storage", "is_juju1x"])
317@@ -144,12 +144,12 @@
318 json.dumps(storage_pool_details)
319 ]
320 mock_client.list_storage.side_effect = [
321- json.dumps(storage_list_expected),
322- json.dumps(storage_list_expected_2),
323- json.dumps(storage_list_expected_3),
324- json.dumps(storage_list_expected_4),
325- json.dumps(storage_list_expected_5),
326- json.dumps(storage_list_expected_6)
327+ json.dumps(expected_filesystem),
328+ json.dumps(expected_block1),
329+ json.dumps(expected_block2),
330+ json.dumps(expected_tmpfs),
331+ json.dumps(expected_default_tmpfs),
332+ json.dumps(expected_mulitfilesystem)
333 ]
334 assess_storage(mock_client, mock_client.series)
335 self.assertEqual(
336@@ -169,7 +169,7 @@
337
338 def test_storage_2x_with_aws(self):
339 mock_client = Mock(spec=["juju", "wait_for_started",
340- "create_storage_pool",
341+ "create_storage_pool", "remove_service",
342 "list_storage_pool", "deploy",
343 "get_juju_output", "add_storage",
344 "list_storage", "is_juju1x"])
345@@ -183,12 +183,12 @@
346 json.dumps(expected_pool)
347 ]
348 mock_client.list_storage.side_effect = [
349- json.dumps(storage_list_expected),
350- json.dumps(storage_list_expected_2),
351- json.dumps(storage_list_expected_3),
352- json.dumps(storage_list_expected_4),
353- json.dumps(storage_list_expected_5),
354- json.dumps(storage_list_expected_6)
355+ json.dumps(expected_filesystem),
356+ json.dumps(expected_block1),
357+ json.dumps(expected_block2),
358+ json.dumps(expected_tmpfs),
359+ json.dumps(expected_default_tmpfs),
360+ json.dumps(expected_mulitfilesystem)
361 ]
362 assess_storage(mock_client, mock_client.series)
363 self.assertEqual(
364@@ -208,7 +208,7 @@
365
366 def test_storage_2_2_with_aws(self):
367 mock_client = Mock(spec=["juju", "wait_for_started",
368- "create_storage_pool",
369+ "create_storage_pool", "remove_service",
370 "list_storage_pool", "deploy",
371 "get_juju_output", "add_storage",
372 "list_storage", "is_juju1x"])
373@@ -225,11 +225,11 @@
374 json.dumps(aws_pool)
375 ]
376 mock_client.list_storage.side_effect = [
377- json.dumps(storage_list_expected),
378- json.dumps(storage_list_expected_2),
379- json.dumps(storage_list_expected_3),
380- json.dumps(storage_list_expected_4),
381- json.dumps(storage_list_expected_5),
382- json.dumps(storage_list_expected_6)
383+ json.dumps(expected_filesystem),
384+ json.dumps(expected_block1),
385+ json.dumps(expected_block2),
386+ json.dumps(expected_tmpfs),
387+ json.dumps(expected_default_tmpfs),
388+ json.dumps(expected_mulitfilesystem)
389 ]
390 assess_storage(mock_client, mock_client.series)

Subscribers

People subscribed via source and target branches