comparison Tests/Tests.py @ 589:47b87c87213b

new tests for GET /tools/create-archive
author Alain Mazy <am@osimis.io>
date Fri, 24 Nov 2023 18:15:10 +0100
parents 8aa101e126d0
children 3cb7c6162c77
comparison
equal deleted inserted replaced
588:8aa101e126d0 589:47b87c87213b
3403 '1d429ccb-bdcc78a1-7d129d6a-ba4966ed-fe4dbd87' 3403 '1d429ccb-bdcc78a1-7d129d6a-ba4966ed-fe4dbd87'
3404 ]) 3404 ])
3405 z = zipfile.ZipFile(StringIO(s), "r") 3405 z = zipfile.ZipFile(StringIO(s), "r")
3406 self.assertEqual(7, len(z.namelist())) 3406 self.assertEqual(7, len(z.namelist()))
3407 3407
3408 if IsOrthancVersionAbove(_REMOTE, 1, 12, 2):
3409 s = DoGet(_REMOTE, '/tools/create-archive?resources=ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17,1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0,1d429ccb-bdcc78a1-7d129d6a-ba4966ed-fe4dbd87')
3410 z = zipfile.ZipFile(StringIO(s), "r")
3411 self.assertEqual(7, len(z.namelist()))
3412
3413
3408 3414
3409 def test_decode_brainix_as_jpeg(self): 3415 def test_decode_brainix_as_jpeg(self):
3410 i = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] 3416 i = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
3411 3417
3412 j = GetImage(_REMOTE, '/instances/%s/preview' % i) 3418 j = GetImage(_REMOTE, '/instances/%s/preview' % i)
4057 4063
4058 self.assertIn('OK', result) 4064 self.assertIn('OK', result)
4059 4065
4060 4066
4061 def test_bitbucket_issue_44(self): 4067 def test_bitbucket_issue_44(self):
4062 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=44 4068 # https://bugs.orthanc-server.com/show_bug.cgi?id=44
4063 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm') 4069 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')
4064 UploadInstance(_REMOTE, 'Issue44/Monochrome2.dcm') 4070 UploadInstance(_REMOTE, 'Issue44/Monochrome2.dcm')
4065 4071
4066 # dcmcjpeg +ua +eb Monochrome1.dcm Monochrome1-Jpeg.dcm 4072 # dcmcjpeg +ua +eb Monochrome1.dcm Monochrome1-Jpeg.dcm
4067 UploadInstance(_REMOTE, 'Issue44/Monochrome1-Jpeg.dcm') 4073 UploadInstance(_REMOTE, 'Issue44/Monochrome1-Jpeg.dcm')
4097 # white (255), should be rendered as white (255) 4103 # white (255), should be rendered as white (255)
4098 self.assertEqual(255, im.getpixel((0,0))) 4104 self.assertEqual(255, im.getpixel((0,0)))
4099 4105
4100 4106
4101 def test_bitbucket_issue_42(self): 4107 def test_bitbucket_issue_42(self):
4102 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=42 4108 # https://bugs.orthanc-server.com/show_bug.cgi?id=42
4103 # This test fails on DCMTK 3.6.0, but succeeds in DCMTK 3.6.1 snapshots and DCMTK 3.6.2 4109 # This test fails on DCMTK 3.6.0, but succeeds in DCMTK 3.6.1 snapshots and DCMTK 3.6.2
4104 UploadInstance(_REMOTE, 'Issue42.dcm')['ID'] 4110 UploadInstance(_REMOTE, 'Issue42.dcm')['ID']
4105 modified = DoPost(_REMOTE, 4111 modified = DoPost(_REMOTE,
4106 '/patients/da128605-e040d0c4-310615d2-3475da63-df2d1ef4/modify', 4112 '/patients/da128605-e040d0c4-310615d2-3475da63-df2d1ef4/modify',
4107 '{"Replace":{"PatientID":"Hello","PatientName":"Sample patient name"},"Force":true}', 4113 '{"Replace":{"PatientID":"Hello","PatientName":"Sample patient name"},"Force":true}',
4109 self.assertTrue('PatientID' in modified) 4115 self.assertTrue('PatientID' in modified)
4110 4116
4111 4117
4112 def test_rest_find_limit(self): 4118 def test_rest_find_limit(self):
4113 # Check the "Since" and "Limit" parameters in URI "/tools/find" 4119 # Check the "Since" and "Limit" parameters in URI "/tools/find"
4114 # Related to issue 53: https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=53 4120 # Related to issue 53: https://bugs.orthanc-server.com/show_bug.cgi?id=53
4115 4121
4116 # Upload 6 instances 4122 # Upload 6 instances
4117 brainix = [] 4123 brainix = []
4118 knee = [] 4124 knee = []
4119 for i in range(2): 4125 for i in range(2):
4178 self.assertEqual(0, len(set(b) ^ set(knee))) 4184 self.assertEqual(0, len(set(b) ^ set(knee)))
4179 4185
4180 4186
4181 def test_bitbucket_issue_46(self): 4187 def test_bitbucket_issue_46(self):
4182 # "PHI remaining after anonymization" 4188 # "PHI remaining after anonymization"
4183 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=46 4189 # https://bugs.orthanc-server.com/show_bug.cgi?id=46
4184 4190
4185 def GetAnonymizedTags(study, version): 4191 def GetAnonymizedTags(study, version):
4186 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, 4192 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
4187 { 'DicomVersion' : version }, 4193 { 'DicomVersion' : version },
4188 'application/json') ['ID'] 4194 'application/json') ['ID']
4267 4273
4268 def test_bitbucket_issue_56(self): 4274 def test_bitbucket_issue_56(self):
4269 # Case-insensitive matching over accents. This test assumes 4275 # Case-insensitive matching over accents. This test assumes
4270 # that the "CaseSensitivePN" configuration option of Orthanc 4276 # that the "CaseSensitivePN" configuration option of Orthanc
4271 # is set to "false" (default value). 4277 # is set to "false" (default value).
4272 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=56 4278 # https://bugs.orthanc-server.com/show_bug.cgi?id=56
4273 4279
4274 def Check(name, expected, expectedSensitive): 4280 def Check(name, expected, expectedSensitive):
4275 a = CallFindScu([ '-k', '0008,0005=ISO_IR 192', # Use UTF-8 4281 a = CallFindScu([ '-k', '0008,0005=ISO_IR 192', # Use UTF-8
4276 '-k', '0008,0052=PATIENT', 4282 '-k', '0008,0052=PATIENT',
4277 '-k', 'PatientName=%s' % name ]) 4283 '-k', 'PatientName=%s' % name ])
4553 self.assertEqual(str(content1), str(content2)) 4559 self.assertEqual(str(content1), str(content2))
4554 4560
4555 4561
4556 def test_bitbucket_issue_94(self): 4562 def test_bitbucket_issue_94(self):
4557 # "a simple instance modification should not modify FrameOfReferenceUID + ..." 4563 # "a simple instance modification should not modify FrameOfReferenceUID + ..."
4558 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=94 4564 # https://bugs.orthanc-server.com/show_bug.cgi?id=94
4559 i = UploadInstance(_REMOTE, 'Issue94.dcm')['ID'] 4565 i = UploadInstance(_REMOTE, 'Issue94.dcm')['ID']
4560 4566
4561 source = DoGet(_REMOTE, '/instances/%s/attachments/dicom/data' % i) 4567 source = DoGet(_REMOTE, '/instances/%s/attachments/dicom/data' % i)
4562 4568
4563 modified = DoPost(_REMOTE, '/instances/%s/modify' % i, 4569 modified = DoPost(_REMOTE, '/instances/%s/modify' % i,
5253 Compare('HierarchicalAnonymization/StructuredReports/IM0', 5259 Compare('HierarchicalAnonymization/StructuredReports/IM0',
5254 'HierarchicalAnonymization/StructuredReports/IM0.json') 5260 'HierarchicalAnonymization/StructuredReports/IM0.json')
5255 5261
5256 5262
5257 def test_issue_95_encodings(self): 5263 def test_issue_95_encodings(self):
5258 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=95 5264 # https://bugs.orthanc-server.com/show_bug.cgi?id=95
5259 # Check out image: "../Database/Encodings/DavidClunie/charsettests.screenshot.png" 5265 # Check out image: "../Database/Encodings/DavidClunie/charsettests.screenshot.png"
5260 5266
5261 # Very useful tool: "file2" from package "file-kanji" 5267 # Very useful tool: "file2" from package "file-kanji"
5262 5268
5263 def GetPatientName(dicom): 5269 def GetPatientName(dicom):
5332 5338
5333 5339
5334 def test_bitbucket_issue_131(self): 5340 def test_bitbucket_issue_131(self):
5335 # "Orthanc PACS silently fails to C-MOVE due to duplicate 5341 # "Orthanc PACS silently fails to C-MOVE due to duplicate
5336 # StudyInstanceUID in it's database." 5342 # StudyInstanceUID in it's database."
5337 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=131 5343 # https://bugs.orthanc-server.com/show_bug.cgi?id=131
5338 5344
5339 # Insert 2 instances, with the same StudyInstanceUID, but with 5345 # Insert 2 instances, with the same StudyInstanceUID, but with
5340 # different patient IDs. Orthanc will create 2 distincts 5346 # different patient IDs. Orthanc will create 2 distincts
5341 # patients, and the hierarchy of resources above the two 5347 # patients, and the hierarchy of resources above the two
5342 # instances will be fully disjoint. 5348 # instances will be fully disjoint.
5545 5551
5546 5552
5547 def test_bitbucket_issue_140(self): 5553 def test_bitbucket_issue_140(self):
5548 # "Modifying private tags with REST API changes VR from LO to 5554 # "Modifying private tags with REST API changes VR from LO to
5549 # UN." This test fails if DCMTK <= 3.6.1 (e.g. fails on Ubuntu 16.04). 5555 # UN." This test fails if DCMTK <= 3.6.1 (e.g. fails on Ubuntu 16.04).
5550 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=140 5556 # https://bugs.orthanc-server.com/show_bug.cgi?id=140
5551 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID'] 5557 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID']
5552 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries'] 5558 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries']
5553 5559
5554 target = DoPost(_REMOTE, '/series/%s/modify' % series, { 5560 target = DoPost(_REMOTE, '/series/%s/modify' % series, {
5555 'Replace' : { 'RadioButton3' : 'aaabbbccc' }, 5561 'Replace' : { 'RadioButton3' : 'aaabbbccc' },
5626 'Normalize' : False 5632 'Normalize' : False
5627 })) 5633 }))
5628 5634
5629 5635
5630 def test_bitbucket_issue_141(self): 5636 def test_bitbucket_issue_141(self):
5631 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=141 5637 # https://bugs.orthanc-server.com/show_bug.cgi?id=141
5632 a = UploadInstance(_REMOTE, 'Issue141.dcm') ['ID'] 5638 a = UploadInstance(_REMOTE, 'Issue141.dcm') ['ID']
5633 study = '494c8037-b237f263-d8f15075-c8cb2280-daf39bd1' 5639 study = '494c8037-b237f263-d8f15075-c8cb2280-daf39bd1'
5634 5640
5635 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f: 5641 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f:
5636 pdf = f.read() 5642 pdf = f.read()
5652 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm') 5658 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm')
5653 DoPost(_REMOTE, '/studies/0c4aca1d-c107a241-6659d6aa-594c674a-a468b94a/modify', {}) 5659 DoPost(_REMOTE, '/studies/0c4aca1d-c107a241-6659d6aa-594c674a-a468b94a/modify', {})
5654 5660
5655 5661
5656 def test_log_level(self): 5662 def test_log_level(self):
5657 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=65 5663 # https://bugs.orthanc-server.com/show_bug.cgi?id=65
5658 original = DoGet(_REMOTE, '/tools/log-level') 5664 original = DoGet(_REMOTE, '/tools/log-level')
5659 5665
5660 DoPut(_REMOTE, '/tools/log-level', 'default') 5666 DoPut(_REMOTE, '/tools/log-level', 'default')
5661 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level')) 5667 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level'))
5662 DoGet(_REMOTE, '/system') 5668 DoGet(_REMOTE, '/system')
6022 self.assertEqual(24, im.size[1]) 6028 self.assertEqual(24, im.size[1])
6023 6029
6024 6030
6025 def test_bitbucket_issue_154(self): 6031 def test_bitbucket_issue_154(self):
6026 # "Matching against list of UID-s by C-MOVE" 6032 # "Matching against list of UID-s by C-MOVE"
6027 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=154 6033 # https://bugs.orthanc-server.com/show_bug.cgi?id=154
6028 a = UploadInstance(_REMOTE, 'Issue154-d1.dcm') ['ID'] 6034 a = UploadInstance(_REMOTE, 'Issue154-d1.dcm') ['ID']
6029 b = UploadInstance(_REMOTE, 'Issue154-d2.dcm') ['ID'] 6035 b = UploadInstance(_REMOTE, 'Issue154-d2.dcm') ['ID']
6030 6036
6031 study = '1.2.826.0.1.3680043.8.498.35214236271657363033644818354280454731' 6037 study = '1.2.826.0.1.3680043.8.498.35214236271657363033644818354280454731'
6032 series1 = '1.2.826.0.1.3680043.8.498.12243321927795467590791662266352305113' 6038 series1 = '1.2.826.0.1.3680043.8.498.12243321927795467590791662266352305113'
6427 'Resources' : [ info['ParentStudy'] ], 6433 'Resources' : [ info['ParentStudy'] ],
6428 'Transcode' : '1.2.840.10008.1.2.4.57', 6434 'Transcode' : '1.2.840.10008.1.2.4.57',
6429 }) 6435 })
6430 self.assertEqual(2, len(z.namelist())) 6436 self.assertEqual(2, len(z.namelist()))
6431 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) 6437 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
6438
6439 if IsOrthancVersionAbove(_REMOTE, 1, 12, 2):
6440 z = GetArchive(_REMOTE, '/tools/create-archive?resources=%s&transcode=1.2.840.10008.1.2.4.50' % info['ParentStudy'])
6441 self.assertEqual(1, len(z.namelist()))
6442 self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read(z.namelist()[0])))
6443
6444 z = GetArchive(_REMOTE, '/tools/create-media?resources=%s&transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy'])
6445 self.assertEqual(2, len(z.namelist()))
6446 self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0')))
6447
6448 z = GetArchive(_REMOTE, '/tools/create-media-extended?resources=%s&transcode=1.2.840.10008.1.2.4.57' % info['ParentStudy'])
6449 self.assertEqual(2, len(z.namelist()))
6450 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
6451
6452
6432 6453
6433 6454
6434 def test_download_file_transcode(self): 6455 def test_download_file_transcode(self):
6435 if IsOrthancVersionAbove(_REMOTE, 1, 12, 2): 6456 if IsOrthancVersionAbove(_REMOTE, 1, 12, 2):
6436 6457
7703 self.assertEqual('hello2', DoGet(_REMOTE, '/instances/%s/attachments/1024/data' % i)) 7724 self.assertEqual('hello2', DoGet(_REMOTE, '/instances/%s/attachments/1024/data' % i))
7704 7725
7705 7726
7706 def test_issue_195(self): 7727 def test_issue_195(self):
7707 # This fails on Orthanc <= 1.9.2 7728 # This fails on Orthanc <= 1.9.2
7708 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=195 7729 # https://bugs.orthanc-server.com/show_bug.cgi?id=195
7709 a = UploadInstance(_REMOTE, 'Issue195.dcm')['ID'] 7730 a = UploadInstance(_REMOTE, 'Issue195.dcm')['ID']
7710 b = DoGet(_REMOTE, '/instances/%s/file' % a, 7731 b = DoGet(_REMOTE, '/instances/%s/file' % a,
7711 headers = { 'Accept' : 'application/dicom+json' }) 7732 headers = { 'Accept' : 'application/dicom+json' })
7712 7733
7713 # The expected result can be found by typing "dcm2json Database/Issue195.dcm" 7734 # The expected result can be found by typing "dcm2json Database/Issue195.dcm"
7788 self.assertEqual('0020,9056', tags['0020,9165']) 7809 self.assertEqual('0020,9056', tags['0020,9165'])
7789 7810
7790 7811
7791 def test_issue_146(self): 7812 def test_issue_146(self):
7792 # "Update Anonyization to 2019c" 7813 # "Update Anonyization to 2019c"
7793 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=146 7814 # https://bugs.orthanc-server.com/show_bug.cgi?id=146
7794 7815
7795 def GetTags(study, params): 7816 def GetTags(study, params):
7796 a = DoPost(_REMOTE, '/studies/%s/anonymize' % study, params) ['ID'] 7817 a = DoPost(_REMOTE, '/studies/%s/anonymize' % study, params) ['ID']
7797 b = DoGet(_REMOTE, '/studies/%s/instances' % a) 7818 b = DoGet(_REMOTE, '/studies/%s/instances' % a)
7798 self.assertEqual(1, len(b)) 7819 self.assertEqual(1, len(b))
8786 self.assertFalse('0008,1110' in tags2['0008,0124'][0]) 8807 self.assertFalse('0008,1110' in tags2['0008,0124'][0])
8787 8808
8788 8809
8789 def test_issue_200(self): 8810 def test_issue_200(self):
8790 # https://groups.google.com/g/orthanc-users/c/9CTLsL-JqDw/m/2I0xgyYHBAAJ 8811 # https://groups.google.com/g/orthanc-users/c/9CTLsL-JqDw/m/2I0xgyYHBAAJ
8791 # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=200 8812 # https://bugs.orthanc-server.com/show_bug.cgi?id=200
8792 self.assertEqual(0, len(DoGet(_REMOTE, '/changes') ['Changes'])) 8813 self.assertEqual(0, len(DoGet(_REMOTE, '/changes') ['Changes']))
8793 self.assertEqual(0, len(DoGet(_REMOTE, '/changes?last') ['Changes'])) 8814 self.assertEqual(0, len(DoGet(_REMOTE, '/changes?last') ['Changes']))
8794 u = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID'] 8815 u = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
8795 8816
8796 for change in DoGet(_REMOTE, '/changes') ['Changes']: 8817 for change in DoGet(_REMOTE, '/changes') ['Changes']: