# -*- coding: utf-8 -*- from __future__ import generators import sys import logging import unittest from urllib import addinfourl try: from contextlib import contextmanager except ImportError: from testunits.utils import fallback_contextmanager as contextmanager try: from cStringIO import StringIO except ImportError: from StringIO import StringIO from billiard.utils.functional import wraps from anyjson import serialize from celery.task import http from testunits.utils import eager_tasks, execute_context @contextmanager def mock_urlopen(response_method): import urllib2 urlopen = urllib2.urlopen @wraps(urlopen) def _mocked(url, *args, **kwargs): response_data, headers = response_method(url) return addinfourl(StringIO(response_data), headers, url) urllib2.urlopen = _mocked yield True urllib2.urlopen = urlopen def _response(res): return lambda r: (res, []) def success_response(value): return _response(serialize({"status": "success", "retval": value})) def fail_response(reason): return _response(serialize({"status": "failure", "reason": reason})) def unknown_response(): return _response(serialize({"status": "u.u.u.u", "retval": True})) class TestEncodings(unittest.TestCase): def test_utf8dict(self): d = {u"følelser ær langé": u"ærbadægzaå寨Å", "foobar".encode("utf-8"): "xuzzybaz".encode("utf-8")} for key, value in http.utf8dict(d.items()).items(): self.assertTrue(isinstance(key, str)) self.assertTrue(isinstance(value, str)) class TestMutableURL(unittest.TestCase): def test_url_query(self): url = http.MutableURL("http://example.com?x=10&y=20&z=Foo") self.assertEquals(url.query.get("x"), "10") self.assertEquals(url.query.get("y"), "20") self.assertEquals(url.query.get("z"), "Foo") url.query["name"] = "George" url = http.MutableURL(str(url)) self.assertEquals(url.query.get("x"), "10") self.assertEquals(url.query.get("y"), "20") self.assertEquals(url.query.get("z"), "Foo") self.assertEquals(url.query.get("name"), "George") def test_url_keeps_everything(self): url = "https://e.com:808/foo/bar#zeta?x=10&y=20" url = http.MutableURL(url) self.assertEquals(str(url).split("?")[0], "https://e.com:808/foo/bar#zeta") def test___repr__(self): url = http.MutableURL("http://e.com/foo/bar") self.assertTrue(repr(url).startswith("