def test_disable_python(self, mock_gen_aws_client,
                            mock_get_serialized_lambda_function):
        mock_client = Mock()
        mock_gen_aws_client.return_value = mock_client

        mock_client.get_function = MagicMock(
            return_value={
                "Configuration": {
                    "FunctionName":
                    "lambdaF",
                    "Runtime":
                    "python3.6",
                    "FunctionArn":
                    "arn:aws:lambda:us-east-2:599817902985:function:lambdaF",
                    "Handler":
                    "sentry_sdk.integrations.init_serverless_sdk.sentry_lambda_handler",
                    "Layers": [
                        {
                            "Arn":
                            "arn:aws:lambda:us-east-2:1234:layer:something-else:2"
                        },
                        {
                            "Arn":
                            "arn:aws:lambda:us-east-2:1234:layer:my-python-layer:34"
                        },
                    ],
                    "Environment": {
                        "Variables": {
                            "SENTRY_INITIAL_HANDLER":
                            "lambda_handler.test_handler",
                            "SENTRY_DSN": self.sentry_dsn,
                            "SENTRY_TRACES_SAMPLE_RATE": "1.0",
                            "OTHER": "hi",
                        }
                    },
                },
            })
        mock_client.update_function_configuration = MagicMock()
        return_value = {
            "name": "lambdaF",
            "runtime": "python3.6",
            "version": -1,
            "outOfDate": False,
            "enabled": False,
        }
        mock_get_serialized_lambda_function.return_value = return_value

        assert self.get_response(action="disable",
                                 target="lambdaF").data == return_value

        mock_client.get_function.assert_called_with(FunctionName="lambdaF")

        mock_client.update_function_configuration.assert_called_with(
            FunctionName="lambdaF",
            Layers=["arn:aws:lambda:us-east-2:1234:layer:something-else:2"],
            Environment={"Variables": {
                "OTHER": "hi"
            }},
            Handler="lambda_handler.test_handler",
        )
Exemplo n.º 2
0
    def test_update_version(self, mock_gen_aws_client,
                            mock_get_serialized_lambda_function):
        mock_client = Mock()
        mock_gen_aws_client.return_value = mock_client

        mock_client.get_function = MagicMock(
            return_value={
                "Configuration": {
                    "FunctionName":
                    "lambdaD",
                    "Runtime":
                    "nodejs10.x",
                    "FunctionArn":
                    "arn:aws:lambda:us-east-2:599817902985:function:lambdaD",
                    "Layers": [
                        {
                            "Arn":
                            "arn:aws:lambda:us-east-2:1234:layer:something-else:2"
                        },
                        {
                            "Arn":
                            "arn:aws:lambda:us-east-2:1234:layer:my-layer:2"
                        },
                    ],
                    "Environment": {
                        "Variables": {
                            "NODE_OPTIONS": "-r @sentry/serverless/dist/auto",
                            "SENTRY_DSN": self.sentry_dsn,
                            "SENTRY_TRACES_SAMPLE_RATE": "1.0",
                            "OTHER": "hi",
                        }
                    },
                },
            })
        mock_client.update_function_configuration = MagicMock()
        return_value = {
            "name": "lambdaD",
            "runtime": "nodejs10.x",
            "version": 3,
            "outOfDate": False,
            "enabled": True,
        }
        mock_get_serialized_lambda_function.return_value = return_value

        assert self.get_response(action="updateVersion",
                                 target="lambdaD").data == return_value

        mock_client.get_function.assert_called_with(FunctionName="lambdaD")

        mock_client.update_function_configuration.assert_called_with(
            FunctionName="lambdaD",
            Layers=[
                {
                    "Arn":
                    "arn:aws:lambda:us-east-2:1234:layer:something-else:2"
                },
                "arn:aws:lambda:us-east-2:1234:layer:my-layer:3",
            ],
        )
    def test_enable_python_layer_on_already_enabled(
            self, mock_gen_aws_client, mock_get_serialized_lambda_function):
        """
        Test that ensures that if sentry-sdk is already enabled, then
        re-enabling it should not override the env variables since it could be
        problematic since the SENTRY_INITIAL_HANDLER env variable could be overriden
        the second time with "sentry_sdk.integrations.init_serverless_sdk.
        sentry_lambda_handler" and then disabling the sentry-sdk, would break
        the function because the Handler will be updated with an incorrect
        SENTRY_INITIAL_HANDLER value
        """
        mock_client = Mock()
        mock_gen_aws_client.return_value = mock_client

        mock_client.get_function = MagicMock(
            return_value={
                "Configuration": {
                    "FunctionName":
                    "lambdaZ",
                    "Runtime":
                    "python3.8",
                    "Handler":
                    "sentry_sdk.integrations.init_serverless_sdk.sentry_lambda_handler",
                    "FunctionArn":
                    "arn:aws:lambda:us-east-2:599817902985:function:lambdaZ",
                    "Layers": [
                        "arn:aws:lambda:us-east-2:1234:layer:something-else:2",
                        "arn:aws:lambda:us-east-2:1234:layer:my-python-layer:34",
                    ],
                    "Environment": {
                        "Variables": {
                            "SENTRY_INITIAL_HANDLER":
                            "lambda_handler.test_handler",
                            "SENTRY_DSN": self.sentry_dsn,
                            "SENTRY_TRACES_SAMPLE_RATE": "1.0",
                        }
                    },
                },
            })
        mock_client.update_function_configuration = MagicMock()
        return_value = {
            "name": "lambdaZ",
            "runtime": "python3.8",
            "version": 3,
            "outOfDate": False,
            "enabled": True,
        }
        mock_get_serialized_lambda_function.return_value = return_value

        assert self.get_response(action="enable",
                                 target="lambdaZ").data == return_value

        mock_client.get_function.assert_called_with(FunctionName="lambdaZ")

        mock_client.update_function_configuration.assert_called_with(
            FunctionName="lambdaZ",
            Layers=[
                "arn:aws:lambda:us-east-2:1234:layer:something-else:2",
                "arn:aws:lambda:us-east-2:1234:layer:my-python-layer:34",
            ],
            Environment={
                "Variables": {
                    "SENTRY_INITIAL_HANDLER": "lambda_handler.test_handler",
                    "SENTRY_DSN": self.sentry_dsn,
                    "SENTRY_TRACES_SAMPLE_RATE": "1.0",
                }
            },
            Handler=
            "sentry_sdk.integrations.init_serverless_sdk.sentry_lambda_handler",
        )