ROX base platform is now Python 2.3, so run unit tests against that by default
[rox-lib/lack.git] / tests / python / testsu.py
blob710aa0c91cf905222dfb1693aaad9723c44c3afc
1 #!/usr/bin/env python2.3
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 exitstatus = os.WEXITSTATUS(status)
30 assert exitstatus != 0
32 response = root.spawnvpe(os.P_WAIT, 'true', ['true'])
33 yield response
34 assert response.result == 0
36 response = root.getuid()
37 yield response
38 assert response.result == 0
40 response = root.setuid(os.getuid())
41 yield response
42 assert response.result is None
44 response = root.getuid()
45 yield response
46 assert response.result == os.getuid()
48 root.finish()
49 g.main_quit()
51 tasks.Task(run())
52 g.main()
54 suite = unittest.makeSuite(TestSU)
55 if __name__ == '__main__':
56 sys.argv.append('-v')
57 unittest.main()