Mercurial > hg > orthanc-tests
diff Tests/Tests.py @ 296:b55b959647ed c-get
merge default -> c-get
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 12 May 2020 14:36:29 +0200 |
parents | 946b2199f481 032722c3e919 |
children | da2be3ff2db5 |
line wrap: on
line diff
--- a/Tests/Tests.py Tue May 12 13:21:38 2020 +0200 +++ b/Tests/Tests.py Tue May 12 14:36:29 2020 +0200 @@ -22,6 +22,7 @@ import base64 +import bz2 import copy import pprint import tempfile @@ -139,7 +140,6 @@ - class Orthanc(unittest.TestCase): def setUp(self): if (sys.version_info >= (3, 0)): @@ -5451,6 +5451,189 @@ self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) + + def test_storescu_transcoding(self): # New in Orthanc 1.7.0 + # Add a RLE-encoded DICOM file + i = UploadInstance(_REMOTE, 'TransferSyntaxes/1.2.840.10008.1.2.5.dcm')['ID'] + self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) + self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) + rleSize = len(DoGet(_REMOTE, '/instances/%s/file' % i)) + + # Export the instance, with transcoding: "_REMOTE" is the + # Orthanc server being tested + try: + DoDelete(_REMOTE, '/modalities/toto') + except: + pass + + params = DoGet(_REMOTE, '/modalities?expand') ['orthanctest'] + DoPut(_REMOTE, '/modalities/toto', params) + DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain') + j = DoGet(_LOCAL, '/instances') + self.assertEqual(1, len(j)) + uncompressedSize = len(DoGet(_LOCAL, '/instances/%s/file' % j[0])) + self.assertTrue(uncompressedSize > rleSize / 2) + + # Export, with transcoding disabled => this fails + params['AllowTranscoding'] = False + DoPut(_REMOTE, '/modalities/toto', params) + self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain')) + + + def test_bitbucket_issue_169(self): + with open(GetDatabasePath('Issue169.dcm.bz2'), 'rb') as f: + dicom = bz2.decompress(f.read()) + + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(dicom)) + + self.assertEqual(44350560, len(dicom)) + i = DoPost(_REMOTE, '/instances', dicom, 'application/dicom') ['ID'] + + tags = DoGet(_REMOTE, '/instances/%s/tags' % i) + self.assertEqual('NORMAL', tags['1337,1001']['Value']) + + self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) + DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') + j = DoGet(_LOCAL, '/instances') + self.assertEqual(1, len(j)) + + # In Orthanc <= 1.6.1, transfer syntax changed from "Explicit + # VR Little Endian" (1.2.840.10008.1.2.1) to "Implicit VR + # Little Endian" (1.2.840.10008.1.2) + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax( + DoGet(_LOCAL, '/instances/%s/file' % j[0]))) + + # In Orthanc <= 1.6.1, the value of the private tags was lost + # because of this transcoding + tags = DoGet(_LOCAL, '/instances/%s/tags' % j[0]) + self.assertEqual('NORMAL', tags['1337,1001']['Value']) + + + def test_modify_transcode(self): + i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID'] + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax( + DoGet(_REMOTE, '/instances/%s/file' % i))) + + for syntax in [ + '1.2.840.10008.1.2', + '1.2.840.10008.1.2.1', + #'1.2.840.10008.1.2.1.99', # Deflated Explicit VR Little Endian + '1.2.840.10008.1.2.2', + '1.2.840.10008.1.2.4.50', + '1.2.840.10008.1.2.4.51', + '1.2.840.10008.1.2.4.57', + '1.2.840.10008.1.2.4.70', + #'1.2.840.10008.1.2.4.80', # This makes DCMTK 3.6.2 crash + #'1.2.840.10008.1.2.4.81', # This makes DCMTK 3.6.2 crash + ]: + transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, { + 'Transcode' : syntax, + }) + + self.assertEqual(syntax, GetTransferSyntax(transcoded)) + + + def test_archive_transcode(self): + info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm') + + # GET on "/media" + z = GetArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient']) + self.assertEqual(2, len(z.namelist())) + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(z.read('IMAGES/IM0'))) + + self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients/%s/media?transcode=nope' % info['ParentPatient'])) + + z = GetArchive(_REMOTE, '/patients/%s/media?transcode=1.2.840.10008.1.2.4.50' % info['ParentPatient']) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read('IMAGES/IM0'))) + + z = GetArchive(_REMOTE, '/studies/%s/media?transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy']) + self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0'))) + + z = GetArchive(_REMOTE, '/series/%s/media?transcode=1.2.840.10008.1.2.4.57' % info['ParentSeries']) + self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) + + + # POST on "/media" + self.assertRaises(Exception, lambda: PostArchive( + _REMOTE, '/patients/%s/media' % info['ParentPatient'], { 'Transcode' : 'nope' })) + + z = PostArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'], { + 'Transcode' : '1.2.840.10008.1.2.4.50', + }) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read('IMAGES/IM0'))) + + z = PostArchive(_REMOTE, '/studies/%s/media' % info['ParentStudy'], { + 'Transcode' : '1.2.840.10008.1.2.4.51', + }) + self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0'))) + + z = PostArchive(_REMOTE, '/series/%s/media' % info['ParentSeries'], { + 'Transcode' : '1.2.840.10008.1.2.4.57', + }) + self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) + + + # GET on "/archive" + z = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient']) + self.assertEqual(1, len(z.namelist())) + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(z.read(z.namelist()[0]))) + + self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients/%s/archive?transcode=nope' % info['ParentPatient'])) + + z = GetArchive(_REMOTE, '/patients/%s/archive?transcode=1.2.840.10008.1.2' % info['ParentPatient']) + self.assertEqual('1.2.840.10008.1.2', GetTransferSyntax(z.read(z.namelist()[0]))) + + z = GetArchive(_REMOTE, '/studies/%s/archive?transcode=1.2.840.10008.1.2.2' % info['ParentStudy']) + self.assertEqual('1.2.840.10008.1.2.2', GetTransferSyntax(z.read(z.namelist()[0]))) + + z = GetArchive(_REMOTE, '/series/%s/archive?transcode=1.2.840.10008.1.2.4.70' % info['ParentSeries']) + self.assertEqual('1.2.840.10008.1.2.4.70', GetTransferSyntax(z.read(z.namelist()[0]))) + + + # POST on "/archive" + self.assertRaises(Exception, lambda: PostArchive( + _REMOTE, '/patients/%s/archive' % info['ParentPatient'], { 'Transcode' : 'nope' })) + + z = PostArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'], { + 'Transcode' : '1.2.840.10008.1.2.4.50', + }) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read(z.namelist()[0]))) + + z = PostArchive(_REMOTE, '/studies/%s/archive' % info['ParentStudy'], { + 'Transcode' : '1.2.840.10008.1.2.4.51', + }) + self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read(z.namelist()[0]))) + + z = PostArchive(_REMOTE, '/series/%s/archive' % info['ParentSeries'], { + 'Transcode' : '1.2.840.10008.1.2.4.57', + }) + self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read(z.namelist()[0]))) + + + # "/tools/create-*" + z = PostArchive(_REMOTE, '/tools/create-archive', { + 'Resources' : [ info['ParentStudy'] ], + 'Transcode' : '1.2.840.10008.1.2.4.50', + }) + self.assertEqual(1, len(z.namelist())) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read(z.namelist()[0]))) + + z = PostArchive(_REMOTE, '/tools/create-media', { + 'Resources' : [ info['ParentStudy'] ], + 'Transcode' : '1.2.840.10008.1.2.4.51', + }) + self.assertEqual(2, len(z.namelist())) + self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0'))) + + z = PostArchive(_REMOTE, '/tools/create-media-extended', { + 'Resources' : [ info['ParentStudy'] ], + 'Transcode' : '1.2.840.10008.1.2.4.57', + }) + self.assertEqual(2, len(z.namelist())) + self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) + + + def test_getscu(self): # no transcoding required