コード例 #1
0
    def test_lambda_in_swagger_object(self):

        lambda_arn = 'TestLambda'
        path = '/test'
        operation = 'get'
        module = 'test'
        function = operation
        
        swagger = self.__get_minimal_swagger()

        swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = {
            'lambda': lambda_arn
        }

        swagger['paths'][path] = {
            operation: {
                "responses": {
                    "200": {
                        "description": "A successful service status response."
                    }
                }
            }
        }

        expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger)
        self.__add_error_responses(expected_swagger, path, operation)
        self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function)
        self.__add_default_expected_definitions(expected_swagger)
        self.__add_cors_options_operation(expected_swagger['paths'][path])
        self.__add_cors_response_headers(expected_swagger['paths'][path][operation])
        self.__add_operation_iam_security(expected_swagger['paths'][path][operation])
    
        swagger_processor.process_swagger(swagger)
        
        self.__validate_swagger(expected_swagger, swagger)
コード例 #2
0
    def test_additional_response_template_content(self):

        lambda_arn = 'TestLambda'
        path = '/test'
        operation = 'get'
        module = 'test'
        function = operation
        
        swagger = self.__get_minimal_swagger()

        swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = {
            'lambda': lambda_arn,
            'additional-response-template-content': {
                '200': '200aa',
                '400': '400aa',
                '500': '500aa'
            }
        }

        swagger['paths'][path] = {
            operation: {
                "responses": {
                    "200": {
                        "description": "A successful service status response."
                    }
                },
                swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME: {
                    'additional-response-template-content': {
                        '200': '200cc',
                        '400': '400cc',
                        '500': '500cc'
                    }
                }
            },
            swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME: {
                'additional-response-template-content': {
                    '200': '200bb',
                    '400': '400bb',
                    '500': '500bb'
                }
            }
        }

        additional_response_template_content = {
            '200': '200aa200bb200cc',
            '400': '400aa400bb400cc',
            '500': '500aa500bb500cc',
        }

        expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger)
        self.__add_error_responses(expected_swagger, path, operation)
        self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function, additional_response_template_content = additional_response_template_content)
        self.__add_default_expected_definitions(expected_swagger)
        self.__add_cors_options_operation(expected_swagger['paths'][path])
        self.__add_cors_response_headers(expected_swagger['paths'][path][operation])
        self.__add_operation_iam_security(expected_swagger['paths'][path][operation])
    
        swagger_processor.process_swagger(swagger)
        
        self.__validate_swagger(expected_swagger, swagger)
コード例 #3
0
    def test_parameter_reference(self):

        swagger = self.__get_minimal_swagger()

        lambda_arn = 'TestLambda'
        
        swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = {
            'lambda': lambda_arn
        }

        path = '/foo/{test_param}/bar'
        module = 'foo_bar'
        operation = 'get'
        function = operation

        swagger['parameters'] = {
            'ref_key': {
                'in': 'path',
                'name': 'test_param',
                'type': 'string'
            }
        }
                
        swagger['paths'][path] = {
            operation: {
                "responses": {
                    "200": {
                        "description": "A successful service status response."
                    }
                },
                "parameters": [
                    { "$ref": "#/parameters/ref_key" }
                ]
            }
        }

        expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger)
        self.__add_error_responses(expected_swagger, path, operation)
        self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function)
        self.__add_default_expected_definitions(expected_swagger)
        expected_parameters = [
            {
                'in': 'path',
                'name': 'test_param',
                'type': 'string'
            }
        ]
        self.__add_cors_options_operation(expected_swagger['paths'][path], parameters = expected_parameters)
        self.__add_cors_response_headers(expected_swagger['paths'][path][operation])
        self.__add_operation_iam_security(expected_swagger['paths'][path][operation])

        swagger_processor.process_swagger(swagger)
       
        self.__validate_swagger(expected_swagger, swagger)
コード例 #4
0
 def test_no_lambda_dispatch_object_with_integration_object(self):
     swagger = self.__get_minimal_swagger()
     swagger['paths']['/test'] = {
         "get": {
             "responses": {
                 "200": {
                     "description": "A successful service status response."
                 }
             },
             swagger_processor.API_GATEWAY_INTEGRATION_OBJECT_NAME: {
             }
         }
     }
     expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger)
     swagger_processor.process_swagger(swagger)
     self.__validate_swagger(expected_swagger, swagger)
コード例 #5
0
    def test_body_parameter(self):

        swagger = self.__get_minimal_swagger()

        lambda_arn = 'TestLambda'
        
        swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = {
            'lambda': lambda_arn
        }

        path = '/foo/bar'
        module = 'foo_bar'
        operation = 'post'
        function = operation
        
        swagger['paths'][path] = {
            operation: {
                "responses": {
                    "200": {
                        "description": "A successful service status response."
                    }
                },
                "parameters": [
                    {
                        "in": "body",
                        "name": 'test_param',
                        "schema": {
                            "type": "string"
                        }
                    }
                ]
            }
        }

        expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger)
        self.__add_error_responses(expected_swagger, path, operation)
        self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function)
        self.__add_default_expected_definitions(expected_swagger)
        self.__add_cors_options_operation(expected_swagger['paths'][path])
        self.__add_cors_response_headers(expected_swagger['paths'][path][operation])
        self.__add_operation_iam_security(expected_swagger['paths'][path][operation])

        swagger_processor.process_swagger(swagger)
        
        self.__validate_swagger(expected_swagger, swagger)
コード例 #6
0
    def test_all_operations(self):
        
        swagger = self.__get_minimal_swagger()

        lambda_arn = 'TestLambda'
        
        swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = {
            'lambda': lambda_arn
        }

        path = '/test'
        
        test_path = swagger['paths'][path] = {}

        # all but options, which gets special handling when cors is enabled (which it is by default)
        all_operations = ['get', 'put', 'post', 'delete', 'head', 'patch']

        for operation in all_operations:
            test_path[operation] = {
                "responses": {
                    "200": {
                        "description": "A successful service status response."
                    }
                }
            }

        test_path['x-foo'] = {} # should be ignored

        expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger)
        for operation in all_operations:
            self.__add_error_responses(expected_swagger, path, operation)
            self.__add_integration_object(expected_swagger, path, operation, lambda_arn, 'test', operation)
            self.__add_cors_response_headers(expected_swagger['paths'][path][operation])
            self.__add_operation_iam_security(expected_swagger['paths'][path][operation])
        
        self.__add_cors_options_operation(expected_swagger['paths'][path])
        self.__add_default_expected_definitions(expected_swagger)
    
        swagger_processor.process_swagger(swagger)
        
        self.__validate_swagger(expected_swagger, swagger)
コード例 #7
0
    def test_valid_swagger(self, mock_process_lambda_dispatch_objects,
                           mock_process_interface_implementation_objects):

        swagger = {
            "swagger": "2.0",
            "info": {
                "version": "1.0.0",
                "title": ""
            },
            "paths": {}
        }

        mock_context = mock.MagicMock()
        swagger_navigator_matcher = SwaggerNavigatorMatcher(swagger)

        swagger_processor.process_swagger(mock_context, swagger)

        mock_process_lambda_dispatch_objects.assert_called_with(
            mock_context, swagger_navigator_matcher)
        mock_process_interface_implementation_objects.assert_called_with(
            mock_context, swagger_navigator_matcher)