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_setuid_invalid_user(): cfile = create_config(('user=testuser', )) with mock.patch('pwd.getpwnam', side_effect=KeyError), \ pytest.raises(SystemExit) as err: Config(cfile).load() setuid() assert str(err.value) == '64'
def test_setuid_no_perms(): cfile = create_config(('user=testuser', )) with mock.patch('pwd.getpwnam', side_effect=PermissionError), \ pytest.raises(SystemExit) as err: Config(cfile).load() setuid() assert str(err.value) == '77'
def test_setuid_invalid_user(): cfile = create_config(("user=testuser",)) with mock.patch("pwd.getpwnam", side_effect=KeyError), pytest.raises( SystemExit ) as exc: Config(cfile).load() setuid() assert exc.value.code == 64
def test_setuid_no_perms(): cfile = create_config(("user=testuser",)) with mock.patch( "pwd.getpwnam", side_effect=PermissionError ), pytest.raises(SystemExit) as err: Config(cfile).load() setuid() assert err.value.code == 77
def test_setuid(): cfile = create_config(('user=abc', )) with mock.patch('pwd.getpwnam') as mock_getpwnam, \ mock.patch('os.setuid') as mock_setuid: Config(cfile).load() setuid() assert mock_getpwnam.called is True assert mock_setuid.called is True
def test_setuid(): cfile = create_config(("user=abc",)) with mock.patch("pwd.getpwnam") as mock_getpwnam, mock.patch( "os.setuid" ) as mock_setuid: Config(cfile).load() setuid() assert mock_getpwnam.called is True assert mock_setuid.called is True
def test_setuid_same_user(): cfile = create_config(("",)) with mock.patch("os.setuid"): Config(cfile).load() assert setuid() is None
def test_setuid_same_user(mock_getuser): cfile = create_config(('user=testuser', )) Config(cfile).load() assert setuid() is None assert mock_getuser.called is True
def test_setuid_same_user(mock_getuser): cfile = create_config(('user=testuser',)) Config(cfile).load() assert setuid() is None assert mock_getuser.called is True
def test_setuid_no_perms(_): cfile = create_config(('user=testuser', )) Config(cfile).load() with pytest.raises(SystemExit) as err: setuid() assert str(err.value) == '77'
def test_setuid(mock_getpwnam, mock_setuid): cfile = create_config(('user=abc',)) Config(cfile).load() setuid() assert mock_getpwnam.called is True assert mock_setuid.called is True
def test_setuid_no_perms(_): cfile = create_config(('user=testuser',)) Config(cfile).load() with pytest.raises(SystemExit) as err: setuid() assert str(err.value) == '77'
def test_setuid(mock_getpwnam, mock_setuid): cfile = create_config(('user=abc', )) Config(cfile).load() setuid() assert mock_getpwnam.called is True assert mock_setuid.called is True