mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
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:
parent
399bcddc9a
commit
a3c5974561
@ -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
|
||||
|
@ -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")
|
||||
|
||||
|
25
test/support/requests/resolvers.rb
Normal file
25
test/support/requests/resolvers.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user