public async Task GivenRetrieveRequestForFrame_WhenResourceIsFound_ThenAuditLogEntriesShouldBeCreated() { DicomFile dicomFile = Samples.CreateRandomDicomFileWithPixelData(frames: 1); var dicomInstance = dicomFile.Dataset.ToInstanceIdentifier(); await _client.StoreAsync(new[] { dicomFile }, dicomInstance.StudyInstanceUid); await ExecuteAndValidate( () => _client.RetrieveFramesAsync(dicomInstance.StudyInstanceUid, dicomInstance.SeriesInstanceUid, dicomInstance.SopInstanceUid, frames: new int[] { 1 }), AuditEventSubType.Retrieve, $"studies/{dicomInstance.StudyInstanceUid}/series/{dicomInstance.SeriesInstanceUid}/instances/{dicomInstance.SopInstanceUid}/frames/1", HttpStatusCode.OK); }
public static Task <DicomWebResponse <IReadOnlyList <Stream> > > RetrieveFramesAsync( this IDicomWebClient dicomWebClient, string studyInstanceUid, string seriesInstanceUid, string sopInstanceUid, string mediaType = DicomWebConstants.ApplicationOctetStreamMediaType, string dicomTransferSyntax = DicomWebConstants.OriginalDicomTransferSyntax, int[] frames = null, CancellationToken cancellationToken = default) { var requestUri = new Uri(string.Format(DicomWebConstants.BaseRetrieveFramesUriFormat, studyInstanceUid, seriesInstanceUid, sopInstanceUid, string.Join("%2C", frames)), UriKind.Relative); return(dicomWebClient.RetrieveFramesAsync(requestUri, mediaType, dicomTransferSyntax, cancellationToken)); }
public async Task GivenInstanceWithFrames_WhenRetrieveRequestForNonExistingFrameInInstance_ThenServerShouldReturnNotFound() { (InstanceIdentifier identifier, DicomFile file) = await CreateAndStoreDicomFile(2); DicomWebException exception = await Assert.ThrowsAsync <DicomWebException>( () => _client.RetrieveFramesAsync(identifier.StudyInstanceUid, identifier.SeriesInstanceUid, identifier.SopInstanceUid, dicomTransferSyntax: "*", frames: new[] { 4 })); Assert.Equal(HttpStatusCode.NotFound, exception.StatusCode); }
public static async Task <DicomWebAsyncEnumerableResponse <Stream> > RetrieveFramesAsync( this IDicomWebClient dicomWebClient, string studyInstanceUid, string seriesInstanceUid, string sopInstanceUid, string mediaType = DicomWebConstants.ApplicationOctetStreamMediaType, string dicomTransferSyntax = DicomWebConstants.OriginalDicomTransferSyntax, int[] frames = null, CancellationToken cancellationToken = default) { EnsureArg.IsNotNull(dicomWebClient, nameof(dicomWebClient)); EnsureArg.IsNotNullOrWhiteSpace(studyInstanceUid, nameof(studyInstanceUid)); EnsureArg.IsNotNullOrWhiteSpace(seriesInstanceUid, nameof(seriesInstanceUid)); EnsureArg.IsNotNullOrWhiteSpace(sopInstanceUid, nameof(sopInstanceUid)); var requestUri = new Uri(string.Format(DicomWebConstants.BaseRetrieveFramesUriFormat, studyInstanceUid, seriesInstanceUid, sopInstanceUid, string.Join("%2C", frames)), UriKind.Relative); return(await dicomWebClient.RetrieveFramesAsync(requestUri, mediaType, dicomTransferSyntax, cancellationToken).ConfigureAwait(false)); }
public async Task GivenInputAndOutputTransferSyntax_WhenRetrieveFrame_ThenServerShouldReturnExpectedContent(string testDataFolder, string mediaType, string transferSyntax) { TranscoderTestData transcoderTestData = TranscoderTestDataHelper.GetTestData(testDataFolder); DicomFile inputDicomFile = await DicomFile.OpenAsync(transcoderTestData.InputDicomFile); int numberOfFrames = DicomPixelData.Create(inputDicomFile.Dataset).NumberOfFrames; string studyInstanceUid = inputDicomFile.Dataset.GetString(DicomTag.StudyInstanceUID); string seriesInstanceUid = inputDicomFile.Dataset.GetString(DicomTag.SeriesInstanceUID); string sopInstanceUid = inputDicomFile.Dataset.GetString(DicomTag.SOPInstanceUID); DicomWebResponse <IEnumerable <DicomDataset> > tryQuery = await _client.QueryAsync( $"/studies/{studyInstanceUid}/series/{seriesInstanceUid}/instances?SOPInstanceUID={sopInstanceUid}"); if (tryQuery.StatusCode == HttpStatusCode.OK) { await _client.DeleteStudyAsync(studyInstanceUid); } await _client.StoreAsync(new[] { inputDicomFile }); DicomWebResponse <IReadOnlyList <Stream> > response = await _client.RetrieveFramesAsync( studyInstanceUid : studyInstanceUid, seriesInstanceUid : seriesInstanceUid, sopInstanceUid : sopInstanceUid, mediaType : mediaType, dicomTransferSyntax : transferSyntax, frames : GenerateFrames(numberOfFrames), cancellationToken : _defaultCancellationToken); Assert.Equal(HttpStatusCode.OK, response.StatusCode); string byteStreamHash = TranscoderTestDataHelper.GetHashFromStream(response.Value[0]); Assert.Equal(transcoderTestData.MetaData.OutputFramesHashCode, byteStreamHash); await _client.DeleteStudyAsync(studyInstanceUid); }