added functional test to DoH resolver, and fixed the accept header (according to last RFC, it should only accept application/dns-message mime type)

This commit is contained in:
HoneyryderChuck 2019-12-28 00:28:52 +00:00
parent 399bcddc9a
commit a3c5974561
3 changed files with 31 additions and 1 deletions

View File

@ -9,6 +9,7 @@ module HTTPX
class Resolver::HTTPS
extend Forwardable
include Resolver::ResolverMixin
using URIExtensions
NAMESERVER = "https://1.1.1.1/dns-query"
@ -38,7 +39,10 @@ module HTTPX
end
def <<(connection)
return if @uri.origin == connection.origin.to_s
@uri_addresses ||= Resolv.getaddresses(@uri.host)
if @uri_addresses.empty?
ex = ResolveError.new("Can't resolve #{connection.origin.host}")
ex.set_backtrace(caller)
@ -176,8 +180,8 @@ module HTTPX
payload = Resolver.encode_dns_query(hostname, type: RECORD_TYPES[type])
request = rklass.new("POST", uri, @options.merge(body: [payload]))
request.headers["content-type"] = "application/dns-message"
request.headers["accept"] = "application/dns-message"
end
request.headers["accept"] = "application/dns-message"
request.on(:response, &method(:on_response).curry[request])
request.on(:promise, &method(:on_promise))
request

View File

@ -13,6 +13,7 @@ class HTTPSTest < Minitest::Test
include IO
include Timeouts
include Errors
include Resolvers if ENV.key?("HTTPX_RESOLVER_URI")
# TODO: uncomment as soon as nghttpx supports altsvc for HTTP/2
# include AltSvc if ENV.key?("HTTPBIN_ALTSVC_HOST")

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
module Requests
module Resolvers
DOH_OPTIONS = { uri: ENV.fetch("HTTPX_RESOLVER_URI") }.freeze
SessionWithPool = Class.new(HTTPX::Session) do
def pool
@pool ||= HTTPX::Pool.new
end
end
def test_resolvers_doh
session = SessionWithPool.new
uri = build_uri("/get")
response = session.head(uri, resolver_class: :https, resolver_options: DOH_OPTIONS)
verify_status(response, 200)
resolvers = session.pool.instance_variable_get(:@resolvers)
assert resolvers.size == 1, "there should be one resolver"
resolver = resolvers.values.first
assert resolver.is_a?(HTTPX::Resolver::HTTPS)
end
end
end