def run(): """Create the asyncio loop and start the server.""" args = parse_cmd_args(sys.argv[1:]) configure_logs(args) logger = logging.getLogger('blackhole') if args.test: config_test(args) try: config = Config(args.config_file).load().test() except ConfigException as err: logger.fatal(err) raise SystemExit(os.EX_USAGE) if args.background and not config.pidfile: logger.fatal('Cannot run in the background without a pidfile.') raise SystemExit(os.EX_USAGE) loop = asyncio.get_event_loop() loop.add_signal_handler(signal.SIGINT, loop.stop) start_servers() setgid() setuid() if args.background: try: Daemon(config.pidfile).daemonize() except DaemonException as err: stop_servers() logger.fatal(err) raise SystemExit(os.EX_USAGE) try: loop.run_forever() except KeyboardInterrupt: pass stop_servers() raise SystemExit(os.EX_OK)
def test_setgid_no_perms(): cfile = create_config(('group=testgroup', )) with mock.patch('grp.getgrnam', side_effect=PermissionError), \ pytest.raises(SystemExit) as err: Config(cfile).load() setgid() assert str(err.value) == '77'
def test_setgid_no_perms(): cfile = create_config(("group=testgroup",)) with mock.patch( "grp.getgrnam", side_effect=PermissionError ), pytest.raises(SystemExit) as exc: Config(cfile).load() setgid() assert exc.value.code == 77
def test_setgid(): cfile = create_config(('group=abc', )) with mock.patch('grp.getgrnam') as mock_getgrnam, \ mock.patch('os.setgid') as mock_setgid: Config(cfile).load() setgid() assert mock_getgrnam.called is True assert mock_setgid.called is True
def test_setgid(): cfile = create_config(("group=abc",)) with mock.patch("grp.getgrnam") as mock_getgrnam, mock.patch( "os.setgid" ) as mock_setgid: Config(cfile).load() setgid() assert mock_getgrnam.called is True assert mock_setgid.called is True
def test_setgid_invalid_group(_): cfile = create_config(("group=testgroup",)) with pytest.raises(SystemExit) as exc: Config(cfile).load() setgid() assert exc.value.code == 64
def test_setgid_same_group(): cfile = create_config(("",)) with mock.patch("os.setgid"): Config(cfile).load() assert setgid() is None
def test_setgid_same_group(mock_getgrnam): cfile = create_config(('group=testgroup', )) Config(cfile).load() assert setgid() is None assert mock_getgrnam.called is True
def test_setgid_same_group(mock_getgrnam): cfile = create_config(('group=testgroup',)) Config(cfile).load() assert setgid() is None assert mock_getgrnam.called is True
def test_setgid_invalid_group(_): cfile = create_config(('group=testgroup', )) with pytest.raises(SystemExit) as err: Config(cfile).load() setgid() assert str(err.value) == '64'
def test_setgid_no_perms(_): cfile = create_config(('group=testgroup', )) Config(cfile).load() with pytest.raises(SystemExit) as err: setgid() assert str(err.value) == '77'
def test_setgid(mock_getgrnam, mock_setgid): cfile = create_config(('group=abc',)) Config(cfile).load() setgid() assert mock_getgrnam.called is True assert mock_setgid.called is True
def test_setgid_no_perms(_): cfile = create_config(('group=testgroup',)) Config(cfile).load() with pytest.raises(SystemExit) as err: setgid() assert str(err.value) == '77'
def test_setgid(mock_getgrnam, mock_setgid): cfile = create_config(('group=abc', )) Config(cfile).load() setgid() assert mock_getgrnam.called is True assert mock_setgid.called is True