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")
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()
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 ]
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
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"))
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")
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
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")
def incendiary_application(): app = Insanic("tracer") Incendiary.init_app(app, AsyncAWSXRayRecorder()) return app
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")