MCPcopy
hub / github.com/celery/celery / test_with_uid

Method test_with_uid

t/unit/utils/test_platforms.py:220–279  ·  view source on GitHub ↗
(self, initgroups, setuid, setgid,
                      getpwuid, parse_gid, parse_uid, getuid, geteuid,
                      getgid, getegid)

Source from the content-addressed store, hash-verified

218 @patch('celery.platforms.setuid')
219 @patch('celery.platforms.initgroups')
220 def test_with_uid(self, initgroups, setuid, setgid,
221 getpwuid, parse_gid, parse_uid, getuid, geteuid,
222 getgid, getegid):
223 geteuid.return_value = 10
224 getuid.return_value = 10
225
226 class pw_struct:
227 pw_gid = 50001
228
229 def raise_on_second_call(*args, **kwargs):
230 setuid.side_effect = OSError()
231 setuid.side_effect.errno = errno.EPERM
232
233 setuid.side_effect = raise_on_second_call
234 getpwuid.return_value = pw_struct()
235 parse_uid.return_value = 5001
236 parse_gid.return_value = 5001
237 maybe_drop_privileges(uid='user')
238 parse_uid.assert_called_with('user')
239 getpwuid.assert_called_with(5001)
240 setgid.assert_called_with(50001)
241 initgroups.assert_called_with(5001, 50001)
242 setuid.assert_has_calls([call(5001), call(0)])
243
244 setuid.side_effect = raise_on_second_call
245
246 def to_root_on_second_call(mock, first):
247 return_value = [first]
248
249 def on_first_call(*args, **kwargs):
250 ret, return_value[0] = return_value[0], 0
251 return ret
252
253 mock.side_effect = on_first_call
254
255 to_root_on_second_call(geteuid, 10)
256 to_root_on_second_call(getuid, 10)
257 with pytest.raises(SecurityError):
258 maybe_drop_privileges(uid='user')
259
260 getuid.return_value = getuid.side_effect = None
261 geteuid.return_value = geteuid.side_effect = None
262 getegid.return_value = 0
263 getgid.return_value = 0
264 setuid.side_effect = raise_on_second_call
265 with pytest.raises(SecurityError):
266 maybe_drop_privileges(gid='group')
267
268 getuid.reset_mock()
269 geteuid.reset_mock()
270 setuid.reset_mock()
271 getuid.side_effect = geteuid.side_effect = None
272
273 def raise_on_second_call(*args, **kwargs):
274 setuid.side_effect = OSError()
275 setuid.side_effect.errno = errno.ENOENT
276
277 setuid.side_effect = raise_on_second_call

Callers

nothing calls this directly

Calls 4

maybe_drop_privilegesFunction · 0.90
pw_structClass · 0.85
callFunction · 0.85
raisesMethod · 0.45

Tested by

no test coverage detected