File: test_request_mocking.py

package info (click to toggle)
python-moto 5.1.18-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 116,520 kB
  • sloc: python: 636,725; javascript: 181; makefile: 39; sh: 3
file content (71 lines) | stat: -rw-r--r-- 2,056 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from unittest import SkipTest

import boto3
import pytest
import requests
from responses import Response

from moto import mock_aws, settings
from moto.core.models import responses_mock


@mock_aws
@pytest.mark.network
def test_passthrough_requests() -> None:
    conn = boto3.client("sqs", region_name="us-west-1")
    conn.create_queue(QueueName="queue1")

    res = requests.get("https://google.com/")
    assert res.status_code < 400


if not settings.TEST_SERVER_MODE:

    @mock_aws
    def test_requests_to_amazon_subdomains_dont_work() -> None:
        res = requests.get("https://fakeservice.amazonaws.com/foo/bar")
        assert res.content == b"The method is not implemented"
        assert res.status_code == 400


@mock_aws
def test_decorator_ordering() -> None:
    """
    https://github.com/getmoto/moto/issues/3790#issuecomment-803979809
    """
    bucket_name = "banana-slugs"
    key = "trash-file"
    region = "us-east-1"
    client = boto3.client("s3", region_name=region)
    s3 = boto3.resource("s3", region_name=region)
    bucket = s3.Bucket(bucket_name)
    bucket.create()
    bucket.put_object(Body=b"ABCD", Key=key)
    presigned_url = client.generate_presigned_url(
        ClientMethod=client.get_object.__name__,
        Params={
            "Bucket": bucket_name,
            "Key": key,
            "ResponseContentDisposition": "attachment;filename=bar",
        },
    )

    resp = requests.get(presigned_url)
    assert resp.status_code == 200


@mock_aws()
def test_replace_and_remove_mock() -> None:
    if not settings.TEST_DECORATOR_MODE:
        raise SkipTest("Only need to test responses mock in decorator mode")
    rsp1 = Response(method="GET", url="http://example.com", body="test")
    responses_mock.add(rsp1)

    assert requests.get("http://example.com/").text == "test"

    rsp2 = Response(method="GET", url="http://example.com", body="test2")
    responses_mock.replace(rsp2)

    assert requests.get("http://example.com/").text == "test2"

    responses_mock.remove("GET", "https://example.com/")