opentelemetry-erlang-contrib/instrumentation/opentelemetry_req/test/opentelemetry_req_test.exs

65 lines
1.5 KiB
Elixir

defmodule OpentelemetryReqTest do
use ExUnit.Case, async: true
doctest OpentelemetryReq
require Record
for {name, spec} <- Record.extract_all(from_lib: "opentelemetry/include/otel_span.hrl") do
Record.defrecordp(name, spec)
end
setup do
:application.stop(:opentelemetry)
:application.set_env(:opentelemetry, :tracer, :otel_tracer_default)
:application.set_env(:opentelemetry, :processors, [
{:otel_batch_processor, %{scheduled_delay_ms: 1, exporter: {:otel_exporter_pid, self()}}}
])
:application.start(:opentelemetry)
req =
Req.new()
|> OpentelemetryReq.attach()
{:ok, req: req}
end
test "span", %{req: req} do
adapter = fn request ->
assert URI.to_string(request.url) == "/users/3"
{request, Req.Response.new(status: 204)}
end
resp =
Req.get!(req,
adapter: adapter,
url: "/users/:id",
path_params: [id: 3]
)
assert resp.status == 204
assert_receive {:span, span(name: "/users/:id")}
refute_receive _
end
test "propagate traces", %{req: req} do
adapter = fn request ->
assert [value] = Req.Request.get_header(request, "traceparent")
assert byte_size(value) > 10
{request, Req.Response.new(status: 204)}
end
resp =
Req.get!(req,
adapter: adapter,
url: "/",
no_path_params: true,
propagate_trace_ctx: true
)
assert resp.status == 204
assert_receive {:span, span()}
refute_receive _
end
end