mirror of https://github.com/rspamd/rspamd.git
Rapid spam filtering system
https://rspamd.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
-- inet addr tests
|
|
|
|
context("Inet addr check functions", function()
|
|
local ffi = require("ffi")
|
|
|
|
ffi.cdef[[
|
|
typedef struct rspamd_inet_addr_s rspamd_inet_addr_t;
|
|
bool rspamd_parse_inet_address (rspamd_inet_addr_t **target,
|
|
const char *src, size_t len);
|
|
void rspamd_inet_address_free (rspamd_inet_addr_t *addr);
|
|
]]
|
|
|
|
local cases = {
|
|
{'192.168.1.1', true},
|
|
{'2a01:4f8:190:43b5::99', true},
|
|
{'256.1.1.1', false},
|
|
{'/tmp/socket', true},
|
|
{'./socket', true},
|
|
{'[fe80::f919:8b26:ff93:3092%5]', true},
|
|
{'[fe80::f919:8b26:ff93:3092]', true},
|
|
{'IPv6:::1', true},
|
|
{'IPv6:[::1]', true},
|
|
{'IPv6[:::1]', false},
|
|
{'[::]', true},
|
|
{'[1::]', true},
|
|
{'[000:01:02:003:004:5:6:007]', true}, -- leading zeros
|
|
{'[A:b:c:DE:fF:0:1:aC]', true}, -- mixed case
|
|
{'[::192.168.0.1]', true}, -- embedded ipv4
|
|
{'[1:2:192.168.0.1:5:6]', false}, -- poor octets
|
|
{'[::ffff:192.1.2]', false}, -- ipv4 without last octet (maybe should be true?)
|
|
{'[0:0::0:0:8]', true}, -- bogus zeros
|
|
{'[::192.168.0.0.1]', false}, -- invalid mapping
|
|
}
|
|
|
|
for i,c in ipairs(cases) do
|
|
test("Create inet addr from string " .. c[1] .. '; expect ' .. tostring(c[2]), function()
|
|
local ip = ffi.new("rspamd_inet_addr_t* [1]");
|
|
local res = ffi.C.rspamd_parse_inet_address(ip, c[1], #c[1])
|
|
assert_equal(res, c[2], "Expect " .. tostring(c[2]) .. " while parsing " .. c[1])
|
|
if res then
|
|
ffi.C.rspamd_inet_address_free(ip[0])
|
|
end
|
|
end)
|
|
|
|
end
|
|
end)
|