httpx/test/parser_test.rb
HoneyryderChuck 446d561ed5 HTTP/1 Parser
2018-11-14 14:40:28 +00:00

59 lines
1.4 KiB
Ruby

# frozen_string_literal: true
require_relative "test_helper"
class HTTP1ParserTest < Minitest::Test
include HTTPX
class RequestObserver
attr_reader :headers, :body
def initialize
@headers = {}
@body = "".b
end
def on_headers(h)
@headers.merge!(h)
end
def on_data(data)
@body << data
end
def on_trailers(*); end
def on_start; end
def on_complete; end
end
JSON.parse(File.read(File.expand_path("support/responses.json", __dir__))).each do |res_json|
res_json["headers"] ||= {}
define_method "test_parse_response_#{res_json["name"]}" do
observer = RequestObserver.new
parser = Parser::HTTP1.new(observer)
parser << res_json["raw"].b
if res_json.key?("upgrade") && (res_json["upgrade"] != 0)
expect(@parser.upgrade?).to be true
expect(@parser.upgrade_data).to eq(res_json["upgrade"])
end
assert parser.http_version[0] == res_json["http_major"]
assert parser.http_version[1] == res_json["http_minor"]
assert parser.status_code == res_json["status_code"]
assert observer.headers.size == res_json["num_headers"]
res_json["headers"].each do |field, value|
assert value == observer.headers[field.downcase].join("; ")
end
assert observer.body == res_json["body"]
assert observer.body.size == res_json["body_size"] if res_json["body_size"]
end
end
end