def test_post_files(flask_apm_client):
    with open(os.path.abspath(__file__), mode="rb") as f:
        response = flask_apm_client.app.test_client().post(
            "/an-error/",
            data={
                "foo": ["bar", "baz"],
                "f1": (compat.BytesIO(compat.b("1")), "bla"),
                "f2": [(f, "flask_tests.py"),
                       (compat.BytesIO(compat.b("1")), "blub")],
            },
        )
    assert response.status_code == 500
    assert len(flask_apm_client.client.events[ERROR]) == 1

    event = flask_apm_client.client.events[ERROR][0]
    if flask_apm_client.client.config.capture_body in (constants.ERROR, "all"):
        assert event["context"]["request"]["body"] == {
            "foo": ["bar", "baz"],
            "_files": {
                "f1": "bla",
                "f2": ["flask_tests.py", "blub"]
            },
        }
    else:
        assert event["context"]["request"]["body"] == "[REDACTED]"
示例#2
0
def test_ssl_cert_pinning_fails(waiting_httpsserver, zuqa_client):
    if compat.PY3:
        waiting_httpsserver.serve_content(
            code=202,
            content="",
            headers={"Location": "https://example.com/foo"})
        url = waiting_httpsserver.url
    else:
        # if we use the local test server here, execution blocks somewhere deep in OpenSSL on Python 2.7, presumably
        # due to a threading issue that has been fixed in later versions. To avoid that, we have to commit a minor
        # cardinal sin here and do an outside request to https://example.com (which will also fail the fingerprint
        # assertion).
        #
        # May the Testing Goat have mercy on our souls.
        url = "https://example.com"
    transport = Transport(
        url,
        server_cert=os.path.join(os.path.dirname(__file__), "wrong_cert.pem"),
        verify_server_cert=True,
        client=zuqa_client,
    )
    transport.start_thread()
    try:
        with pytest.raises(TransportException) as exc_info:
            transport.send(compat.b("x"))
    finally:
        transport.close()

    assert "Fingerprints did not match" in exc_info.value.args[0]
示例#3
0
def test_send(waiting_httpserver, zuqa_client):
    waiting_httpserver.serve_content(
        code=202, content="", headers={"Location": "http://example.com/foo"})
    transport = Transport(waiting_httpserver.url, client=zuqa_client)
    transport.start_thread()
    try:
        url = transport.send(compat.b("x"))
        assert url == "http://example.com/foo"
    finally:
        transport.close()
示例#4
0
def test_ssl_verify_fails(waiting_httpsserver, zuqa_client):
    waiting_httpsserver.serve_content(
        code=202, content="", headers={"Location": "http://example.com/foo"})
    transport = Transport(waiting_httpsserver.url, client=zuqa_client)
    transport.start_thread()
    try:
        with pytest.raises(TransportException) as exc_info:
            url = transport.send(compat.b("x"))
        assert "CERTIFICATE_VERIFY_FAILED" in str(exc_info)
    finally:
        transport.close()
示例#5
0
def test_ssl_cert_pinning(waiting_httpsserver, zuqa_client):
    waiting_httpsserver.serve_content(
        code=202, content="", headers={"Location": "https://example.com/foo"})
    cur_dir = os.path.dirname(os.path.realpath(__file__))
    transport = Transport(
        waiting_httpsserver.url,
        server_cert=os.path.join(cur_dir, "..", "ca/server.pem"),
        verify_server_cert=True,
        client=zuqa_client,
    )
    transport.start_thread()
    try:
        url = transport.send(compat.b("x"))
        assert url == "https://example.com/foo"
    finally:
        transport.close()
示例#6
0
def test_ssl_verify_disable_http(waiting_httpserver, zuqa_client):
    """
    Make sure that ``assert_hostname`` isn't passed in for http requests, even
    with verify_server_cert=False
    """
    waiting_httpserver.serve_content(
        code=202, content="", headers={"Location": "http://example.com/foo"})
    transport = Transport(waiting_httpserver.url,
                          verify_server_cert=False,
                          client=zuqa_client)
    transport.start_thread()
    try:
        url = transport.send(compat.b("x"))
        assert url == "http://example.com/foo"
    finally:
        transport.close()
示例#7
0
def test_ssl_cert_pinning_http(waiting_httpserver, zuqa_client):
    """
    Won't fail, as with the other cert pinning test, since certs aren't relevant
    for http, only https.
    """
    waiting_httpserver.serve_content(
        code=202, content="", headers={"Location": "http://example.com/foo"})
    transport = Transport(
        waiting_httpserver.url,
        server_cert=os.path.join(os.path.dirname(__file__), "wrong_cert.pem"),
        verify_server_cert=True,
        client=zuqa_client,
    )
    transport.start_thread()
    try:
        url = transport.send(compat.b("x"))
        assert url == "http://example.com/foo"
    finally:
        transport.close()
def test_transform_bad_string():
    x = compat.b("The following character causes problems: \xd4")

    result = transform(x)
    assert type(result) == compat.binary_type
    assert result == compat.b("(Error decoding value)")
def test_non_utf8_encoding(http_test_data):
    broken = compat.b("broken=") + u"aéöüa".encode("latin-1")
    http_test_data["context"]["request"]["url"]["search"] = broken
    result = processors.sanitize_http_request_querystring(None, http_test_data)
    assert result["context"]["request"]["url"]["search"] == u"broken=a\ufffd\ufffd\ufffda"