Esempio n. 1
0
def test_censysconnector_search_too_much_results_error(
        censys_id_value: str, censys_secret_value: str, capsys) -> None:
    """
    Check how we can handle situation when we got
    more results than we can afford with our API
    plan.

    Interesting fact, that if we will search
    with empty request, we will get a lot of
    trash - that's cool in case of this test,
    but kinda strange in case of API :)
    :param censys_id_value: censys id
    :param censys_secret_value: censys secret
    :param capsys: catch output of the function
    :return: None
    """
    api = CensysConnector(api_id=censys_id_value,
                          api_secret=censys_secret_value)
    api.search(query="")
    output = capsys.readouterr().out
    assert (
        "Only the first 1,000 search results are available. Retry search with 1,000 results limit."
        in output)

    # check if we get 1.000 of results - it is
    # maximum quantity for free plan
    assert len(api.get_raw_results()) == 1000
    assert api.censys_results_count == 1000
Esempio n. 2
0
def test_censysconnector_get_raw_results(
    censys_id_value: str, censys_secret_value: str
) -> None:
    """
    Check raw results keys
    :param censys_id_value: censys id
    :param censys_secret_value: censys secret
    :return: None
    """
    api = CensysConnector(api_id=censys_id_value, api_secret=censys_secret_value)
    api.search(query="nginx", max_records=10)
    results = api.get_raw_results()
    assert len(results) == 10
    for result in results:
        assert Counter(result.keys()) == Counter(
            [
                "ip",
                "location.country",
                "location.latitude",
                "location.longitude",
                "ports",
                "protocols",
                "autonomous_system.name",
            ]
        )
Esempio n. 3
0
def test_censysconnector_search_not_initialized_api(capsys) -> None:
    """
    Check case when our API object was not
    initialized properly (we put wrong key,
    not put key at all, etc.) but we still
    try to search for something
    :param capsys: catch output of the function
    :return: None
    """
    api = CensysConnector(api_id="not_valid", api_secret="not_valid")
    api.search(query="", max_records=10)
    output = capsys.readouterr().out
    for expected_output in ["Censys invalid API keys error", "403 (unathorized)"]:
        assert expected_output in output
Esempio n. 4
0
def test_censysconnector_search_api_malformed_request(
    censys_id_value: str, censys_secret_value: str, capsys
) -> None:
    """
    Check how we can handle malformed requests
    :param censys_id_value: censys id
    :param censys_secret_value: censys secret
    :param capsys: catch output of the function
    :return: None
    """
    api = CensysConnector(api_id=censys_id_value, api_secret=censys_secret_value)
    api.search(query=None, max_records=10)
    output = capsys.readouterr().out
    for expected_output in ["Censys API core exception", "400 (malformed_request)"]:
        assert expected_output in output
Esempio n. 5
0
def test_censysconnector_get_results(censys_id_value: str,
                                     censys_secret_value: str) -> None:
    """
    Check results parser
    :param censys_id_value: censys id
    :param censys_secret_value: censys secret
    :return: None
    """
    api = CensysConnector(api_id=censys_id_value,
                          api_secret=censys_secret_value)
    api.search(query="", max_records=10)
    results = api.get_results()
    assert len(results) == 10
    for result in results:
        assert sorted(result.keys()) == sorted(
            ["ip", "country", "lat", "lng", "port", "proto"])
Esempio n. 6
0
def test_censysconnector_search_error(
    censys_id_value: str, censys_secret_value: str
) -> None:
    """
    Raise CensysConnector error and check output of it
    :param censys_id_value: censys id
    :param censys_secret_value: censys secret
    :return: None
    """
    api = CensysConnector(api_id=censys_id_value, api_secret=censys_secret_value)
    with patch(
        "grinder.censysconnector.CensysConnector.search",
        side_effect=CensysConnectorSearchError("test"),
    ):
        with raises(Exception) as init_err:
            api.search("", max_records=10)
        assert "Error occured in Censys Connector module" in str(init_err.value)