test/helper.rb in ds9-1.1.0 vs test/helper.rb in ds9-1.1.1
- old
+ new
@@ -76,20 +76,32 @@
class Client < DS9::Client
include IOEvents
class Response
- attr_reader :stream_id, :body, :headers
+ attr_reader :stream_id, :body
def initialize stream_id
@stream_id = stream_id
- @headers = {}
+ @headers = [{}]
@body = StringIO.new
end
- def [] k; @headers[k]; end
- def []= k, v; @headers[k] = v; end
+ def headers
+ @headers[0]
+ end
+
+ def trailers
+ @headers[1]
+ end
+
+ def [] k; @headers.last[k]; end
+ def []= k, v; @headers.last[k] = v; end
+
+ def bump
+ @headers << {}
+ end
end
attr_reader :responses, :response_queue, :frames
def initialize read, write, response_queue
@@ -102,11 +114,15 @@
def on_frame_recv frame
@frames << frame
end
def on_begin_headers frame
- @response_streams[frame.stream_id] = Response.new(frame.stream_id)
+ if @response_streams[frame.stream_id]
+ @response_streams[frame.stream_id].bump
+ else
+ @response_streams[frame.stream_id] = Response.new(frame.stream_id)
+ end
end
def on_header name, value, frame, flags
@response_streams[frame.stream_id][name] = value
end
@@ -142,11 +158,17 @@
def on_begin_headers frame
@read_streams[frame.stream_id] = []
end
def on_data_source_read stream_id, length
- @write_streams[stream_id].body.shift
+ chunk = @write_streams[stream_id].body.shift
+ if chunk.nil? && @write_streams[stream_id].trailers
+ submit_trailer stream_id, @write_streams[stream_id].trailers
+ false
+ else
+ chunk
+ end
end
def on_stream_close id, error_code
@read_streams.delete id
@write_streams.delete id
@@ -170,10 +192,10 @@
def path
headers[':path']
end
end
- class Response < Struct.new :stream, :stream_id, :body
+ class Response < Struct.new :stream, :stream_id, :body, :trailers
def push headers
stream.submit_push_promise stream_id, headers
end
def submit_response headers