mirror of
https://github.com/nmap/nmap.git
synced 2025-12-11 10:19:03 +00:00
Consolidate URL tests and add round-trip parsing checks
This commit is contained in:
113
nselib/url.lua
113
nselib/url.lua
@@ -456,66 +456,65 @@ 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=/",
|
||||||
scheme = "https",
|
_res = {
|
||||||
authority = "dummy:pass@example.com:9999",
|
scheme = "https",
|
||||||
userinfo = "dummy:pass",
|
authority = "dummy:pass@example.com:9999",
|
||||||
user = "dummy",
|
userinfo = "dummy:pass",
|
||||||
password = "pass",
|
user = "dummy",
|
||||||
host = "example.com",
|
password = "pass",
|
||||||
port = 9999,
|
host = "example.com",
|
||||||
path = "/example.ext",
|
port = 9999,
|
||||||
query = "k1=v1&k2=v2",
|
path = "/example.ext",
|
||||||
fragment = "fragment=/",
|
query = "k1=v1&k2=v2",
|
||||||
is_folder = false,
|
fragment = "fragment=/",
|
||||||
extension = "ext",
|
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"}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
for _, t in ipairs(test_urls) do
|
||||||
test_suite:add_test(unittest.is_nil(result.params), "params")
|
local result = parse(t._url)
|
||||||
for k, v in pairs(expected) do
|
for _, nv in ipairs(t._nil) do
|
||||||
test_suite:add_test(unittest.equal(result[k], v), k)
|
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
|
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
|
-- 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
|
||||||
|
|||||||
Reference in New Issue
Block a user