debug and working stage--squash
This commit is contained in:
@@ -7,6 +7,7 @@ from json import loads as json_loads
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import pytest
|
||||
import ujson
|
||||
|
||||
from sanic_testing.testing import (
|
||||
ASGI_BASE_URL,
|
||||
@@ -19,7 +20,7 @@ from sanic_testing.testing import (
|
||||
|
||||
from sanic import Blueprint, Sanic
|
||||
from sanic.exceptions import ServerError
|
||||
from sanic.request import DEFAULT_HTTP_CONTENT_TYPE, Request, RequestParameters
|
||||
from sanic.request import DEFAULT_HTTP_CONTENT_TYPE, RequestParameters
|
||||
from sanic.response import html, json, text
|
||||
|
||||
|
||||
@@ -35,7 +36,7 @@ def test_sync(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
|
||||
assert response.text == "Hello"
|
||||
assert response.body == b"Hello"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -46,7 +47,7 @@ async def test_sync_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
|
||||
assert response.text == "Hello"
|
||||
assert response.body == b"Hello"
|
||||
|
||||
|
||||
def test_ip(app):
|
||||
@@ -56,7 +57,7 @@ def test_ip(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -67,10 +68,12 @@ async def test_url_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
|
||||
if response.text.endswith("/") and not ASGI_BASE_URL.endswith("/"):
|
||||
response.text[:-1] == ASGI_BASE_URL
|
||||
if response.body.decode().endswith("/") and not ASGI_BASE_URL.endswith(
|
||||
"/"
|
||||
):
|
||||
response.body[:-1] == ASGI_BASE_URL.encode()
|
||||
else:
|
||||
assert response.text == ASGI_BASE_URL
|
||||
assert response.body == ASGI_BASE_URL.encode()
|
||||
|
||||
|
||||
def test_text(app):
|
||||
@@ -80,7 +83,7 @@ def test_text(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
|
||||
assert response.text == "Hello"
|
||||
assert response.body == b"Hello"
|
||||
|
||||
|
||||
def test_html(app):
|
||||
@@ -109,13 +112,13 @@ def test_html(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
assert response.content_type == "text/html; charset=utf-8"
|
||||
assert response.text == "<h1>Hello</h1>"
|
||||
assert response.body == b"<h1>Hello</h1>"
|
||||
|
||||
request, response = app.test_client.get("/foo")
|
||||
assert response.text == "<h1>Foo</h1>"
|
||||
assert response.body == b"<h1>Foo</h1>"
|
||||
|
||||
request, response = app.test_client.get("/bar")
|
||||
assert response.text == "<h1>Bar object repr</h1>"
|
||||
assert response.body == b"<h1>Bar object repr</h1>"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -126,7 +129,7 @@ async def test_text_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
|
||||
assert response.text == "Hello"
|
||||
assert response.body == b"Hello"
|
||||
|
||||
|
||||
def test_headers(app):
|
||||
@@ -186,7 +189,7 @@ def test_invalid_response(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
assert response.status == 500
|
||||
assert response.text == "Internal Server Error."
|
||||
assert response.body == b"Internal Server Error."
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -201,7 +204,7 @@ async def test_invalid_response_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
assert response.status == 500
|
||||
assert response.text == "Internal Server Error."
|
||||
assert response.body == b"Internal Server Error."
|
||||
|
||||
|
||||
def test_json(app):
|
||||
@@ -224,7 +227,7 @@ async def test_json_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
|
||||
results = json_loads(response.text)
|
||||
results = json_loads(response.body)
|
||||
|
||||
assert results.get("test") is True
|
||||
|
||||
@@ -237,7 +240,7 @@ def test_empty_json(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
assert response.status == 200
|
||||
assert response.text == "null"
|
||||
assert response.body == b"null"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -249,7 +252,7 @@ async def test_empty_json_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
assert response.status == 200
|
||||
assert response.text == "null"
|
||||
assert response.body == b"null"
|
||||
|
||||
|
||||
def test_invalid_json(app):
|
||||
@@ -423,12 +426,12 @@ def test_content_type(app):
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
assert request.content_type == DEFAULT_HTTP_CONTENT_TYPE
|
||||
assert response.text == DEFAULT_HTTP_CONTENT_TYPE
|
||||
assert response.body.decode() == DEFAULT_HTTP_CONTENT_TYPE
|
||||
|
||||
headers = {"content-type": "application/json"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.content_type == "application/json"
|
||||
assert response.text == "application/json"
|
||||
assert response.body == b"application/json"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -439,12 +442,12 @@ async def test_content_type_asgi(app):
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
assert request.content_type == DEFAULT_HTTP_CONTENT_TYPE
|
||||
assert response.text == DEFAULT_HTTP_CONTENT_TYPE
|
||||
assert response.body.decode() == DEFAULT_HTTP_CONTENT_TYPE
|
||||
|
||||
headers = {"content-type": "application/json"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.content_type == "application/json"
|
||||
assert response.text == "application/json"
|
||||
assert response.body == b"application/json"
|
||||
|
||||
|
||||
def test_standard_forwarded(app):
|
||||
@@ -581,14 +584,15 @@ async def test_standard_forwarded_asgi(app):
|
||||
"X-Scheme": "ws",
|
||||
}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"for": "127.0.0.2", "proto": "ws"}
|
||||
|
||||
assert response.json == {"for": "127.0.0.2", "proto": "ws"}
|
||||
assert request.remote_addr == "127.0.0.2"
|
||||
assert request.scheme == "ws"
|
||||
assert request.server_port == ASGI_PORT
|
||||
|
||||
app.config.FORWARDED_SECRET = "mySecret"
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {
|
||||
assert response.json == {
|
||||
"for": "[::2]",
|
||||
"proto": "https",
|
||||
"host": "me.tld",
|
||||
@@ -603,13 +607,13 @@ async def test_standard_forwarded_asgi(app):
|
||||
# Empty Forwarded header -> use X-headers
|
||||
headers["Forwarded"] = ""
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"for": "127.0.0.2", "proto": "ws"}
|
||||
assert response.json == {"for": "127.0.0.2", "proto": "ws"}
|
||||
|
||||
# Header present but not matching anything
|
||||
request, response = await app.asgi_client.get(
|
||||
"/", headers={"Forwarded": "."}
|
||||
)
|
||||
assert response.json() == {}
|
||||
assert response.json == {}
|
||||
|
||||
# Forwarded header present but no matching secret -> use X-headers
|
||||
headers = {
|
||||
@@ -617,13 +621,13 @@ async def test_standard_forwarded_asgi(app):
|
||||
"X-Real-IP": "127.0.0.2",
|
||||
}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"for": "127.0.0.2"}
|
||||
assert response.json == {"for": "127.0.0.2"}
|
||||
assert request.remote_addr == "127.0.0.2"
|
||||
|
||||
# Different formatting and hitting both ends of the header
|
||||
headers = {"Forwarded": 'Secret="mySecret";For=127.0.0.4;Port=1234'}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {
|
||||
assert response.json == {
|
||||
"for": "127.0.0.4",
|
||||
"port": 1234,
|
||||
"secret": "mySecret",
|
||||
@@ -632,7 +636,7 @@ async def test_standard_forwarded_asgi(app):
|
||||
# Test escapes (modify this if you see anyone implementing quoted-pairs)
|
||||
headers = {"Forwarded": 'for=test;quoted="\\,x=x;y=\\";secret=mySecret'}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {
|
||||
assert response.json == {
|
||||
"for": "test",
|
||||
"quoted": "\\,x=x;y=\\",
|
||||
"secret": "mySecret",
|
||||
@@ -641,17 +645,17 @@ async def test_standard_forwarded_asgi(app):
|
||||
# Secret insulated by malformed field #1
|
||||
headers = {"Forwarded": "for=test;secret=mySecret;b0rked;proto=wss;"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"for": "test", "secret": "mySecret"}
|
||||
assert response.json == {"for": "test", "secret": "mySecret"}
|
||||
|
||||
# Secret insulated by malformed field #2
|
||||
headers = {"Forwarded": "for=test;b0rked;secret=mySecret;proto=wss"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"proto": "wss", "secret": "mySecret"}
|
||||
assert response.json == {"proto": "wss", "secret": "mySecret"}
|
||||
|
||||
# Unexpected termination should not lose existing acceptable values
|
||||
headers = {"Forwarded": "b0rked;secret=mySecret;proto=wss"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"proto": "wss", "secret": "mySecret"}
|
||||
assert response.json == {"proto": "wss", "secret": "mySecret"}
|
||||
|
||||
# Field normalization
|
||||
headers = {
|
||||
@@ -659,7 +663,7 @@ async def test_standard_forwarded_asgi(app):
|
||||
'PATH="/With%20Spaces%22Quoted%22/sanicApp?key=val";SECRET=mySecret'
|
||||
}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {
|
||||
assert response.json == {
|
||||
"proto": "wss",
|
||||
"by": "[cafe::8000]",
|
||||
"host": "a:2",
|
||||
@@ -671,7 +675,10 @@ async def test_standard_forwarded_asgi(app):
|
||||
app.config.FORWARDED_SECRET = "_proxySecret"
|
||||
headers = {"Forwarded": "for=1.2.3.4; by=_proxySecret"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert response.json() == {"for": "1.2.3.4", "by": "_proxySecret"}
|
||||
assert response.json == {
|
||||
"for": "1.2.3.4",
|
||||
"by": "_proxySecret",
|
||||
}
|
||||
|
||||
|
||||
def test_remote_addr_with_two_proxies(app):
|
||||
@@ -685,33 +692,33 @@ def test_remote_addr_with_two_proxies(app):
|
||||
headers = {"X-Real-IP": "127.0.0.2", "X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.2"
|
||||
assert response.text == "127.0.0.2"
|
||||
assert response.body == b"127.0.0.2"
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.0.1, 127.0.1.2"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.1"
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
request, response = app.test_client.get("/")
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.0.1, , ,,127.0.1.2"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.1"
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
headers = {
|
||||
"X-Forwarded-For": ", 127.0.2.2, , ,127.0.0.1, , ,,127.0.1.2"
|
||||
}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.1"
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -726,33 +733,33 @@ async def test_remote_addr_with_two_proxies_asgi(app):
|
||||
headers = {"X-Real-IP": "127.0.0.2", "X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.2"
|
||||
assert response.text == "127.0.0.2"
|
||||
assert response.body == b"127.0.0.2"
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.0.1, 127.0.1.2"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.1"
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
request, response = await app.asgi_client.get("/")
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.0.1, , ,,127.0.1.2"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.1"
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
headers = {
|
||||
"X-Forwarded-For": ", 127.0.2.2, , ,127.0.0.1, , ,,127.0.1.2"
|
||||
}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.1"
|
||||
assert response.text == "127.0.0.1"
|
||||
assert response.body == b"127.0.0.1"
|
||||
|
||||
|
||||
def test_remote_addr_without_proxy(app):
|
||||
@@ -765,17 +772,17 @@ def test_remote_addr_without_proxy(app):
|
||||
headers = {"X-Real-IP": "127.0.0.2", "X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.0.1, 127.0.1.2"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -789,17 +796,17 @@ async def test_remote_addr_without_proxy_asgi(app):
|
||||
headers = {"X-Real-IP": "127.0.0.2", "X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.0.1, 127.0.1.2"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
|
||||
def test_remote_addr_custom_headers(app):
|
||||
@@ -814,17 +821,17 @@ def test_remote_addr_custom_headers(app):
|
||||
headers = {"X-Real-IP": "127.0.0.2", "Forwarded": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.1.1"
|
||||
assert response.text == "127.0.1.1"
|
||||
assert response.body == b"127.0.1.1"
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"Client-IP": "127.0.0.2", "Forwarded": "127.0.1.1"}
|
||||
request, response = app.test_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.2"
|
||||
assert response.text == "127.0.0.2"
|
||||
assert response.body == b"127.0.0.2"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -840,17 +847,17 @@ async def test_remote_addr_custom_headers_asgi(app):
|
||||
headers = {"X-Real-IP": "127.0.0.2", "Forwarded": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.1.1"
|
||||
assert response.text == "127.0.1.1"
|
||||
assert response.body == b"127.0.1.1"
|
||||
|
||||
headers = {"X-Forwarded-For": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == ""
|
||||
assert response.text == ""
|
||||
assert response.body == b""
|
||||
|
||||
headers = {"Client-IP": "127.0.0.2", "Forwarded": "127.0.1.1"}
|
||||
request, response = await app.asgi_client.get("/", headers=headers)
|
||||
assert request.remote_addr == "127.0.0.2"
|
||||
assert response.text == "127.0.0.2"
|
||||
assert response.body == b"127.0.0.2"
|
||||
|
||||
|
||||
def test_forwarded_scheme(app):
|
||||
@@ -894,7 +901,7 @@ async def test_match_info_asgi(app):
|
||||
request, response = await app.asgi_client.get("/api/v1/user/sanic_user/")
|
||||
|
||||
assert request.match_info == {"user_id": "sanic_user"}
|
||||
assert json_loads(response.text) == {"user_id": "sanic_user"}
|
||||
assert json_loads(response.body) == {"user_id": "sanic_user"}
|
||||
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
@@ -916,7 +923,7 @@ def test_post_json(app):
|
||||
|
||||
assert request.json.get("test") == "OK"
|
||||
assert request.json.get("test") == "OK" # for request.parsed_json
|
||||
assert response.text == "OK"
|
||||
assert response.body == b"OK"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -934,7 +941,7 @@ async def test_post_json_asgi(app):
|
||||
|
||||
assert request.json.get("test") == "OK"
|
||||
assert request.json.get("test") == "OK" # for request.parsed_json
|
||||
assert response.text == "OK"
|
||||
assert response.body == b"OK"
|
||||
|
||||
|
||||
def test_post_form_urlencoded(app):
|
||||
@@ -2136,7 +2143,7 @@ def test_safe_method_with_body_ignored(app):
|
||||
|
||||
assert request.body == b""
|
||||
assert request.json == None
|
||||
assert response.text == "OK"
|
||||
assert response.body == b"OK"
|
||||
|
||||
|
||||
def test_safe_method_with_body(app):
|
||||
@@ -2153,4 +2160,4 @@ def test_safe_method_with_body(app):
|
||||
|
||||
assert request.body == data.encode("utf-8")
|
||||
assert request.json.get("test") == "OK"
|
||||
assert response.text == "OK"
|
||||
assert response.body == b"OK"
|
||||
|
||||
Reference in New Issue
Block a user