aboutsummaryrefslogtreecommitdiffstats
path: root/test/netlib/http
diff options
context:
space:
mode:
Diffstat (limited to 'test/netlib/http')
-rw-r--r--test/netlib/http/test_cookies.py68
-rw-r--r--test/netlib/http/test_headers.py5
-rw-r--r--test/netlib/http/test_message.py10
-rw-r--r--test/netlib/http/test_request.py10
-rw-r--r--test/netlib/http/test_response.py20
5 files changed, 111 insertions, 2 deletions
diff --git a/test/netlib/http/test_cookies.py b/test/netlib/http/test_cookies.py
index 17e21b94..efd8ba80 100644
--- a/test/netlib/http/test_cookies.py
+++ b/test/netlib/http/test_cookies.py
@@ -1,6 +1,10 @@
+import time
+
from netlib.http import cookies
from netlib.tutils import raises
+import mock
+
def test_read_token():
tokens = [
@@ -247,6 +251,22 @@ def test_refresh_cookie():
assert cookies.refresh_set_cookie_header(c, 0)
+@mock.patch('time.time')
+def test_get_expiration_ts(*args):
+ # Freeze time
+ now_ts = 17
+ time.time.return_value = now_ts
+
+ CA = cookies.CookieAttrs
+ F = cookies.get_expiration_ts
+
+ assert F(CA([("Expires", "Thu, 01-Jan-1970 00:00:00 GMT")])) == 0
+ assert F(CA([("Expires", "Mon, 24-Aug-2037 00:00:00 GMT")])) == 2134684800
+
+ assert F(CA([("Max-Age", "0")])) == now_ts
+ assert F(CA([("Max-Age", "31")])) == now_ts + 31
+
+
def test_is_expired():
CA = cookies.CookieAttrs
@@ -260,9 +280,53 @@ def test_is_expired():
# or both
assert cookies.is_expired(CA([("Expires", "Thu, 01-Jan-1970 00:00:00 GMT"), ("Max-Age", "0")]))
- assert not cookies.is_expired(CA([("Expires", "Thu, 24-Aug-2063 00:00:00 GMT")]))
+ assert not cookies.is_expired(CA([("Expires", "Mon, 24-Aug-2037 00:00:00 GMT")]))
assert not cookies.is_expired(CA([("Max-Age", "1")]))
- assert not cookies.is_expired(CA([("Expires", "Thu, 15-Jul-2068 00:00:00 GMT"), ("Max-Age", "1")]))
+ assert not cookies.is_expired(CA([("Expires", "Wed, 15-Jul-2037 00:00:00 GMT"), ("Max-Age", "1")]))
assert not cookies.is_expired(CA([("Max-Age", "nan")]))
assert not cookies.is_expired(CA([("Expires", "false")]))
+
+
+def test_group_cookies():
+ CA = cookies.CookieAttrs
+ groups = [
+ [
+ "one=uno; foo=bar; foo=baz",
+ [
+ ('one', 'uno', CA([])),
+ ('foo', 'bar', CA([])),
+ ('foo', 'baz', CA([]))
+ ]
+ ],
+ [
+ "one=uno; Path=/; foo=bar; Max-Age=0; foo=baz; expires=24-08-1993",
+ [
+ ('one', 'uno', CA([('Path', '/')])),
+ ('foo', 'bar', CA([('Max-Age', '0')])),
+ ('foo', 'baz', CA([('expires', '24-08-1993')]))
+ ]
+ ],
+ [
+ "one=uno;",
+ [
+ ('one', 'uno', CA([]))
+ ]
+ ],
+ [
+ "one=uno; Path=/; Max-Age=0; Expires=24-08-1993",
+ [
+ ('one', 'uno', CA([('Path', '/'), ('Max-Age', '0'), ('Expires', '24-08-1993')]))
+ ]
+ ],
+ [
+ "path=val; Path=/",
+ [
+ ('path', 'val', CA([('Path', '/')]))
+ ]
+ ]
+ ]
+
+ for c, expected in groups:
+ observed = cookies.group_cookies(cookies.parse_cookie_header(c))
+ assert observed == expected
diff --git a/test/netlib/http/test_headers.py b/test/netlib/http/test_headers.py
index 51537310..ad2bc548 100644
--- a/test/netlib/http/test_headers.py
+++ b/test/netlib/http/test_headers.py
@@ -75,6 +75,11 @@ class TestHeaders(object):
assert replacements == 0
assert headers["Host"] == "example.com"
+ def test_replace_with_count(self):
+ headers = Headers(Host="foobarfoo.com", Accept="foo/bar")
+ replacements = headers.replace("foo", "bar", count=1)
+ assert replacements == 1
+
def test_parse_content_type():
p = parse_content_type
diff --git a/test/netlib/http/test_message.py b/test/netlib/http/test_message.py
index 12e4706c..74272309 100644
--- a/test/netlib/http/test_message.py
+++ b/test/netlib/http/test_message.py
@@ -99,6 +99,16 @@ class TestMessage(object):
def test_http_version(self):
_test_decoded_attr(tresp(), "http_version")
+ def test_replace(self):
+ r = tresp()
+ r.content = b"foofootoo"
+ r.replace(b"foo", "gg")
+ assert r.content == b"ggggtoo"
+
+ r.content = b"foofootoo"
+ r.replace(b"foo", "gg", count=1)
+ assert r.content == b"ggfootoo"
+
class TestMessageContentEncoding(object):
def test_simple(self):
diff --git a/test/netlib/http/test_request.py b/test/netlib/http/test_request.py
index f3cd8b71..9baabaa6 100644
--- a/test/netlib/http/test_request.py
+++ b/test/netlib/http/test_request.py
@@ -26,6 +26,16 @@ class TestRequestCore(object):
request.host = None
assert repr(request) == "Request(GET /path)"
+ def replace(self):
+ r = treq()
+ r.path = b"foobarfoo"
+ r.replace(b"foo", "bar")
+ assert r.path == b"barbarbar"
+
+ r.path = b"foobarfoo"
+ r.replace(b"foo", "bar", count=1)
+ assert r.path == b"barbarfoo"
+
def test_first_line_format(self):
_test_passthrough_attr(treq(), "first_line_format")
diff --git a/test/netlib/http/test_response.py b/test/netlib/http/test_response.py
index b3c2f736..c7b1b646 100644
--- a/test/netlib/http/test_response.py
+++ b/test/netlib/http/test_response.py
@@ -5,6 +5,7 @@ import email
import time
from netlib.http import Headers
+from netlib.http import Response
from netlib.http.cookies import CookieAttrs
from netlib.tutils import raises, tresp
from .test_message import _test_passthrough_attr, _test_decoded_attr
@@ -28,6 +29,25 @@ class TestResponseCore(object):
response.content = None
assert repr(response) == "Response(200 OK, no content)"
+ def test_make(self):
+ r = Response.make()
+ assert r.status_code == 200
+ assert r.content == b""
+
+ Response.make(content=b"foo")
+ Response.make(content="foo")
+ with raises(TypeError):
+ Response.make(content=42)
+
+ r = Response.make(headers=[(b"foo", b"bar")])
+ assert r.headers["foo"] == "bar"
+
+ r = Response.make(headers=({"foo": "baz"}))
+ assert r.headers["foo"] == "baz"
+
+ with raises(TypeError):
+ Response.make(headers=42)
+
def test_status_code(self):
_test_passthrough_attr(tresp(), "status_code")