def test_with_attachments(default_project, task_runner, monkeypatch, preprocess_event): payload = get_normalized_event({"message": "hello world"}, default_project) event_id = payload["event_id"] attachment_id = "ca90fb45-6dd9-40a0-a18f-8693aa621abb" project_id = default_project.id start_time = time.time() - 3600 process_attachment_chunk({ "payload": b"Hello ", "event_id": event_id, "project_id": project_id, "id": attachment_id, "chunk_index": 0, }) process_attachment_chunk({ "payload": b"World!", "event_id": event_id, "project_id": project_id, "id": attachment_id, "chunk_index": 1, }) process_event({ "payload": json.dumps(payload), "start_time": start_time, "event_id": event_id, "project_id": project_id, "remote_addr": "127.0.0.1", "attachments": [{ "id": attachment_id, "name": "lol.txt", "content_type": "text/plain", "attachment_type": "custom.attachment", "chunks": 2, }], }) kwargs, = preprocess_event cache_key = u"e:{event_id}:{project_id}".format(event_id=event_id, project_id=project_id) assert kwargs == { "cache_key": cache_key, "data": payload, "event_id": event_id, "project": default_project, "start_time": start_time, } att, = attachment_cache.get(cache_key) assert att.data == b"Hello World!" assert att.name == "lol.txt" assert att.content_type == "text/plain" assert att.type == "custom.attachment"
def test_deduplication_works(default_project, task_runner, monkeypatch, preprocess_event): payload = get_normalized_event({"message": "hello world"}, default_project) event_id = payload["event_id"] project_id = default_project.id start_time = time.time() - 3600 for _ in range(2): process_event({ "payload": json.dumps(payload), "start_time": start_time, "event_id": event_id, "project_id": project_id, "remote_addr": "127.0.0.1", }) kwargs, = preprocess_event assert kwargs == { "cache_key": u"e:{event_id}:{project_id}".format(event_id=event_id, project_id=project_id), "data": payload, "event_id": event_id, "project": default_project, "start_time": start_time, }
def test_transactions_spawn_save_event_transaction( default_project, task_runner, preprocess_event, save_event_transaction, ): project_id = default_project.id now = datetime.datetime.now() event = { "type": "transaction", "timestamp": now.isoformat(), "start_timestamp": now.isoformat(), "spans": [], "contexts": { "trace": { "parent_span_id": "8988cec7cc0779c1", "type": "trace", "op": "foobar", "trace_id": "a7d67cf796774551a95be6543cacd459", "span_id": "babaae0d4b7512d9", "status": "ok", } }, } payload = get_normalized_event(event, default_project) event_id = payload["event_id"] start_time = time.time() - 3600 process_event( { "payload": json.dumps(payload), "start_time": start_time, "event_id": event_id, "project_id": project_id, "remote_addr": "127.0.0.1", }, projects={default_project.id: default_project}, ) assert not len(preprocess_event) assert save_event_transaction.delay.call_args[0] == () assert save_event_transaction.delay.call_args[1] == dict( cache_key=f"e:{event_id}:{project_id}", data=None, start_time=start_time, event_id=event_id, project_id=project_id, )
def test_with_attachments(default_project, task_runner, missing_chunks, monkeypatch): monkeypatch.setattr("sentry.features.has", lambda *a, **kw: True) payload = get_normalized_event({"message": "hello world"}, default_project) event_id = payload["event_id"] attachment_id = "ca90fb45-6dd9-40a0-a18f-8693aa621abb" project_id = default_project.id start_time = time.time() - 3600 if not missing_chunks: process_attachment_chunk( { "payload": b"Hello ", "event_id": event_id, "project_id": project_id, "id": attachment_id, "chunk_index": 0, }, projects={default_project.id: default_project}, ) process_attachment_chunk( { "payload": b"World!", "event_id": event_id, "project_id": project_id, "id": attachment_id, "chunk_index": 1, }, projects={default_project.id: default_project}, ) with task_runner(): process_event( { "payload": json.dumps(payload), "start_time": start_time, "event_id": event_id, "project_id": project_id, "remote_addr": "127.0.0.1", "attachments": [ { "id": attachment_id, "name": "lol.txt", "content_type": "text/plain", "attachment_type": "custom.attachment", "chunks": 2, } ], }, projects={default_project.id: default_project}, ) persisted_attachments = list( EventAttachment.objects.filter(project_id=project_id, event_id=event_id) ) if not missing_chunks: (attachment,) = persisted_attachments file = File.objects.get(id=attachment.file_id) assert file.type == "custom.attachment" assert file.headers == {"Content-Type": "text/plain"} file_contents = file.getfile() assert file_contents.read() == b"Hello World!" assert file_contents.name == "lol.txt" else: assert not persisted_attachments