Exemplo n.º 1
0
def test_virus_scan_document_file_not_found(get_signed_url_mock, requests_mock):
    """Tests handling of a not found error from URL."""
    get_signed_url_mock.return_value = "http://url"
    document = DocumentFactory()
    requests_mock.get("http://url", status_code=404)
    with pytest.raises(
        VirusScanException,
        match=rf"Unable to download the document with ID {document.pk} "
        rf"for scanning \(status_code\=404\).",
    ):
        virus_scan_document.apply(args=(str(document.id),)).get()
    document.refresh_from_db()
    assert document.av_clean is None
Exemplo n.º 2
0
def test_virus_scan_document_bad_response_status(get_signed_url_mock, requests_mock):
    """Tests handling of error response statuses from the AV service."""
    get_signed_url_mock.return_value = "http://url"
    document = DocumentFactory()
    requests_mock.get(
        "http://url",
        text="hello!",
        headers={"Content-Type": "application/json", "Content-Length": "1000"},
    )
    requests_mock.post("http://av-service/", status_code=status.HTTP_400_BAD_REQUEST)

    with pytest.raises(HTTPError) as excinfo:
        virus_scan_document.apply(args=(str(document.id),)).get()
    document.refresh_from_db()
    assert document.av_clean is None
    assert str(excinfo.value) == "400 Client Error: None for url: http://av-service/"
Exemplo n.º 3
0
def test_virus_scan_document_clean(get_signed_url_mock, requests_mock):
    """Tests virus scanning a clean file."""
    get_signed_url_mock.return_value = "http://url"
    document = DocumentFactory()
    requests_mock.get(
        "http://url",
        text="hello!",
        headers={"Content-Type": "application/json", "Content-Length": "1000"},
    )
    requests_mock.post(
        "http://av-service/", json={"malware": False, "reason": None, "time": 0.2}
    )

    virus_scan_document.apply(args=(str(document.id),)).get()
    document.refresh_from_db()
    assert document.av_clean is True
Exemplo n.º 4
0
def test_virus_scan_document_bad_response_body(get_signed_url_mock, requests_mock):
    """Tests handling of unexpected response bodies from the AV service."""
    get_signed_url_mock.return_value = "http://url"
    document = DocumentFactory()
    requests_mock.get(
        "http://url",
        text="hello!",
        headers={"Content-Type": "application/json", "Content-Length": "1000"},
    )
    requests_mock.post("http://av-service/", json={"too_many_cats": "never"})

    error_message = (
        f"Unexpected response from AV service: {{'too_many_cats': 'never'}} "
        f"when scanning document with ID {document.pk}"
    )

    with pytest.raises(VirusScanException, match=error_message):
        virus_scan_document.apply(args=(str(document.id),)).get()

    document.refresh_from_db()
    assert document.av_clean is None
    assert document.status == UPLOAD_STATUSES.virus_scanning_failed
    assert document.av_reason == error_message