Exemple #1
0
def test_get_tags_override(monkeypatch):
    monkeypatch.setenv("DD_PROFILING_TAGS", "mytag:foobar")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 8
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["mytag"] == b"foobar"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS", "mytag:foobar,author:jd")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 9
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["mytag"] == b"foobar"
    assert tags["author"] == b"jd"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS", "")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 7
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS",
                       "foobar:baz,service:mycustomservice")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 8
    assert tags["service"] == b"mycustomservice"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["foobar"] == b"baz"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS", "foobar:baz,service:🤣")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 8
    assert tags["service"] == u"🤣".encode("utf-8")
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["foobar"] == b"baz"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")
Exemple #2
0
def test_export_server_down():
    exp = http.PprofHTTPExporter("http://localhost:2", _API_KEY)
    with pytest.raises(http.UploadFailed) as t:
        exp.export(test_pprof.TEST_EVENTS)
        e = t.exceptions[0]
        assert isinstance(e, (IOError, OSError))
        assert e.errno in (61, 99)
Exemple #3
0
def test_get_tags():
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 7
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")
Exemple #4
0
def test_export_reset(endpoint_test_reset_server):
    exp = http.PprofHTTPExporter(_RESET_ENDPOINT, _API_KEY, timeout=1)
    with pytest.raises(http.UploadFailed) as t:
        exp.export(test_pprof.TEST_EVENTS)
    e = t.value.exceptions[0]
    if six.PY3:
        assert isinstance(e, ConnectionResetError)
    else:
        assert isinstance(e, http_client.BadStatusLine)
Exemple #5
0
def test_wrong_api_key(endpoint_test_server):
    # This is mostly testing our test server, not the exporter
    exp = http.PprofHTTPExporter(_ENDPOINT, "this is not the right API key")
    with pytest.raises(http.UploadFailed) as t:
        exp.export(test_pprof.TEST_EVENTS)
        e = t.exceptions[0]
        assert isinstance(e, http.RequestFailed)
        assert e.response.status == 400
        assert e.content == b"Wrong API Key\n"
Exemple #6
0
def test_get_malformed(monkeypatch):
    monkeypatch.setenv("DD_PROFILING_TAGS", "mytagfoobar")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 7
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS", "mytagfoobar,")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 7
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS", ",")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 7
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")

    monkeypatch.setenv("DD_PROFILING_TAGS", "foo:bar,")
    tags = http.PprofHTTPExporter()._get_tags("foobar")
    assert len(tags) == 8
    assert tags["service"] == b"foobar"
    assert len(tags["host"])
    assert len(tags["runtime-id"])
    assert tags["language"] == b"python"
    assert tags["runtime"] == b"CPython"
    assert tags["foo"] == b"bar"
    assert tags["profiler_version"] == ddtrace.__version__.encode("utf-8")
Exemple #7
0
def _build_default_exporters():
    exporters = []
    if "DD_PROFILING_API_KEY" in os.environ:
        exporters.append(http.PprofHTTPExporter())

    _OUTPUT_PPROF = os.environ.get("DD_PROFILING_OUTPUT_PPROF")
    if _OUTPUT_PPROF:
        exporters.append(file.PprofFileExporter(_OUTPUT_PPROF))

    if not exporters:
        LOG.warning("No exporters are configured, no profile will be output")

    return exporters
Exemple #8
0
def test_export_timeout(endpoint_test_timeout_server):
    exp = http.PprofHTTPExporter(_TIMEOUT_ENDPOINT, _API_KEY, timeout=1)
    with pytest.raises(http.UploadFailed) as t:
        exp.export(test_pprof.TEST_EVENTS)
    e = t.value.exceptions[0]
    assert isinstance(e, socket.timeout)
Exemple #9
0
def test_export_no_endpoint(endpoint_test_server):
    exp = http.PprofHTTPExporter(endpoint="")
    with pytest.raises(http.InvalidEndpoint):
        exp.export(test_pprof.TEST_EVENTS)
Exemple #10
0
def test_export(endpoint_test_server):
    exp = http.PprofHTTPExporter(_ENDPOINT, _API_KEY)
    exp.export(test_pprof.TEST_EVENTS)