public ExportJobTaskTests() { _cancellationToken = _cancellationTokenSource.Token; _exportJobRecord = new ExportJobRecord( new Uri("https://localhost/ExportJob/"), "Patient", "hash"); _fhirOperationDataStore.UpdateExportJobAsync(_exportJobRecord, _weakETag, _cancellationToken).Returns(x => { _lastExportJobOutcome = new ExportJobOutcome(_exportJobRecord, _weakETag); return(_lastExportJobOutcome); }); _secretStore.GetSecretAsync(Arg.Any <string>(), _cancellationToken).Returns(x => new SecretWrapper(x.ArgAt <string>(0), "{\"destinationType\": \"in-memory\"}")); _exportDestinationClientFactory.Create("in-memory").Returns(_inMemoryDestinationClient); _resourceToByteArraySerializer.Serialize(Arg.Any <ResourceWrapper>()).Returns(x => Encoding.UTF8.GetBytes(x.ArgAt <ResourceWrapper>(0).ResourceId)); _exportJobTask = new ExportJobTask( () => _fhirOperationDataStore.CreateMockScope(), _secretStore, Options.Create(_exportJobConfiguration), () => _searchService.CreateMockScope(), _resourceToByteArraySerializer, _exportDestinationClientFactory, NullLogger <ExportJobTask> .Instance); }
private async Task ProcessSearchResultsAsync(IEnumerable <SearchResultEntry> searchResults, string partId, IAnonymizer anonymizer, CancellationToken cancellationToken) { foreach (SearchResultEntry result in searchResults) { ResourceWrapper resourceWrapper = result.Resource; ResourceElement element = _resourceDeserializer.Deserialize(resourceWrapper); if (anonymizer != null) { try { element = anonymizer.Anonymize(element); } catch (Exception ex) { throw new FailedToAnonymizeResourceException(ex.Message, ex); } } // Serialize into NDJson and write to the file. byte[] bytesToWrite = _resourceToByteArraySerializer.Serialize(element); await _fileManager.WriteToFile(resourceWrapper.ResourceTypeName, partId, bytesToWrite, cancellationToken); } }
private async Task ProcessSearchResultsAsync(IEnumerable <SearchResultEntry> searchResults, string partId, IAnonymizer anonymizer, CancellationToken cancellationToken) { foreach (SearchResultEntry result in searchResults) { ResourceWrapper resourceWrapper = result.Resource; string resourceType = resourceWrapper.ResourceTypeName; // Check whether we already have an existing file for the current resource type. if (!_resourceTypeToFileInfoMapping.TryGetValue(resourceType, out ExportFileInfo exportFileInfo)) { // Check whether we have seen this file previously (in situations where we are resuming an export) if (_exportJobRecord.Output.TryGetValue(resourceType, out exportFileInfo)) { // A file already exists for this resource type. Let us open the file on the client. await _exportDestinationClient.OpenFileAsync(exportFileInfo.FileUri, cancellationToken); } else { // File does not exist. Create it. string fileName; if (_exportJobRecord.StorageAccountContainerName.Equals(_exportJobRecord.Id, StringComparison.OrdinalIgnoreCase)) { fileName = $"{resourceType}.ndjson"; } else { string dateTime = _exportJobRecord.QueuedTime.UtcDateTime.ToString("s") .Replace("-", string.Empty, StringComparison.OrdinalIgnoreCase) .Replace(":", string.Empty, StringComparison.OrdinalIgnoreCase); fileName = $"{dateTime}-{_exportJobRecord.Id}/{resourceType}.ndjson"; } Uri fileUri = await _exportDestinationClient.CreateFileAsync(fileName, cancellationToken); exportFileInfo = new ExportFileInfo(resourceType, fileUri, sequence: 0); // Since we created a new file the JobRecord Output also needs to know about it. _exportJobRecord.Output.TryAdd(resourceType, exportFileInfo); } _resourceTypeToFileInfoMapping.Add(resourceType, exportFileInfo); } ResourceElement element = _resourceDeserializer.Deserialize(resourceWrapper); if (anonymizer != null) { element = anonymizer.Anonymize(element); } // Serialize into NDJson and write to the file. byte[] bytesToWrite = _resourceToByteArraySerializer.Serialize(element); await _exportDestinationClient.WriteFilePartAsync(exportFileInfo.FileUri, partId, bytesToWrite, cancellationToken); // Increment the file information. exportFileInfo.IncrementCount(bytesToWrite.Length); } }
public ExportJobTaskTests() { _cancellationToken = _cancellationTokenSource.Token; SetupExportJobRecordAndOperationDataStore(); _resourceToByteArraySerializer.Serialize(Arg.Any <ResourceWrapper>()).Returns(x => Encoding.UTF8.GetBytes(x.ArgAt <ResourceWrapper>(0).ResourceId)); _exportJobTask = new ExportJobTask( () => _fhirOperationDataStore.CreateMockScope(), Options.Create(_exportJobConfiguration), () => _searchService.CreateMockScope(), _resourceToByteArraySerializer, _inMemoryDestinationClient, NullLogger <ExportJobTask> .Instance); }
private async Task ProcessSearchResultsAsync(IEnumerable <SearchResultEntry> searchResults, string partId, CancellationToken cancellationToken) { foreach (SearchResultEntry result in searchResults) { ResourceWrapper resourceWrapper = result.Resource; string resourceType = resourceWrapper.ResourceTypeName; // Check whether we already have an existing file for the current resource type. if (!_resourceTypeToFileInfoMapping.TryGetValue(resourceType, out ExportFileInfo exportFileInfo)) { // Check whether we have seen this file previously (in situations where we are resuming an export) if (_exportJobRecord.Output.TryGetValue(resourceType, out exportFileInfo)) { // A file already exists for this resource type. Let us open the file on the client. await _exportDestinationClient.OpenFileAsync(exportFileInfo.FileUri, cancellationToken); } else { // File does not exist. Create it. string fileName = resourceType + ".ndjson"; Uri fileUri = await _exportDestinationClient.CreateFileAsync(fileName, cancellationToken); exportFileInfo = new ExportFileInfo(resourceType, fileUri, sequence: 0); // Since we created a new file the JobRecord Output also needs to know about it. _exportJobRecord.Output.TryAdd(resourceType, exportFileInfo); } _resourceTypeToFileInfoMapping.Add(resourceType, exportFileInfo); } // Serialize into NDJson and write to the file. byte[] bytesToWrite = _resourceToByteArraySerializer.Serialize(resourceWrapper); await _exportDestinationClient.WriteFilePartAsync(exportFileInfo.FileUri, partId, bytesToWrite, cancellationToken); // Increment the file information. exportFileInfo.IncrementCount(bytesToWrite.Length); } }
private async Task ProcessResourceWrapperAsync(ResourceWrapper resourceWrapper, uint partId, CancellationToken cancellationToken) { string resourceType = resourceWrapper.ResourceTypeName; // Check whether we already have an existing file for the current resource type. if (!_resourceTypeToFileInfoMapping.TryGetValue(resourceType, out ExportFileInfo exportFileInfo)) { string fileName = resourceType + ".ndjson"; Uri fileUri = await _exportDestinationClient.CreateFileAsync(fileName, cancellationToken); exportFileInfo = new ExportFileInfo(resourceType, fileUri, sequence: 0); _resourceTypeToFileInfoMapping.Add(resourceType, exportFileInfo); } // Serialize into NDJson and write to the file. byte[] bytesToWrite = _resourceToByteArraySerializer.Serialize(resourceWrapper); await _exportDestinationClient.WriteFilePartAsync(exportFileInfo.FileUri, partId, bytesToWrite, cancellationToken); // Increment the file information. exportFileInfo.IncrementCount(bytesToWrite.Length); }