summaryrefslogtreecommitdiffstats
path: root/tests/test_httpdownloader.py
blob: 33e08a486ae99b81265f9f96a37ae3b2e5d78fb8 (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
104
105
106
107
108
109
110
111
112
113
114
from twisted.trial import unittest
from twisted.python.failure import Failure

from deluge.httpdownloader import download_file
from deluge.log import setupLogger

from email.utils import formatdate

class DownloadFileTestCase(unittest.TestCase):
    def setUp(self):
        setupLogger("warning", "log_file")

    def tearDown(self):
        pass

    def assertContains(self, filename, contents):
        f = open(filename)
        try:
            self.assertEqual(f.read(), contents)
        except Exception, e:
            self.fail(e)
        finally:
            f.close()
        return filename

    def failIfContains(self, filename, contents):
        f = open(filename)
        try:
            self.failIfEqual(f.read(), contents)
        except Exception, e:
            self.fail(e)
        finally:
            f.close()
        return filename

    def test_download(self):
        d = download_file("http://deluge-torrent.org", "index.html")
        d.addCallback(self.assertEqual, "index.html")
        return d

    def test_download_without_required_cookies(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=cookie"
        d = download_file(url, "none")
        d.addCallback(self.fail)
        d.addErrback(self.assertIsInstance, Failure)
        return d

    def test_download_with_required_cookies(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=cookie"
        cookie = { "cookie" : "password=deluge" }
        d = download_file(url, "monster", headers=cookie)
        d.addCallback(self.assertEqual, "monster")
        d.addCallback(self.assertContains, "COOKIE MONSTER!")
        return d

    def test_download_with_rename(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=rename&filename=renamed"
        d = download_file(url, "original")
        d.addCallback(self.assertEqual, "renamed")
        d.addCallback(self.assertContains, "This file should be called renamed")
        return d

    def test_download_with_rename_fail(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=rename&filename=renamed"
        d = download_file(url, "original")
        d.addCallback(self.assertEqual, "original")
        d.addCallback(self.assertContains, "This file should be called renamed")
        return d

    def test_download_with_rename_sanitised(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=rename&filename=/etc/passwd"
        d = download_file(url, "original")
        d.addCallback(self.assertEqual, "passwd")
        d.addCallback(self.assertContains, "This file should be called /etc/passwd")
        return d

    def test_download_with_rename_prevented(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=rename&filename=spam"
        d = download_file(url, "forced", force_filename=True)
        d.addCallback(self.assertEqual, "forced")
        d.addCallback(self.assertContains, "This file should be called spam")
        return d

    def test_download_with_gzip_encoding(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=gzip&msg=success"
        d = download_file(url, "gzip_encoded")
        d.addCallback(self.assertContains, "success")
        return d

    def test_download_with_gzip_encoding_disabled(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=gzip&msg=fail"
        d = download_file(url, "gzip_encoded", allow_compression=False)
        d.addCallback(self.failIfContains, "fail")
        return d

    def test_page_redirect(self):
        url = "http://deluge-torrent.org/httpdownloader.php?test=redirect"
        d = download_file(url, "none")
        d.addCallback(self.fail)
        d.addErrback(self.assertIsInstance, Failure)
        return d

    def test_page_not_found(self):
        d = download_file("http://does.not.exist", "none")
        d.addCallback(self.fail)
        d.addErrback(self.assertIsInstance, Failure)
        return d

    def test_page_not_modified(self):
        headers = { 'If-Modified-Since' : formatdate(usegmt=True) }
        d = download_file("http://deluge-torrent.org", "index.html", headers=headers)
        d.addCallback(self.fail)
        d.addErrback(self.assertIsInstance, Failure)
        return d