Cope better with user cancelling su operation. New interface to replace
[rox-lib/lack.git] / tests / python / testsu.py
blob3cbecdbaf64914e7e41947ac7ee3deaaf4fda087
1 #!/usr/bin/env python2.2
2 from __future__ import generators
3 import unittest
4 import sys, os
5 from os.path import dirname, abspath, join
7 rox_lib = dirname(dirname(dirname(abspath(sys.argv[0]))))
8 sys.path.insert(0, join(rox_lib, 'python'))
10 from rox import su, tasks, g
12 assert os.getuid() != 0, "Can't run tests as root"
14 class TestSU(unittest.TestCase):
15 def testSu(self):
16 def run():
17 maker = su.SuProxyMaker(
18 'Need to become root to test this module.')
19 yield maker.blocker
20 root = maker.get_root()
22 response = root.spawnvpe(os.P_NOWAIT, 'false', ['false'])
23 yield response
24 pid = response.result
25 assert pid
26 response = root.waitpid(pid, 0)
27 yield response
28 (pid, status) = response.result
29 assert status == 0x100
31 response = root.spawnvpe(os.P_WAIT, 'true', ['true'])
32 yield response
33 assert response.result == 0
35 response = root.getuid()
36 yield response
37 assert response.result == 0
39 response = root.setuid(os.getuid())
40 yield response
41 assert response.result is None
43 response = root.getuid()
44 yield response
45 assert response.result == os.getuid()
47 root.finish()
48 g.mainquit()
50 tasks.Task(run())
51 g.mainloop()
53 sys.argv.append('-v')
54 unittest.main()