moto/tests/test_core/test_proxy.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

128 lines
4.5 KiB
Python
Raw Permalink Normal View History

from unittest import SkipTest
import requests
from moto import settings
url = "http://motoapi.amazonaws.com/moto-api/proxy/passthrough"
def test_real_request_errors() -> None:
if not settings.is_test_proxy_mode():
raise SkipTest("Can only be tested in ProxyMode")
http_proxy = settings.test_proxy_mode_endpoint()
https_proxy = settings.test_proxy_mode_endpoint()
proxies = {"http": http_proxy, "https": https_proxy}
# Delete all to ensure we're starting with a clean slate
requests.delete(url, proxies=proxies)
resp = requests.get("http://httpbin.org/robots.txt", proxies=proxies)
assert resp.status_code == 404
assert resp.content == b"AWS Service not recognized or supported"
def test_configure_passedthrough_urls() -> None:
if not settings.is_test_proxy_mode():
raise SkipTest("Can only be tested in ProxyMode")
http_proxy = settings.test_proxy_mode_endpoint()
https_proxy = settings.test_proxy_mode_endpoint()
proxies = {"http": http_proxy, "https": https_proxy}
# Delete all to ensure we're starting with a clean slate
requests.delete(url, proxies=proxies)
target1 = "http://httpbin.org/robots.txt"
target2 = "http://othersite.org/"
target3 = "https://othersite.org/"
resp = requests.post(url, json={"http_urls": [target1]}, proxies=proxies)
assert resp.status_code == 201
assert resp.json() == {"http_urls": [target1], "https_hosts": []}
# We can configure multiple URL's
resp = requests.post(url, json={"http_urls": [target2]}, proxies=proxies)
assert target1 in resp.json()["http_urls"]
assert target2 in resp.json()["http_urls"]
# Duplicate URL's are ignored
requests.post(url, json={"http_urls": [target1]}, proxies=proxies)
# We can retrieve the data
resp = requests.get(url, proxies=proxies)
assert target1 in resp.json()["http_urls"]
assert target2 in resp.json()["http_urls"]
assert resp.json()["https_hosts"] == []
# Set HTTPS HOST for good measure
resp = requests.post(url, json={"https_hosts": [target3]}, proxies=proxies)
assert target1 in resp.json()["http_urls"]
assert target2 in resp.json()["http_urls"]
assert resp.json()["https_hosts"] == [target3]
# We can delete all URL's in one go
requests.delete(url, proxies=proxies)
resp = requests.get(url, proxies=proxies)
assert resp.json() == {"http_urls": [], "https_hosts": []}
def test_http_get_request_can_be_passed_through() -> None:
if not settings.is_test_proxy_mode():
raise SkipTest("Can only be tested in ProxyMode")
http_proxy = settings.test_proxy_mode_endpoint()
https_proxy = settings.test_proxy_mode_endpoint()
proxies = {"http": http_proxy, "https": https_proxy}
# Delete all to ensure we're starting with a clean slate
requests.delete(url, proxies=proxies)
# Configure our URL as the one to passthrough
target_url = "http://httpbin.org/robots.txt"
requests.post(url, json={"http_urls": [target_url]}, proxies=proxies)
resp = requests.get("http://httpbin.org/robots.txt", proxies=proxies)
assert resp.status_code == 200
assert b"/deny" in resp.content
def test_http_post_request_can_be_passed_through() -> None:
if not settings.is_test_proxy_mode():
raise SkipTest("Can only be tested in ProxyMode")
http_proxy = settings.test_proxy_mode_endpoint()
https_proxy = settings.test_proxy_mode_endpoint()
proxies = {"http": http_proxy, "https": https_proxy}
# Delete all to ensure we're starting with a clean slate
requests.delete(url, proxies=proxies)
# Configure our URL as the one to passthrough
target_url = "http://httpbin.org/response-headers?x-moto-test=someval"
requests.post(url, json={"http_urls": [target_url]}, proxies=proxies)
resp = requests.post(target_url, proxies=proxies)
assert "x-moto-test" in resp.json()
def test_https_request_can_be_passed_through() -> None:
if not settings.is_test_proxy_mode():
raise SkipTest("Can only be tested in ProxyMode")
http_proxy = settings.test_proxy_mode_endpoint()
https_proxy = settings.test_proxy_mode_endpoint()
proxies = {"http": http_proxy, "https": https_proxy}
# Delete all to ensure we're starting with a clean slate
requests.delete(url, proxies=proxies)
# Configure our URL as the one to passthrough
target_url = "https://httpbin.org/ip"
requests.post(url, json={"https_hosts": ["httpbin.org"]}, proxies=proxies)
resp = requests.get(target_url, proxies=proxies)
assert resp.status_code == 200
assert "origin" in resp.json()