Revision 5c583de8
Added by koszko almost 2 years ago
| test/unit/test_patterns.py | ||
|---|---|---|
| 89 | 89 |
match = execute_in_page('returnval(ftp_regex.exec(arguments[0]));',
|
| 90 | 90 |
'@bad.url/') |
| 91 | 91 |
assert match is None |
| 92 |
|
|
| 93 |
def test_deconstruct_url(execute_in_page, patterns_code): |
|
| 94 |
""" |
|
| 95 |
patterns.js contains deconstruct_url() function that handles URL parsing. |
|
| 96 |
Verify it works properly. |
|
| 97 |
""" |
|
| 98 |
execute_in_page(patterns_code, page='https://gotmyowndoma.in') |
|
| 99 |
|
|
| 100 |
deco = execute_in_page('returnval(deconstruct_url(arguments[0]));',
|
|
| 101 |
'https://eXaMpLe.com/a/b?ver=1.2.3#heading2') |
|
| 102 |
assert deco |
|
| 103 |
assert deco['trailing_dash'] == False |
|
| 104 |
assert deco['proto'] == 'https' |
|
| 105 |
assert deco['domain'] == ['example', 'com'] |
|
| 106 |
assert deco['path'] == ['a', 'b'] |
|
| 107 |
|
|
| 108 |
deco = execute_in_page('returnval(deconstruct_url(arguments[0]));',
|
|
| 109 |
'http://**.example.com/') |
|
| 110 |
assert deco |
|
| 111 |
assert deco['trailing_dash'] == True |
|
| 112 |
assert deco['proto'] == 'http' |
|
| 113 |
assert deco['domain'] == ['**', 'example', 'com'] |
|
| 114 |
assert deco['path'] == [] |
|
| 115 |
|
|
| 116 |
deco = execute_in_page('returnval(deconstruct_url(arguments[0]));',
|
|
| 117 |
'ftp://user@ftp.example.com/all///passwords.txt/') |
|
| 118 |
assert deco |
|
| 119 |
assert deco['trailing_dash'] == True |
|
| 120 |
assert deco['proto'] == 'ftp' |
|
| 121 |
assert deco['domain'] == ['ftp', 'example', 'com'] |
|
| 122 |
assert deco['path'] == ['all', 'passwords.txt'] |
|
| 123 |
|
|
| 124 |
deco = execute_in_page('returnval(deconstruct_url(arguments[0]));',
|
|
| 125 |
'ftp://mirror.edu.pl.eu.org') |
|
| 126 |
assert deco |
|
| 127 |
assert deco['trailing_dash'] == False |
|
| 128 |
assert deco['proto'] == 'ftp' |
|
| 129 |
assert deco['domain'] == ['mirror', 'edu', 'pl', 'eu', 'org'] |
|
| 130 |
assert deco['path'] == [] |
|
| 131 |
|
|
| 132 |
deco = execute_in_page('returnval(deconstruct_url(arguments[0]));',
|
|
| 133 |
'file:///mnt/parabola_chroot///etc/passwd') |
|
| 134 |
assert deco |
|
| 135 |
assert deco['trailing_dash'] == False |
|
| 136 |
assert deco['proto'] == 'file' |
|
| 137 |
assert deco['path'] == ['mnt', 'parabola_chroot', 'etc', 'passwd'] |
|
| 138 |
|
|
| 139 |
for bad_url in [ |
|
| 140 |
'://bad-url.missing/protocol', |
|
| 141 |
'http:/example.com/a/b', |
|
| 142 |
'unknown://example.com/a/b', |
|
| 143 |
'idontfancypineapple', |
|
| 144 |
'ftp://@example.org/', |
|
| 145 |
'https:///some/path/', |
|
| 146 |
'file://non-absolute/path' |
|
| 147 |
]: |
|
| 148 |
with pytest.raises(Exception, match=r'Error in injected script'): |
|
| 149 |
deco = execute_in_page('returnval(deconstruct_url(arguments[0]));',
|
|
| 150 |
bad_url) |
|
| 151 |
|
|
| 152 |
# at some point we might also consider testing url deconstruction with |
|
| 153 |
# length limits... |
|
Also available in: Unified diff
start implementing more efficient querying of URL patterns