60 lines
2.4 KiB
Erlang
60 lines
2.4 KiB
Erlang
-module(otel_interceptor_SUITE).
|
|
-compile(export_all).
|
|
|
|
-include_lib("common_test/include/ct.hrl").
|
|
-include_lib("stdlib/include/assert.hrl").
|
|
|
|
-include_lib("opentelemetry_api/include/otel_tracer.hrl").
|
|
|
|
all() ->
|
|
[trace_interceptor].
|
|
|
|
init_per_suite(Config) ->
|
|
application:load(grpcbox),
|
|
application:load(opentelemetry),
|
|
Config.
|
|
|
|
end_per_suite(_Config) ->
|
|
ok.
|
|
|
|
init_per_testcase(trace_interceptor, Config) ->
|
|
application:set_env(opentelemetry, processors, [{otel_batch_processor, #{exporter => undefined}}]),
|
|
application:set_env(grpcbox, client,
|
|
#{channels => [{default_channel,
|
|
[{http, "localhost", 8080, []}],
|
|
#{unary_interceptor => fun otel_grpcbox_interceptor:unary_client/7}}]}),
|
|
application:ensure_all_started(opentelemetry),
|
|
application:set_env(grpcbox, servers,
|
|
[#{grpc_opts =>
|
|
#{service_protos => [route_guide_pb],
|
|
services => #{'routeguide.RouteGuide' => routeguide_route_guide},
|
|
unary_interceptor =>
|
|
grpcbox_chain_interceptor:unary([fun otel_grpcbox_interceptor:unary/4,
|
|
fun ?MODULE:trace_to_trailer/4])}}]),
|
|
application:ensure_all_started(grpcbox),
|
|
Config.
|
|
|
|
%% include a trace context and test that it works by having a second interceptor add
|
|
%% the trace id from the context as a response trailer.
|
|
trace_interceptor(_Config) ->
|
|
Point = #{latitude => 409146138, longitude => -746188906},
|
|
?with_span(<<"grpc-client-call">>, #{},
|
|
fun(_) ->
|
|
{_, _Feature, #{trailers := Trailers}} =
|
|
routeguide_route_guide_client:get_feature(Point),
|
|
SpanCtx = ?current_span_ctx,
|
|
BinTraceId = integer_to_binary(otel_span:trace_id(SpanCtx)),
|
|
?assertEqual(BinTraceId, maps:get(<<"x-grpc-trace-id">>, Trailers))
|
|
|
|
end),
|
|
ok.
|
|
|
|
%%
|
|
|
|
trace_to_trailer(Ctx, Message, _ServerInfo, Handler) ->
|
|
SpanCtx = ?current_span_ctx,
|
|
BinTraceId = integer_to_binary(otel_span:trace_id(SpanCtx)),
|
|
Trailer = grpcbox_metadata:pairs([{<<"x-grpc-trace-id">>, BinTraceId}]),
|
|
Ctx1 = grpcbox_stream:add_trailers(Ctx, Trailer),
|
|
Handler(Ctx1, Message).
|