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
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
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()
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])
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"
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
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
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")
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"]
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 )
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)
def response_gen(): yield Py42Response(http_response)
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)
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)
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"
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
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)
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"
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)
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")
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)
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
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
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
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
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"
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
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)
def test_status_code_returns_expected_value(self, mock_response_not_json): response = Py42Response(mock_response_not_json) assert response.status_code == 200