def test_service_generator(): import gservice.core class MyService(gservice.core.Service): pass expected_children = [('hi', MyService()), ('also named', MyService())] expected_main = MyService() def service(): for name, child in expected_children: yield name, child yield expected_main from gservice.runner import Runner Runner._args = ['run', '-C', 'config', '-u', 'nobody'] Runner._opener = mock_open({"config": ""}) runner = Runner() service_gen = service() children, main_service = runner._expand_service_generators(service_gen) print children, main_service assert children == expected_children assert main_service == expected_main
def test_privileged_configuration(): from gservice.runner import Runner from gservice import config uids = {} Runner._args = ['run', '-C', 'config', '-u', 'nobody'] Runner._opener = mock_open({"config": ""}) runner = Runner() # mock out the os getuid/setuid modules import os props = {'uid': 0, 'gid': 0} def getuid(): return props['uid'] def setuid(uid): props['uid'] = uid def getgid(): return props['gid'] def setgid(gid): props['gid'] = gid os.getuid = getuid os.setuid = setuid os.getgid = getgid os.setgid = setgid # capture the uid of the service at start and stop time def service(): import gservice.core class Service(gservice.core.Service): def do_start(self): print "asked to do_start" uids['start'] = os.getuid() def stop(): self.stop() gevent.spawn_later(0.1, stop) def do_stop(self): print "asked to do_stop" uids['stop'] = os.getuid() print "done stopping" return Service() config.load({'service': service, '_allow_early_gevent_import_for_tests': True}) print "before action" runner.do_action() assert uids['start'] != runner.uid assert uids['stop'] == runner.uid
def get_runner(): from gservice.runner import Runner Runner._args = ['run', '-C', 'config', '-u', 'nobody'] Runner._opener = mock_open({"config": ""}) runner = Runner() return runner
def test_runner_action_required(): from gservice.runner import Runner Runner._args = [] with silencer(): Runner()
def test_runner_reads_config(): from gservice.runner import Runner Runner._args = ['start', '-C', 'config'] Runner._opener = mock_open({"config": "", "serviced.log": ""}) with silencer(): Runner()
def test_runner_config_required(): from gservice.runner import Runner Runner._args = ['start'] with silencer(): Runner()
def test_privileged_configuration(): from gservice.runner import Runner from gservice import config uids = {} Runner._args = ['run', '-C', 'config', '-u', 'nobody'] Runner._opener = mock_open({"config": ""}) runner = Runner() # mock out the os getuid/setuid modules import os props = {'uid': 0, 'gid': 0} def getuid(): return props['uid'] def setuid(uid): props['uid'] = uid def getgid(): return props['gid'] def setgid(gid): props['gid'] = gid os.getuid = getuid os.setuid = setuid os.getgid = getgid os.setgid = setgid # capture the uid of the service at start and stop time def service(): import gservice.core class Service(gservice.core.Service): def do_start(self): print "asked to do_start" uids['start'] = os.getuid() def stop(): self.stop() gevent.spawn_later(0.1, stop) def do_stop(self): print "asked to do_stop" uids['stop'] = os.getuid() print "done stopping" return Service() config.load({ 'service': service, '_allow_early_gevent_import_for_tests': True }) print "before action" runner.do_action() assert uids['start'] != runner.uid assert uids['stop'] == runner.uid