Mercurial > hg > orthanc-tests
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']: |