File: test_config.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 (87 lines) | stat: -rw-r--r-- 2,965 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from unittest import SkipTest

import boto3
import pytest
import requests

from moto import mock_aws, settings
from moto.awslambda.models import LambdaBackend
from moto.awslambda.utils import get_backend
from moto.awslambda_simple.models import LambdaSimpleBackend
from moto.core import DEFAULT_ACCOUNT_ID
from moto.core.config import default_user_config
from moto.core.exceptions import ServiceNotWhitelisted


@mock_aws
def test_change_configuration_using_api() -> None:
    assert default_user_config["batch"] == {"use_docker": True}
    assert default_user_config["lambda"] == {"use_docker": True}

    base_url = (
        "localhost:5000" if settings.TEST_SERVER_MODE else "motoapi.amazonaws.com"
    )
    resp = requests.get(f"http://{base_url}/moto-api/config")
    assert resp.json()["batch"] == {"use_docker": True}
    assert resp.json()["lambda"] == {"use_docker": True}

    # Update a single configuration item
    requests.post(
        f"http://{base_url}/moto-api/config", json={"batch": {"use_docker": False}}
    )

    resp = requests.get(f"http://{base_url}/moto-api/config")
    assert resp.json()["batch"] == {"use_docker": False}
    assert resp.json()["lambda"] == {"use_docker": True}

    if settings.TEST_DECORATOR_MODE:
        isinstance(get_backend(DEFAULT_ACCOUNT_ID, "us-east-1"), LambdaBackend)

    # Update multiple configuration items
    requests.post(
        f"http://{base_url}/moto-api/config",
        json={"batch": {"use_docker": True}, "lambda": {"use_docker": False}},
    )

    resp = requests.get(f"http://{base_url}/moto-api/config")
    assert resp.json()["batch"] == {"use_docker": True}
    assert resp.json()["lambda"] == {"use_docker": False}

    if settings.TEST_DECORATOR_MODE:
        isinstance(get_backend(DEFAULT_ACCOUNT_ID, "us-east-1"), LambdaSimpleBackend)

    # reset
    requests.post(
        f"http://{base_url}/moto-api/config",
        json={"batch": {"use_docker": True}, "lambda": {"use_docker": True}},
    )


def test_whitelist() -> None:
    if not settings.TEST_DECORATOR_MODE:
        raise SkipTest("No point in testing this anywhere else")

    with mock_aws(config={"core": {"service_whitelist": ["s3"]}}):
        dynamodb = boto3.client("dynamodb", "us-east-1")
        s3 = boto3.client("s3", "us-east-1")

        # S3 is whitelisted, so all calls are allowed
        s3.list_buckets()

        # DynamoDB is not whitelisted
        with pytest.raises(ServiceNotWhitelisted):
            dynamodb.list_tables()

    # Empty whitelist, so no calls are allowed
    with mock_aws(config={"core": {"service_whitelist": []}}):
        with pytest.raises(ServiceNotWhitelisted):
            s3.list_buckets()

        with pytest.raises(ServiceNotWhitelisted):
            dynamodb.list_tables()

    # Both are whitelisted, so both are allowed
    with mock_aws(config={"core": {"service_whitelist": ["dynamodb", "s3"]}}):
        s3.list_buckets()

        dynamodb.list_tables()