Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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'
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
def test_setgid_same_group():
    cfile = create_config(("",))
    with mock.patch("os.setgid"):
        Config(cfile).load()
        assert setgid() is None
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
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'
Ejemplo n.º 15
0
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'
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
def test_setgid_same_group():
    cfile = create_config(("",))
    with mock.patch("os.setgid"):
        Config(cfile).load()
        assert setgid() is None
Ejemplo n.º 18
0
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'
Ejemplo n.º 19
0
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