summaryrefslogtreecommitdiffstats
path: root/test/lua/unit/addr.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/lua/unit/addr.lua')
-rw-r--r--test/lua/unit/addr.lua46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/lua/unit/addr.lua b/test/lua/unit/addr.lua
new file mode 100644
index 0000000..6da72d3
--- /dev/null
+++ b/test/lua/unit/addr.lua
@@ -0,0 +1,46 @@
+-- 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) \ No newline at end of file