@@ -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