Exemplo n.º 1
0
    def test_setup_client(self, insanic_application):
        insanic_application.xray_recorder = AsyncAWSXRayRecorder()

        Incendiary.setup_client(insanic_application)
        from insanic.services.registry import registry

        assert registry.service_class == IncendiaryService
        assert hasattr(registry.service_class, "xray_recorder")
Exemplo n.º 2
0
def reset_recorder(insanic_application):
    Incendiary.load_config(insanic_application.config)

    yield
    from incendiary.xray.sampling import IncendiaryDefaultSampler

    insanic_application.sampler = IncendiaryDefaultSampler(insanic_application)
    xray_recorder.configure(**Incendiary.xray_config(insanic_application))
    xray_recorder.sampler = DefaultSampler()
Exemplo n.º 3
0
    def test_setup_middlewares(self, insanic_application, monkeypatch):

        Incendiary.setup_middlewares(insanic_application)

        assert "start_trace" in [
            m.__name__ for m in insanic_application.request_middleware
        ]
        assert "end_trace" in [
            m.__name__ for m in insanic_application.response_middleware
        ]
Exemplo n.º 4
0
    def test_init_but_errors(self, insanic_application, monkeypatch):
        def mock_check_prerequisites(*args, **kwargs):
            return ["FAILED"]

        monkeypatch.setattr(Incendiary, "_check_prerequisites",
                            mock_check_prerequisites)

        Incendiary.init_app(insanic_application)

        assert insanic_application.config.INCENDIARY_XRAY_ENABLED is False
Exemplo n.º 5
0
    def sanic_test_server_2(self, loop, test_server, monkeypatch):
        sr = {
            "version": 1,
            "rules": [],
            "default": {
                "fixed_target": 0,
                "rate": 0
            },
        }
        monkeypatch.setattr(settings,
                            "INCENDIARY_XRAY_SAMPLING_RULES",
                            sr,
                            raising=False)
        monkeypatch.setattr(settings,
                            "INCENDIARY_XRAY_ENABLED",
                            False,
                            raising=False)
        monkeypatch.setattr(Incendiary, "_check_prerequisites",
                            _mock_check_prerequisites)

        insanic_application = Insanic("incendiary")
        Incendiary.init_app(insanic_application)

        class MockView(InsanicView):
            authentication_classes = []
            permission_classes = []

            async def get(self, request, *args, **kwargs):
                segment = request.app.xray_recorder.current_segment()
                try:
                    assert segment.sampled is bool(
                        int(request.query_params.get("expected_sample")))
                    assert segment.in_progress is True
                except AssertionError:
                    traceback.print_exc()
                    raise

                return json({"i am": "service_2"}, status=201)

        class ErrorView(InsanicView):
            authentication_classes = []
            permission_classes = []

            async def get(self, request, *args, **kwargs):
                raise BadRequest("errors")

        insanic_application.add_route(MockView.as_view(), "/trace_2")
        insanic_application.add_route(ErrorView.as_view(), "/trace_error_2")

        return loop.run_until_complete(
            test_server(insanic_application, host="0.0.0.0"))
Exemplo n.º 6
0
    def test_prerequisites_host_error(self, insanic_application, monkeypatch):
        monkeypatch.setattr(settings, "INCENDIARY_XRAY_DAEMON_HOST", "xray")

        errors = Incendiary._check_prerequisites(insanic_application)

        assert errors != []
        assert errors[0].startswith("Could not resolve host")
Exemplo n.º 7
0
    def test_handle_error(
        self,
        insanic_application,
        monkeypatch,
        soft_fail,
        required,
        expected,
        caplog,
    ):
        EXPECTED_ERROR_MESSAGE = (
            "[XRAY] Tracing was not initialized because: Hello")

        if expected == "LOG":
            Incendiary._handle_error(insanic_application, ["Hello"])
            assert len(caplog.records) != 0
            assert caplog.records[-1].levelname == "CRITICAL"
            assert caplog.records[-1].message == EXPECTED_ERROR_MESSAGE
        elif expected == "EXCEPTION":
            with pytest.raises(ImproperlyConfigured) as e:
                Incendiary._handle_error(insanic_application, ["Hello"])
            assert str(e.value) == EXPECTED_ERROR_MESSAGE
Exemplo n.º 8
0
    def test_init(self, insanic_application, monkeypatch):
        def mock_check_prerequisites(*args, **kwargs):
            return []

        monkeypatch.setattr(Incendiary, "_check_prerequisites",
                            mock_check_prerequisites)

        Incendiary.init_app(insanic_application)

        assert "start_trace" in [
            m.__name__ for m in insanic_application.request_middleware
        ]
        assert "end_trace" in [
            m.__name__ for m in insanic_application.response_middleware
        ]

        from insanic.services.registry import registry

        assert registry.service_class == IncendiaryService
        assert hasattr(registry.service_class, "xray_recorder")
        assert (insanic_application.listeners["before_server_start"]
                [1].__name__ == "before_server_start_start_tracing")
Exemplo n.º 9
0
def incendiary_application():
    app = Insanic("tracer")
    Incendiary.init_app(app, AsyncAWSXRayRecorder())

    return app
Exemplo n.º 10
0
    def test_setup_listeners(self, insanic_application):
        Incendiary.setup_listeners(insanic_application)

        assert (insanic_application.listeners["before_server_start"]
                [1].__name__ == "before_server_start_start_tracing")