]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
Redirect tests
authorTom Christie <tom@tomchristie.com>
Mon, 29 Apr 2019 11:12:08 +0000 (12:12 +0100)
committerTom Christie <tom@tomchristie.com>
Mon, 29 Apr 2019 11:12:08 +0000 (12:12 +0100)
httpcore/__init__.py
tests/adapters/test_redirects.py

index b81c877924683fce17c8d36e51bb1d4c21173664..d9c1364c7f57f0672def5e1abcd47d20d5142e42 100644 (file)
@@ -13,6 +13,7 @@ from .exceptions import (
     ResponseClosed,
     StreamConsumed,
     Timeout,
+    TooManyRedirects
 )
 from .interfaces import Adapter
 from .models import URL, Headers, Origin, Request, Response
index f4a98105a691e0688950b5d6ad79d34cef331067..dbcb2338570669ed34614a9b2c814479ed3f3316 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
+from urllib.parse import parse_qs
 
-from httpcore import Adapter, RedirectAdapter, Request, Response, codes
+from httpcore import Adapter, RedirectAdapter, Request, Response, TooManyRedirects, codes
 
 
 class MockDispatch(Adapter):
@@ -14,6 +15,13 @@ class MockDispatch(Adapter):
             )
         elif request.url.path == "/relative_redirect":
             return Response(codes.see_other, headers=[(b"location", b"/")])
+        elif request.url.path == "/multiple_redirects":
+            params = parse_qs(request.url.query)
+            count = int(params.get("count", "0")[0])
+            code = codes.see_other if count else codes.ok
+            location = "/multiple_redirects?count=" + str(count - 1)
+            headers = [(b"location", location.encode())] if count else []
+            return Response(code, headers=headers)
         return Response(codes.ok, body=b"Hello, world!")
 
 
@@ -29,3 +37,17 @@ async def test_relative_redirect():
     client = RedirectAdapter(MockDispatch())
     response = await client.request("GET", "https://example.org/relative_redirect")
     assert response.status_code == codes.ok
+
+
+@pytest.mark.asyncio
+async def test_multiple_redirects():
+    client = RedirectAdapter(MockDispatch())
+    response = await client.request("GET", "https://example.org/multiple_redirects?count=20")
+    assert response.status_code == codes.ok
+
+
+@pytest.mark.asyncio
+async def test_too_many_redirects():
+    client = RedirectAdapter(MockDispatch())
+    with pytest.raises(TooManyRedirects):
+        await client.request("GET", "https://example.org/multiple_redirects?count=21")