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")
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)
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")
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)
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"
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")
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
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)
def test_export_no_endpoint(endpoint_test_server): exp = http.PprofHTTPExporter(endpoint="") with pytest.raises(http.InvalidEndpoint): exp.export(test_pprof.TEST_EVENTS)
def test_export(endpoint_test_server): exp = http.PprofHTTPExporter(_ENDPOINT, _API_KEY) exp.export(test_pprof.TEST_EVENTS)