diff --git a/test/grpc/integration/server_test.exs b/test/grpc/integration/server_test.exs index 12313d6f..0e0684bd 100644 --- a/test/grpc/integration/server_test.exs +++ b/test/grpc/integration/server_test.exs @@ -323,23 +323,38 @@ defmodule GRPC.Integration.ServerTest do refute logs =~ "Exception raised while handling /helloworld.Greeter/SayHello" end - test "passes RPCErrors to `exception_log_filter" do - defmodule ExceptionFilterMustBeRPCError do - def filter(%GRPC.RPCError{}) do - true - end + defmodule ExceptionFilterMustBeRPCError do + def filter(exception) do + data = exception.adapter_extra[:req][:headers]["test-data"] + + {pid, ref} = :erlang.binary_to_term(data) + send(pid, {:exception_log_filter, ref, exception}) + + true end + end + + test "passes RPCErrors to `exception_log_filter" do + test_pid = self() + ref = make_ref() run_server( [HelloErrorServer], fn port -> - {:ok, channel} = GRPC.Stub.connect("localhost:#{port}") - req = %Helloworld.HelloRequest{name: "unknown error"} + {:ok, channel} = + GRPC.Stub.connect("localhost:#{port}", + headers: [{"test-data", :erlang.term_to_binary({test_pid, ref})}] + ) + + req = %Helloworld.HelloRequest{name: "world"} Helloworld.Greeter.Stub.say_hello(channel, req) end, 0, exception_log_filter: {ExceptionFilterMustBeRPCError, :filter} ) + + assert_receive {:exception_log_filter, ^ref, + %GRPC.Server.Adapters.ReportException{reason: %GRPC.RPCError{}}} end defmodule ExceptionFilterMustBeRaisedError do @@ -347,7 +362,7 @@ defmodule GRPC.Integration.ServerTest do data = exception.adapter_extra[:req][:headers]["test-data"] {pid, ref} = :erlang.binary_to_term(data) - send(pid, {:exception_log_filter, ref}) + send(pid, {:exception_log_filter, ref, exception}) true end @@ -365,14 +380,15 @@ defmodule GRPC.Integration.ServerTest do headers: [{"test-data", :erlang.term_to_binary({test_pid, ref})}] ) - req = %Helloworld.HelloRequest{name: "raise", duration: 0} + req = %Helloworld.HelloRequest{name: "unknown error", duration: 0} Helloworld.Greeter.Stub.say_hello(channel, req) end, 0, exception_log_filter: {ExceptionFilterMustBeRaisedError, :filter} ) - assert_receive {:exception_log_filter, ^ref} + assert_receive {:exception_log_filter, ^ref, + %GRPC.Server.Adapters.ReportException{reason: %RuntimeError{}}} end test "returns appropriate error for stream requests" do