Esempio n. 1
0
    async def test_stop_allows_only_one_stop_process_to_run_concurrently(
            self, three_level_app_chain):
        with connection_manager() as conn:
            pipeline = BasePipeline(connection_name=conn.name,
                                    installed_apps=three_level_app_chain)

            # Mock all of the apps that have been configured for this pipeline.
            for key, app in pipeline._installed_apps.items():
                app_mock = MagicMock(app.__class__)

                pipeline._installed_apps[key] = app_mock

            # Simulate all apps active
            pipeline._active_apps = OrderedDict(pipeline.apps.items())

            asyncio.create_task(pipeline.stop())
            asyncio.create_task(pipeline.stop())
            asyncio.create_task(pipeline.stop())
            await pipeline.stop()

            for app in pipeline.apps.values():
                assert app.stop.call_count == 1

            # Wait for separate tasks to complete
            tasks = asyncio.all_tasks()
            await asyncio.wait(tasks, timeout=0.1)
Esempio n. 2
0
    async def test_stop_stops_apps_in_top_down_order(self,
                                                     three_level_app_chain):
        with connection_manager() as conn:
            pipeline = BasePipeline(connection_name=conn.name,
                                    installed_apps=three_level_app_chain)

            mock_parent = MagicMock()

            # Mock all of the apps that have been configured for this pipeline.
            for key, app in pipeline._installed_apps.items():
                app_mock = MagicMock(app.__class__)
                app_mock.name = app.name

                setattr(mock_parent, app.name, app_mock)

                pipeline._installed_apps[key] = app_mock

            # Simulate all apps active
            pipeline._active_apps = OrderedDict(pipeline.apps.items())

            await pipeline.stop()

            for app in pipeline.apps.values():
                assert app.stop.called
                assert app.stop.call_count == 1

            call_order = [
                call[0].rstrip("stop").rstrip(".")
                for call in mock_parent.method_calls[-len(pipeline.apps):]
            ]
            assert call_order == list(pipeline.apps.keys())
Esempio n. 3
0
    async def test_send_stop(self, three_level_stop_app_chain):
        with connection_manager() as conn:
            pipeline = BasePipeline(connection_name=conn.name,
                                    installed_apps=three_level_stop_app_chain)

            # Simulate all apps active
            pipeline._active_apps = OrderedDict(pipeline.apps.items())

            message = await pipeline.send(admin.TestRequestMessage("Test"))
            assert message.TestReqID == "Test s3"
Esempio n. 4
0
    def test_prep_processing_pipeline_inbound_order(self,
                                                    three_level_app_chain):
        with connection_manager() as conn:
            pipeline = BasePipeline(connection_name=conn.name,
                                    installed_apps=three_level_app_chain)

            # Simulate all apps active
            pipeline._active_apps = OrderedDict(pipeline.apps.items())

            func, app_chain = pipeline._setup_message_handling(
                pipeline.INBOUND_PROCESSING)
            assert func == "on_receive"
            assert next(app_chain).name == "below"
            assert next(app_chain).name == "middle"
            assert next(app_chain).name == "top"
Esempio n. 5
0
    async def test_stop_no_op_if_already_stopped(self, three_level_app_chain):
        with connection_manager() as conn:
            pipeline = BasePipeline(connection_name=conn.name,
                                    installed_apps=three_level_app_chain)

            # Mock all of the apps that have been configured for this pipeline.
            for key, app in pipeline._installed_apps.items():
                app_mock = MagicMock(app.__class__)

                pipeline._installed_apps[key] = app_mock

            # Simulate all apps active
            pipeline._active_apps = OrderedDict(pipeline.apps.items())

            await pipeline.stop()
            await pipeline.stop()

            for app in pipeline.apps.values():
                assert app.stop.called
                assert app.stop.call_count == 1