From c4651261b652ce2727b9181ef171ce7ca6add1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sat, 21 Oct 2017 14:56:28 +0100 Subject: Add a test for early_error metrics --- test/metrics_SUITE.erl | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/test/metrics_SUITE.erl b/test/metrics_SUITE.erl index b43e475..33b60bd 100644 --- a/test/metrics_SUITE.erl +++ b/test/metrics_SUITE.erl @@ -73,7 +73,11 @@ init_routes(_) -> [ ]. do_metrics_callback() -> - fun(Metrics=#{req := #{headers := #{<<"x-test-pid">> := PidBin}}}) -> + fun(Metrics) -> + PidBin = case Metrics of + #{req := #{headers := #{<<"x-test-pid">> := P}}} -> P; + #{partial_req := #{headers := #{<<"x-test-pid">> := P}}} -> P + end, Pid = list_to_pid(binary_to_list(PidBin)), Pid ! {metrics, self(), Metrics}, ok @@ -203,7 +207,7 @@ post_body(Config) -> end. no_resp_body(Config) -> - doc("Confirm metrics are correct for a 204 response to a GET request."), + doc("Confirm metrics are correct for a default 204 response to a GET request."), %% Perform a GET request. ConnPid = gun_open(Config), Ref = gun:get(ConnPid, "/default", [ @@ -257,3 +261,42 @@ no_resp_body(Config) -> after 1000 -> error(timeout) end. + +early_error(Config) -> + case config(protocol, Config) of + http -> do_early_error(Config); + http2 -> doc("The callback early_error/5 is not currently used for HTTP/2.") + end. + +do_early_error(Config) -> + doc("Confirm metrics are correct for an early_error response."), + %% Perform a malformed GET request. + ConnPid = gun_open(Config), + Ref = gun:get(ConnPid, "/", [ + {<<"accept-encoding">>, <<"gzip">>}, + {<<"host">>, <<"host:port">>}, + {<<"x-test-pid">>, pid_to_list(self())} + ]), + {response, fin, 400, RespHeaders} = gun:await(ConnPid, Ref), + gun:close(ConnPid), + %% Receive the metrics and validate them. + receive + {metrics, From, Metrics} -> + %% Confirm the metadata is there as expected. + #{ + ref := _, + pid := From, + streamid := 1, + reason := {stream_error, 1, protocol_error, _}, + partial_req := #{}, + resp_status := 400, + resp_headers := ExpectedRespHeaders, + early_error_time := _, + resp_body_length := 0 + } = Metrics, + ExpectedRespHeaders = maps:from_list(RespHeaders), + %% All good! + ok + after 1000 -> + error(timeout) + end. -- cgit v1.2.3