git mv Ingress ingress
This commit is contained in:
parent
34b949c134
commit
3da4e74e5a
2185 changed files with 754743 additions and 0 deletions
271
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/TestDNS.pm
vendored
Normal file
271
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/TestDNS.pm
vendored
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
package TestDNS;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use 5.010001;
|
||||
use Test::Nginx::Socket::Lua -Base;
|
||||
#use JSON::XS;
|
||||
|
||||
use constant {
|
||||
TYPE_A => 1,
|
||||
TYPE_TXT => 16,
|
||||
TYPE_CNAME => 5,
|
||||
TYPE_AAAA => 28,
|
||||
CLASS_INTERNET => 1,
|
||||
};
|
||||
|
||||
sub encode_name ($);
|
||||
sub encode_ipv4 ($);
|
||||
sub encode_ipv6 ($);
|
||||
sub gen_dns_reply ($$);
|
||||
|
||||
sub Test::Base::Filter::dns {
|
||||
my ($self, $code) = @_;
|
||||
|
||||
my $args = $self->current_arguments;
|
||||
#warn "args: $args";
|
||||
if (defined $args && $args ne 'tcp' && $args ne 'udp') {
|
||||
die "Invalid argument to the \"dns\" filter: $args\n";
|
||||
}
|
||||
|
||||
my $mode = $args // 'udp';
|
||||
|
||||
my $block = $self->current_block;
|
||||
|
||||
my $pointer_spec = $block->dns_pointers;
|
||||
my @pointers;
|
||||
if (defined $pointer_spec) {
|
||||
my @loops = split /\s*,\s*/, $pointer_spec;
|
||||
for my $loop (@loops) {
|
||||
my @nodes = split /\s*=>\s*/, $loop;
|
||||
my $prev;
|
||||
for my $n (@nodes) {
|
||||
if ($n !~ /^\d+$/ || $n == 0) {
|
||||
die "bad name ID in the --- dns_pointers: $n\n";
|
||||
}
|
||||
|
||||
if (!defined $prev) {
|
||||
$prev = $n;
|
||||
next;
|
||||
}
|
||||
|
||||
$pointers[$prev] = $n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $input = eval $code;
|
||||
if ($@) {
|
||||
die "failed to evaluate code $code: $@\n";
|
||||
}
|
||||
|
||||
if (!ref $input) {
|
||||
return $input;
|
||||
}
|
||||
|
||||
if (ref $input eq 'ARRAY') {
|
||||
my @replies;
|
||||
for my $t (@$input) {
|
||||
push @replies, gen_dns_reply($t, $mode);
|
||||
}
|
||||
|
||||
return \@replies;
|
||||
}
|
||||
|
||||
if (ref $input eq 'HASH') {
|
||||
return gen_dns_reply($input, $mode);
|
||||
}
|
||||
|
||||
return $input;
|
||||
}
|
||||
|
||||
sub gen_dns_reply ($$) {
|
||||
my ($t, $mode) = @_;
|
||||
|
||||
my @raw_names;
|
||||
push @raw_names, \($t->{qname});
|
||||
|
||||
my $answers = $t->{answer} // [];
|
||||
if (!ref $answers) {
|
||||
$answers = [$answers];
|
||||
}
|
||||
|
||||
for my $ans (@$answers) {
|
||||
push @raw_names, \($ans->{name});
|
||||
if (defined $ans->{cname}) {
|
||||
push @raw_names, \($ans->{cname});
|
||||
}
|
||||
}
|
||||
|
||||
for my $rname (@raw_names) {
|
||||
$$rname = encode_name($$rname // "");
|
||||
}
|
||||
|
||||
my $qname = $t->{qname};
|
||||
|
||||
my $s = '';
|
||||
|
||||
my $id = $t->{id} // 0;
|
||||
|
||||
$s .= pack("n", $id);
|
||||
#warn "id: ", length($s), " ", encode_json([$s]);
|
||||
|
||||
my $qr = $t->{qr} // 1;
|
||||
|
||||
my $opcode = $t->{opcode} // 0;
|
||||
|
||||
my $aa = $t->{aa} // 0;
|
||||
|
||||
my $tc = $t->{tc} // 0;
|
||||
my $rd = $t->{rd} // 1;
|
||||
my $ra = $t->{ra} // 1;
|
||||
my $rcode = $t->{rcode} // 0;
|
||||
|
||||
my $flags = ($qr << 15) + ($opcode << 11) + ($aa << 10) + ($tc << 9) + ($rd << 8) + ($ra << 7) + $rcode;
|
||||
#warn sprintf("flags: %b", $flags);
|
||||
|
||||
$flags = pack("n", $flags);
|
||||
$s .= $flags;
|
||||
|
||||
#warn "flags: ", length($flags), " ", encode_json([$flags]);
|
||||
|
||||
my $qdcount = $t->{qdcount} // 1;
|
||||
my $ancount = $t->{ancount} // scalar @$answers;
|
||||
my $nscount = 0;
|
||||
my $arcount = 0;
|
||||
|
||||
$s .= pack("nnnn", $qdcount, $ancount, $nscount, $arcount);
|
||||
|
||||
#warn "qname: ", length($qname), " ", encode_json([$qname]);
|
||||
|
||||
$s .= $qname;
|
||||
|
||||
my $qs_type = $t->{qtype} // TYPE_A;
|
||||
my $qs_class = $t->{qclass} // CLASS_INTERNET;
|
||||
|
||||
$s .= pack("nn", $qs_type, $qs_class);
|
||||
|
||||
for my $ans (@$answers) {
|
||||
my $name = $ans->{name};
|
||||
my $type = $ans->{type};
|
||||
my $class = $ans->{class};
|
||||
my $ttl = $ans->{ttl};
|
||||
my $rdlength = $ans->{rdlength};
|
||||
my $rddata = $ans->{rddata};
|
||||
|
||||
my $ipv4 = $ans->{ipv4};
|
||||
if (defined $ipv4) {
|
||||
my ($data, $len) = encode_ipv4($ipv4);
|
||||
$rddata //= $data;
|
||||
$rdlength //= $len;
|
||||
$type //= TYPE_A;
|
||||
$class //= CLASS_INTERNET;
|
||||
}
|
||||
|
||||
my $ipv6 = $ans->{ipv6};
|
||||
if (defined $ipv6) {
|
||||
my ($data, $len) = encode_ipv6($ipv6);
|
||||
$rddata //= $data;
|
||||
$rdlength //= $len;
|
||||
$type //= TYPE_AAAA;
|
||||
$class //= CLASS_INTERNET;
|
||||
}
|
||||
|
||||
my $cname = $ans->{cname};
|
||||
if (defined $cname) {
|
||||
$rddata //= $cname;
|
||||
$rdlength //= length $rddata;
|
||||
$type //= TYPE_CNAME;
|
||||
$class //= CLASS_INTERNET;
|
||||
}
|
||||
|
||||
my $txt = $ans->{txt};
|
||||
if (defined $txt) {
|
||||
$rddata //= $txt;
|
||||
$rdlength //= length $rddata;
|
||||
$type //= TYPE_TXT;
|
||||
$class //= CLASS_INTERNET;
|
||||
}
|
||||
|
||||
$type //= 0;
|
||||
$class //= 0;
|
||||
$ttl //= 0;
|
||||
|
||||
#warn "rdlength: $rdlength, rddata: ", encode_json([$rddata]), "\n";
|
||||
|
||||
$s .= $name . pack("nnNn", $type, $class, $ttl, $rdlength) . $rddata;
|
||||
}
|
||||
|
||||
if ($mode eq 'tcp') {
|
||||
return pack("n", length($s)) . $s;
|
||||
}
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
sub encode_ipv4 ($) {
|
||||
my $txt = shift;
|
||||
my @bytes = split /\./, $txt;
|
||||
return pack("CCCC", @bytes), 4;
|
||||
}
|
||||
|
||||
sub encode_ipv6 ($) {
|
||||
my $txt = shift;
|
||||
my @groups = split /:/, $txt;
|
||||
my $nils = 0;
|
||||
my $nonnils = 0;
|
||||
for my $g (@groups) {
|
||||
if ($g eq '') {
|
||||
$nils++;
|
||||
} else {
|
||||
$nonnils++;
|
||||
$g = hex($g);
|
||||
}
|
||||
}
|
||||
|
||||
my $total = $nils + $nonnils;
|
||||
if ($total > 8 ) {
|
||||
die "Invalid IPv6 address: too many groups: $total: $txt";
|
||||
}
|
||||
|
||||
if ($nils) {
|
||||
my $found = 0;
|
||||
my @new_groups;
|
||||
for my $g (@groups) {
|
||||
if ($g eq '') {
|
||||
if ($found) {
|
||||
next;
|
||||
}
|
||||
|
||||
for (1 .. 8 - $nonnils) {
|
||||
push @new_groups, 0;
|
||||
}
|
||||
|
||||
$found = 1;
|
||||
|
||||
} else {
|
||||
push @new_groups, $g;
|
||||
}
|
||||
}
|
||||
|
||||
@groups = @new_groups;
|
||||
}
|
||||
|
||||
if (@groups != 8) {
|
||||
die "Invalid IPv6 address: $txt: @groups\n";
|
||||
}
|
||||
|
||||
#warn "IPv6 groups: @groups";
|
||||
|
||||
return pack("nnnnnnnn", @groups), 16;
|
||||
}
|
||||
|
||||
sub encode_name ($) {
|
||||
my $name = shift;
|
||||
$name =~ s/([^.]+)\.?/chr(length($1)) . $1/ge;
|
||||
$name .= "\0";
|
||||
return $name;
|
||||
}
|
||||
|
||||
1
|
||||
89
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/lib/ljson.lua
vendored
Normal file
89
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/lib/ljson.lua
vendored
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
local ngx_null = ngx.null
|
||||
local tostring = tostring
|
||||
local byte = string.byte
|
||||
local gsub = string.gsub
|
||||
local sort = table.sort
|
||||
local pairs = pairs
|
||||
local ipairs = ipairs
|
||||
local concat = table.concat
|
||||
|
||||
local ok, new_tab = pcall(require, "table.new")
|
||||
if not ok then
|
||||
new_tab = function (narr, nrec) return {} end
|
||||
end
|
||||
|
||||
local _M = {}
|
||||
|
||||
local metachars = {
|
||||
['\t'] = '\\t',
|
||||
["\\"] = "\\\\",
|
||||
['"'] = '\\"',
|
||||
['\r'] = '\\r',
|
||||
['\n'] = '\\n',
|
||||
}
|
||||
|
||||
local function encode_str(s)
|
||||
-- XXX we will rewrite this when string.buffer is implemented
|
||||
-- in LuaJIT 2.1 because string.gsub cannot be JIT compiled.
|
||||
return gsub(s, '["\\\r\n\t]', metachars)
|
||||
end
|
||||
|
||||
local function is_arr(t)
|
||||
local exp = 1
|
||||
for k, _ in pairs(t) do
|
||||
if k ~= exp then
|
||||
return nil
|
||||
end
|
||||
exp = exp + 1
|
||||
end
|
||||
return exp - 1
|
||||
end
|
||||
|
||||
local encode
|
||||
|
||||
encode = function (v)
|
||||
if v == nil or v == ngx_null then
|
||||
return "null"
|
||||
end
|
||||
|
||||
local typ = type(v)
|
||||
if typ == 'string' then
|
||||
return '"' .. encode_str(v) .. '"'
|
||||
end
|
||||
|
||||
if typ == 'number' or typ == 'boolean' then
|
||||
return tostring(v)
|
||||
end
|
||||
|
||||
if typ == 'table' then
|
||||
local n = is_arr(v)
|
||||
if n then
|
||||
local bits = new_tab(n, 0)
|
||||
for i, elem in ipairs(v) do
|
||||
bits[i] = encode(elem)
|
||||
end
|
||||
return "[" .. concat(bits, ",") .. "]"
|
||||
end
|
||||
|
||||
local keys = {}
|
||||
local i = 0
|
||||
for key, _ in pairs(v) do
|
||||
i = i + 1
|
||||
keys[i] = key
|
||||
end
|
||||
sort(keys)
|
||||
|
||||
local bits = new_tab(0, i)
|
||||
i = 0
|
||||
for _, key in ipairs(keys) do
|
||||
i = i + 1
|
||||
bits[i] = encode(key) .. ":" .. encode(v[key])
|
||||
end
|
||||
return "{" .. concat(bits, ",") .. "}"
|
||||
end
|
||||
|
||||
return '"<' .. typ .. '>"'
|
||||
end
|
||||
_M.encode = encode
|
||||
|
||||
return _M
|
||||
1423
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/mock.t
vendored
Normal file
1423
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/mock.t
vendored
Normal file
File diff suppressed because it is too large
Load diff
502
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/sanity.t
vendored
Normal file
502
controllers/nginx-third-party/lua/vendor/lua-resty-dns/t/sanity.t
vendored
Normal file
|
|
@ -0,0 +1,502 @@
|
|||
# vim:set ft= ts=4 sw=4 et:
|
||||
|
||||
use Test::Nginx::Socket::Lua;
|
||||
use Cwd qw(cwd);
|
||||
|
||||
repeat_each(2);
|
||||
|
||||
plan tests => repeat_each() * (3 * blocks());
|
||||
|
||||
my $pwd = cwd();
|
||||
|
||||
our $HttpConfig = qq{
|
||||
lua_package_path "$pwd/t/lib/?.lua;$pwd/lib/?.lua;;";
|
||||
lua_package_cpath "/usr/local/openresty-debug/lualib/?.so;/usr/local/openresty/lualib/?.so;;";
|
||||
};
|
||||
|
||||
$ENV{TEST_NGINX_RESOLVER} ||= '8.8.8.8';
|
||||
|
||||
no_long_string();
|
||||
|
||||
run_tests();
|
||||
|
||||
__DATA__
|
||||
|
||||
=== TEST 1: A records
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("www.google.com", { qtype = r.TYPE_A })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[.*?"address":"(?:\d{1,3}\.){3}\d+".*?\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 2: CNAME records
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("www.yahoo.com", { qtype = r.TYPE_CNAME })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[.*?"cname":"[-_a-z0-9.]+".*?\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 3: AAAA records
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("www.google.com", { qtype = r.TYPE_AAAA })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[.*?"address":"[a-fA-F0-9]*(?::[a-fA-F0-9]*)+".*?\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 4: compress ipv6 addr
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local c = resolver.compress_ipv6_addr
|
||||
|
||||
ngx.say(c("1080:0:0:0:8:800:200C:417A"))
|
||||
ngx.say(c("FF01:0:0:0:0:0:0:101"))
|
||||
ngx.say(c("0:0:0:0:0:0:0:1"))
|
||||
ngx.say(c("1:5:0:0:0:0:0:0"))
|
||||
ngx.say(c("7:25:0:0:0:3:0:0"))
|
||||
ngx.say(c("0:0:0:0:0:0:0:0"))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body
|
||||
1080::8:800:200C:417A
|
||||
FF01::101
|
||||
::1
|
||||
1:5::
|
||||
7:25::3:0:0
|
||||
::
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 5: A records (TCP)
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:tcp_query("www.google.com", { qtype = r.TYPE_A })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[.*?"address":"(?:\d{1,3}\.){3}\d+".*?\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 6: MX records
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("gmail.com", { qtype = r.TYPE_MX })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[\{.*?"preference":\d+,.*?"exchange":"[^"]+".*?\}\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 7: NS records
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("agentzh.org", { qtype = r.TYPE_NS })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[\{.*?"nsdname":"[^"]+".*?\}\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 8: TXT query (no ans)
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("agentzh.org", { qtype = r.TYPE_TXT })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body
|
||||
records: {}
|
||||
--- no_error_log
|
||||
[error]
|
||||
--- timeout: 10
|
||||
|
||||
|
||||
|
||||
=== TEST 9: TXT query (with ans)
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("gmail.com", { qtype = r.TYPE_TXT })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[\{.*?"txt":"v=spf\d+\s[^"]+".*?\}\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 10: PTR query
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("4.4.8.8.in-addr.arpa", { qtype = r.TYPE_PTR })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[\{.*?"ptrdname":"google-public-dns-b\.google\.com".*?\}\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 11: domains with a trailing dot
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("www.google.com.", { qtype = r.TYPE_A })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[.*?"address":"(?:\d{1,3}\.){3}\d+".*?\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 12: domains with a leading dot
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query(".www.google.com", { qtype = r.TYPE_A })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body
|
||||
failed to query: bad name
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 13: SRV records or XMPP
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("_xmpp-client._tcp.jabber.org", { qtype = r.TYPE_SRV })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ljson = require "ljson"
|
||||
ngx.say("records: ", ljson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[(?:{"class":1,"name":"_xmpp-client._tcp.jabber.org","port":\d+,"priority":\d+,"target":"[\w.]+\.jabber.org","ttl":\d+,"type":33,"weight":\d+},?)+\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 14: SPF query (with ans)
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("linkedin.com", { qtype = r.TYPE_SPF })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body_like chop
|
||||
^records: \[\{.*?"spf":"v=spf\d+\s[^"]+".*?\}\]$
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 15: SPF query (no ans)
|
||||
--- http_config eval: $::HttpConfig
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua '
|
||||
local resolver = require "resty.dns.resolver"
|
||||
|
||||
local r, err = resolver:new{ nameservers = { "$TEST_NGINX_RESOLVER" } }
|
||||
if not r then
|
||||
ngx.say("failed to instantiate resolver: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local ans, err = r:query("agentzh.org", { qtype = r.TYPE_SPF })
|
||||
if not ans then
|
||||
ngx.say("failed to query: ", err)
|
||||
return
|
||||
end
|
||||
|
||||
local cjson = require "cjson"
|
||||
ngx.say("records: ", cjson.encode(ans))
|
||||
';
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body
|
||||
records: {}
|
||||
--- no_error_log
|
||||
[error]
|
||||
--- timeout: 10
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue