Example #1
0
    def test_iter_can_be_looped_over_multiple_times(
        self, mock_response_dict_no_data_node
    ):
        response = Py42Response(mock_response_dict_no_data_node)
        items = 0
        for _ in response["item_list_key"]:
            items += 1
        assert items == 2

        items = 0

        for _ in response["item_list_key"]:
            items += 1
        assert items == 2
Example #2
0
def test_show_when_alert_does_not_have_observations_and_includes_observations_outputs_no_observations(
        mocker, cli_state, runner):
    response = mocker.MagicMock(spec=Response)
    response_text = dict(ALERT_DETAILS_FULL_RESPONSE)
    response_text["alerts"][0]["observations"] = None
    response.text = json.dumps(response_text)
    cli_state.sdk.alerts.get_details.return_value = Py42Response(response)
    result = runner.invoke(
        cli,
        ["alerts", "show", "TEST-ALERT-ID", "--include-observations"],
        obj=cli_state,
    )
    assert "No observations found" in result.output
    assert "Observations:" not in result.output
    assert "FedEndpointExfiltration" not in result.output
Example #3
0
def test_audit_log_response(mocker):
    http_response1 = mocker.MagicMock(spec=Response)
    http_response1.status_code = 200
    http_response1.text = json.dumps({"events": TEST_EVENTS_WITH_SAME_TIMESTAMP})
    http_response1._content_consumed = ""

    http_response2 = mocker.MagicMock(spec=Response)
    http_response2.status_code = 200
    http_response2.text = json.dumps({"events": TEST_EVENTS_WITH_DIFFERENT_TIMESTAMPS})
    http_response2._content_consumed = ""
    Py42Response(http_response2)

    def response_gen():
        yield Py42Response(http_response1)
        yield Py42Response(http_response2)

    return response_gen()
Example #4
0
    def mock_get_file_path_metadata(*args, **kwargs):
        if not args[0] == session_id:
            raise Exception("Unexpected archive connection ID")

        if not args[1] == device_guid:
            raise Exception("Unexpected device GUID")

        file_id = kwargs["file_id"]

        if file_id not in file_id_responses:
            raise Exception(f"Unexpected request with file_id: {file_id}")

        mock_response = mocker.MagicMock(spec=Response)
        mock_response.status_code = 200
        mock_response.text = file_id_responses[file_id]
        get_file_path_metadata_response = Py42Response(mock_response)

        return get_file_path_metadata_response
def test_send_to_handlers_creates_handlers_that_pass_events_to_logger(
        mocker, sdk, event_extractor_logger):
    class TestExtractor(BaseExtractor):
        def __init__(self, handlers, timestamp_filter):
            timestamp_filter._term = "test_term"
            super().__init__(key, search, handlers, timestamp_filter,
                             TestQuery)

        def _get_timestamp_from_item(self, item):
            pass

    cursor_store = mocker.MagicMock(sepc=BaseCursorStore)
    handlers = create_send_to_handlers(sdk, TestExtractor, cursor_store,
                                       "chk-name", event_extractor_logger)
    http_response = mocker.MagicMock(spec=Response)
    events = [{"property": "bar"}]
    http_response.text = '{{"{0}": [{{"property": "bar"}}]}}'.format(key)
    py42_response = Py42Response(http_response)
    handlers.handle_response(py42_response)
    event_extractor_logger.info.assert_called_once_with(events[0])
Example #6
0
 def test_setitem_modifies_list_items_with_data_node_to_expected_value(
     self, mock_response_list_data_node
 ):
     response = Py42Response(mock_response_list_data_node)
     response["item_list_key"][0] = "testmodifylistitem"
     assert response["item_list_key"][0] == "testmodifylistitem"
Example #7
0
 def test_getitem_returns_dict_keys_no_data_node(
     self, mock_response_dict_no_data_node
 ):
     response = Py42Response(mock_response_dict_no_data_node)
     assert type(response["item_list_key"]) == dict
Example #8
0
 def test_data_no_data_node_returns_list_items_(
     self, mock_response_list_no_data_node
 ):
     response = Py42Response(mock_response_list_no_data_node)
     assert type(response.data["item_list_key"]) == list
Example #9
0
 def test_content_list_data_node_returns_expected_list(
     self, mock_response_list_data_node
 ):
     response = Py42Response(mock_response_list_data_node)
     assert response.content == JSON_LIST_WITH_DATA_NODE.encode("utf-8")
Example #10
0
 def test_getitem_raises_py42_error_on_invalid_subscript(
     self, mock_response_not_json
 ):
     response = Py42Response(mock_response_not_json)
     with pytest.raises(Py42Error):
         response["test"]
Example #11
0
 def test_iter_content_calls_request_iter_content(self, mock_response_not_json):
     response = Py42Response(mock_response_not_json)
     response.iter_content(128, True)
     mock_response_not_json.iter_content.assert_called_once_with(
         chunk_size=128, decode_unicode=True
     )
Example #12
0
 def mock_start_restore(guid, web_restore_session_id, path_set, num_files,
                        num_dirs, size, zip_result, **kwargs):
     start_restore_response = mocker.MagicMock(spec=Response)
     start_restore_response.text = response
     start_restore_response.status_code = 200
     return Py42Response(start_restore_response)
Example #13
0
 def response_gen():
     yield Py42Response(http_response)
Example #14
0
    def request(
        self,
        method,
        url,
        params=None,
        data=None,
        json=None,
        headers=None,
        cookies=None,
        files=None,
        auth=None,
        hooks=None,
        stream=False,
        timeout=60,
        cert=None,
        proxies=None,
    ):
        response = None
        for _ in range(2):
            request = self._prepare_request(
                method,
                url,
                params=params,
                data=data,
                json=json,
                headers=headers,
                cookies=cookies,
                files=files,
                auth=auth,
                hooks=hooks,
            )
            response = self._session.send(
                request,
                stream=stream,
                timeout=timeout,
                verify=settings.verify_ssl_certs,
                cert=cert,
                proxies=proxies or settings.proxies,
            )

            if response is not None:
                debug.logger.info(u"Response status: {}".format(
                    response.status_code))
                if not stream:
                    # setting this manually speeds up read times
                    response.encoding = u"utf-8"
                    debug.logger.debug(u"Response data: {}".format(
                        response.text))
                else:
                    debug.logger.debug(u"Response data: <streamed>")

                if 200 <= response.status_code <= 399:
                    return Py42Response(response)

                if response.status_code == 401:
                    if isinstance(self._auth, C42RenewableAuth):
                        self._auth.clear_credentials()
            else:
                debug.logger.debug(u"Error! Could not retrieve response.")

        # if nothing has been returned after two attempts, something went wrong
        _handle_error(method, url, response)
Example #15
0
 def mock_get(uri, **kwargs):
     response = mocker.MagicMock(spec=Response)
     response.text = json.dumps({"data": {"v3_user_token": V3_TOKEN}})
     response.status_code = 200
     return Py42Response(response)
Example #16
0
 def test_status_code_returns_expected_url(self, mock_response_not_json):
     response = Py42Response(mock_response_not_json)
     assert response.url == "http://www.example.com"
Example #17
0
 def test_headers_returns_request_headers(self, mock_response_not_json):
     response = Py42Response(mock_response_not_json)
     assert response.headers == mock_response_not_json.headers
Example #18
0
 def mock_get_all_matters_response(self, mocker):
     response = mocker.MagicMock(spec=Response)
     response.status_code = 200
     response.encoding = "utf-8"
     response.text = MOCK_GET_ALL_MATTERS_RESPONSE
     return Py42Response(response)
Example #19
0
 def test_setitem_raises_py42_error_on_invalid_assignment(
     self, mock_response_not_json
 ):
     response = Py42Response(mock_response_not_json)
     with pytest.raises(Py42Error):
         response[0] = "test"
Example #20
0
 def mock_get_all_matter_custodians_empty_response(self, mocker):
     response = mocker.MagicMock(spec=Response)
     response.status_code = 200
     response.encoding = "utf-8"
     response.text = MOCK_EMPTY_GET_ALL_MATTER_CUSTODIANS_RESPONSE
     return Py42Response(response)
Example #21
0
 def test_content_dict_no_data_node_returns_expected_dict(
     self, mock_response_dict_no_data_node
 ):
     response = Py42Response(mock_response_dict_no_data_node)
     assert response.content == JSON_DICT_NO_DATA_NODE.encode("utf-8")
Example #22
0
def _create_py42_response(mocker, text):
    response = mocker.MagicMock(spec=Response)
    response.text = text
    response._content_consumed = mocker.MagicMock()
    response.status_code = 200
    return Py42Response(response)
Example #23
0
 def test_data_with_data_node_returns_dict_keys(self, mock_response_dict_data_node):
     response = Py42Response(mock_response_dict_data_node)
     assert type(response.data["item_list_key"]) == dict
Example #24
0
 def test_text_json_no_data_node_returns_raw_json(
     self, mock_response_list_no_data_node
 ):
     response = Py42Response(mock_response_list_no_data_node)
     assert response.text == JSON_LIST_NO_DATA_NODE
Example #25
0
 def test_getitem_returns_list_items_with_data_node(
     self, mock_response_list_data_node
 ):
     response = Py42Response(mock_response_list_data_node)
     assert type(response["item_list_key"]) == list
Example #26
0
 def test_raw_text_with_data_node_returns_raw_json_with_data_node(
     self, mock_response_list_data_node
 ):
     response = Py42Response(mock_response_list_data_node)
     assert response.raw_text == JSON_LIST_WITH_DATA_NODE
Example #27
0
 def test_setitem_modifies_dict_keys_with_no_data_node_to_expected_value(
     self, mock_response_dict_no_data_node
 ):
     response = Py42Response(mock_response_dict_no_data_node)
     response["item_list_key"]["foo"] = "newfooval"
     assert response["item_list_key"]["foo"] == "newfooval"
Example #28
0
 def test_raw_text_no_data_node_returns_raw_json_no_data_node(
     self, mock_response_not_json
 ):
     response = Py42Response(mock_response_not_json)
     assert response.raw_text == PLAIN_TEXT
Example #29
0
 def mock_get_all_empty_response(self, mocker, py42_response):
     response = mocker.MagicMock(spec=Response)
     response.status_code = 200
     response.encoding = "utf-8"
     response.text = MOCK_EMPTY_GET_DEVICE_RESPONSE
     return Py42Response(response)
Example #30
0
 def test_status_code_returns_expected_value(self, mock_response_not_json):
     response = Py42Response(mock_response_not_json)
     assert response.status_code == 200