From bcb636dda4715f0e31e676535b37ad702d843418 Mon Sep 17 00:00:00 2001 From: Damien Churchill Date: Wed, 20 Apr 2011 18:32:55 +0100 Subject: [PATCH 1/2] improve the core tests to use a built in webserver --- deluge/tests/common.py | 5 ++ deluge/tests/test_core.py | 61 ++++++++++++++++-- deluge/tests/test_httpdownloader.py | 6 +- .../ubuntu-9.04-desktop-i386.iso.torrent | Bin 0 -> 28184 bytes 4 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 deluge/tests/ubuntu-9.04-desktop-i386.iso.torrent diff --git a/deluge/tests/common.py b/deluge/tests/common.py index 4c9f1769e..84722c560 100644 --- a/deluge/tests/common.py +++ b/deluge/tests/common.py @@ -1,3 +1,5 @@ +import os + import tempfile import deluge.configmanager @@ -10,6 +12,9 @@ def set_tmp_config_dir(): deluge.configmanager.set_config_dir(config_directory) return config_directory +def rpath(*args): + return os.path.join(os.path.dirname(__file__), *args) + import gettext import locale import pkg_resources diff --git a/deluge/tests/test_core.py b/deluge/tests/test_core.py index f56a95772..57991681c 100644 --- a/deluge/tests/test_core.py +++ b/deluge/tests/test_core.py @@ -1,5 +1,10 @@ from twisted.trial import unittest +from twisted.internet import reactor from twisted.python.failure import Failure +from twisted.web.http import FORBIDDEN +from twisted.web.resource import Resource +from twisted.web.server import Site +from twisted.web.static import File try: from hashlib import sha1 as sha @@ -8,19 +13,62 @@ except ImportError: import os import common +rpath = common.rpath from deluge.core.rpcserver import RPCServer from deluge.core.core import Core +from deluge.ui.web.common import compress import deluge.component as component import deluge.error +class TestCookieResource(Resource): + + def render(self, request): + if request.getCookie("password") != "deluge": + request.setResponseCode(FORBIDDEN) + return + + request.setHeader("Content-Type", "application/x-bittorrent") + return open(rpath("ubuntu-9.04-desktop-i386.iso.torrent")).read() + +class TestPartialDownload(Resource): + + def render(self, request): + data = open(rpath("ubuntu-9.04-desktop-i386.iso.torrent")).read() + request.setHeader("Content-Type", len(data)) + request.setHeader("Content-Type", "application/x-bittorrent") + if request.requestHeaders.hasHeader("accept-encoding"): + return compress(data, request) + return data + +class TestRedirectResource(Resource): + + def render(self, request): + request.redirect("/ubuntu-9.04-desktop-i386.iso.torrent") + return "" + +class TopLevelResource(Resource): + + addSlash = True + + def __init__(self): + Resource.__init__(self) + self.putChild("cookie", TestCookieResource()) + self.putChild("partial", TestPartialDownload()) + self.putChild("redirect", TestRedirectResource()) + self.putChild("ubuntu-9.04-desktop-i386.iso.torrent", File(common.rpath("ubuntu-9.04-desktop-i386.iso.torrent"))) + class CoreTestCase(unittest.TestCase): def setUp(self): common.set_tmp_config_dir() self.rpcserver = RPCServer(listen=False) self.core = Core() - d = component.start() - return d + return component.start().addCallback(self.startWebserver) + + def startWebserver(self, result): + self.website = Site(TopLevelResource()) + self.webserver = reactor.listenTCP(51242, self.website) + return result def tearDown(self): @@ -28,6 +76,7 @@ class CoreTestCase(unittest.TestCase): component._ComponentRegistry.components = {} del self.rpcserver del self.core + return self.webserver.stopListening() return component.shutdown().addCallback(on_shutdown) @@ -44,7 +93,7 @@ class CoreTestCase(unittest.TestCase): self.assertEquals(torrent_id, info_hash) def test_add_torrent_url(self): - url = "http://deluge-torrent.org/ubuntu-9.04-desktop-i386.iso.torrent" + url = "http://localhost:51242/ubuntu-9.04-desktop-i386.iso.torrent" options = {} info_hash = "60d5d82328b4547511fdeac9bf4d0112daa0ce00" @@ -53,7 +102,7 @@ class CoreTestCase(unittest.TestCase): return d def test_add_torrent_url_with_cookie(self): - url = "http://deluge-torrent.org/test_torrent.php?test=cookie" + url = "http://localhost:51242/cookie" options = {} headers = { "Cookie" : "password=deluge" } info_hash = "60d5d82328b4547511fdeac9bf4d0112daa0ce00" @@ -67,7 +116,7 @@ class CoreTestCase(unittest.TestCase): return d def test_add_torrent_url_with_redirect(self): - url = "http://deluge-torrent.org/test_torrent.php?test=redirect" + url = "http://localhost:51242/redirect" options = {} info_hash = "60d5d82328b4547511fdeac9bf4d0112daa0ce00" @@ -77,7 +126,7 @@ class CoreTestCase(unittest.TestCase): return d def test_add_torrent_url_with_partial_download(self): - url = "http://deluge-torrent.org/test_torrent.php?test=partial" + url = "http://localhost:51242/partial" options = {} info_hash = "60d5d82328b4547511fdeac9bf4d0112daa0ce00" diff --git a/deluge/tests/test_httpdownloader.py b/deluge/tests/test_httpdownloader.py index edcbeccdb..7715cc6bf 100644 --- a/deluge/tests/test_httpdownloader.py +++ b/deluge/tests/test_httpdownloader.py @@ -13,8 +13,8 @@ from deluge.ui.web.common import compress from email.utils import formatdate -def rpath(*paths): - return os.path.join(os.path.dirname(__file__), *paths) +import common +rpath = common.rpath class TestRedirectResource(Resource): @@ -26,7 +26,7 @@ class TestRenameResource(Resource): def render(self, request): filename = request.args.get("filename", ["renamed_file"])[0] request.setHeader("Content-Type", "text/plain") - request.setHeader("Content-Disposition", "attachment; filename=" + + request.setHeader("Content-Disposition", "attachment; filename=" filename) return "This file should be called " + filename diff --git a/deluge/tests/ubuntu-9.04-desktop-i386.iso.torrent b/deluge/tests/ubuntu-9.04-desktop-i386.iso.torrent new file mode 100644 index 0000000000000000000000000000000000000000..b55c9aec1b427fe6477a1cccc53e332edf057c8c GIT binary patch literal 28184 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

RKKsLgyAm?x)H!3p@FL3iw zLds`&Z`gCblj>V-Pn5`sq-%4X(zad)Im5wfS#n@~^g@sC9d<4WT9su?3 zQ|H^108PSB$J_9?8|yXx$66j<+ZVBBS+8`bn9Qv^d3|!G7j=`62@X8DjNOeV6jkAh3eTzaGsA-{?APk#KC(0ksHn``5~=>l0H?m9 zl9}_!>%2IBC>C4rWU7XMs#}ovFhRzO zEB%LW)6X2_o@|j@B01IJnC&Z2EF_d%J~oM^o%7$IHgM|$EoViOzHdB>tgAo`8~QVe zbX8R0TYgvK8CWj3?$7&D7|Aqgx-#hp4R>FM7Gfe6GhH}CBpVWgnuA)l#&ZutTk8IC zyDTy#Uiz>g)BIl@MHkHnyrdV}PDmlGPxG#eVY%AFBM^U%b?R;ddiNI~_Go4P_fWB# z{po%Y@L1iDSK7VEAeb|mG_T$gzjgET)$BO~>#4?xHyw2nA3nS#S>^O3fWlitjUU{( zb~6Z&ct+NMD#cH!;ZWCZ*E*Iax9el=_@cZWLpy&mF17DB#TPe_v*aZlIjLch6r%?e zc7hEGf$>@GV=@Xzg{$B0tl~0yB{R_8D?^##`6&MVfy#&9*2saobO5i63*3_CqVlasX zRPGWf(y%e#@c|!%7z0+EHi23vW4eg#V{r83C|F(Mwh`w$n%6degpO4y+*$j1dreZI zZgEsrIZ4rat2iwLC3?MeddJ7;LPn6Xz%ml#gUS&dY|`vTv}6xndJRjz0SBcxF~q=7 zI%hH?U0cCu;*0O2ek}#jC9w1WXWp@|h)|;Q=DybrE?-ZmQ;wLt3ZX_?n8gA|hWQUV z%XfB9W%g3~e89)?j;49dsZ{GWzj9zsIxJ4Q8p4d;TcO)KZ;#&;8S2EQ`LxL=XSAE# z&ZE@0ho-KKX zlPUz^BseDVRVCJvv0o2Pz>Bv7|3ayvk$P!6AEc$m3xPq1G1Y^i(U0{BsuFT=TXXTS z)lchyh19F!N8lOme5W%Ht7#|Y41y`$icKer1+ZZkI-&y)MY6HYOiQnXxQ=#SH#LH? znze!=zh$?UPr6E2ATgb*cF0xmnA^V)z=Gx*Zo~6*Q|ZW< zgVFH!d08yw0y@qsNg4Wov_abYH4`U=LpR}>51eTkt{11E*v)#I9^9ln&WUZpyI_k= zS|!mYKqL{x-!ktIZG03}1FY;LwP|)%7k~__IUm(D@)LF0 zYS(`EJ-y3}o~Fz(df5dEvv3<)5#R5MuPV7xlG(d-zFRa7nGQpG~KzoO_9sUP-yiZfEQ@ygIAccNY>$Dz+*!E}I(OF+XASl7j>G6cGG(G~eltkxVN#iO6%Z zq|%&91H3Gc>^z%X+E z`1MNxxrAf{C1W1)Rn5uj^CD>rArme`CkCK~VRn{^I$i;21h&PK>|NU@j_Mb$3yuyj z+DdH#7Ns38n2DJ%1^E1OO`H&Z4JbtirPP*G^etrZ9*iWuRrDjAB{kYBerZ`Cw>*nS8Qc67Oa1sIb~zZhdyywLi+?0jJCE2$zI z$8}7Fy6a4RleNC(xv>{vQ!Bv7C6;U@qnUK)_dc%)m~B@W>`IF9-Oxq6_6SD4A19js Px>;B+x)sF9PR3 Date: Wed, 20 Apr 2011 18:37:39 +0100 Subject: [PATCH 2/2] fix bug due to vim stripping regex being wrong --- deluge/tests/test_httpdownloader.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/deluge/tests/test_httpdownloader.py b/deluge/tests/test_httpdownloader.py index 7715cc6bf..4dbed91e2 100644 --- a/deluge/tests/test_httpdownloader.py +++ b/deluge/tests/test_httpdownloader.py @@ -17,7 +17,7 @@ import common rpath = common.rpath class TestRedirectResource(Resource): - + def render(self, request): request.redirect("http://localhost:51242/") @@ -26,7 +26,7 @@ class TestRenameResource(Resource): def render(self, request): filename = request.args.get("filename", ["renamed_file"])[0] request.setHeader("Content-Type", "text/plain") - request.setHeader("Content-Disposition", "attachment; filename=" + request.setHeader("Content-Disposition", "attachment; filename=" + filename) return "This file should be called " + filename @@ -107,14 +107,14 @@ class DownloadFileTestCase(unittest.TestCase): return d def test_download_without_required_cookies(self): - url = "http://localhost:51242/cookie" + url = "http://localhost:51242/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://localhost:51242/cookie" + url = "http://localhost:51242/cookie" cookie = { "cookie" : "password=deluge" } d = download_file(url, "monster", headers=cookie) d.addCallback(self.assertEqual, "monster") @@ -150,13 +150,13 @@ class DownloadFileTestCase(unittest.TestCase): return d def test_download_with_gzip_encoding(self): - url = "http://localhost:51242/gzip?msg=success" + url = "http://localhost:51242/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://localhost:51242/gzip?msg=fail" + url = "http://localhost:51242/gzip?msg=fail" d = download_file(url, "gzip_encoded", allow_compression=False) d.addCallback(self.failIfContains, "fail") return d