Ejemplo n.º 1
0
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"
Ejemplo n.º 2
0
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,
    }
Ejemplo n.º 3
0
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