80 lines
2.1 KiB
Elixir
80 lines
2.1 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
|