moto/tests/test_core/test_proxy.py
2024-02-25 09:20:28 -01:00

128 lines
4.5 KiB
Python

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()