@@ -120,9 +120,11 @@ def setUp(self):
120
120
self .execute_p = mock .patch ('neutron.agent.common.utils.execute' )
121
121
self .execute = self .execute_p .start ()
122
122
self .delete_if_exists = mock .patch (
123
- 'oslo_utils.fileutils .delete_if_exists' ).start ()
123
+ 'neutron.agent.linux.utils .delete_if_exists' ).start ()
124
124
self .ensure_dir = mock .patch .object (
125
125
fileutils , 'ensure_tree' ).start ()
126
+ self .error_log = mock .patch ("neutron.agent.linux.external_process."
127
+ "LOG.error" ).start ()
126
128
127
129
self .conf = mock .Mock ()
128
130
self .conf .external_pids = '/var/path'
@@ -167,6 +169,8 @@ def test_enable_with_namespace(self):
167
169
with mock .patch .object (ep , 'ip_lib' ) as ip_lib :
168
170
manager .enable (callback )
169
171
callback .assert_called_once_with ('pidfile' )
172
+ self .delete_if_exists .assert_called_once_with (
173
+ 'pidfile' , run_as_root = True )
170
174
env = {ep .PROCESS_TAG : ep .DEFAULT_SERVICE_NAME + '-uuid' }
171
175
ip_lib .assert_has_calls ([
172
176
mock .call .IPWrapper (namespace = 'ns' ),
@@ -253,11 +257,34 @@ def _create_cmd(*args):
253
257
(service_name , uuid ))
254
258
self .assertEqual (expected_value , ret_value )
255
259
260
+ def test_enable_delete_pid_file_raises (self ):
261
+ callback = mock .Mock ()
262
+ cmd = ['the' , 'cmd' ]
263
+ callback .return_value = cmd
264
+ self .delete_if_exists .side_effect = OSError
265
+
266
+ with mock .patch .object (ep .ProcessManager , 'get_pid_file_name' ) as name :
267
+ name .return_value = 'pidfile'
268
+ with mock .patch .object (ep .ProcessManager , 'active' ) as active :
269
+ active .__get__ = mock .Mock (return_value = False )
270
+
271
+ manager = ep .ProcessManager (self .conf , 'uuid' )
272
+ manager .enable (callback )
273
+ callback .assert_called_once_with ('pidfile' )
274
+ cmd = ['env' , DEFAULT_ENVVAR + '-uuid' ] + cmd
275
+ self .execute .assert_called_once_with (cmd ,
276
+ check_exit_code = True ,
277
+ extra_ok_codes = None ,
278
+ run_as_root = False ,
279
+ log_fail_as_error = True ,
280
+ privsep_exec = False )
281
+ self .error_log .assert_called_once ()
282
+
256
283
def test_reload_cfg_without_custom_reload_callback (self ):
257
284
with mock .patch .object (ep .ProcessManager , 'disable' ) as disable :
258
285
manager = ep .ProcessManager (self .conf , 'uuid' , namespace = 'ns' )
259
286
manager .reload_cfg ()
260
- disable .assert_called_once_with ('HUP' )
287
+ disable .assert_called_once_with ('HUP' , delete_pid_file = False )
261
288
262
289
def test_reload_cfg_with_custom_reload_callback (self ):
263
290
reload_callback = mock .sentinel .callback
@@ -266,7 +293,8 @@ def test_reload_cfg_with_custom_reload_callback(self):
266
293
self .conf , 'uuid' , namespace = 'ns' ,
267
294
custom_reload_callback = reload_callback )
268
295
manager .reload_cfg ()
269
- disable .assert_called_once_with (get_stop_command = reload_callback )
296
+ disable .assert_called_once_with (get_stop_command = reload_callback ,
297
+ delete_pid_file = False )
270
298
271
299
def test_disable_get_stop_command (self ):
272
300
cmd = ['the' , 'cmd' ]
0 commit comments