1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-09 22:21:29 +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,66 +456,65 @@ end
test_suite = unittest.TestSuite:new()
local result = parse("https://dummy:pass@example.com:9999/example.ext?k1=v1&k2=v2#fragment=/")
local expected = {
scheme = "https",
authority = "dummy:pass@example.com:9999",
userinfo = "dummy:pass",
user = "dummy",
password = "pass",
host = "example.com",
port = 9999,
path = "/example.ext",
query = "k1=v1&k2=v2",
fragment = "fragment=/",
is_folder = false,
extension = "ext",
local test_urls = {
{ _url = "https://dummy:pass@example.com:9999/example.ext?k1=v1&k2=v2#fragment=/",
_res = {
scheme = "https",
authority = "dummy:pass@example.com:9999",
userinfo = "dummy:pass",
user = "dummy",
password = "pass",
host = "example.com",
port = 9999,
path = "/example.ext",
query = "k1=v1&k2=v2",
fragment = "fragment=/",
is_folder = false,
extension = "ext",
},
_nil = {"params"}
},
{ _url = "http://dummy@example.com:1234/example.ext/another.php;k1=v1?k2=v2#k3=v3",
_res = {
scheme = "http",
authority = "dummy@example.com:1234",
userinfo = "dummy",
user = "dummy",
host = "example.com",
port = 1234,
path = "/example.ext/another.php",
params = "k1=v1",
query = "k2=v2",
fragment = "k3=v3",
is_folder = false,
extension = "php",
},
_nil = {"password"}
},
{ _url = "//example/example.folder/?k1=v1&k2=v2#k3/v3.bar",
_res = {
authority = "example",
host = "example",
path = "/example.folder/",
query = "k1=v1&k2=v2",
fragment = "k3/v3.bar",
is_folder = true,
},
_nil = {"scheme", "userinfo", "port", "params", "extension"}
},
}
test_suite:add_test(unittest.is_nil(result.params), "params")
for k, v in pairs(expected) do
test_suite:add_test(unittest.equal(result[k], v), k)
for _, t in ipairs(test_urls) do
local result = parse(t._url)
for _, nv in ipairs(t._nil) do
test_suite:add_test(unittest.is_nil(result[nv]), nv)
end
for k, v in pairs(t._res) do
test_suite:add_test(unittest.equal(result[k], v), k)
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
local result = parse("http://dummy@example.com:1234/example.ext/another.php;k1=v1?k2=v2#k3=v3")
local expected = {
scheme = "http",
authority = "dummy@example.com:1234",
userinfo = "dummy",
user = "dummy",
host = "example.com",
port = 1234,
path = "/example.ext/another.php",
params = "k1=v1",
query = "k2=v2",
fragment = "k3=v3",
is_folder = false,
extension = "php",
}
test_suite:add_test(unittest.is_nil(result.password), "password")
for k, v in pairs(expected) do
test_suite:add_test(unittest.equal(result[k], v), k)
end
local result = parse("//example/example.folder/?k1=v1&k2=v2#k3/v3.bar")
local expected = {
authority = "example",
host = "example",
path = "/example.folder/",
query = "k1=v1&k2=v2",
fragment = "k3/v3.bar",
is_folder = true,
}
test_suite:add_test(unittest.is_nil(result.scheme), "scheme")
test_suite:add_test(unittest.is_nil(result.userinfo), "userinfo")
test_suite:add_test(unittest.is_nil(result.port), "port")
test_suite:add_test(unittest.is_nil(result.params), "params")
test_suite:add_test(unittest.is_nil(result.extension), "extension")
for k, v in pairs(expected) do
test_suite:add_test(unittest.equal(result[k], v), k)
end
-- path merging tests for compliance with RFC 3986, section 5.2
-- https://tools.ietf.org/html/rfc3986#section-5.2