mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
calculate TTL immediately after receiving answer, instead of on cache set
This commit is contained in:
parent
a3f581f315
commit
9d81d5eb0a
@ -63,10 +63,6 @@ module HTTPX
|
||||
end
|
||||
|
||||
def cached_lookup_set(hostname, family, entries)
|
||||
now = Utils.now
|
||||
entries.each do |entry|
|
||||
entry["TTL"] += now
|
||||
end
|
||||
lookup_synchronize do |lookups|
|
||||
case family
|
||||
when Socket::AF_INET6
|
||||
@ -145,19 +141,20 @@ module HTTPX
|
||||
|
||||
addresses = []
|
||||
|
||||
now = Utils.now
|
||||
message.each_answer do |question, _, value|
|
||||
case value
|
||||
when Resolv::DNS::Resource::IN::CNAME
|
||||
addresses << {
|
||||
"name" => question.to_s,
|
||||
"TTL" => value.ttl,
|
||||
"TTL" => (now + value.ttl),
|
||||
"alias" => value.name.to_s,
|
||||
}
|
||||
when Resolv::DNS::Resource::IN::A,
|
||||
Resolv::DNS::Resource::IN::AAAA
|
||||
addresses << {
|
||||
"name" => question.to_s,
|
||||
"TTL" => value.ttl,
|
||||
"TTL" => (now + value.ttl),
|
||||
"data" => value.address.to_s,
|
||||
}
|
||||
end
|
||||
|
@ -6,28 +6,32 @@ class ResolverTest < Minitest::Test
|
||||
include HTTPX
|
||||
|
||||
def test_cached_lookup
|
||||
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
||||
assert_ips nil, Resolver.cached_lookup("test.com")
|
||||
dns_entry = { "data" => "::2", "TTL" => 2, "name" => "test.com" }
|
||||
dns_entry = { "data" => "::2", "TTL" => now + 2, "name" => "test.com" }
|
||||
Resolver.cached_lookup_set("test.com", Socket::AF_INET6, [dns_entry])
|
||||
assert_ips ["::2"], Resolver.cached_lookup("test.com")
|
||||
sleep 2
|
||||
assert_ips nil, Resolver.cached_lookup("test.com")
|
||||
alias_entry = { "alias" => "test.com", "TTL" => 2, "name" => "foo.com" }
|
||||
|
||||
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
||||
dns_entry = { "data" => "::2", "TTL" => now + 2, "name" => "test.com" }
|
||||
alias_entry = { "alias" => "test.com", "TTL" => now + 2, "name" => "foo.com" }
|
||||
Resolver.cached_lookup_set("test.com", Socket::AF_INET6, [dns_entry])
|
||||
Resolver.cached_lookup_set("foo.com", Socket::AF_INET6, [alias_entry])
|
||||
assert_ips ["::2"], Resolver.cached_lookup("foo.com")
|
||||
|
||||
Resolver.cached_lookup_set("test.com", Socket::AF_INET6, [{ "data" => "::3", "TTL" => 2, "name" => "test.com" }])
|
||||
Resolver.cached_lookup_set("test.com", Socket::AF_INET6, [{ "data" => "::3", "TTL" => now + 2, "name" => "test.com" }])
|
||||
assert_ips %w[::2 ::3], Resolver.cached_lookup("test.com")
|
||||
|
||||
Resolver.cached_lookup_set("test.com", Socket::AF_INET, [{ "data" => "127.0.0.2", "TTL" => 2, "name" => "test.com" }])
|
||||
Resolver.cached_lookup_set("test.com", Socket::AF_INET, [{ "data" => "127.0.0.2", "TTL" => now + 2, "name" => "test.com" }])
|
||||
assert_ips %w[127.0.0.2 ::2 ::3], Resolver.cached_lookup("test.com")
|
||||
|
||||
Resolver.cached_lookup_set("test2.com", Socket::AF_INET6, [{ "data" => "::4", "TTL" => 2, "name" => "test3.com" }])
|
||||
Resolver.cached_lookup_set("test2.com", Socket::AF_INET6, [{ "data" => "::4", "TTL" => now + 2, "name" => "test3.com" }])
|
||||
assert_ips %w[::4], Resolver.cached_lookup("test2.com")
|
||||
assert_ips %w[::4], Resolver.cached_lookup("test3.com")
|
||||
|
||||
Resolver.cached_lookup_set("test2.com", Socket::AF_INET, [{ "data" => "127.0.0.3", "TTL" => 2, "name" => "test3.com" }])
|
||||
Resolver.cached_lookup_set("test2.com", Socket::AF_INET, [{ "data" => "127.0.0.3", "TTL" => now + 2, "name" => "test3.com" }])
|
||||
assert_ips %w[127.0.0.3 ::4], Resolver.cached_lookup("test2.com")
|
||||
assert_ips %w[127.0.0.3 ::4], Resolver.cached_lookup("test3.com")
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user