318 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			318 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import boto3 | ||
|  | import pytest | ||
|  | 
 | ||
|  | from botocore.exceptions import ClientError | ||
|  | from moto import mock_apigatewayv2 | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_get_integrations_empty(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     resp = client.get_integrations(ApiId=api_id) | ||
|  |     resp.should.have.key("Items").equals([]) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_create_integration_minimum(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     resp = client.create_integration(ApiId=api_id, IntegrationType="HTTP") | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("IntegrationType").equals("HTTP") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_create_integration_for_internet_mock(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     resp = client.create_integration( | ||
|  |         ApiId=api_id, ConnectionType="INTERNET", IntegrationType="MOCK" | ||
|  |     ) | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("IntegrationType").equals("MOCK") | ||
|  |     resp.should.have.key("IntegrationResponseSelectionExpression").equals( | ||
|  |         "${integration.response.statuscode}" | ||
|  |     ) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_create_integration_full(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     resp = client.create_integration( | ||
|  |         ApiId=api_id, | ||
|  |         ConnectionId="conn_id", | ||
|  |         ConnectionType="INTERNET", | ||
|  |         ContentHandlingStrategy="CONVERT_TO_BINARY", | ||
|  |         CredentialsArn="cred:arn", | ||
|  |         Description="my full integration", | ||
|  |         IntegrationMethod="PUT", | ||
|  |         IntegrationType="HTTP", | ||
|  |         IntegrationSubtype="n/a", | ||
|  |         PassthroughBehavior="WHEN_NO_MATCH", | ||
|  |         PayloadFormatVersion="1.0", | ||
|  |         RequestParameters={"r": "p"}, | ||
|  |         RequestTemplates={"r": "t"}, | ||
|  |         ResponseParameters={"res": {"par": "am"}}, | ||
|  |         TemplateSelectionExpression="tse", | ||
|  |         TimeoutInMillis=123, | ||
|  |         TlsConfig={"ServerNameToVerify": "server"}, | ||
|  |     ) | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("ConnectionId").equals("conn_id") | ||
|  |     resp.should.have.key("ConnectionType").equals("INTERNET") | ||
|  |     resp.should.have.key("ContentHandlingStrategy").equals("CONVERT_TO_BINARY") | ||
|  |     resp.should.have.key("CredentialsArn").equals("cred:arn") | ||
|  |     resp.should.have.key("Description").equals("my full integration") | ||
|  |     resp.should.have.key("IntegrationMethod").equals("PUT") | ||
|  |     resp.should.have.key("IntegrationType").equals("HTTP") | ||
|  |     resp.should.have.key("IntegrationSubtype").equals("n/a") | ||
|  |     resp.should.have.key("PassthroughBehavior").equals("WHEN_NO_MATCH") | ||
|  |     resp.should.have.key("PayloadFormatVersion").equals("1.0") | ||
|  |     resp.should.have.key("RequestParameters").equals({"r": "p"}) | ||
|  |     resp.should.have.key("RequestTemplates").equals({"r": "t"}) | ||
|  |     resp.should.have.key("ResponseParameters").equals({"res": {"par": "am"}}) | ||
|  |     resp.should.have.key("TemplateSelectionExpression").equals("tse") | ||
|  |     resp.should.have.key("TimeoutInMillis").equals(123) | ||
|  |     resp.should.have.key("TlsConfig").equals({"ServerNameToVerify": "server"}) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_get_integration(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="ap-southeast-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     integration_id = client.create_integration(ApiId=api_id, IntegrationType="HTTP")[ | ||
|  |         "IntegrationId" | ||
|  |     ] | ||
|  | 
 | ||
|  |     resp = client.get_integration(ApiId=api_id, IntegrationId=integration_id) | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("IntegrationType").equals("HTTP") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_get_integration_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_integration(ApiId=api_id, IntegrationId="unknown") | ||
|  |     err = exc.value.response["Error"] | ||
|  |     err["Code"].should.equal("NotFoundException") | ||
|  |     err["Message"].should.equal("Invalid Integration identifier specified unknown") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_get_integrations(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="us-east-2") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     integration_id = client.create_integration(ApiId=api_id, IntegrationType="HTTP")[ | ||
|  |         "IntegrationId" | ||
|  |     ] | ||
|  |     resp = client.get_integrations(ApiId=api_id) | ||
|  | 
 | ||
|  |     resp.should.have.key("Items").length_of(1) | ||
|  |     resp["Items"][0].should.have.key("IntegrationId").equals(integration_id) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_delete_integration(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="ap-southeast-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     integration_id = client.create_integration(ApiId=api_id, IntegrationType="HTTP")[ | ||
|  |         "IntegrationId" | ||
|  |     ] | ||
|  | 
 | ||
|  |     client.delete_integration(ApiId=api_id, IntegrationId=integration_id) | ||
|  | 
 | ||
|  |     with pytest.raises(ClientError) as exc: | ||
|  |         client.get_integration(ApiId=api_id, IntegrationId=integration_id) | ||
|  |     err = exc.value.response["Error"] | ||
|  |     err["Code"].should.equal("NotFoundException") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_update_integration_single_attr(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     int_id = client.create_integration( | ||
|  |         ApiId=api_id, | ||
|  |         ConnectionId="conn_id", | ||
|  |         ConnectionType="INTERNET", | ||
|  |         ContentHandlingStrategy="CONVERT_TO_BINARY", | ||
|  |         CredentialsArn="cred:arn", | ||
|  |         Description="my full integration", | ||
|  |         IntegrationMethod="PUT", | ||
|  |         IntegrationType="HTTP", | ||
|  |         IntegrationSubtype="n/a", | ||
|  |         PassthroughBehavior="WHEN_NO_MATCH", | ||
|  |         PayloadFormatVersion="1.0", | ||
|  |         RequestParameters={"r": "p"}, | ||
|  |         RequestTemplates={"r": "t"}, | ||
|  |         ResponseParameters={"res": {"par": "am"}}, | ||
|  |         TemplateSelectionExpression="tse", | ||
|  |         TimeoutInMillis=123, | ||
|  |         TlsConfig={"ServerNameToVerify": "server"}, | ||
|  |     )["IntegrationId"] | ||
|  | 
 | ||
|  |     resp = client.update_integration( | ||
|  |         ApiId=api_id, IntegrationId=int_id, Description="updated int" | ||
|  |     ) | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("ConnectionId").equals("conn_id") | ||
|  |     resp.should.have.key("ConnectionType").equals("INTERNET") | ||
|  |     resp.should.have.key("ContentHandlingStrategy").equals("CONVERT_TO_BINARY") | ||
|  |     resp.should.have.key("CredentialsArn").equals("cred:arn") | ||
|  |     resp.should.have.key("Description").equals("updated int") | ||
|  |     resp.should.have.key("IntegrationMethod").equals("PUT") | ||
|  |     resp.should.have.key("IntegrationType").equals("HTTP") | ||
|  |     resp.should.have.key("IntegrationSubtype").equals("n/a") | ||
|  |     resp.should.have.key("PassthroughBehavior").equals("WHEN_NO_MATCH") | ||
|  |     resp.should.have.key("PayloadFormatVersion").equals("1.0") | ||
|  |     resp.should.have.key("RequestParameters").equals({"r": "p"}) | ||
|  |     resp.should.have.key("RequestTemplates").equals({"r": "t"}) | ||
|  |     resp.should.have.key("ResponseParameters").equals({"res": {"par": "am"}}) | ||
|  |     resp.should.have.key("TemplateSelectionExpression").equals("tse") | ||
|  |     resp.should.have.key("TimeoutInMillis").equals(123) | ||
|  |     resp.should.have.key("TlsConfig").equals({"ServerNameToVerify": "server"}) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_update_integration_all_attrs(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     int_id = client.create_integration( | ||
|  |         ApiId=api_id, | ||
|  |         ConnectionId="conn_id", | ||
|  |         ConnectionType="INTERNET", | ||
|  |         ContentHandlingStrategy="CONVERT_TO_BINARY", | ||
|  |         CredentialsArn="cred:arn", | ||
|  |         Description="my full integration", | ||
|  |         IntegrationMethod="PUT", | ||
|  |         IntegrationType="HTTP", | ||
|  |         IntegrationSubtype="n/a", | ||
|  |         PassthroughBehavior="WHEN_NO_MATCH", | ||
|  |         PayloadFormatVersion="1.0", | ||
|  |         RequestParameters={"r": "p"}, | ||
|  |         RequestTemplates={"r": "t"}, | ||
|  |         ResponseParameters={"res": {"par": "am"}}, | ||
|  |         TemplateSelectionExpression="tse", | ||
|  |         TimeoutInMillis=123, | ||
|  |         TlsConfig={"ServerNameToVerify": "server"}, | ||
|  |     )["IntegrationId"] | ||
|  | 
 | ||
|  |     resp = client.update_integration( | ||
|  |         ApiId=api_id, | ||
|  |         IntegrationId=int_id, | ||
|  |         ConnectionType="VPC_LINK", | ||
|  |         ContentHandlingStrategy="CONVERT_TO_TEXT", | ||
|  |         CredentialsArn="", | ||
|  |         IntegrationMethod="PATCH", | ||
|  |         IntegrationType="AWS", | ||
|  |         PassthroughBehavior="NEVER", | ||
|  |     ) | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("ConnectionId").equals("conn_id") | ||
|  |     resp.should.have.key("ConnectionType").equals("VPC_LINK") | ||
|  |     resp.should.have.key("ContentHandlingStrategy").equals("CONVERT_TO_TEXT") | ||
|  |     resp.should.have.key("CredentialsArn").equals("") | ||
|  |     resp.should.have.key("Description").equals("my full integration") | ||
|  |     resp.should.have.key("IntegrationMethod").equals("PATCH") | ||
|  |     resp.should.have.key("IntegrationType").equals("AWS") | ||
|  |     resp.should.have.key("IntegrationSubtype").equals("n/a") | ||
|  |     resp.should.have.key("PassthroughBehavior").equals("NEVER") | ||
|  |     resp.should.have.key("PayloadFormatVersion").equals("1.0") | ||
|  |     resp.should.have.key("RequestParameters").equals({"r": "p"}) | ||
|  |     resp.should.have.key("RequestTemplates").equals({"r": "t"}) | ||
|  |     resp.should.have.key("ResponseParameters").equals({"res": {"par": "am"}}) | ||
|  |     resp.should.have.key("TemplateSelectionExpression").equals("tse") | ||
|  |     resp.should.have.key("TimeoutInMillis").equals(123) | ||
|  |     resp.should.have.key("TlsConfig").equals({"ServerNameToVerify": "server"}) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_apigatewayv2 | ||
|  | def test_update_integration_request_parameters(): | ||
|  |     client = boto3.client("apigatewayv2", region_name="eu-west-1") | ||
|  |     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"] | ||
|  | 
 | ||
|  |     resp = client.create_integration( | ||
|  |         ApiId=api_id, | ||
|  |         ConnectionType="INTERNET", | ||
|  |         IntegrationMethod="ANY", | ||
|  |         IntegrationType="HTTP_PROXY", | ||
|  |         IntegrationUri="http://www.example.com", | ||
|  |         PayloadFormatVersion="1.0", | ||
|  |         RequestParameters={ | ||
|  |             "append:header.header1": "$context.requestId", | ||
|  |             "remove:querystring.qs1": "''", | ||
|  |         }, | ||
|  |         ResponseParameters={ | ||
|  |             "404": {"append:header.error": "$stageVariables.environmentId"}, | ||
|  |             "500": { | ||
|  |                 "append:header.header1": "$context.requestId", | ||
|  |                 "overwrite:statuscode": "403", | ||
|  |             }, | ||
|  |         }, | ||
|  |     ) | ||
|  | 
 | ||
|  |     int_id = resp["IntegrationId"] | ||
|  |     # Having an empty value between quotes ("''") is valid | ||
|  |     resp["RequestParameters"].should.equal( | ||
|  |         {"append:header.header1": "$context.requestId", "remove:querystring.qs1": "''"} | ||
|  |     ) | ||
|  | 
 | ||
|  |     resp = client.update_integration( | ||
|  |         ApiId=api_id, | ||
|  |         IntegrationId=int_id, | ||
|  |         IntegrationType="HTTP_PROXY", | ||
|  |         RequestParameters={ | ||
|  |             "append:header.header1": "$context.accountId", | ||
|  |             "overwrite:header.header2": "$stageVariables.environmentId", | ||
|  |             "remove:querystring.qs1": "", | ||
|  |         }, | ||
|  |         ResponseParameters={ | ||
|  |             "404": {}, | ||
|  |             "500": { | ||
|  |                 "append:header.header1": "$context.requestId", | ||
|  |                 "overwrite:statuscode": "403", | ||
|  |             }, | ||
|  |         }, | ||
|  |     ) | ||
|  | 
 | ||
|  |     resp.should.have.key("IntegrationId") | ||
|  |     resp.should.have.key("IntegrationMethod").equals("ANY") | ||
|  |     resp.should.have.key("IntegrationType").equals("HTTP_PROXY") | ||
|  |     resp.should.have.key("PayloadFormatVersion").equals("1.0") | ||
|  |     # Having no value ("") is not valid, so that param should not be persisted | ||
|  |     resp.should.have.key("RequestParameters").equals( | ||
|  |         { | ||
|  |             "append:header.header1": "$context.accountId", | ||
|  |             "overwrite:header.header2": "$stageVariables.environmentId", | ||
|  |         } | ||
|  |     ) | ||
|  |     resp.should.have.key("ResponseParameters").equals( | ||
|  |         { | ||
|  |             "404": {}, | ||
|  |             "500": { | ||
|  |                 "append:header.header1": "$context.requestId", | ||
|  |                 "overwrite:statuscode": "403", | ||
|  |             }, | ||
|  |         } | ||
|  |     ) |