Ejemplo n.º 1
0
def test_charts_generation_on_zero_result_report():
    report = gen_report(
        generate("host", 0),
        generate("oid", 0),
        name="http_accept_test",
    )
    test_chart_keyword(report, 1)
Ejemplo n.º 2
0
def test_grouping_nvt_oid_per_type():
    scan_results = gen_report(hosts, oids, with_optional=True)
    data = {"report": {"report": scan_results}}
    report = transform(data)
    results = report.results[0]["results"]
    # so far refs are hardcoded to ten
    assert len(results[0]["nvt_refs_ref"]["CVE"]) == 10
Ejemplo n.º 3
0
def test_charts_generation_on_zero_severity_report():
    report = gen_report(
        generate("host", 10),
        generate("oid", 10, 0),
        name="http_accept_test",
    )
    test_chart_keyword(report, 3)
Ejemplo n.º 4
0
def test_report_contains_equipment():
    client = APIClient()
    url = reverse('transform')
    report = {
        'report': {
            'report': gen_report(generate('host', 10), generate('oid', 5))
        }
    }
    response = client.post(url, data=report, format='xml')
    assert response.status_code == 200
    result = cache.get(response.data)
    assert result['results'][0]['equipment']['os'] == "rusty rust rust"
    assert result['results'][0]['equipment']['ports'] is not None
Ejemplo n.º 5
0
def test_report_contains_equipment():
    client = APIClient()
    url = reverse("transform")
    report = {
        "report": {
            "report": gen_report(generate("host", 10), generate("oid", 5))
        }
    }
    response = client.post(url, data=report, format="xml")
    assert response.status_code == 200
    result = cache.get(response.data)
    assert result["results"][0]["equipment"]["os"] == "rusty rust rust"
    assert result["results"][0]["equipment"]["ports"] is not None
Ejemplo n.º 6
0
def test_report_contains_charts():
    client = APIClient()
    url = reverse('transform')
    report = {
        'report': {
            'report': gen_report(generate('host', 10), generate('oid', 5))
        }
    }
    response = client.post(url, data=report, format='xml')
    assert response.status_code == 200
    result = cache.get(response.data)
    assert result['overview'] is not None
    assert result['overview']['hosts'] is not None
    assert result['overview']['nvts'] is not None
Ejemplo n.º 7
0
def test_report_contains_charts():
    client = APIClient()
    url = reverse("transform")
    report = {
        "report": {
            "report": gen_report(generate("host", 10), generate("oid", 5))
        }
    }
    response = client.post(url, data=report, format="xml")
    assert response.status_code == 200
    result = cache.get(response.data)
    assert result["overview"] is not None
    assert result["overview"]["hosts"] is not None
    assert result["overview"]["nvts"] is not None
Ejemplo n.º 8
0
def test_http_accept(http_accept):
    url = reverse('transform')
    report = {
        'report': {
            'report':
            gen_report(
                generate('host', 1),
                generate('oid', 1),
                name='http_accept_test',
            )
        }
    }
    client = APIClient()
    response = client.post(url, data=report, format='xml')
    assert response.status_code == 200
    key = response.data
    report_url = reverse('report', kwargs={'name': key})
    html_report = client.get(report_url, HTTP_ACCEPT=http_accept)
    assert html_report.status_code == 200
    return html_report
Ejemplo n.º 9
0
def test_http_accept(
    http_accept,
    report=None,
):
    if not report:
        report = gen_report(
            generate("host", 1),
            generate("oid", 1),
            name="http_accept_test",
        )
    url = reverse("transform")
    report = {"report": {"report": report}}
    client = APIClient()
    response = client.post(url, data=report, format="xml")
    assert response.status_code == 200
    key = response.data
    report_url = reverse("report", kwargs={"name": key})
    html_report = client.get(report_url, HTTP_ACCEPT=http_accept)
    assert html_report.status_code == 200
    return html_report
Ejemplo n.º 10
0
def test_remove_general_from_equipment_port_list():
    scan_results = gen_report(hosts, oids, port="general/tcp")
    data = {"report": {"report": scan_results}}
    report = transform(data)
    assert report.results[0]["equipment"]["ports"] == []
Ejemplo n.º 11
0
def test_should_contain_non_general_ports():
    scan_results = gen_report(hosts, oids, port="80/tcp")
    data = {"report": {"report": scan_results}}
    report = transform(data)
    assert report.results[0]["equipment"]["ports"] == {"80/tcp"}
Ejemplo n.º 12
0
def test_remove_general_from_equipment_port_list():
    scan_results = gen_report(hosts, oids, port="general/tcp")
    data = {"report": {"report": scan_results}}
    report = transform(data)
    assert report.results[0]["equipment"]["ports"] == []


def test_grouping_nvt_oid_per_type():
    scan_results = gen_report(hosts, oids, with_optional=True)
    data = {"report": {"report": scan_results}}
    report = transform(data)
    results = report.results[0]["results"]
    # so far refs are hardcoded to ten
    assert len(results[0]["nvt_refs_ref"]["CVE"]) == 10


