299 lines
11 KiB
Python
299 lines
11 KiB
Python
import boto3
|
|
import pytest
|
|
|
|
from botocore.exceptions import ClientError
|
|
from moto import mock_apigatewayv2
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_get_routes_empty():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
|
|
resp = client.get_routes(ApiId=api_id)
|
|
resp.should.have.key("Items").equals([])
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_create_route_minimal():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
resp = client.create_route(ApiId=api_id, RouteKey="GET /")
|
|
|
|
resp.should.have.key("ApiKeyRequired").equals(False)
|
|
resp.should.have.key("AuthorizationType").equals("NONE")
|
|
resp.should.have.key("RouteId")
|
|
resp.should.have.key("RouteKey").equals("GET /")
|
|
|
|
resp.shouldnt.have.key("AuthorizationScopes")
|
|
resp.shouldnt.have.key("AuthorizerId")
|
|
resp.shouldnt.have.key("ModelSelectionExpression")
|
|
resp.shouldnt.have.key("OperationName")
|
|
resp.shouldnt.have.key("RequestModels")
|
|
resp.shouldnt.have.key("RouteResponseSelectionExpression")
|
|
resp.shouldnt.have.key("Target")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_create_route_full():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(
|
|
Name="test-api",
|
|
ProtocolType="WEBSOCKET",
|
|
RouteSelectionExpression="${request.method}",
|
|
)["ApiId"]
|
|
resp = client.create_route(
|
|
ApiId=api_id,
|
|
ApiKeyRequired=True,
|
|
AuthorizerId="auth_id",
|
|
AuthorizationScopes=["scope1", "scope2"],
|
|
AuthorizationType="CUSTOM",
|
|
ModelSelectionExpression="mse",
|
|
OperationName="OP",
|
|
RequestModels={"req": "uest"},
|
|
RequestParameters={"action": {"Required": True}},
|
|
RouteKey="GET /",
|
|
RouteResponseSelectionExpression="$default",
|
|
Target="t",
|
|
)
|
|
|
|
resp.should.have.key("ApiKeyRequired").equals(True)
|
|
resp.should.have.key("AuthorizationType").equals("CUSTOM")
|
|
resp.should.have.key("AuthorizationScopes").equals(["scope1", "scope2"])
|
|
resp.should.have.key("AuthorizerId").equals("auth_id")
|
|
resp.should.have.key("RouteId")
|
|
resp.should.have.key("RouteKey").equals("GET /")
|
|
|
|
resp.should.have.key("ModelSelectionExpression").equals("mse")
|
|
resp.should.have.key("OperationName").equals("OP")
|
|
resp.should.have.key("RequestModels").equals({"req": "uest"})
|
|
resp.should.have.key("RequestParameters").equals({"action": {"Required": True}})
|
|
resp.should.have.key("RouteResponseSelectionExpression").equals("$default")
|
|
resp.should.have.key("Target").equals("t")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_delete_route():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
client.delete_route(ApiId=api_id, RouteId=route_id)
|
|
|
|
resp = client.get_routes(ApiId=api_id)
|
|
resp.should.have.key("Items").length_of(0)
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_get_route():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
resp = client.get_route(ApiId=api_id, RouteId=route_id)
|
|
|
|
resp.should.have.key("ApiKeyRequired").equals(False)
|
|
resp.should.have.key("AuthorizationType").equals("NONE")
|
|
resp.should.have.key("RouteId")
|
|
resp.should.have.key("RouteKey").equals("GET /")
|
|
|
|
resp.shouldnt.have.key("AuthorizationScopes")
|
|
resp.shouldnt.have.key("AuthorizerId")
|
|
resp.shouldnt.have.key("ModelSelectionExpression")
|
|
resp.shouldnt.have.key("OperationName")
|
|
resp.shouldnt.have.key("RouteResponseSelectionExpression")
|
|
resp.shouldnt.have.key("Target")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_get_route_unknown():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
with pytest.raises(ClientError) as exc:
|
|
client.get_route(ApiId=api_id, RouteId="unknown")
|
|
|
|
err = exc.value.response["Error"]
|
|
err["Code"].should.equal("NotFoundException")
|
|
err["Message"].should.equal("Invalid Route identifier specified unknown")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_get_routes():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
client.create_route(ApiId=api_id, RouteKey="GET /")
|
|
|
|
resp = client.get_routes(ApiId=api_id)
|
|
resp.should.have.key("Items").length_of(1)
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_update_route_single_attribute():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
resp = client.update_route(ApiId=api_id, RouteId=route_id, RouteKey="POST /")
|
|
|
|
resp.should.have.key("ApiKeyRequired").equals(False)
|
|
resp.should.have.key("AuthorizationType").equals("NONE")
|
|
resp.should.have.key("RouteId").equals(route_id)
|
|
resp.should.have.key("RouteKey").equals("POST /")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_update_route_all_attributes():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, ApiKeyRequired=True, RouteKey="GET /")[
|
|
"RouteId"
|
|
]
|
|
|
|
resp = client.update_route(
|
|
ApiId=api_id,
|
|
RouteId=route_id,
|
|
ApiKeyRequired=False,
|
|
AuthorizationScopes=["scope"],
|
|
AuthorizerId="auth_id",
|
|
AuthorizationType="JWT",
|
|
ModelSelectionExpression="mse",
|
|
OperationName="OP",
|
|
RequestModels={"req": "uest"},
|
|
RequestParameters={"action": {"Required": True}},
|
|
RouteResponseSelectionExpression="$default",
|
|
Target="t",
|
|
)
|
|
|
|
resp.should.have.key("ApiKeyRequired").equals(False)
|
|
resp.should.have.key("AuthorizationType").equals("JWT")
|
|
resp.should.have.key("AuthorizationScopes").equals(["scope"])
|
|
resp.should.have.key("AuthorizerId").equals("auth_id")
|
|
resp.should.have.key("RouteId")
|
|
resp.should.have.key("RouteKey").equals("GET /")
|
|
resp.should.have.key("ModelSelectionExpression").equals("mse")
|
|
resp.should.have.key("OperationName").equals("OP")
|
|
resp.should.have.key("RequestModels").equals({"req": "uest"})
|
|
resp.should.have.key("RequestParameters").equals({"action": {"Required": True}})
|
|
resp.should.have.key("RouteResponseSelectionExpression").equals("$default")
|
|
resp.should.have.key("Target").equals("t")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_delete_route_request_parameter():
|
|
client = boto3.client("apigatewayv2", region_name="us-east-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(
|
|
ApiId=api_id,
|
|
RequestParameters={
|
|
"action": {"Required": True},
|
|
"route.request.header.authorization": {"Required": False},
|
|
"zparam": {"Required": False},
|
|
},
|
|
RouteKey="GET /",
|
|
)["RouteId"]
|
|
|
|
request_params = client.get_route(ApiId=api_id, RouteId=route_id)[
|
|
"RequestParameters"
|
|
]
|
|
request_params.keys().should.have.length_of(3)
|
|
|
|
client.delete_route_request_parameter(
|
|
ApiId=api_id,
|
|
RouteId=route_id,
|
|
RequestParameterKey="route.request.header.authorization",
|
|
)
|
|
|
|
request_params = client.get_route(ApiId=api_id, RouteId=route_id)[
|
|
"RequestParameters"
|
|
]
|
|
request_params.keys().should.have.length_of(2)
|
|
request_params.should.have.key("action")
|
|
request_params.should.have.key("zparam")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_create_route_response_minimal():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
resp = client.create_route_response(
|
|
ApiId=api_id, RouteId=route_id, RouteResponseKey="$default"
|
|
)
|
|
|
|
resp.should.have.key("RouteResponseId")
|
|
resp.should.have.key("RouteResponseKey").equals("$default")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_create_route_response():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
resp = client.create_route_response(
|
|
ApiId=api_id,
|
|
ModelSelectionExpression="mse",
|
|
ResponseModels={"test": "tfacctest5832545056931060873"},
|
|
RouteId=route_id,
|
|
RouteResponseKey="$default",
|
|
)
|
|
|
|
resp.should.have.key("RouteResponseId")
|
|
resp.should.have.key("RouteResponseKey").equals("$default")
|
|
resp.should.have.key("ModelSelectionExpression").equals("mse")
|
|
resp.should.have.key("ResponseModels").equals(
|
|
{"test": "tfacctest5832545056931060873"}
|
|
)
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_get_route_response():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
route_response_id = client.create_route_response(
|
|
ApiId=api_id, RouteId=route_id, RouteResponseKey="$default"
|
|
)["RouteResponseId"]
|
|
|
|
resp = client.get_route_response(
|
|
ApiId=api_id, RouteId=route_id, RouteResponseId=route_response_id
|
|
)
|
|
|
|
resp.should.have.key("RouteResponseId")
|
|
resp.should.have.key("RouteResponseKey").equals("$default")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_get_route_response_unknown():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
|
|
with pytest.raises(ClientError) as exc:
|
|
client.get_route_response(
|
|
ApiId=api_id, RouteId=route_id, RouteResponseId="unknown"
|
|
)
|
|
|
|
err = exc.value.response["Error"]
|
|
err["Code"].should.equal("NotFoundException")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_delete_route_response_unknown():
|
|
client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
r_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
|
|
rr_id = client.create_route_response(
|
|
ApiId=api_id, RouteId=r_id, RouteResponseKey="$default"
|
|
)["RouteResponseId"]
|
|
|
|
client.delete_route_response(ApiId=api_id, RouteId=r_id, RouteResponseId=rr_id)
|
|
|
|
with pytest.raises(ClientError) as exc:
|
|
client.get_route_response(ApiId=api_id, RouteId=r_id, RouteResponseId=rr_id)
|
|
|
|
err = exc.value.response["Error"]
|
|
err["Code"].should.equal("NotFoundException")
|