From 47ecfd73181dc888f01479069cb7e076352da9ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= <essen@ninenines.eu>
Date: Wed, 5 Feb 2020 18:06:00 +0100
Subject: Add a test confirming push requests have no body

---
 test/handlers/resp_h.erl |  2 ++
 test/rfc7540_SUITE.erl   | 12 ++++++++++++
 2 files changed, 14 insertions(+)

(limited to 'test')

diff --git a/test/handlers/resp_h.erl b/test/handlers/resp_h.erl
index cf21536..d43152e 100644
--- a/test/handlers/resp_h.erl
+++ b/test/handlers/resp_h.erl
@@ -379,6 +379,8 @@ do(<<"stream_trailers">>, Req0, Opts) ->
 	end;
 do(<<"push">>, Req, Opts) ->
 	case cowboy_req:binding(arg, Req) of
+		<<"read_body">> ->
+			cowboy_req:push("/echo/read_body", #{}, Req, #{});
 		<<"method">> ->
 			cowboy_req:push("/static/style.css", #{<<"accept">> => <<"text/css">>}, Req,
 				#{method => <<"HEAD">>});
diff --git a/test/rfc7540_SUITE.erl b/test/rfc7540_SUITE.erl
index 17ac319..aec0aa1 100644
--- a/test/rfc7540_SUITE.erl
+++ b/test/rfc7540_SUITE.erl
@@ -4044,6 +4044,18 @@ reject_duplicate_content_length_header(Config) ->
 %   PUSH_PROMISE frame as a connection error (Section 5.4.1) of type
 %   PROTOCOL_ERROR.
 
+push_has_no_request_body(Config) ->
+	doc("PUSH_PROMISE frames include the complete set of request headers "
+		"and the request can never include a body. (RFC7540 8.2.1)"),
+	ConnPid = gun_open(Config),
+	Ref = gun:get(ConnPid, "/resp/push/read_body"),
+	{push, PushRef, <<"GET">>, _, _} = gun:await(ConnPid, Ref),
+	{response, fin, 200, _} = gun:await(ConnPid, Ref),
+	%% We should not get a body in the pushed resource
+	%% since there was no body in the request.
+	{response, fin, 200, _} = gun:await(ConnPid, PushRef),
+	ok.
+
 %% (RFC7540 8.2.1)
 %   The header fields in PUSH_PROMISE and any subsequent CONTINUATION
 %   frames MUST be a valid and complete set of request header fields
-- 
cgit v1.2.3