blob: 6a9f8ea60bc40e721bad42c760e851bf6801f021 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
import unittest
from oauthlib.uri_validate import is_absolute_uri
from tests.unittest import TestCase
class UriValidateTest(TestCase):
def test_is_absolute_uri(self):
self.assertIsNotNone(is_absolute_uri('schema://example.com/path'))
self.assertIsNotNone(is_absolute_uri('https://example.com/path'))
self.assertIsNotNone(is_absolute_uri('https://example.com'))
self.assertIsNotNone(is_absolute_uri('https://example.com:443/path'))
self.assertIsNotNone(is_absolute_uri('https://example.com:443/'))
self.assertIsNotNone(is_absolute_uri('https://example.com:443'))
self.assertIsNotNone(is_absolute_uri('http://example.com'))
self.assertIsNotNone(is_absolute_uri('http://example.com/path'))
self.assertIsNotNone(is_absolute_uri('http://example.com:80/path'))
def test_query(self):
self.assertIsNotNone(is_absolute_uri('http://example.com:80/path?foo'))
self.assertIsNotNone(is_absolute_uri('http://example.com:80/path?foo=bar'))
self.assertIsNotNone(is_absolute_uri('http://example.com:80/path?foo=bar&fruit=banana'))
def test_fragment_forbidden(self):
self.assertIsNone(is_absolute_uri('http://example.com:80/path#foo'))
self.assertIsNone(is_absolute_uri('http://example.com:80/path#foo=bar'))
self.assertIsNone(is_absolute_uri('http://example.com:80/path#foo=bar&fruit=banana'))
def test_combined_forbidden(self):
self.assertIsNone(is_absolute_uri('http://example.com:80/path?foo#bar'))
self.assertIsNone(is_absolute_uri('http://example.com:80/path?foo&bar#fruit'))
self.assertIsNone(is_absolute_uri('http://example.com:80/path?foo=1&bar#fruit=banana'))
self.assertIsNone(is_absolute_uri('http://example.com:80/path?foo=1&bar=2#fruit=banana&bar=foo'))
def test_custom_scheme(self):
self.assertIsNotNone(is_absolute_uri('com.example.bundle.id://'))
def test_ipv6_bracket(self):
self.assertIsNotNone(is_absolute_uri('http://[::1]:38432/path'))
self.assertIsNotNone(is_absolute_uri('http://[::1]/path'))
self.assertIsNotNone(is_absolute_uri('http://[fd01:0001::1]/path'))
self.assertIsNotNone(is_absolute_uri('http://[fd01:1::1]/path'))
self.assertIsNotNone(is_absolute_uri('http://[0123:4567:89ab:cdef:0123:4567:89ab:cdef]/path'))
self.assertIsNotNone(is_absolute_uri('http://[0123:4567:89ab:cdef:0123:4567:89ab:cdef]:8080/path'))
@unittest.skip("ipv6 edge-cases not supported")
def test_ipv6_edge_cases(self):
self.assertIsNotNone(is_absolute_uri('http://2001:db8::'))
self.assertIsNotNone(is_absolute_uri('http://::1234:5678'))
self.assertIsNotNone(is_absolute_uri('http://2001:db8::1234:5678'))
self.assertIsNotNone(is_absolute_uri('http://2001:db8:3333:4444:5555:6666:7777:8888'))
self.assertIsNotNone(is_absolute_uri('http://2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF'))
self.assertIsNotNone(is_absolute_uri('http://0123:4567:89ab:cdef:0123:4567:89ab:cdef/path'))
self.assertIsNotNone(is_absolute_uri('http://::'))
self.assertIsNotNone(is_absolute_uri('http://2001:0db8:0001:0000:0000:0ab9:C0A8:0102'))
@unittest.skip("ipv6 dual ipv4 not supported")
def test_ipv6_dual(self):
self.assertIsNotNone(is_absolute_uri('http://2001:db8:3333:4444:5555:6666:1.2.3.4'))
self.assertIsNotNone(is_absolute_uri('http://::11.22.33.44'))
self.assertIsNotNone(is_absolute_uri('http://2001:db8::123.123.123.123'))
self.assertIsNotNone(is_absolute_uri('http://::1234:5678:91.123.4.56'))
self.assertIsNotNone(is_absolute_uri('http://::1234:5678:1.2.3.4'))
self.assertIsNotNone(is_absolute_uri('http://2001:db8::1234:5678:5.6.7.8'))
def test_ipv4(self):
self.assertIsNotNone(is_absolute_uri('http://127.0.0.1:38432/'))
self.assertIsNotNone(is_absolute_uri('http://127.0.0.1:38432/'))
self.assertIsNotNone(is_absolute_uri('http://127.1:38432/'))
def test_failures(self):
self.assertIsNone(is_absolute_uri('http://example.com:notaport/path'))
self.assertIsNone(is_absolute_uri('wrong'))
self.assertIsNone(is_absolute_uri('http://[:1]:38432/path'))
self.assertIsNone(is_absolute_uri('http://[abcd:efgh::1]/'))
def test_recursive_regex(self):
from datetime import datetime
t0 = datetime.now()
is_absolute_uri('http://[::::::::::::::::::::::::::]/path')
t1 = datetime.now()
spent = t1 - t0
self.assertGreater(0.1, spent.total_seconds(), "possible recursive loop detected")
|