Esempio n. 1
0
async def test_missing_certs(mock_certs, request, msg):
    with pytest.raises(FileNotFoundError) as error:
        _config = Config()
        _authenticator = _Authenticator(config=_config)
        server = AuthController(hostname=_config.SMTPD_HOST,
                                port=_config.SMTPD_PORT,
                                config=_config,
                                authenticator=_authenticator)
        request.addfinalizer(server.stop)
        server.start()

        with SMTP(server.hostname, server.port) as client:
            client.send_message(msg)

    assert error.type == FileNotFoundError
Esempio n. 2
0
async def test_exception_handler(request, msg):
    def raise_error():
        raise Exception("Deliberately raised error.")

    server = AuthController()
    request.addfinalizer(server.stop)
    server.start()

    with pytest.raises(Exception):
        with SMTP(server.hostname, server.port) as client:
            client.ehlo()
            server.loop.call_soon_threadsafe(raise_error)
            client.send_message(msg)

        assert len(server.messages) == 1
Esempio n. 3
0
async def test_custom_cert_and_key(request, tmp_path_factory, msg):
    path = tmp_path_factory.mktemp("certs")
    generate_certs(path, separate_key=True)
    _config = Config()
    _config.use_ssl = True
    _config.ssl_cert_files = (path.joinpath("cert.pem"),
                              path.joinpath("key.pem"))

    server = AuthController(config=_config)
    request.addfinalizer(server.stop)
    server.start()

    with SMTP_SSL(server.hostname, server.port) as client:
        client.send_message(msg)

    assert len(server.messages) == 1
Esempio n. 4
0
async def test_config_file(request, msg):
    _original_env = os.environ.copy()
    config_file = Path(__file__).parent.joinpath("assets/.test.env")
    _config = Config(filename=config_file, override=True)
    server = AuthController(hostname=_config.SMTPD_HOST,
                            port=_config.SMTPD_PORT,
                            config=_config)
    request.addfinalizer(server.stop)
    server.start()

    with SMTP(server.hostname, server.port) as client:
        client.send_message(msg)

    assert server.port == "5025"

    os.environ.clear()
    os.environ.update(_original_env)
Esempio n. 5
0
async def test_missing_certs(request, msg):
    with pytest.raises(FileNotFoundError) as error:
        _config = Config()
        _config.use_starttls = True
        _config.ssl_certs_path = "."
        _authenticator = _Authenticator(config=_config)
        server = AuthController(hostname=_config.host,
                                port=_config.port,
                                config=_config,
                                authenticator=_authenticator)
        request.addfinalizer(server.stop)
        server.start()

        with SMTP(server.hostname, server.port) as client:
            client.send_message(msg)

    assert error.type == FileNotFoundError
Esempio n. 6
0
async def test_custom_ssl_context(request, tmp_path_factory, msg):
    path = tmp_path_factory.mktemp("certs")
    generate_certs(path, separate_key=True)

    cert_path = path.joinpath("cert.pem").resolve()
    key_path = path.joinpath("key.pem").resolve()

    _context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    _context.load_cert_chain(str(cert_path), str(key_path))

    server = AuthController(ssl_context=_context)
    request.addfinalizer(server.stop)
    server.config.use_starttls = True
    server.start()

    with SMTP(server.hostname, server.port) as client:
        client.starttls()
        client.send_message(msg)

    assert len(server.messages) == 1
Esempio n. 7
0
def test_TLS_not_supported(request, tmp_path_factory, msg, user):
    path = tmp_path_factory.mktemp("certs")
    _generate_certs(path)
    ssl_cert_files = str(path.joinpath("cert.pem"))
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.load_verify_locations(ssl_cert_files)
    context.load_cert_chain(ssl_cert_files)

    config = Config()
    config.enforce_auth = True
    config.use_ssl = True
    server = AuthController(config=config,
                            authenticator=_Authenticator(config),
                            ssl_context=context)
    request.addfinalizer(server.stop)
    server.start()

    with pytest.raises(SMTPServerDisconnected):
        with SMTP(server.hostname, server.port) as client:
            # this should return a 523 Encryption required error
            # but instead returns an SMTPServerDisconnected Error
            client.send_message(msg)
            assert len(server.messages) == 1