def test_api_gateway_sqs_integration(self): # create target SQS stream aws_stack.create_sqs_queue(self.TEST_SQS_QUEUE) # create API Gateway and connect it to the target queue result = connect_api_gateway_to_sqs('test_gateway4', stage_name=self.TEST_STAGE_NAME, queue_arn=self.TEST_SQS_QUEUE, path=self.API_PATH_DATA_INBOUND) # generate test data test_data = {'spam': 'eggs'} url = INBOUND_GATEWAY_URL_PATTERN.format( api_id=result['id'], stage_name=self.TEST_STAGE_NAME, path=self.API_PATH_DATA_INBOUND) result = requests.post(url, data=json.dumps(test_data)) self.assertEqual(result.status_code, 200) messages = aws_stack.sqs_receive_message( self.TEST_SQS_QUEUE)['Messages'] self.assertEqual(len(messages), 1) self.assertEqual(json.loads(base64.b64decode(messages[0]['Body'])), test_data)
def test_multi_region_api_gateway(self): gw_1 = aws_stack.create_external_boto_client("apigateway", region_name=REGION1) gw_2 = aws_stack.create_external_boto_client("apigateway", region_name=REGION2) gw_3 = aws_stack.create_external_boto_client("apigateway", region_name=REGION3) sqs_1 = aws_stack.create_external_boto_client("sqs", region_name=REGION1) len_1 = len(gw_1.get_rest_apis()["items"]) len_2 = len(gw_2.get_rest_apis()["items"]) api_name1 = "a-%s" % short_uid() gw_1.create_rest_api(name=api_name1) result1 = gw_1.get_rest_apis()["items"] self.assertEqual(len(result1), len_1 + 1) self.assertEqual(len(gw_2.get_rest_apis()["items"]), len_2) api_name2 = "a-%s" % short_uid() gw_2.create_rest_api(name=api_name2) result2 = gw_2.get_rest_apis()["items"] self.assertEqual(len(gw_1.get_rest_apis()["items"]), len_1 + 1) self.assertEqual(len(result2), len_2 + 1) api_name3 = "a-%s" % short_uid() queue_name1 = "q-%s" % short_uid() result = sqs_1.create_queue(QueueName=queue_name1) queue_arn = aws_stack.sqs_queue_arn(queue_name1, region_name=REGION1) result = connect_api_gateway_to_sqs(api_name3, stage_name="test", queue_arn=queue_arn, path="/data", region_name=REGION3) api_id = result["id"] result = gw_3.get_rest_apis()["items"] self.assertEqual(result[-1]["name"], api_name3) # post message and receive from SQS url = self._gateway_request_url(api_id=api_id, stage_name="test", path="/data") test_data = {"foo": "bar"} result = requests.post(url, data=json.dumps(test_data)) self.assertEqual(result.status_code, 200) messages = aws_stack.sqs_receive_message(queue_arn)["Messages"] self.assertEqual(len(messages), 1) self.assertEqual( json.loads(to_str(base64.b64decode(to_str(messages[0]["Body"])))), test_data)