1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-12 10:49:02 +00:00

Consolidate URL tests and add round-trip parsing checks

This commit is contained in:
dmiller
2023-05-30 21:15:03 +00:00
parent b9263f056a
commit 6bd98c22ea

View File

@@ -456,8 +456,9 @@ end
test_suite = unittest.TestSuite:new() test_suite = unittest.TestSuite:new()
local result = parse("https://dummy:pass@example.com:9999/example.ext?k1=v1&k2=v2#fragment=/") local test_urls = {
local expected = { { _url = "https://dummy:pass@example.com:9999/example.ext?k1=v1&k2=v2#fragment=/",
_res = {
scheme = "https", scheme = "https",
authority = "dummy:pass@example.com:9999", authority = "dummy:pass@example.com:9999",
userinfo = "dummy:pass", userinfo = "dummy:pass",
@@ -470,15 +471,11 @@ local expected = {
fragment = "fragment=/", fragment = "fragment=/",
is_folder = false, is_folder = false,
extension = "ext", extension = "ext",
} },
_nil = {"params"}
test_suite:add_test(unittest.is_nil(result.params), "params") },
for k, v in pairs(expected) do { _url = "http://dummy@example.com:1234/example.ext/another.php;k1=v1?k2=v2#k3=v3",
test_suite:add_test(unittest.equal(result[k], v), k) _res = {
end
local result = parse("http://dummy@example.com:1234/example.ext/another.php;k1=v1?k2=v2#k3=v3")
local expected = {
scheme = "http", scheme = "http",
authority = "dummy@example.com:1234", authority = "dummy@example.com:1234",
userinfo = "dummy", userinfo = "dummy",
@@ -491,31 +488,33 @@ local expected = {
fragment = "k3=v3", fragment = "k3=v3",
is_folder = false, is_folder = false,
extension = "php", extension = "php",
} },
_nil = {"password"}
test_suite:add_test(unittest.is_nil(result.password), "password") },
for k, v in pairs(expected) do { _url = "//example/example.folder/?k1=v1&k2=v2#k3/v3.bar",
test_suite:add_test(unittest.equal(result[k], v), k) _res = {
end
local result = parse("//example/example.folder/?k1=v1&k2=v2#k3/v3.bar")
local expected = {
authority = "example", authority = "example",
host = "example", host = "example",
path = "/example.folder/", path = "/example.folder/",
query = "k1=v1&k2=v2", query = "k1=v1&k2=v2",
fragment = "k3/v3.bar", fragment = "k3/v3.bar",
is_folder = true, is_folder = true,
},
_nil = {"scheme", "userinfo", "port", "params", "extension"}
},
} }
for _, t in ipairs(test_urls) do
test_suite:add_test(unittest.is_nil(result.scheme), "scheme") local result = parse(t._url)
test_suite:add_test(unittest.is_nil(result.userinfo), "userinfo") for _, nv in ipairs(t._nil) do
test_suite:add_test(unittest.is_nil(result.port), "port") test_suite:add_test(unittest.is_nil(result[nv]), nv)
test_suite:add_test(unittest.is_nil(result.params), "params") end
test_suite:add_test(unittest.is_nil(result.extension), "extension") for k, v in pairs(t._res) do
for k, v in pairs(expected) do
test_suite:add_test(unittest.equal(result[k], v), k) test_suite:add_test(unittest.equal(result[k], v), k)
end end
test_suite:add_test(unittest.equal(build(t._res), t._url), "build test url")
test_suite:add_test(unittest.equal(build(result), t._url), "parse/build round trip")
end
-- path merging tests for compliance with RFC 3986, section 5.2 -- path merging tests for compliance with RFC 3986, section 5.2
-- https://tools.ietf.org/html/rfc3986#section-5.2 -- https://tools.ietf.org/html/rfc3986#section-5.2