def test_sentry_works_fine_with_relative_paths(): event = _create_exception_event_in_file("rasa/train.py") stripped = telemetry.strip_sensitive_data_from_sentry_event(event) assert stripped is not None stack_frames = stripped["exception"]["values"][0]["stacktrace"]["frames"] assert stack_frames[0]["filename"] == "rasa/train.py"
def test_sentry_strips_absolute_path_from_dist_packages(): event = _create_exception_event_in_file( "C:\\Users\\tmbo\\AppData\\Roaming\\Python\\Python35\\dist-packages\\rasa\\train.py" ) stripped = telemetry.strip_sensitive_data_from_sentry_event(event) assert stripped is not None stack_frames = stripped["exception"]["values"][0]["stacktrace"]["frames"] assert stack_frames[0]["filename"] == f"dist-packages{os.path.sep}rasa\\train.py"
def test_sentry_strips_absolute_path_from_site_packages(): event = _create_exception_event_in_file( "/Users/tmbo/Library/Caches/pypoetry/virtualenvs/rasa-U5VQkfdm-py3.7/lib/python3.7/site-packages/rasa/train.py" ) stripped = telemetry.strip_sensitive_data_from_sentry_event(event) assert stripped is not None stack_frames = stripped["exception"]["values"][0]["stacktrace"]["frames"] assert stack_frames[0]["filename"] == f"site-packages{os.path.sep}rasa/train.py"
def test_sentry_event_pii_removal(): # this is an example event taken from sentry (generated by putting a print # into `telemetry.strip_sensitive_data_from_sentry_event`) event = { "level": "error", "exception": { "values": [{ "module": None, "type": "Exception", "value": "Some unexpected exception.", "mechanism": { "type": "excepthook", "handled": False }, "stacktrace": { "frames": [ { "filename": "rasa", "abs_path": "/Users/tmbo/Library/Caches/pypoetry/virtualenvs/rasa-U5VQkfdm-py3.6/bin/rasa", "function": "<module>", "module": "__main__", "lineno": 33, "pre_context": [ "globals().setdefault('load_entry_point', importlib_load_entry_point)", "", "", "if __name__ == '__main__':", " sys.argv[0] = re.sub(r'(-script\\.pyw?|\\.exe)?$', '', sys.argv[0])", ], "context_line": " sys.exit(load_entry_point('rasa', 'console_scripts', 'rasa')())", "post_context": [], }, { "filename": "rasa/__main__.py", "abs_path": "/Users/tmbo/lastmile/bot-ai/rasa/rasa/__main__.py", "function": "main", "module": "rasa.__main__", "lineno": 113, "pre_context": [ "", ' if hasattr(cmdline_arguments, "func"):', " rasa.utils.io.configure_colored_logging(log_level)", " set_log_and_warnings_filters()", " rasa.telemetry.initialize_error_reporting()", ], "context_line": " cmdline_arguments.func(cmdline_arguments)", "post_context": [ ' elif hasattr(cmdline_arguments, "version"):', " print_version()", " else:", " # user has not provided a subcommand, let's print the help", ' logger.error("No command specified.")', ], "in_app": True, }, { "filename": "rasa/cli/train.py", "abs_path": "/Users/tmbo/lastmile/bot-ai/rasa/rasa/cli/train.py", "function": "train", "module": "rasa.cli.train", "lineno": 69, "pre_context": [ " training_files = [", ' get_validated_path(f, "data", DEFAULT_DATA_PATH, none_is_valid=True)', " for f in args.data", " ]", "", ], "context_line": ' raise Exception("Some unexpected exception.")', "post_context": [ "", " return rasa.train(", " domain=domain,", " config=config,", " training_files=training_files,", ], "in_app": True, }, ] }, }] }, "event_id": "73dd4980a5fd498d96fec2ee3ee0cb86", "timestamp": "2020-09-14T14:37:14.237740Z", "breadcrumbs": { "values": [] }, "release": "rasa-2.0.0a4", "environment": "production", "server_name": "99ec342261934892aac1784d1ac061c1", "sdk": { "name": "sentry.python", "version": "0.17.5", "packages": [{ "name": "pypi:sentry-sdk", "version": "0.17.5" }], "integrations": ["atexit", "dedupe", "excepthook"], }, "platform": "python", } stripped = telemetry.strip_sensitive_data_from_sentry_event(event) for value in stripped.get("exception", {}).get("values", []): for frame in value.get("stacktrace", {}).get("frames", []): # make sure absolute path got removed from all stack entries assert not frame.get("abs_path")
def test_sentry_drops_error_in_custom_path(): event = _create_exception_event_in_file("/my_project/mymodule.py") stripped = telemetry.strip_sensitive_data_from_sentry_event(event) assert stripped is None