114 lines
3.7 KiB
Python
114 lines
3.7 KiB
Python
import os
|
|
import uuid
|
|
from unittest import TestCase
|
|
|
|
import boto3
|
|
import pytest
|
|
import requests
|
|
from botocore.exceptions import ClientError
|
|
|
|
from moto import mock_aws, settings
|
|
from moto.moto_api import recorder
|
|
|
|
|
|
@mock_aws
|
|
class TestCreateUserPoolWithPredeterminedID(TestCase):
|
|
def _reset_recording(self):
|
|
if settings.TEST_SERVER_MODE:
|
|
requests.post("http://localhost:5000/moto-api/recorder/reset-recording")
|
|
else:
|
|
recorder.reset_recording()
|
|
|
|
def _start_recording(self):
|
|
if settings.TEST_SERVER_MODE:
|
|
requests.post("http://localhost:5000/moto-api/recorder/start-recording")
|
|
else:
|
|
recorder.start_recording()
|
|
|
|
def _stop_recording(self):
|
|
if settings.TEST_SERVER_MODE:
|
|
requests.post("http://localhost:5000/moto-api/recorder/stop-recording")
|
|
else:
|
|
recorder.stop_recording()
|
|
|
|
def _download_recording(self):
|
|
if settings.TEST_SERVER_MODE:
|
|
resp = requests.get(
|
|
"http://localhost:5000/moto-api/recorder/download-recording"
|
|
)
|
|
assert resp.status_code == 200
|
|
return resp.content.decode("utf-8")
|
|
else:
|
|
return recorder.download_recording()
|
|
|
|
def _upload_recording(self, logs):
|
|
if settings.TEST_SERVER_MODE:
|
|
requests.post(
|
|
"http://localhost:5000/moto-api/recorder/upload-recording", data=logs
|
|
)
|
|
else:
|
|
recorder.upload_recording(logs)
|
|
|
|
def _replay_recording(self):
|
|
if settings.TEST_SERVER_MODE:
|
|
requests.post("http://localhost:5000/moto-api/recorder/replay-recording")
|
|
else:
|
|
recorder.replay_recording()
|
|
|
|
def _set_seed(self, a):
|
|
if settings.TEST_SERVER_MODE:
|
|
requests.post(f"http://localhost:5000/moto-api/seed?a={a}")
|
|
else:
|
|
requests.post(f"http://motoapi.amazonaws.com/moto-api/seed?a={a}")
|
|
|
|
def setUp(self) -> None:
|
|
self.client = boto3.client("cognito-idp", "us-west-2")
|
|
self.random_seed = 42
|
|
|
|
# start recording
|
|
self._reset_recording()
|
|
self._start_recording()
|
|
# Create UserPool
|
|
name = str(uuid.uuid4())
|
|
value = str(uuid.uuid4())
|
|
self._set_seed(self.random_seed)
|
|
resp = self.client.create_user_pool(
|
|
PoolName=name, LambdaConfig={"PreSignUp": value}
|
|
)
|
|
self.pool_id = resp["UserPool"]["Id"]
|
|
|
|
# stop recording
|
|
self._stop_recording()
|
|
# delete user pool
|
|
self.client.delete_user_pool(UserPoolId=self.pool_id)
|
|
|
|
def tearDown(self) -> None:
|
|
self._stop_recording()
|
|
try:
|
|
os.remove("moto_recording")
|
|
except: # noqa: E722 Do not use bare except
|
|
pass
|
|
|
|
def test_same_seed(self):
|
|
# replay recording
|
|
self._replay_recording()
|
|
# assert userpool is is the same - it will throw an error if it doesn't exist
|
|
self.client.describe_user_pool(UserPoolId=self.pool_id)
|
|
|
|
def test_different_seed(self):
|
|
# set seed to different number
|
|
logs = self._download_recording()
|
|
logs = logs.replace("/seed?a=42", "/seed?a=43")
|
|
self._upload_recording(logs)
|
|
# replay recording, and recreate a userpool
|
|
self._replay_recording()
|
|
# assert the ID of this userpool is now different
|
|
with pytest.raises(ClientError) as exc:
|
|
self.client.describe_user_pool(UserPoolId=self.pool_id)
|
|
err = exc.value.response["Error"]
|
|
assert err["Code"] == "ResourceNotFoundException"
|
|
|
|
# It is created - just with a different ID
|
|
all_pools = self.client.list_user_pools(MaxResults=5)["UserPools"]
|
|
assert len(all_pools) == 1
|