def test_context_manager_log(self, mock_g): class DummyEventLogger(AbstractEventLogger): def __init__(self): self.records = [] def log( self, user_id: Optional[int], action: str, dashboard_id: Optional[int], duration_ms: Optional[int], slice_id: Optional[int], referrer: Optional[str], *args: Any, **kwargs: Any, ): self.records.append( {**kwargs, "user_id": user_id, "duration": duration_ms} ) logger = DummyEventLogger() with app.test_request_context(): mock_g.user = security_manager.find_user("gamma") with logger(action="foo", engine="bar"): pass assert logger.records == [ { "records": [{"path": "/", "engine": "bar"}], "user_id": "2", "duration": 15000.0, } ]
def test_log_this_with_extra_payload(self, mock_log): logger = DBEventLogger() @logger.log_this_with_extra_payload def test_func(arg1, add_extra_log_payload, karg1=1): time.sleep(0.1) add_extra_log_payload(foo="bar") return arg1 * karg1 with app.test_request_context(): result = test_func(1, karg1=2) # pylint: disable=no-value-for-parameter payload = mock_log.call_args[1] self.assertEqual(result, 2) self.assertEqual( payload["records"], [ { "foo": "bar", "path": "/", "karg1": 2, "object_ref": test_func.__qualname__, } ], ) self.assertGreaterEqual(payload["duration_ms"], 100)
def test_log_with_context_user_null(self, mock_g): class DummyEventLogger(AbstractEventLogger): def __init__(self): self.records = [] def log( self, user_id: Optional[int], action: str, dashboard_id: Optional[int], duration_ms: Optional[int], slice_id: Optional[int], referrer: Optional[str], *args: Any, **kwargs: Any, ): self.records.append( {**kwargs, "user_id": user_id, "duration": duration_ms} ) logger = DummyEventLogger() with app.test_request_context(): mock_g.side_effect = Exception("oops") logger.log_with_context( action="foo", duration=timedelta(days=64, seconds=29156, microseconds=10), object_ref={"baz": "food"}, log_to_statsd=False, payload_override={"engine": "sqllite"}, ) assert logger.records[0]["user_id"] == None
def test_log_this_decorator(self, mock_log): logger = DBEventLogger() @logger.log_this def test_func(): time.sleep(0.05) return 1 with app.test_request_context(): result = test_func() self.assertEqual(result, 1) assert mock_log.call_args[1]["duration_ms"] >= 50
def test_log_manually_decorator(self, mock_log): logger = DBEventLogger() @logger.log_manually def test_func(arg1, update_log_payload, karg1=1): time.sleep(0.1) update_log_payload(foo="bar") return arg1 * karg1 with app.test_request_context(): result = test_func(1, karg1=2) # pylint: disable=no-value-for-parameter self.assertEqual(result, 2) # should contain only manual payload self.assertEqual(mock_log.call_args[1]["records"], [{ "foo": "bar" }]) assert mock_log.call_args[1]["duration_ms"] >= 100
def test_context_manager_log_with_context(self, mock_g): class DummyEventLogger(AbstractEventLogger): def __init__(self): self.records = [] def log( self, user_id: Optional[int], action: str, dashboard_id: Optional[int], duration_ms: Optional[int], slice_id: Optional[int], referrer: Optional[str], *args: Any, **kwargs: Any, ): self.records.append( {**kwargs, "user_id": user_id, "duration": duration_ms} ) logger = DummyEventLogger() with app.test_request_context(): mock_g.user = security_manager.find_user("gamma") logger.log_with_context( action="foo", duration=timedelta(days=64, seconds=29156, microseconds=10), object_ref={"baz": "food"}, log_to_statsd=False, payload_override={"engine": "sqllite"}, ) assert logger.records == [ { "records": [ { "path": "/", "object_ref": {"baz": "food"}, "payload_override": {"engine": "sqllite"}, } ], "user_id": "2", "duration": 5558756000, } ]
def test_log_this(self, mock_log): logger = DBEventLogger() @logger.log_this def test_func(): time.sleep(0.05) return 1 with app.test_request_context("/superset/dashboard/1/?myparam=foo"): result = test_func() payload = mock_log.call_args[1] self.assertEqual(result, 1) self.assertEqual( payload["records"], [{ "myparam": "foo", "path": "/superset/dashboard/1/", "url_rule": "/superset/dashboard/<dashboard_id_or_slug>/", "object_ref": test_func.__qualname__, }], ) self.assertGreaterEqual(payload["duration_ms"], 50)