Skip to content

Commit

Permalink
[resty.resolver] handle invalid resolver
Browse files Browse the repository at this point in the history
* take out invalid or unreachable resolvers
* fixes crash using invalid resolver
  • Loading branch information
mikz committed May 30, 2018
1 parent 12bc55e commit aa59c5a
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 26 deletions.
33 changes: 22 additions & 11 deletions gateway/src/resty/resolver/dns_client.lua
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,29 @@ end

function _M:init_resolvers()
local resolvers = self.resolvers
local nameservers = self.nameservers

ngx.log(ngx.DEBUG, 'initializing ', #nameservers, ' nameservers')
for i=1,#nameservers do
insert(resolvers, {
nameserver = nameservers[i],
resolver = resty_resolver:new({
nameservers = { nameservers[i] },
timeout = 2900
})
local ns = self.nameservers

if not resolvers or not ns then
return nil, 'not initialized'
end

ngx.log(ngx.DEBUG, 'initializing ', #ns, ' nameservers')

for i=1,#ns do
local resolver, err = resty_resolver:new({
nameservers = { ns[i] },
timeout = 2900
})
ngx.log(ngx.DEBUG, 'nameserver ', nameservers[i][1],':',nameservers[i][2] or 53, ' initialized')

if resolver then
insert(resolvers, {
nameserver = ns[i],
resolver = resolver
})
ngx.log(ngx.DEBUG, 'nameserver ', ns[i][1],':',ns[i][2] or 53, ' initialized')
else
ngx.log(ngx.WARN, 'nameserver ', ns[i][1],':',ns[i][2] or 53, ' not initialized: ', err)
end
end

self.initialized = true
Expand Down
29 changes: 29 additions & 0 deletions spec/resty/resolver/dns_client_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
local dns_client = require 'resty.resolver.dns_client'

describe('resty.resolver.dns_client', function()

describe(':init_resolvers', function()
it('is called only once', function()
local dns = dns_client:new{ nameservers = { '127.0.0.1' } }
local s = spy.on(dns, 'init_resolvers')

dns:query('www.3scale.net', { qtype = dns.TYPE_A })
dns:query('www.3scale.net', { qtype = dns.TYPE_A })

assert.spy(s).was.called(1)
end)

it('handles invalid resolvers', function()
local nameservers = {
'invalid',
'256.0.0.0',
'127.0.0.1',
}
local dns = dns_client:new{nameservers = nameservers }
local resolvers = assert(dns:init_resolvers())

assert.equal(1, #resolvers)
end)
end)

end)
15 changes: 0 additions & 15 deletions spec/resty/resolver/dns_spec.lua

This file was deleted.

0 comments on commit aa59c5a

Please sign in to comment.