Skip to content

Commit 13a5119

Browse files
committed
spec/h2_stream_spec: make sure trailers are properly handled on response
1 parent ee3cf4b commit 13a5119

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

spec/h2_stream_spec.lua

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,66 @@ describe("http.h2_stream", function()
4747
assert_loop(cq, TEST_TIMEOUT)
4848
assert.truthy(cq:empty())
4949
end)
50+
it("accepts trailers without pseudo_header", function()
51+
local s, c = new_pair()
52+
local cq = cqueues.new()
53+
cq:wrap(function()
54+
local client_stream = c:new_stream()
55+
local req_headers = new_headers()
56+
req_headers:append(":method", "GET")
57+
req_headers:append(":scheme", "http")
58+
req_headers:append(":path", "/")
59+
assert(client_stream:write_headers(req_headers, true))
60+
assert(client_stream:get_headers())
61+
assert(client_stream:get_headers())
62+
assert(c:close())
63+
end)
64+
cq:wrap(function()
65+
local stream = assert(s:get_next_incoming_stream())
66+
assert(stream:get_headers())
67+
local res_headers = new_headers()
68+
res_headers:append(":status", "200")
69+
local res_trailers = new_headers()
70+
res_trailers:append("trailer-status", "0")
71+
assert(stream:write_headers(res_headers, false))
72+
assert(stream:write_headers(res_trailers, true))
73+
assert(s:close())
74+
end)
75+
assert_loop(cq, TEST_TIMEOUT)
76+
assert.truthy(cq:empty())
77+
end)
78+
it("accepts trailers after interim responses", function()
79+
local s, c = new_pair()
80+
local cq = cqueues.new()
81+
cq:wrap(function()
82+
local client_stream = c:new_stream()
83+
local req_headers = new_headers()
84+
req_headers:append(":method", "GET")
85+
req_headers:append(":scheme", "http")
86+
req_headers:append(":path", "/")
87+
assert(client_stream:write_headers(req_headers, true))
88+
assert(client_stream:get_headers()) -- 100 continue
89+
assert(client_stream:get_headers()) -- 200 OK
90+
assert(client_stream:get_headers()) -- trailer
91+
assert(c:close())
92+
end)
93+
cq:wrap(function()
94+
local stream = assert(s:get_next_incoming_stream())
95+
assert(stream:get_headers())
96+
local info_headers = new_headers()
97+
info_headers:append(":status", "100")
98+
local res_headers = new_headers()
99+
res_headers:append(":status", "200")
100+
local res_trailers = new_headers()
101+
res_trailers:append("trailer-status", "0")
102+
assert(stream:write_headers(info_headers, false))
103+
assert(stream:write_headers(res_headers, false))
104+
assert(stream:write_headers(res_trailers, true))
105+
assert(s:close())
106+
end)
107+
assert_loop(cq, TEST_TIMEOUT)
108+
assert.truthy(cq:empty())
109+
end)
50110
it("can send a body", function()
51111
local s, c = new_pair()
52112
local cq = cqueues.new()

0 commit comments

Comments
 (0)