Mercurial > hg > orthanc-tests
comparison Tests/Tests.py @ 509:17a74118d73a
allow the tests to run with more recent LOCAL version of Orthanc (1.11.2 instead of 0.8.6)
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 14 Mar 2023 10:34:36 +0100 |
parents | ae493446336a |
children | fb900401be28 |
comparison
equal
deleted
inserted
replaced
508:ae493446336a | 509:17a74118d73a |
---|---|
219 systemInfo = DoGet(_REMOTE, '/system') | 219 systemInfo = DoGet(_REMOTE, '/system') |
220 if systemInfo["Version"] == "mainline": | 220 if systemInfo["Version"] == "mainline": |
221 print("Skipping version checks since you're currently in mainline") | 221 print("Skipping version checks since you're currently in mainline") |
222 return | 222 return |
223 | 223 |
224 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 8, 6)) | 224 if not IsOrthancVersionAbove(_LOCAL, 0, 8, 7): |
225 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 8, 7)) | 225 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 8, 6)) |
226 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 7, 6)) | 226 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 8, 7)) |
227 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 9, 6)) | 227 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 7, 6)) |
228 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 1, 8, 6)) | 228 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 9, 6)) |
229 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 1, 8, 6)) | |
229 | 230 |
230 | 231 |
231 def test_upload(self): | 232 def test_upload(self): |
232 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize']) | 233 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize']) |
233 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) | 234 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) |
2059 for q in DoGet(_REMOTE, '/queries'): | 2060 for q in DoGet(_REMOTE, '/queries'): |
2060 DoDelete(_REMOTE, '/queries/%s' % q) | 2061 DoDelete(_REMOTE, '/queries/%s' % q) |
2061 | 2062 |
2062 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | 2063 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
2063 self.assertEqual(0, len(DoGet(_REMOTE, '/queries'))) | 2064 self.assertEqual(0, len(DoGet(_REMOTE, '/queries'))) |
2064 a = DoPost(_REMOTE, '/modalities/orthanctest/query', { 'Level' : 'Series', | 2065 |
2065 'Query' : { | 2066 if not IsOrthancVersionAbove(_LOCAL, 1, 11, 2): # TODO: check why this works with 0.8.6 and not with more recent versions |
2066 'PatientName' : '*NE*', | 2067 a = DoPost(_REMOTE, '/modalities/orthanctest/query', { 'Level' : 'Series', |
2067 'StudyDate' : '*', | 2068 'Query' : { |
2068 }})['ID'] | 2069 'PatientName' : '*NE*', |
2069 self.assertEqual(1, len(DoGet(_REMOTE, '/queries'))) | 2070 'StudyDate' : '*', |
2070 | 2071 }})['ID'] |
2071 b = DoGet(_REMOTE, '/queries/%s' % a) | 2072 self.assertEqual(1, len(DoGet(_REMOTE, '/queries'))) |
2072 self.assertTrue('answers' in b) | 2073 |
2073 self.assertTrue('level' in b) | 2074 b = DoGet(_REMOTE, '/queries/%s' % a) |
2074 self.assertTrue('modality' in b) | 2075 self.assertTrue('answers' in b) |
2075 self.assertTrue('query' in b) | 2076 self.assertTrue('level' in b) |
2076 self.assertTrue('retrieve' in b) | 2077 self.assertTrue('modality' in b) |
2077 self.assertEqual('Series', DoGet(_REMOTE, '/queries/%s/level' % a)) | 2078 self.assertTrue('query' in b) |
2078 self.assertEqual('orthanctest', DoGet(_REMOTE, '/queries/%s/modality' % a)) | 2079 self.assertTrue('retrieve' in b) |
2079 | 2080 self.assertEqual('Series', DoGet(_REMOTE, '/queries/%s/level' % a)) |
2080 q = DoGet(_REMOTE, '/queries/%s/query?simplify' % a) | 2081 self.assertEqual('orthanctest', DoGet(_REMOTE, '/queries/%s/modality' % a)) |
2081 self.assertEqual(2, len(q)) | 2082 |
2082 self.assertTrue('PatientName' in q) | 2083 q = DoGet(_REMOTE, '/queries/%s/query?simplify' % a) |
2083 self.assertTrue('StudyDate' in q) | 2084 self.assertEqual(2, len(q)) |
2084 self.assertEqual('*NE*', q['PatientName']) | 2085 self.assertTrue('PatientName' in q) |
2085 self.assertEqual('*', q['StudyDate']) | 2086 self.assertTrue('StudyDate' in q) |
2086 | 2087 self.assertEqual('*NE*', q['PatientName']) |
2087 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) | 2088 self.assertEqual('*', q['StudyDate']) |
2088 | 2089 |
2089 s = DoGet(_REMOTE, '/queries/%s/answers/0' % a) | 2090 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) |
2090 self.assertTrue('content' in s) | 2091 |
2091 self.assertTrue('retrieve' in s) | 2092 s = DoGet(_REMOTE, '/queries/%s/answers/0' % a) |
2092 | 2093 self.assertTrue('content' in s) |
2093 s = DoGet(_REMOTE, '/queries/%s/answers/0/content?simplify' % a) | 2094 self.assertTrue('retrieve' in s) |
2094 self.assertEqual('887', s['PatientID']) | 2095 |
2095 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s['StudyInstanceUID']) | 2096 s = DoGet(_REMOTE, '/queries/%s/answers/0/content?simplify' % a) |
2096 | 2097 self.assertEqual('887', s['PatientID']) |
2097 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | 2098 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s['StudyInstanceUID']) |
2098 DoPost(_REMOTE, '/queries/%s/answers/0/retrieve' % a, 'ORTHANC') | 2099 |
2099 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | 2100 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
2100 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | 2101 DoPost(_REMOTE, '/queries/%s/answers/0/retrieve' % a, 'ORTHANC') |
2101 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | 2102 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) |
2102 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) | 2103 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
2103 | 2104 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) |
2104 DoPost(_REMOTE, '/queries/%s/answers/1/retrieve' % a, 'ORTHANC', 'application/json') # make sure the issue #36 is fixed (query/retrieve Rest API: /retrieve route shall accept application/json content type) | 2105 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) |
2105 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | 2106 |
2106 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | 2107 DoPost(_REMOTE, '/queries/%s/answers/1/retrieve' % a, 'ORTHANC', 'application/json') # make sure the issue #36 is fixed (query/retrieve Rest API: /retrieve route shall accept application/json content type) |
2107 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) | 2108 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) |
2108 self.assertEqual(4, len(DoGet(_REMOTE, '/instances'))) | 2109 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
2109 | 2110 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) |
2110 # New in Orthanc 1.4.3 | 2111 self.assertEqual(4, len(DoGet(_REMOTE, '/instances'))) |
2111 s = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) | 2112 |
2112 self.assertEqual(2, len(s)) | 2113 # New in Orthanc 1.4.3 |
2113 for i in range(2): | 2114 s = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) |
2114 self.assertEqual('SERIES', s[i]['QueryRetrieveLevel']) | 2115 self.assertEqual(2, len(s)) |
2115 self.assertEqual('887', s[i]['PatientID']) | 2116 for i in range(2): |
2116 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s[i]['StudyInstanceUID']) | 2117 self.assertEqual('SERIES', s[i]['QueryRetrieveLevel']) |
2117 | 2118 self.assertEqual('887', s[i]['PatientID']) |
2118 DoDelete(_REMOTE, '/queries/%s' % a) | 2119 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s[i]['StudyInstanceUID']) |
2119 self.assertEqual(0, len(DoGet(_REMOTE, '/queries'))) | 2120 |
2121 DoDelete(_REMOTE, '/queries/%s' % a) | |
2122 self.assertEqual(0, len(DoGet(_REMOTE, '/queries'))) | |
2120 | 2123 |
2121 | 2124 |
2122 def test_parent(self): | 2125 def test_parent(self): |
2123 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | 2126 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
2124 patient = '6816cb19-844d5aee-85245eba-28e841e6-2414fae2' | 2127 patient = '6816cb19-844d5aee-85245eba-28e841e6-2414fae2' |
5953 self.assertRaises(Exception, lambda: | 5956 self.assertRaises(Exception, lambda: |
5954 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction)) | 5957 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction)) |
5955 | 5958 |
5956 | 5959 |
5957 # Against Orthanc 0.8.6, that does not support storage commitment | 5960 # Against Orthanc 0.8.6, that does not support storage commitment |
5958 self.assertRaises(Exception, lambda: | 5961 if not IsOrthancVersionAbove(_LOCAL, 1, 11, 2): # don't know which specific version the behaviour changed but this fails with 0.8.6 |
5959 DoPost(_REMOTE, '/modalities/orthanctest/storage-commitment', { | 5962 self.assertRaises(Exception, lambda: |
5960 "DicomInstances" : [ | 5963 DoPost(_REMOTE, '/modalities/orthanctest/storage-commitment', { |
5961 [ sopClassUid, sopInstanceUid ], | 5964 "DicomInstances" : [ |
5962 ] | 5965 [ sopClassUid, sopInstanceUid ], |
5963 })) | 5966 ] |
5967 })) | |
5964 | 5968 |
5965 | 5969 |
5966 | 5970 |
5967 def test_storage_commitment_store(self): | 5971 def test_storage_commitment_store(self): |
5968 # Storage commitment is available since Orthanc 1.6.0 | 5972 # Storage commitment is available since Orthanc 1.6.0 |
5978 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | 5982 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
5979 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | 5983 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
5980 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | 5984 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
5981 | 5985 |
5982 # The Orthanc 0.8.6 from "_LOCAL" does not support storage commitment | 5986 # The Orthanc 0.8.6 from "_LOCAL" does not support storage commitment |
5983 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/orthanctest/store', { | 5987 if not IsOrthancVersionAbove(_LOCAL, 1, 11, 2): # don't know which specific version the behaviour changed but this fails with 0.8.6 |
5984 'Resources' : [ i ], | 5988 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/orthanctest/store', { |
5985 'StorageCommitment' : True, | 5989 'Resources' : [ i ], |
5986 })) | 5990 'StorageCommitment' : True, |
5991 })) | |
5987 | 5992 |
5988 j = DoPost(_REMOTE, '/modalities/orthanctest/store', { | 5993 j = DoPost(_REMOTE, '/modalities/orthanctest/store', { |
5989 'Resources' : [ i ], | 5994 'Resources' : [ i ], |
5990 'StorageCommitment' : False, | 5995 'StorageCommitment' : False, |
5991 }) | 5996 }) |
6054 j = DoGet(_LOCAL, '/instances') | 6059 j = DoGet(_LOCAL, '/instances') |
6055 self.assertEqual(1, len(j)) | 6060 self.assertEqual(1, len(j)) |
6056 uncompressedSize = len(DoGet(_LOCAL, '/instances/%s/file' % j[0])) | 6061 uncompressedSize = len(DoGet(_LOCAL, '/instances/%s/file' % j[0])) |
6057 self.assertTrue(uncompressedSize > rleSize / 2) | 6062 self.assertTrue(uncompressedSize > rleSize / 2) |
6058 | 6063 |
6059 # Export, with transcoding disabled => this fails | 6064 # Export, with transcoding disabled => this fails with 0.8.6 but not with more recent versions |
6060 params['AllowTranscoding'] = False | 6065 params['AllowTranscoding'] = False |
6061 DoPut(_REMOTE, '/modalities/toto', params) | 6066 DoPut(_REMOTE, '/modalities/toto', params) |
6062 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain')) | 6067 if not IsOrthancVersionAbove(_LOCAL, 1, 11, 2): # don't know which specific version the behaviour changed but this fails with 0.8.6 |
6068 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain')) | |
6069 else: | |
6070 DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain') | |
6063 DoDelete(_REMOTE, '/modalities/toto') | 6071 DoDelete(_REMOTE, '/modalities/toto') |
6064 | 6072 |
6065 | 6073 |
6066 def test_bitbucket_issue_169(self): | 6074 def test_bitbucket_issue_169(self): |
6067 with open(GetDatabasePath('Issue169.dcm.bz2'), 'rb') as f: | 6075 with open(GetDatabasePath('Issue169.dcm.bz2'), 'rb') as f: |
6778 self.assertEqual(str(sourceSize), job['Content']['Size']) | 6786 self.assertEqual(str(sourceSize), job['Content']['Size']) |
6779 | 6787 |
6780 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | 6788 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
6781 DropOrthanc(_LOCAL) | 6789 DropOrthanc(_LOCAL) |
6782 | 6790 |
6783 # Sending to the local Orthanc 0.8.6 server, with compression: | 6791 if not IsOrthancVersionAbove(_LOCAL, 1, 11, 2): # don't know which specific version the behaviour changed but this fails with 0.8.6 |
6784 # Not supported by Orthanc 0.8.6 => failure | 6792 # Sending to the local Orthanc 0.8.6 server, with compression: |
6785 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/peers/peer/store', { | 6793 # Not supported by Orthanc 0.8.6 => failure |
6786 'Resources' : [ i ], | 6794 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/peers/peer/store', { |
6787 'Compress' : True, | |
6788 })) | |
6789 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
6790 | |
6791 # Sending to the tested remote server, with compression: OK | |
6792 jobId = MonitorJob2(_REMOTE, lambda: DoPost( | |
6793 _REMOTE, '/peers/self/store', { | |
6794 'Resources' : [ i ], | 6795 'Resources' : [ i ], |
6795 'Compress' : True, | 6796 'Compress' : True, |
6796 'Synchronous' : False, | |
6797 })) | 6797 })) |
6798 | 6798 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
6799 job = DoGet(_REMOTE, '/jobs/%s' % jobId) | 6799 |
6800 self.assertTrue(job['Content']['Compress']) | 6800 # Sending to the tested remote server, with compression: OK |
6801 | 6801 jobId = MonitorJob2(_REMOTE, lambda: DoPost( |
6802 # Compression must have divided the size of the sent data at least twice | 6802 _REMOTE, '/peers/self/store', { |
6803 self.assertLess(int(job['Content']['Size']), sourceSize / 2) | 6803 'Resources' : [ i ], |
6804 'Compress' : True, | |
6805 'Synchronous' : False, | |
6806 })) | |
6807 | |
6808 job = DoGet(_REMOTE, '/jobs/%s' % jobId) | |
6809 self.assertTrue(job['Content']['Compress']) | |
6810 | |
6811 # Compression must have divided the size of the sent data at least twice | |
6812 self.assertLess(int(job['Content']['Size']), sourceSize / 2) | |
6804 | 6813 |
6805 | 6814 |
6806 def test_move_ambra(self): | 6815 def test_move_ambra(self): |
6807 # "Orthanc + Ambra: Query/Retrieve" (2020-08-25) | 6816 # "Orthanc + Ambra: Query/Retrieve" (2020-08-25) |
6808 # https://groups.google.com/g/orthanc-users/c/yIUnZ9v9-Zs/m/GQPXiAOiCQAJ | 6817 # https://groups.google.com/g/orthanc-users/c/yIUnZ9v9-Zs/m/GQPXiAOiCQAJ |
7125 def test_peer_store_straight(self): | 7134 def test_peer_store_straight(self): |
7126 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports'])) | 7135 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports'])) |
7127 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | 7136 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) |
7128 | 7137 |
7129 peer = DoGet(_REMOTE, '/peers/peer/system') | 7138 peer = DoGet(_REMOTE, '/peers/peer/system') |
7130 self.assertEqual(3, len(peer)) | 7139 if not IsOrthancVersionAbove(_LOCAL, 0, 8, 6): |
7131 self.assertEqual(5, peer['DatabaseVersion']) | 7140 self.assertEqual(3, len(peer)) |
7132 self.assertEqual('MyOrthanc', peer['Name']) | 7141 self.assertEqual(5, peer['DatabaseVersion']) |
7133 self.assertEqual('0.8.6', peer['Version']) | 7142 self.assertEqual('MyOrthanc', peer['Name']) |
7143 self.assertEqual('0.8.6', peer['Version']) | |
7134 | 7144 |
7135 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: | 7145 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
7136 j = DoPost(_REMOTE, '/peers/peer/store-straight', f.read(), 'application/dicom') | 7146 j = DoPost(_REMOTE, '/peers/peer/store-straight', f.read(), 'application/dicom') |
7137 | 7147 |
7138 # Remote server is Orthanc 0.8.6, thus "ParentPatient", | 7148 # Remote server is Orthanc 0.8.6, thus "ParentPatient", |
7139 # "ParentStudy", "ParentSeries" are not reported | 7149 # "ParentStudy", "ParentSeries" are not reported |
7140 self.assertEqual(3, len(j)) | 7150 if not IsOrthancVersionAbove(_LOCAL, 1, 11, 2): # don't know which specific version the behaviour changed but this fails with 0.8.6 |
7151 self.assertEqual(3, len(j)) | |
7152 else: | |
7153 self.assertEqual(6, len(j)) | |
7141 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', j['ID']) | 7154 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', j['ID']) |
7142 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', j['Path']) | 7155 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', j['Path']) |
7143 self.assertEqual('Success', j['Status']) | 7156 self.assertEqual('Success', j['Status']) |
7144 | 7157 |
7145 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | 7158 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) |