Merge ~bjornt/maas:refresh-mock-leak into maas:master

Proposed by Björn Tillenius
Status: Merged
Approved by: Björn Tillenius
Approved revision: 6e5b2c1a99f649b09cad8942d8ea48c99ce3b6fe
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~bjornt/maas:refresh-mock-leak
Merge into: maas:master
Diff against target: 310 lines (+71/-30)
1 file modified
src/provisioningserver/refresh/tests/test_refresh.py (+71/-30)
Reviewer Review Type Date Requested Status
Adam Collard (community) Approve
Alberto Donato (community) Approve
MAAS Lander unittests Pending
Review via email: mp+399279@code.launchpad.net

Commit message

Fix refresh tests not to leak changed NODE_INFO_SCRIPTS.

The refresh tests changed the NODE_INFO_SCRIPTS dict, but they didn't
replace it with the original dict after the tests had be ran.

This causes other tests to fail, depending on which order they are run
in.

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote :

LGTM!

review: Approve
Revision history for this message
Adam Collard (adam-collard) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/refresh/tests/test_refresh.py b/src/provisioningserver/refresh/tests/test_refresh.py
2index a11097d..f3fbebd 100644
3--- a/src/provisioningserver/refresh/tests/test_refresh.py
4+++ b/src/provisioningserver/refresh/tests/test_refresh.py
5@@ -60,7 +60,7 @@ class TestRefresh(MAASTestCase):
6 if os.path.exists(path):
7 os.remove(path)
8
9- def patch_scripts_success(self, script_name=None, script_content=None):
10+ def create_scripts_success(self, script_name=None, script_content=None):
11 if script_name is None:
12 script_name = factory.make_name("script_name")
13 if script_content is None:
14@@ -79,11 +79,11 @@ class TestRefresh(MAASTestCase):
15 os.chmod(script_path, st.st_mode | stat.S_IEXEC)
16 self.addCleanup(self._cleanup, script_path)
17
18- refresh.NODE_INFO_SCRIPTS = OrderedDict(
19+ return OrderedDict(
20 [(script_name, {"name": script_name, "run_on_controller": True})]
21 )
22
23- def patch_scripts_failure(self, script_name=None):
24+ def create_scripts_failure(self, script_name=None):
25 if script_name is None:
26 script_name = factory.make_name("script_name")
27 TEST_SCRIPT = dedent(
28@@ -102,14 +102,14 @@ class TestRefresh(MAASTestCase):
29 os.chmod(script_path, st.st_mode | stat.S_IEXEC)
30 self.addCleanup(self._cleanup, script_path)
31
32- refresh.NODE_INFO_SCRIPTS = OrderedDict(
33+ return OrderedDict(
34 [(script_name, {"name": script_name, "run_on_controller": True})]
35 )
36
37 def test_refresh_accepts_defined_url(self):
38 signal = self.patch(refresh, "signal")
39 script_name = factory.make_name("script_name")
40- self.patch_scripts_success(script_name)
41+ info_scripts = self.create_scripts_success(script_name)
42
43 system_id = factory.make_name("system_id")
44 consumer_key = factory.make_name("consumer_key")
45@@ -117,7 +117,10 @@ class TestRefresh(MAASTestCase):
46 token_secret = factory.make_name("token_secret")
47 url = factory.make_url()
48
49- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
50+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
51+ refresh.refresh(
52+ system_id, consumer_key, token_key, token_secret, url
53+ )
54 self.assertThat(
55 signal,
56 MockAnyCall(
57@@ -136,7 +139,7 @@ class TestRefresh(MAASTestCase):
58 def test_refresh_signals_starting(self):
59 signal = self.patch(refresh, "signal")
60 script_name = factory.make_name("script_name")
61- self.patch_scripts_success(script_name)
62+ info_scripts = self.create_scripts_success(script_name)
63
64 system_id = factory.make_name("system_id")
65 consumer_key = factory.make_name("consumer_key")
66@@ -144,7 +147,10 @@ class TestRefresh(MAASTestCase):
67 token_secret = factory.make_name("token_secret")
68 url = factory.make_url()
69
70- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
71+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
72+ refresh.refresh(
73+ system_id, consumer_key, token_key, token_secret, url
74+ )
75 self.assertThat(
76 signal,
77 MockAnyCall(
78@@ -170,7 +176,9 @@ class TestRefresh(MAASTestCase):
79 echo '{status: skipped}' > $RESULT_PATH
80 """
81 )
82- self.patch_scripts_success(script_name, script_content=script_content)
83+ info_scripts = self.create_scripts_success(
84+ script_name, script_content=script_content
85+ )
86
87 system_id = factory.make_name("system_id")
88 consumer_key = factory.make_name("consumer_key")
89@@ -178,7 +186,10 @@ class TestRefresh(MAASTestCase):
90 token_secret = factory.make_name("token_secret")
91 url = factory.make_url()
92
93- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
94+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
95+ refresh.refresh(
96+ system_id, consumer_key, token_key, token_secret, url
97+ )
98 self.assertThat(
99 signal,
100 MockAnyCall(
101@@ -204,7 +215,7 @@ class TestRefresh(MAASTestCase):
102 def test_refresh_sets_env_vars(self):
103 self.patch(refresh, "signal")
104 script_name = factory.make_name("script_name")
105- self.patch_scripts_failure(script_name)
106+ info_scripts = self.create_scripts_failure(script_name)
107 mock_popen = self.patch(refresh, "Popen")
108 mock_popen.side_effect = OSError(8, "Exec format error")
109
110@@ -214,7 +225,10 @@ class TestRefresh(MAASTestCase):
111 token_secret = factory.make_name("token_secret")
112 url = factory.make_url()
113
114- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
115+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
116+ refresh.refresh(
117+ system_id, consumer_key, token_key, token_secret, url
118+ )
119
120 env = mock_popen.call_args[1]["env"]
121 for name in [
122@@ -229,7 +243,7 @@ class TestRefresh(MAASTestCase):
123 def test_refresh_signals_failure_on_unexecutable_script(self):
124 signal = self.patch(refresh, "signal")
125 script_name = factory.make_name("script_name")
126- self.patch_scripts_failure(script_name)
127+ info_scripts = self.create_scripts_failure(script_name)
128 mock_popen = self.patch(refresh, "Popen")
129 mock_popen.side_effect = OSError(8, "Exec format error")
130
131@@ -239,7 +253,10 @@ class TestRefresh(MAASTestCase):
132 token_secret = factory.make_name("token_secret")
133 url = factory.make_url()
134
135- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
136+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
137+ refresh.refresh(
138+ system_id, consumer_key, token_key, token_secret, url
139+ )
140 self.assertThat(
141 signal,
142 MockAnyCall(
143@@ -263,7 +280,7 @@ class TestRefresh(MAASTestCase):
144 def test_refresh_signals_failure_on_unexecutable_script_no_errno(self):
145 signal = self.patch(refresh, "signal")
146 script_name = factory.make_name("script_name")
147- self.patch_scripts_failure(script_name)
148+ info_scripts = self.create_scripts_failure(script_name)
149 mock_popen = self.patch(refresh, "Popen")
150 mock_popen.side_effect = OSError()
151
152@@ -273,7 +290,10 @@ class TestRefresh(MAASTestCase):
153 token_secret = factory.make_name("token_secret")
154 url = factory.make_url()
155
156- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
157+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
158+ refresh.refresh(
159+ system_id, consumer_key, token_key, token_secret, url
160+ )
161 self.assertThat(
162 signal,
163 MockAnyCall(
164@@ -297,7 +317,7 @@ class TestRefresh(MAASTestCase):
165 def test_refresh_signals_failure_on_unexecutable_script_baderrno(self):
166 signal = self.patch(refresh, "signal")
167 script_name = factory.make_name("script_name")
168- self.patch_scripts_failure(script_name)
169+ info_scripts = self.create_scripts_failure(script_name)
170 mock_popen = self.patch(refresh, "Popen")
171 mock_popen.side_effect = OSError(0, "Exec format error")
172
173@@ -307,7 +327,10 @@ class TestRefresh(MAASTestCase):
174 token_secret = factory.make_name("token_secret")
175 url = factory.make_url()
176
177- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
178+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
179+ refresh.refresh(
180+ system_id, consumer_key, token_key, token_secret, url
181+ )
182 self.assertThat(
183 signal,
184 MockAnyCall(
185@@ -331,7 +354,7 @@ class TestRefresh(MAASTestCase):
186 def test_refresh_signals_failure_on_timeout(self):
187 signal = self.patch(refresh, "signal")
188 script_name = factory.make_name("script_name")
189- self.patch_scripts_failure(script_name)
190+ info_scripts = self.create_scripts_failure(script_name)
191
192 system_id = factory.make_name("system_id")
193 consumer_key = factory.make_name("consumer_key")
194@@ -351,7 +374,10 @@ class TestRefresh(MAASTestCase):
195 refresh, "capture_script_output"
196 )
197 mock_capture_script_output.side_effect = timeout_run
198- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
199+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
200+ refresh.refresh(
201+ system_id, consumer_key, token_key, token_secret, url
202+ )
203
204 self.assertThat(
205 signal,
206@@ -376,7 +402,7 @@ class TestRefresh(MAASTestCase):
207 def test_refresh_signals_finished(self):
208 signal = self.patch(refresh, "signal")
209 script_name = factory.make_name("script_name")
210- self.patch_scripts_success(script_name)
211+ info_scripts = self.create_scripts_success(script_name)
212
213 system_id = factory.make_name("system_id")
214 consumer_key = factory.make_name("consumer_key")
215@@ -384,7 +410,10 @@ class TestRefresh(MAASTestCase):
216 token_secret = factory.make_name("token_secret")
217 url = factory.make_url()
218
219- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
220+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
221+ refresh.refresh(
222+ system_id, consumer_key, token_key, token_secret, url
223+ )
224 self.assertThat(
225 signal,
226 MockAnyCall(
227@@ -402,7 +431,7 @@ class TestRefresh(MAASTestCase):
228
229 def test_refresh_signals_failure(self):
230 signal = self.patch(refresh, "signal")
231- self.patch_scripts_failure()
232+ info_scripts = self.create_scripts_failure()
233
234 system_id = factory.make_name("system_id")
235 consumer_key = factory.make_name("consumer_key")
236@@ -410,7 +439,10 @@ class TestRefresh(MAASTestCase):
237 token_secret = factory.make_name("token_secret")
238 url = factory.make_url()
239
240- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
241+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
242+ refresh.refresh(
243+ system_id, consumer_key, token_key, token_secret, url
244+ )
245 self.assertThat(
246 signal,
247 MockAnyCall(
248@@ -429,7 +461,7 @@ class TestRefresh(MAASTestCase):
249 def test_refresh_executes_lxd_binary(self):
250 signal = self.patch(refresh, "signal")
251 script_name = LXD_OUTPUT_NAME
252- self.patch_scripts_success(script_name)
253+ info_scripts = self.create_scripts_success(script_name)
254
255 system_id = factory.make_name("system_id")
256 consumer_key = factory.make_name("consumer_key")
257@@ -437,7 +469,10 @@ class TestRefresh(MAASTestCase):
258 token_secret = factory.make_name("token_secret")
259 url = factory.make_url()
260
261- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
262+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
263+ refresh.refresh(
264+ system_id, consumer_key, token_key, token_secret, url
265+ )
266 self.assertThat(
267 signal,
268 MockAnyCall(
269@@ -456,7 +491,7 @@ class TestRefresh(MAASTestCase):
270 def test_refresh_executes_lxd_binary_in_snap(self):
271 signal = self.patch(refresh, "signal")
272 script_name = LXD_OUTPUT_NAME
273- self.patch_scripts_success(script_name)
274+ info_scripts = self.create_scripts_success(script_name)
275 path = factory.make_name()
276 self.patch(os, "environ", {"SNAP": path})
277
278@@ -466,7 +501,10 @@ class TestRefresh(MAASTestCase):
279 token_secret = factory.make_name("token_secret")
280 url = factory.make_url()
281
282- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
283+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
284+ refresh.refresh(
285+ system_id, consumer_key, token_key, token_secret, url
286+ )
287 self.assertThat(
288 signal,
289 MockAnyCall(
290@@ -527,7 +565,7 @@ class TestRefresh(MAASTestCase):
291 maaslog = self.patch(refresh.maaslog, "error")
292 error = factory.make_string()
293 signal.side_effect = SignalException(error)
294- self.patch_scripts_failure()
295+ info_scripts = self.create_scripts_failure()
296
297 system_id = factory.make_name("system_id")
298 consumer_key = factory.make_name("consumer_key")
299@@ -535,7 +573,10 @@ class TestRefresh(MAASTestCase):
300 token_secret = factory.make_name("token_secret")
301 url = factory.make_url()
302
303- refresh.refresh(system_id, consumer_key, token_key, token_secret, url)
304+ with patch.dict(refresh.NODE_INFO_SCRIPTS, info_scripts, clear=True):
305+ refresh.refresh(
306+ system_id, consumer_key, token_key, token_secret, url
307+ )
308
309 self.assertThat(
310 maaslog, MockAnyCall("Error during controller refresh: %s" % error)

Subscribers

People subscribed via source and target branches