def test_get_all_plan_security_events_calls_security_client_with_expected_params( self, mocker, security_client, storage_client_factory, microservice_client_factory): mock_storage_client = mocker.MagicMock(spec=StorageClient) mock_storage_security_client = mocker.MagicMock( spec=StorageSecurityClient) mock_storage_client.securitydata = mock_storage_security_client response = mocker.MagicMock(spec=Py42Response) response.text = "{}" mock_storage_security_client.get_plan_security_events.return_value = response storage_client_factory.from_plan_info.return_value = mock_storage_client security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) for _, _ in security_module.get_all_plan_security_events( PlanStorageInfo("111111111111111111", "41", "4")): pass mock_storage_security_client.get_plan_security_events.assert_called_once_with( "111111111111111111", cursor=None, event_types=None, include_files=True, max_timestamp=None, min_timestamp=None, )
def test_get_all_plan_security_events_when_multiple_plans_with_cursors_returned_calls_security_client_expected_number_of_times( self, mocker, security_client, storage_client_factory, microservice_client_factory): mock_storage_client = mocker.MagicMock(spec=StorageClient) mock_storage_security_client = mocker.MagicMock( spec=StorageSecurityClient) mock_storage_client.securitydata = mock_storage_security_client response1 = mocker.MagicMock(spec=Py42Response) response1.text = '{"cursor": "1:1"}' response2 = mocker.MagicMock(spec=Py42Response) response2.text = "{}" mock_storage_security_client.get_plan_security_events.side_effect = [ response1, response2, response1, response2, ] storage_client_factory.from_plan_info.return_value = mock_storage_client security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) plans = [ PlanStorageInfo("111111111111111111", "41", "4"), PlanStorageInfo("222222222222222222", "41", "4"), ] for _, _ in security_module.get_all_plan_security_events(plans): pass assert mock_storage_security_client.get_plan_security_events.call_count == 4
def test_get_all_user_security_events_when_cursors_returned_calls_security_client_expected_number_of_times( self, mocker, security_client_one_location, storage_client_factory, microservice_client_factory, ): mock_storage_client = mocker.MagicMock(spec=StorageClient) mock_storage_security_client = mocker.MagicMock( spec=StorageSecurityClient) mock_storage_client.securitydata = mock_storage_security_client response1 = mocker.MagicMock(spec=Py42Response) response1.text = '{"cursor": "1:1"}' response2 = mocker.MagicMock(spec=Py42Response) response2.text = "{}" mock_storage_security_client.get_plan_security_events.side_effect = [ response1, response2 ] storage_client_factory.from_plan_info.return_value = mock_storage_client security_module = SecurityModule(security_client_one_location, storage_client_factory, microservice_client_factory) for _, _ in security_module.get_all_user_security_events("foo"): pass assert mock_storage_security_client.get_plan_security_events.call_count == 2
def test_stream_file_by_md5_raises_py42_error_when_find_file_versions_returns_204_status_code( self, mocker, security_client, storage_client_factory, microservice_client_factory, file_event_search, file_location, find_file_version, ): security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) file_event_client = mocker.MagicMock(spec=FileEventClient) file_event_client.search.return_value = file_event_search file_event_client.get_file_location_detail_by_sha256.return_value = ( file_location) microservice_client_factory.get_file_event_client.return_value = ( file_event_client) pds_client = mocker.MagicMock(spec=PreservationDataServiceClient) find_file_version.status_code = 204 pds_client.find_file_versions.return_value = find_file_version microservice_client_factory.get_preservation_data_service_client.return_value = ( pds_client) with pytest.raises(Py42Error) as e: security_module.stream_file_by_md5("md5hash") assert e.value.args[0] == PDS_EXCEPTION_MESSAGE.format("md5hash")
def test_get_security_plan_storage_info_one_location_returns_location_info( self, security_client_one_location, storage_client_factory, microservice_client_factory): security_module = SecurityModule(security_client_one_location, storage_client_factory, microservice_client_factory) storage_infos = security_module.get_security_plan_storage_info_list( "foo") assert len(storage_infos) == 1 assert self._storage_info_contains(storage_infos, "111111111111111111", "4", "41")
def test_search_with_only_query_calls_through_to_client( self, security_client, storage_client_factory, file_event_client, microservice_client_factory, ): microservice_client_factory.get_file_event_client.side_effect = self.return_file_event_client( file_event_client) security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) security_module.search_file_events(RAW_QUERY) file_event_client.search.assert_called_once_with(RAW_QUERY)
def test_get_security_plan_storage_info_two_plans_two_nodes_returns_both_location_info( self, security_client_two_plans_two_nodes, storage_client_factory, microservice_client_factory, ): security_module = SecurityModule(security_client_two_plans_two_nodes, storage_client_factory, microservice_client_factory) storage_infos = security_module.get_security_plan_storage_info_list( "foo") assert self._storage_info_contains(storage_infos, "111111111111111111", "4", "41") assert self._storage_info_contains(storage_infos, "222222222222222222", "4", "42")
def test_saved_searches_returns_saved_search_client( self, security_client, storage_client_factory, microservice_client_factory): security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) _ = security_module.savedsearches assert microservice_client_factory.get_saved_search_client.call_count
def test_stream_file_by_md5_raises_py42_checksum_not_found_error_when_search_returns_empty_response( self, mocker, security_client, storage_client_factory, microservice_client_factory, file_event_search, ): security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) file_event_search.text = "{}" file_event_client = mocker.MagicMock(spec=FileEventClient) file_event_client.search.return_value = file_event_search with pytest.raises(Py42ChecksumNotFoundError) as e: security_module.stream_file_by_md5("md5hash") assert u"No files found with MD5 checksum" in e.value.args[0]
def test_get_all_user_security_events_when_multiple_plans_returned_calls_security_client_expected_number_of_times( self, mocker, security_client_two_plans_one_node, storage_client_factory, microservice_client_factory, ): mock_storage_client = mocker.MagicMock(spec=StorageClient) mock_storage_security_client = mocker.MagicMock( spec=StorageSecurityClient) mock_storage_client.securitydata = mock_storage_security_client response = mocker.MagicMock(spec=Py42Response) response.text = "{}" mock_storage_security_client.get_plan_security_events.return_value = response storage_client_factory.from_plan_info.return_value = mock_storage_client security_module = SecurityModule(security_client_two_plans_one_node, storage_client_factory, microservice_client_factory) for _, _ in security_module.get_all_user_security_events("foo"): pass assert mock_storage_security_client.get_plan_security_events.call_count == 2
def test_get_security_plan_storage_info_two_plans_two_destinations_three_nodes_returns_one_location_per_plan( self, security_client_two_plans_two_destinations_three_nodes, storage_client_factory, microservice_client_factory, ): security_module = SecurityModule( security_client_two_plans_two_destinations_three_nodes, storage_client_factory, microservice_client_factory, ) storage_infos = security_module.get_security_plan_storage_info_list( "foo") assert self._storage_info_contains( storage_infos, "111111111111111111", "4", "41") or self._storage_info_contains( storage_infos, "111111111111111111", "5", "51") assert self._storage_info_contains( storage_infos, "222222222222222222", "4", "41") or self._storage_info_contains( storage_infos, "222222222222222222", "5", "52")
def test_get_plan_security_events_when_mutliple_plans_returned_calls_security_client_expected_number_of_times( self, mocker, security_client, storage_client_factory, microservice_client_factory): mock_storage_client = mocker.MagicMock(spec=StorageClient) mock_storage_security_client = mocker.MagicMock( spec=StorageSecurityClient) mock_storage_client.securitydata = mock_storage_security_client response = mocker.MagicMock(spec=Py42Response) response.text = "{}" mock_storage_security_client.get_plan_security_events.return_value = response storage_client_factory.from_plan_info.return_value = mock_storage_client security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) plans = [ PlanStorageInfo("111111111111111111", "41", "4"), PlanStorageInfo("222222222222222222", "41", "4"), ] for page, cursor in security_module.get_plan_security_events(plans): pass assert mock_storage_security_client.get_plan_security_events.call_count == 2
def test_stream_file_by_md5_raises_file_not_found_error_when_file_location_returns_empty_response( self, mocker, security_client, storage_client_factory, microservice_client_factory, file_event_search, file_location, ): security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) file_event_client = mocker.MagicMock(spec=FileEventClient) file_event_client.search.return_value = file_event_search file_location.text = """{"locations": []}""" file_event_client.get_file_location_detail_by_sha256.return_value = ( file_location) microservice_client_factory.get_file_event_client.return_value = ( file_event_client) with pytest.raises(Py42Error) as e: security_module.stream_file_by_md5("md5hash") assert u"PDS service can't find requested file" in e.value.args[0]
def test_stream_file_by_md5_raises_py42_error_when_file_download_returns_failure_response( self, mocker, security_client, storage_client_factory, microservice_client_factory, file_event_search, file_location, find_file_version, file_download, ): security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) file_event_client = mocker.MagicMock(spec=FileEventClient) file_event_client.search.return_value = file_event_search file_event_client.get_file_location_detail_by_sha256.return_value = ( file_location) microservice_client_factory.get_file_event_client.return_value = ( file_event_client) pds_client = mocker.MagicMock(spec=PreservationDataServiceClient) pds_client.find_file_versions.return_value = find_file_version microservice_client_factory.get_preservation_data_service_client.return_value = ( pds_client) storage_node_client = mocker.MagicMock( spec=StoragePreservationDataClient) storage_node_client.get_download_token.return_value = file_download storage_node_client.get_file.side_effect = Py42HTTPError(HTTPError()) microservice_client_factory.create_storage_preservation_client.return_value = ( storage_node_client) with pytest.raises(Py42Error) as e: security_module.stream_file_by_md5("md5hash") assert e.value.args[0] == PDS_EXCEPTION_MESSAGE.format("md5hash")
def test_stream_file_by_md5_returns_stream_of_file( self, mocker, security_client, storage_client_factory, microservice_client_factory, file_event_search, file_location, find_file_version, file_download, ): security_module = SecurityModule(security_client, storage_client_factory, microservice_client_factory) file_event_client = mocker.MagicMock(spec=FileEventClient) file_event_client.search.return_value = file_event_search file_event_client.get_file_location_detail_by_sha256.return_value = ( file_location) microservice_client_factory.get_file_event_client.return_value = ( file_event_client) pds_client = mocker.MagicMock(spec=PreservationDataServiceClient) pds_client.find_file_versions.return_value = find_file_version microservice_client_factory.get_preservation_data_service_client.return_value = ( pds_client) storage_node_client = mocker.MagicMock( spec=StoragePreservationDataClient) storage_node_client.get_download_token.return_value = file_download storage_node_client.get_file.return_value = b"stream" microservice_client_factory.create_storage_preservation_client.return_value = ( storage_node_client) response = security_module.stream_file_by_md5("md5hash") assert response == b"stream"