@pytest.mark.parametrize(
    "expected",
    [
        (2, gen_report(hosts, oids, with_optional=True)),
        (2, gen_report(hosts, oids, with_optional=False)),
        (0, gen_report([], [], with_optional=False)),
        (0, gen_report(None, [], with_optional=False)),
    ],
)
def test_report_generation_per_host(expected):
    amount_scans, scan_results = expected
    data = {"report": {"report": scan_results}}
    report = transform(data)
    assert len(report.results or []) == amount_scans
Ejemplo n.º 13
0
def test_generate_format_editor_html_report():
    def upload(key, data):
        cache_url = reverse('store_cache')
        to_send = {"key": key, "value": data}
        response = APIClient().post(cache_url, data=to_send, format='json')
        assert response.status_code == 200

    def upload_image(key, name, content):
        cache_url = reverse('store_cache')
        to_send = {
            "key": key,
            "value": {
                "name": name,
                "content": content,
            },
            "append": True,
        }
        response = APIClient().post(cache_url + '?append_image=true',
                                    data=to_send,
                                    format='json')
        assert response.status_code == 200

    images = [
        as_datalink("p1".encode(), "png"),
        as_datalink("p2".encode(), "jpg"),
    ]
    client = APIClient()
    url = reverse('transform')
    report = {
        'report': {
            'report':
            gen_report(
                generate('host', 10),
                generate('oid', 5),
                name='report_format_editor_test',
            )
        }
    }
    response = client.post(url, data=report, format='xml')
    assert response.status_code == 200
    key = response.data
    report_url = reverse('report', kwargs={'name': key})
    html_template = """
        <html>
            <head>
                <style>{{ css }}</style>
            </head>
            <body>
            <p>{{ name }}</p>
            <img src="{{ images.0 }}"/>
            <img src="{{ images.1 }}"/>
            </body>
            </html>
        """
    html_css = "body { background-color: #000; }"
    for i, content in enumerate(images):
        upload_image("{}images".format(key), str(i), content)
    upload("{}html_template".format(key), html_template)
    upload("{}html_css".format(key), html_css)
    # upload(images)
    html_report = client.get(report_url,
                             HTTP_ACCEPT='text/html+report_format_editor')
    assert html_report.status_code == 200
    report = str(html_report.getvalue())
    assert 'report_format_editor_test' in report
    assert 'background-color: #000' in report
    for content in images:
        assert "<img src=\"{}\"/>".format(content) in report
Ejemplo n.º 14
0
def test_generate_format_editor_html_report():
    def upload(key, data):
        cache_url = reverse("store_cache")
        to_send = {"key": key, "value": data}
        response = APIClient().post(cache_url, data=to_send, format="json")
        assert response.status_code == 200

    def upload_image(key, name, content):
        cache_url = reverse("store_cache")
        to_send = {
            "key": key,
            "value": {
                "name": name,
                "content": content,
            },
            "append": True,
        }
        response = APIClient().post(cache_url + "?append_image=true",
                                    data=to_send,
                                    format="json")
        assert response.status_code == 200

    images = [
        as_datalink("p1".encode(), "png"),
        as_datalink("p2".encode(), "jpg"),
    ]
    client = APIClient()
    url = reverse("transform")
    report = {
        "report": {
            "report":
            gen_report(
                generate("host", 10),
                generate("oid", 5),
                name="report_format_editor_test",
            )
        }
    }
    response = client.post(url, data=report, format="xml")
    assert response.status_code == 200
    key = response.data
    report_url = reverse("report", kwargs={"name": key})
    html_template = """
        <html>
            <head>
                <style>{{ css }}</style>
            </head>
            <body>
            <p>{{ name }}</p>
            <img src="{{ images.0 }}"/>
            <img src="{{ images.1 }}"/>
            </body>
            </html>
        """
    html_css = "body { background-color: #000; }"
    for i, content in enumerate(images):
        upload_image(f"{key}images", str(i), content)
    upload(f"{key}html_template", html_template)
    upload(f"{key}html_css", html_css)
    # upload(images)
    html_report = client.get(report_url,
                             HTTP_ACCEPT="text/html+report_format_editor")
    assert html_report.status_code == 200
    report = str(html_report.getvalue())
    assert "report_format_editor_test" in report
    assert "background-color: #000" in report
    for content in images:
        assert f'<img src="{content}"/>' in report
Ejemplo n.º 15
0
import pytest
from pheme.transformation.scanreport.gvmd import (
    transform,
    group_by_nvt,
    group_by_host,
)

from tests.generate_test_data import gen_report


oids = [uuid.uuid1().hex for _ in range(5)]
hosts = ['first', 'second']


@pytest.mark.parametrize(
    "scan_result", [gen_report(hosts, oids, with_optional=True)]
)
def test_group_by_nvt(scan_result):
    data = {'report': scan_result}
    result = transform(data, group_by=group_by_nvt)
    assert len(result.results.scans) == len(oids)


@pytest.mark.parametrize(
    "scan_result", [gen_report(hosts, oids, with_optional=False)]
)
def test_group_by_host(scan_result):
    data = {'report': {'report': scan_result}}
    result = transform(data, group_by=group_by_host)
    assert len(result.results.scans) == 2