opentelemetry-erlang-contrib/instrumentation/opentelemetry_finch/test/opentelemetry_finch_test.exs

80 lines
2.2 KiB
Elixir

defmodule OpentelemetryFinchTest do
use ExUnit.Case, async: false
doctest OpentelemetryFinch
require OpenTelemetry.Tracer
require OpenTelemetry.Span
require Record
for {name, spec} <- Record.extract_all(from_lib: "opentelemetry/include/otel_span.hrl") do
Record.defrecord(name, spec)
end
for {name, spec} <- Record.extract_all(from_lib: "opentelemetry_api/include/opentelemetry.hrl") do
Record.defrecord(name, spec)
end
setup do
:otel_simple_processor.set_exporter(:otel_exporter_pid, self())
OpenTelemetry.Tracer.start_span("test")
on_exit(fn ->
OpenTelemetry.Tracer.end_span()
end)
{:ok, bypass: Bypass.open()}
end
test "records span on requests", %{bypass: bypass} do
Bypass.expect(bypass, fn conn -> Plug.Conn.resp(conn, 200, "") end)
OpentelemetryFinch.setup()
_conn = start_supervised!({Finch, name: HttpFinch})
{:ok, _} = Finch.build(:get, endpoint_url(bypass.port)) |> Finch.request(HttpFinch)
assert_receive {:span,
span(
name: "HTTP GET",
kind: :client,
attributes: attributes
)}
assert %{
"net.peer.name": "localhost",
"http.method": "GET",
"http.target": "/",
"http.scheme": :http,
"http.status_code": 200
} = :otel_attributes.map(attributes)
end
test "records span on requests failed", %{bypass: _} do
OpentelemetryFinch.setup()
_conn = start_supervised!({Finch, name: HttpFinch})
{:error, _} = Finch.build(:get, endpoint_url(3333)) |> Finch.request(HttpFinch)
assert_receive {:span,
span(
name: "HTTP GET",
kind: :client,
status: {:status, :error, "connection refused"},
attributes: attributes
)}
assert %{
"net.peer.name": "localhost",
"http.method": "GET",
"http.target": "/",
"http.scheme": :http,
"http.status_code": 0
} = :otel_attributes.map(attributes)
end
defp endpoint_url(port), do: "http://localhost:#{port}/"
end