예제 #1
0
    async def insanic_application_with_event_polling(self, monkeypatch,
                                                     insanic_application,
                                                     create_global_sns,
                                                     filter_policy):
        monkeypatch.setattr(
            settings,
            "INIESTA_SNS_PRODUCER_GLOBAL_TOPIC_ARN",
            create_global_sns["TopicArn"],
            raising=False,
        )
        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            ["SNS_PRODUCER"],
            raising=False,
        )
        from iniesta import Iniesta

        Iniesta.init_app(insanic_application)

        client = await SNSClient.initialize(
            topic_arn=create_global_sns["TopicArn"])

        class TestView(InsanicView):
            permission_classes = []

            @client.publish_event(event="testEvent")
            def get(self, request, *args, **kwargs):
                return json_response({"help": "me"})

        insanic_application.add_route(TestView.as_view(), "/tests/event/")

        return insanic_application
예제 #2
0
    def insanic_application(
        self, set_global_topic_arn, set_filters, monkeypatch,
    ):
        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            ["EVENT_POLLING", "SNS_PRODUCER"],
            raising=False,
        )

        app = Insanic("xavi")
        Iniesta.init_app(app)
        yield app
예제 #3
0
    async def test_insanic_run_sns_not_set(
        self, insanic_application, test_server, monkeypatch
    ):
        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            ["EVENT_POLLING", "SNS_PRODUCER"],
            raising=False,
        )

        with pytest.raises(ImproperlyConfigured) as exc_info:
            Iniesta.init_app(insanic_application)
            await test_server(insanic_application)

        assert "INIESTA_SNS_PRODUCER_GLOBAL_TOPIC_ARN" in str(exc_info.value)
예제 #4
0
    def test_init_app_invalid_choice(
        self,
        monkeypatch,
        insanic_application,
        invalid_initialization_types,
        set_sns_arn,
    ):

        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            invalid_initialization_types,
            raising=False,
        )

        with pytest.raises(ImproperlyConfigured):
            Iniesta.init_app(insanic_application)
예제 #5
0
    def test_trying_to_initialize_more_than_once(
        self,
        insanic_application,
        set_sns_arn,
        initialization_types,
        monkeypatch,
    ):
        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            initialization_types,
            raising=False,
        )

        Iniesta.init_app(insanic_application)

        if initialization_types != ():
            with pytest.raises(
                ImproperlyConfigured,
                match="Iniesta has already been initialized!",
            ):
                Iniesta.init_app(insanic_application)
        else:
            assert Iniesta.initialization_type == 0
            Iniesta.init_app(insanic_application)
예제 #6
0
    async def test_insanic_run_bad_topic_arn(
        self,
        insanic_application,
        test_server,
        topic_arn,
        init_method_name,
        monkeypatch,
    ):
        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            ["EVENT_POLLING", "SNS_PRODUCER"],
            raising=False,
        )

        monkeypatch.setattr(
            settings, "INIESTA_SNS_PRODUCER_GLOBAL_TOPIC_ARN", topic_arn
        )

        Iniesta.init_app(insanic_application)
        with pytest.raises(botocore.exceptions.ClientError) as exc_info:
            await test_server(insanic_application)

        assert exc_info
예제 #7
0
    async def test_init_app(
        self,
        monkeypatch,
        insanic_application,
        set_sns_arn,
        initialization_types,
    ):
        monkeypatch.setattr(
            settings,
            "INIESTA_INITIALIZATION_TYPE",
            initialization_types,
            raising=False,
        )

        Iniesta.init_app(insanic_application)
        final = 0
        for i in initialization_types:
            final |= InitializationTypes[i]

        assert Iniesta.initialization_type == final
        assert Iniesta.config_imported is True

        checks = []

        after_server_start_listener_functions = self._get_function_list(
            insanic_application.listeners["after_server_start"]
        )

        before_server_stop_listener_functions = self._get_function_list(
            insanic_application.listeners["before_server_stop"]
        )

        if InitializationTypes.SNS_PRODUCER.name in initialization_types:

            assert (
                IniestaListener.after_server_start_producer_check
                in after_server_start_listener_functions
            )

            checks.append(InitializationTypes.SNS_PRODUCER.name)

        if InitializationTypes.QUEUE_POLLING.name in initialization_types:

            assert (
                IniestaListener.after_server_start_start_queue_polling
                in after_server_start_listener_functions
            )
            assert (
                IniestaListener.before_server_stop_stop_polling
                in before_server_stop_listener_functions
            )

            checks.append(InitializationTypes.QUEUE_POLLING.name)

        if InitializationTypes.EVENT_POLLING.name in initialization_types:

            assert (
                IniestaListener.after_server_start_event_polling
                in after_server_start_listener_functions
            )
            assert (
                IniestaListener.before_server_stop_stop_polling
                in before_server_stop_listener_functions
            )

            checks.append(InitializationTypes.EVENT_POLLING.name)

        if InitializationTypes.CUSTOM.name in initialization_types:
            checks.append(InitializationTypes.CUSTOM.name)

        assert sorted(checks) == sorted(initialization_types)