X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/907402f64301f9f87555afa5c305c40504da7145..2cf5509c65d0c3657968a2698e1f4132ba5b6c43:/tests/test_util.py diff --git a/tests/test_util.py b/tests/test_util.py index 322d11b..b8efea9 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,19 +1,24 @@ -import BaseHTTPServer from collections import namedtuple import contextlib import functools import socket -import SocketServer import threading from twitter.util import find_links, follow_redirects, expand_line, parse_host_list +try: + import http.server as BaseHTTPServer + import socketserver as SocketServer +except ImportError: + import BaseHTTPServer + import SocketServer + def test_find_links(): assert find_links("nix") == ("nix", []) assert find_links("http://abc") == ("%s", ["http://abc"]) assert find_links("t http://abc") == ("t %s", ["http://abc"]) assert find_links("http://abc t") == ("%s t", ["http://abc"]) - assert find_links("1 http://a 2 http://b 3") == ("1 %s 2 %s 3", + assert find_links("1 http://a 2 http://b 3") == ("1 %s 2 %s 3", ["http://a", "http://b"]) assert find_links("%") == ("%%", []) assert find_links("(http://abc)") == ("(%s)", ["http://abc"]) @@ -25,20 +30,20 @@ Response = namedtuple('Response', 'path code headers') def start_server(*resp): """HTTP server replying with the given responses to the expected requests.""" - def url(port, path): + def url(port, path): return 'http://%s:%s%s' % (socket.gethostname(), port, path) - + responses = list(reversed(resp)) - + class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_HEAD(self): response = responses.pop() assert response.path == self.path self.send_response(response.code) - for header, value in response.headers.iteritems(): + for header, value in list(response.headers.items()): self.send_header(header, value) self.end_headers() - + httpd = SocketServer.TCPServer(("", 0), MyHandler) t = threading.Thread(target=httpd.serve_forever) t.setDaemon(True) @@ -46,7 +51,7 @@ def start_server(*resp): port = httpd.server_address[1] yield functools.partial(url, port) httpd.shutdown() - + def test_follow_redirects_direct_link(): link = "/resource" with start_server(Response(link, 200, {})) as url: @@ -56,10 +61,10 @@ def test_follow_redirects_redirected_link(): redirected = "/redirected" link = "/resource" with start_server( - Response(link, 301, {"Location": redirected}), + Response(link, 301, {"Location": redirected}), Response(redirected, 200, {})) as url: assert url(redirected) == follow_redirects(url(link)) - + def test_follow_redirects_unavailable(): link = "/resource" with start_server(Response(link, 404, {})) as url: @@ -69,7 +74,7 @@ def test_follow_redirects_link_to_last_available(): unavailable = "/unavailable" link = "/resource" with start_server( - Response(link, 301, {"Location": unavailable}), + Response(link, 301, {"Location": unavailable}), Response(unavailable, 404, {})) as url: assert url(unavailable) == follow_redirects(url(link)) @@ -77,7 +82,7 @@ def test_follow_redirects_link_to_last_available(): def test_follow_redirects_no_where(): link = "http://links.nowhere/" assert link == follow_redirects(link) - + def test_follow_redirects_link_to_nowhere(): unavailable = "http://links.nowhere/" link = "/resource" @@ -96,7 +101,7 @@ def test_follow_redirects_filtered_by_site_after_redirect(): redirected = "/redirected" filtered = "http://dont-follow/" with start_server( - Response(link, 301, {"Location": redirected}), + Response(link, 301, {"Location": redirected}), Response(redirected, 301, {"Location": filtered})) as url: hosts = [socket.gethostname()] assert filtered == follow_redirects(url(link), hosts) @@ -105,7 +110,7 @@ def test_follow_redirects_filtered_by_site_allowed(): redirected = "/redirected" link = "/resource" with start_server( - Response(link, 301, {"Location": redirected}), + Response(link, 301, {"Location": redirected}), Response(redirected, 200, {})) as url: hosts = [socket.gethostname()] assert url(redirected) == follow_redirects(url(link), hosts) @@ -114,7 +119,7 @@ def test_expand_line(): redirected = "/redirected" link = "/resource" with start_server( - Response(link, 301, {"Location": redirected}), + Response(link, 301, {"Location": redirected}), Response(redirected, 200, {})) as url: fmt = "before %s after" line = fmt % url(link)