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:
113
nselib/url.lua
113
nselib/url.lua
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user