Exemple #1
0
def test_update_remote_system(mocker):
    client = get_test_client()
    mocker.patch.object(client, "get_alert", return_value=alert_data()[0])
    mocker.patch.object(client, "get_logs", return_value=[])
    mocker.patch.object(client, "upload_comment")
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    client.close_incident = True
    args = {
        "remoteId":
        "1",
        "status":
        1,
        "entries": [{
            "user": "******",
            "contents": "test contents",
            "tags": TEST_COMMENT_TAG,
        }],
        "incidentChanged":
        False,
    }
    investigation = {}
    response = update_remote_system(client, investigation, args)

    client.upload_comment.assert_called()

    assert response == "1"
Exemple #2
0
def test_fetch_incidents(mocker):
    client = get_test_client()

    mocker.patch.object(client, "get_alerts", return_value=alert_data())
    mocker.patch.object(client,
                        "get_escalation_path",
                        return_value=escalation_path_data())
    mocker.patch.object(client, "get_events", return_value=event_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    last_run = {
        "last_run": "2021-01-01T00:00:00Z",
        "existing_ids": [],
    }
    max_fetch = 100
    first_fetch_timestamp = "7 days"
    response, new_last_run = fetch_incidents(
        client,
        last_run,
        first_fetch_timestamp,
        max_fetch,
        TEST_MIRROR_DIRECTION,
        TEST_INTEGRATION_INSTANCE,
    )

    mock_response_0 = json.dumps(alert_response()[0])
    mock_response_1 = json.dumps(alert_response()[1])

    assert response[0]["rawJSON"] == mock_response_0
    assert response[1]["rawJSON"] == mock_response_1
    assert new_last_run["last_run"] == "2021-05-11T20:11:31Z"
    assert new_last_run["existing_ids"] == ["1", "2"]
Exemple #3
0
def test_update_remote_system_reopen(mocker):
    client = get_test_client()
    client.reopen_incident = True

    closed_alert = {
        "datetime_created": "2021-05-11T20:11:31Z",
        "datetime_firstevent": "2021-05-11T20:11:30Z",
        "datetime_closed": "2021-05-11T21:00:00Z",
        "datetime_events_added": "2021-05-11T20:11:31Z",
        "id": 1,
        "status": "closed",
    }
    mocker.patch.object(client, "get_alert", return_value=closed_alert)
    mocker.patch.object(client, "get_logs", return_value=[])
    mocker.patch.object(client, "reopen_alert")
    mocker.patch.object(client, "get_groups", return_value=group_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    args = {
        "remoteId": "1",
        "status": 1,
        "data": {},
        "delta": {},
        "incidentChanged": True,
    }
    investigation = {"lastOpen": "2021-05-12T00:00:00Z"}
    response = update_remote_system(client, investigation, args)

    client.reopen_alert.assert_called()

    assert response == "1"
Exemple #4
0
def test_update_remote_system_escalate(mocker):
    client = get_test_client()
    mocker.patch.object(client, "get_alert", return_value=alert_data()[0])
    mocker.patch.object(client, "get_logs", return_value=[])
    mocker.patch.object(client, "reassign_alert_to_org")
    mocker.patch.object(client,
                        "get_organizations",
                        return_value=organization_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    client.close_incident = True
    args = {
        "remoteId":
        "1",
        "status":
        1,
        "entries": [{
            "user": "******",
            "contents": "test contents",
            "tags": TEST_ESCALATE_TAG,
        }],
        "incidentChanged":
        False,
    }
    investigation = {}
    response = update_remote_system(client, investigation, args)

    client.reassign_alert_to_org.assert_called()

    assert response == "1"
Exemple #5
0
def test_fetch_incidents_existing_ids(mocker):
    client = get_test_client()

    mocker.patch.object(client, "get_alerts", return_value=alert_data())
    mocker.patch.object(client,
                        "get_escalation_path",
                        return_value=escalation_path_data())
    mocker.patch.object(client, "get_events", return_value=event_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    last_run = {
        "last_run": "2021-05-11T20:11:31Z",
        "existing_ids": ["1", "2"],
    }
    max_fetch = 100
    first_fetch_timestamp = "7 days"
    response, new_last_run = fetch_incidents(
        client,
        last_run,
        first_fetch_timestamp,
        max_fetch,
        TEST_MIRROR_DIRECTION,
        TEST_INTEGRATION_INSTANCE,
    )

    assert len(response) == 0
    assert new_last_run["last_run"] == "2021-05-11T20:11:31Z"
    assert new_last_run["existing_ids"] == ["1", "2"]
Exemple #6
0
def test_fetch_incidents_first_fetch(mocker):
    client = get_test_client()

    recent_escalation_path = ({
        "time": datetime.now().isoformat() + "Z",
        "group": "Default (dummy_org)",
        "group_id": "1",
        "type": "Group",
    }, )

    mocker.patch.object(client, "get_alerts", return_value=alert_data())
    mocker.patch.object(client,
                        "get_escalation_path",
                        return_value=recent_escalation_path)
    mocker.patch.object(client, "get_events", return_value=event_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    last_run = {}
    max_fetch = 100
    first_fetch_timestamp = "7 days"
    response, new_last_run = fetch_incidents(
        client,
        last_run,
        first_fetch_timestamp,
        max_fetch,
        TEST_MIRROR_DIRECTION,
        TEST_INTEGRATION_INSTANCE,
    )

    mock_response_0 = json.dumps(alert_response()[0])
    mock_response_1 = json.dumps(alert_response()[1])

    assert response[0]["rawJSON"] == mock_response_0
    assert response[1]["rawJSON"] == mock_response_1
    assert new_last_run["existing_ids"] == ["1", "2"]
Exemple #7
0
def test_get_remote_data_no_new_events(mocker):
    client = get_test_client()

    mocker.patch.object(client, "get_alert", return_value=alert_data()[0])
    mocker.patch.object(client, "get_comments", return_value=[])
    mocker.patch.object(client, "get_logs", return_value=[])
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    args = {
        "id": "1",
        "lastUpdate": "2022-01-01T00:00:00Z",
    }
    investigation = {}
    response = get_remote_data(client, investigation, args)

    assert "xsoar_trigger_events" not in response.mirrored_object
Exemple #8
0
def test_ztap_get_alert_entries(mocker):
    client = get_test_client()

    mocker.patch.object(client, "get_alert", return_value=alert_data())
    mocker.patch.object(client, "get_comments", return_value=comment_data())
    mocker.patch.object(client, "get_logs", return_value=log_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    args = {
        "id": "1",
    }
    response = ztap_get_alert_entries(client, args)

    entries_json = json.dumps(response)
    entry_response = json.dumps(comment_entries() + log_entries())

    assert entries_json == entry_response
Exemple #9
0
def test_fetch_incidents_already_escalated(mocker):
    client = get_test_client()

    old_escalation_path = (
        {
            "time": "2020-05-01T00:00:00Z",
            "group": "Default (dummy_org)",
            "group_id": "1",
            "type": "Group",
        },
        {
            "time": datetime.now().isoformat() + "Z",
            "group": "Default (dummy_org)",
            "group_id": "1",
            "type": "Group",
        },
    )

    mocker.patch.object(client, "get_alerts", return_value=alert_data())
    mocker.patch.object(client,
                        "get_escalation_path",
                        return_value=old_escalation_path)
    mocker.patch.object(client, "get_events", return_value=event_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    last_run = {
        "last_run": "2021-01-01T00:00:00Z",
        "existing_ids": [],
    }
    max_fetch = 100
    first_fetch_timestamp = "7 days"
    response, new_last_run = fetch_incidents(
        client,
        last_run,
        first_fetch_timestamp,
        max_fetch,
        TEST_MIRROR_DIRECTION,
        TEST_INTEGRATION_INSTANCE,
    )

    assert len(response) == 0
    assert new_last_run["last_run"] == "2021-05-11T20:11:31Z"
    assert new_last_run["existing_ids"] == []
Exemple #10
0
def test_get_remote_data_closed_incident(mocker):
    client = get_test_client()

    closed_alert = {
        "datetime_created": "2021-05-11T20:11:31Z",
        "datetime_firstevent": "2021-05-11T20:11:30Z",
        "datetime_closed": "2021-05-11T21:00:00Z",
        "datetime_events_added": "2021-05-11T20:11:31Z",
        "id": 1,
        "status": "closed",
        "review_outcome": "resolved",
    }
    mocker.patch.object(client, "get_alert", return_value=closed_alert)
    mocker.patch.object(client, "get_events", return_value=[])
    mocker.patch.object(client, "get_comments", return_value=[])
    mocker.patch.object(client, "get_logs", return_value=[])
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    client.close_incident = True
    args = {
        "id": "1",
        "lastUpdate": "2021-01-01T00:00:00Z",
    }
    investigation = {
        "lastOpen": "2021-05-01T00:00:00Z",
    }
    response = get_remote_data(client, investigation, args)

    assert len(response.entries) == 1
    assert response.entries[-1]["Contents"]["dbotIncidentClose"]

    # Reopened after close time
    investigation = {
        "lastOpen": "2021-05-12T00:00:00Z",
    }
    response = get_remote_data(client, investigation, args)

    assert len(response.entries) == 0
Exemple #11
0
def test_get_remote_data(mocker):
    client = get_test_client()

    mocker.patch.object(client, "get_alert", return_value=alert_data()[0])
    mocker.patch.object(client, "get_events", return_value=event_data())
    mocker.patch.object(client, "get_comments", return_value=comment_data())
    mocker.patch.object(client, "get_logs", return_value=log_data())
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    args = {
        "id": "1",
        "lastUpdate": "2021-01-01T00:00:00Z",
    }
    investigation = {}
    response = get_remote_data(client, investigation, args)

    alert_json = json.dumps(response.mirrored_object)
    mock_response = json.dumps(alert_response_remote())
    entries_json = json.dumps(response.entries)
    entry_response = json.dumps(comment_entries() + log_entries())

    assert alert_json == mock_response
    assert entries_json == entry_response
Exemple #12
0
def test_update_remote_system_closed(mocker):
    client = get_test_client()
    mocker.patch.object(client, "get_alert", return_value=alert_data()[0])
    mocker.patch.object(client, "get_logs", return_value=[])
    mocker.patch.object(client, "close_alert")
    mocker.patch.object(client, "get_active_user", return_value=user_data())

    client.close_incident = True
    args = {
        "remoteId": "1",
        "status": 2,
        "data": {
            "closeNotes": "Closed as duplicate.",
            "closeReason": "duplicate",
        },
        "delta": {},
        "incidentChanged": True,
    }
    investigation = {"closed": "2021-05-12T00:00:00Z"}
    response = update_remote_system(client, investigation, args)

    client.close_alert.assert_called()

    assert response == "1"