aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_utils.py
blob: 5e681eb62b07e78fccba6e140bff0289467fcb03 (plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import urlparse

from netlib import utils, odict, tutils


def test_bidi():
    b = utils.BiDi(a=1, b=2)
    assert b.a == 1
    assert b.get_name(1) == "a"
    assert b.get_name(5) is None
    tutils.raises(AttributeError, getattr, b, "c")
    tutils.raises(ValueError, utils.BiDi, one=1, two=1)


def test_hexdump():
    assert utils.hexdump("one\0" * 10)


def test_cleanBin():
    assert utils.cleanBin("one") == "one"
    assert utils.cleanBin("\00ne") == ".ne"
    assert utils.cleanBin("\nne") == "\nne"
    assert utils.cleanBin("\nne", True) == ".ne"


def test_pretty_size():
    assert utils.pretty_size(100) == "100B"
    assert utils.pretty_size(1024) == "1kB"
    assert utils.pretty_size(1024 + (1024 / 2.0)) == "1.5kB"
    assert utils.pretty_size(1024 * 1024) == "1MB"




def test_parse_url():
    assert not utils.parse_url("")

    u = "http://foo.com:8888/test"
    s, h, po, pa = utils.parse_url(u)
    assert s == "http"
    assert h == "foo.com"
    assert po == 8888
    assert pa == "/test"

    s, h, po, pa = utils.parse_url("http://foo/bar")
    assert s == "http"
    assert h == "foo"
    assert po == 80
    assert pa == "/bar"

    s, h, po, pa = utils.parse_url("http://user:pass@foo/bar")
    assert s == "http"
    assert h == "foo"
    assert po == 80
    assert pa == "/bar"

    s, h, po, pa = utils.parse_url("http://foo")
    assert pa == "/"

    s, h, po, pa = utils.parse_url("https://foo")
    assert po == 443

    assert not utils.parse_url("https://foo:bar")
    assert not utils.parse_url("https://foo:")

    # Invalid IDNA
    assert not utils.parse_url("http://\xfafoo")
    # Invalid PATH
    assert not utils.parse_url("http:/\xc6/localhost:56121")
    # Null byte in host
    assert not utils.parse_url("http://foo\0")
    # Port out of range
    assert not utils.parse_url("http://foo:999999")
    # Invalid IPv6 URL - see http://www.ietf.org/rfc/rfc2732.txt
    assert not utils.parse_url('http://lo[calhost')


def test_unparse_url():
    assert utils.unparse_url("http", "foo.com", 99, "") == "http://foo.com:99"
    assert utils.unparse_url("http", "foo.com", 80, "") == "http://foo.com"
    assert utils.unparse_url("https", "foo.com", 80, "") == "https://foo.com:80"
    assert utils.unparse_url("https", "foo.com", 443, "") == "https://foo.com"


def test_urlencode():
    assert utils.urlencode([('foo', 'bar')])



def test_urldecode():
    s = "one=two&three=four"
    assert len(utils.urldecode(s)) == 2


def test_get_header_tokens():
    h = odict.ODictCaseless()
    assert utils.get_header_tokens(h, "foo") == []
    h["foo"] = ["bar"]
    assert utils.get_header_tokens(h, "foo") == ["bar"]
    h["foo"] = ["bar, voing"]
    assert utils.get_header_tokens(h, "foo") == ["bar", "voing"]
    h["foo"] = ["bar, voing", "oink"]
    assert utils.get_header_tokens(h, "foo") == ["bar", "voing", "oink"]