comparison Tests/Tests.py @ 299:c2144cf4bd83

HasGdcmPlugin() test
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 14 May 2020 19:19:19 +0200
parents 032722c3e919
children d6c2eb5a2603
comparison
equal deleted inserted replaced
298:40d9f449b9dd 299:c2144cf4bd83
135 'StudyDescription': 'Sébastien^', 135 'StudyDescription': 'Sébastien^',
136 'StudyDate' : '19700202', 136 'StudyDate' : '19700202',
137 } 137 }
138 ] 138 ]
139 139
140
141 def HasGdcmPlugin():
142 plugins = DoGet(_REMOTE, '/plugins')
143 return ('gdcm' in plugins)
140 144
141 145
142 class Orthanc(unittest.TestCase): 146 class Orthanc(unittest.TestCase):
143 def setUp(self): 147 def setUp(self):
144 if (sys.version_info >= (3, 0)): 148 if (sys.version_info >= (3, 0)):
1626 def test_googlecode_issue_19(self): 1630 def test_googlecode_issue_19(self):
1627 # This is an image with "YBR_FULL" photometric interpretation, it is not supported by Orthanc 1631 # This is an image with "YBR_FULL" photometric interpretation, it is not supported by Orthanc
1628 # gdcmconv -i /home/jodogne/DICOM/GdcmDatabase/US_DataSet/HDI5000_US/3EAF5E01 -w -o Issue19.dcm 1632 # gdcmconv -i /home/jodogne/DICOM/GdcmDatabase/US_DataSet/HDI5000_US/3EAF5E01 -w -o Issue19.dcm
1629 1633
1630 a = UploadInstance(_REMOTE, 'Issue19.dcm')['ID'] 1634 a = UploadInstance(_REMOTE, 'Issue19.dcm')['ID']
1631 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/941ad3c8-05d05b88-560459f9-0eae0e20-6cddd533/preview')) 1635 if not HasGdcmPlugin():
1636 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/941ad3c8-05d05b88-560459f9-0eae0e20-6cddd533/preview'))
1632 1637
1633 1638
1634 def test_googlecode_issue_37(self): 1639 def test_googlecode_issue_37(self):
1635 # Same test for issues 35 and 37. Fixed in Orthanc 0.9.1 1640 # Same test for issues 35 and 37. Fixed in Orthanc 0.9.1
1636 u = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID'] 1641 u = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID']
3069 Check('1.2.840.10008.1.2.4.70', '7132cfbc457305b04b59787030c785d2') 3074 Check('1.2.840.10008.1.2.4.70', '7132cfbc457305b04b59787030c785d2')
3070 Check('1.2.840.10008.1.2.4.80', '6ff51ae525d362e0d04f550a64075a0e') 3075 Check('1.2.840.10008.1.2.4.80', '6ff51ae525d362e0d04f550a64075a0e')
3071 Check('1.2.840.10008.1.2.4.81', '801579ae7cbf28e604ea74f2c99fa2ca') 3076 Check('1.2.840.10008.1.2.4.81', '801579ae7cbf28e604ea74f2c99fa2ca')
3072 Check('1.2.840.10008.1.2.5', '6ff51ae525d362e0d04f550a64075a0e') # RLE, supported since Orthanc 1.0.1 3077 Check('1.2.840.10008.1.2.5', '6ff51ae525d362e0d04f550a64075a0e') # RLE, supported since Orthanc 1.0.1
3073 Check('1.2.840.10008.1.2', 'd54aed9f67a100984b42942cc2e9939b') 3078 Check('1.2.840.10008.1.2', 'd54aed9f67a100984b42942cc2e9939b')
3074 Check('1.2.840.10008.1.2.4.90', None) # JPEG-2000 image, not supported 3079
3075 Check('1.2.840.10008.1.2.4.91', None) # JPEG-2000 image, not supported 3080 # JPEG2k image, not supported without GDCM plugin
3081 if not HasGdcmPlugin():
3082 Check('1.2.840.10008.1.2.4.90', None)
3083 Check('1.2.840.10008.1.2.4.91', None)
3076 3084
3077 3085
3078 def test_raw_frame(self): 3086 def test_raw_frame(self):
3079 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID'] 3087 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
3080 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s))) 3088 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
5511 def test_modify_transcode(self): 5519 def test_modify_transcode(self):
5512 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID'] 5520 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
5513 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax( 5521 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
5514 DoGet(_REMOTE, '/instances/%s/file' % i))) 5522 DoGet(_REMOTE, '/instances/%s/file' % i)))
5515 5523
5516 for syntax in [ 5524 a = ExtractDicomTags(DoGet(_REMOTE, '/instances/%s/file' % i), [ 'SOPInstanceUID' ]) [0]
5517 '1.2.840.10008.1.2', 5525 self.assertTrue(len(a) > 20)
5518 '1.2.840.10008.1.2.1', 5526
5519 #'1.2.840.10008.1.2.1.99', # Deflated Explicit VR Little Endian 5527 SYNTAXES = [
5520 '1.2.840.10008.1.2.2', 5528 '1.2.840.10008.1.2',
5521 '1.2.840.10008.1.2.4.50', 5529 '1.2.840.10008.1.2.1',
5522 '1.2.840.10008.1.2.4.51', 5530 '1.2.840.10008.1.2.1.99', # Deflated Explicit VR Little Endian
5523 '1.2.840.10008.1.2.4.57', 5531 '1.2.840.10008.1.2.2',
5524 '1.2.840.10008.1.2.4.70', 5532 '1.2.840.10008.1.2.4.50',
5525 #'1.2.840.10008.1.2.4.80', # This makes DCMTK 3.6.2 crash 5533 '1.2.840.10008.1.2.4.51',
5526 #'1.2.840.10008.1.2.4.81', # This makes DCMTK 3.6.2 crash 5534 '1.2.840.10008.1.2.4.57',
5527 ]: 5535 '1.2.840.10008.1.2.4.70',
5536 ]
5537
5538 if HasGdcmPlugin():
5539 SYNTAXES = SYNTAXES + [
5540 '1.2.840.10008.1.2.4.80', # This makes DCMTK 3.6.2 crash
5541 '1.2.840.10008.1.2.4.81', # This makes DCMTK 3.6.2 crash
5542 '1.2.840.10008.1.2.4.90', # JPEG2k, unavailable without GDCM
5543 '1.2.840.10008.1.2.4.91', # JPEG2k, unavailable without GDCM
5544 ]
5545
5546 for syntax in SYNTAXES:
5528 transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, { 5547 transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, {
5529 'Transcode' : syntax, 5548 'Transcode' : syntax,
5549 'Keep' : [ 'SOPInstanceUID' ],
5550 'Force' : True,
5530 }) 5551 })
5531 5552
5532 self.assertEqual(syntax, GetTransferSyntax(transcoded)) 5553 self.assertEqual(syntax, GetTransferSyntax(transcoded))
5533 5554
5555 b = ExtractDicomTags(transcoded, [ 'SOPInstanceUID' ]) [0]
5556 self.assertTrue(len(b) > 20)
5557 if syntax in [ '1.2.840.10008.1.2.4.50',
5558 '1.2.840.10008.1.2.4.51',
5559 '1.2.840.10008.1.2.4.81',
5560 '1.2.840.10008.1.2.4.91' ]:
5561 # Lossy transcoding: The SOP instance UID must have changed
5562 self.assertNotEqual(a, b)
5563 else:
5564 self.assertEqual(a, b)
5534 5565
5535 def test_archive_transcode(self): 5566 def test_archive_transcode(self):
5536 info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm') 5567 info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
5537 5568
5538 # GET on "/media" 5569 # GET on "/media"