comparison Tests/Tests.py @ 379:097329b67509

fix tests if StorageCompression is true
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 12 Feb 2021 15:52:10 +0100
parents a4b8450a1158
children b9adc7d06347
comparison
equal deleted inserted replaced
378:a4b8450a1158 379:097329b67509
181 181
182 sizeDummyCT = 2472 182 sizeDummyCT = 2472
183 sizeOverwrite = 2476 183 sizeOverwrite = 2476
184 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d' 184 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d'
185 185
186 # This file has *no* pixel data => "dicom-until-pixel-data" is not created
186 u = UploadInstance(_REMOTE, 'DummyCT.dcm') 187 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
188 isCompressed = (DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % u['ID']) != 0)
187 self.assertEqual(instance, u['ID']) 189 self.assertEqual(instance, u['ID'])
188 self.assertEqual('Success', u['Status']) 190 self.assertEqual('Success', u['Status'])
189 191
190 if True: 192 if True:
191 # New test for Orthanc 1.4.3 193 # New test for Orthanc 1.4.3
192 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', u['ParentSeries']) 194 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', u['ParentSeries'])
193 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', u['ParentStudy']) 195 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', u['ParentStudy'])
194 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', u['ParentPatient']) 196 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', u['ParentPatient'])
195 197
196 j = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % instance)) 198 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
199 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance))
200 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-until-pixel-data' % instance))
201 j = 0
202 else:
203 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-until-pixel-data' % instance))
204 j = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % instance))
205
197 s = sizeDummyCT + j 206 s = sizeDummyCT + j
198 self.assertEqual('%d' % s, DoGet(_REMOTE, '/statistics')['TotalDiskSize']) 207
199 self.assertEqual('%d' % s, DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) 208 if isCompressed:
209 self.assertGreater(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
210 else:
211 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
212
213 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
200 214
201 u = UploadInstance(_REMOTE, 'DummyCT.dcm') 215 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
202 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) 216 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
203 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) 217 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
204 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) 218 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
205 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) 219 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
206 self.assertEqual('%d' % s, DoGet(_REMOTE, '/statistics')['TotalDiskSize']) 220
207 self.assertEqual('%d' % s, DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) 221 if isCompressed:
222 self.assertGreater(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
223 else:
224 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
225
226 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
208 227
209 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance) 228 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance)
210 self.assertEqual('20070101', i['StudyDate']) 229 self.assertEqual('20070101', i['StudyDate'])
211 self.assertEqual('KNIX', i['PatientName']) 230 self.assertEqual('KNIX', i['PatientName'])
212 231
223 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) 242 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
224 243
225 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2): 244 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2):
226 # Overwriting 245 # Overwriting
227 self.assertEqual('Success', u['Status']) 246 self.assertEqual('Success', u['Status'])
228 j2 = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % instance)) 247 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
248 j2 = 0
249 else:
250 j2 = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % instance))
251 self.assertNotEqual(j, j2)
229 s2 = sizeOverwrite + j2 252 s2 = sizeOverwrite + j2
230 self.assertNotEqual(s, s2) 253 self.assertNotEqual(s, s2)
231 self.assertNotEqual(j, j2) 254 if isCompressed:
232 self.assertEqual('%d' % s2, DoGet(_REMOTE, '/statistics')['TotalDiskSize']) 255 self.assertGreater(s2, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
233 self.assertEqual('%d' % s2, DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) 256 else:
257 self.assertEqual(s2, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
258
259 self.assertEqual(s2, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
234 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance) 260 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance)
235 self.assertEqual('ANOTHER', i['PatientName']) 261 self.assertEqual('ANOTHER', i['PatientName'])
236 else: 262 else:
237 self.assertEqual('AlreadyStored', u['Status']) 263 self.assertEqual('AlreadyStored', u['Status'])
238 self.assertEqual('%d' % s, DoGet(_REMOTE, '/statistics')['TotalDiskSize']) 264 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
239 self.assertEqual('%d' % s, DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) 265 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
240 266
241 def test_upload_2(self): 267 def test_upload_2(self):
242 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] 268 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
243 instance = DoGet(_REMOTE, '/instances/%s' % i) 269 instance = DoGet(_REMOTE, '/instances/%s' % i)
244 self.assertEqual(i, instance['ID']) 270 self.assertEqual(i, instance['ID'])
1041 # New in Orthanc 1.9.0 1067 # New in Orthanc 1.9.0
1042 self.assertTrue('RemoteAET' in m) 1068 self.assertTrue('RemoteAET' in m)
1043 self.assertEqual(DoGet(_REMOTE, '/series/%s/metadata/RemoteAET' % series), '') # None, received by REST API 1069 self.assertEqual(DoGet(_REMOTE, '/series/%s/metadata/RemoteAET' % series), '') # None, received by REST API
1044 1070
1045 m = DoGet(_REMOTE, '/instances/%s/metadata' % i) 1071 m = DoGet(_REMOTE, '/instances/%s/metadata' % i)
1046 self.assertEqual(9, len(m)) 1072 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
1073 self.assertEqual(9, len(m))
1074 self.assertTrue('PixelDataOffset' in m) # New in Orthanc 1.9.1
1075 self.assertEqual(int(DoGet(_REMOTE, '/instances/%s/metadata/PixelDataOffset' % i)), 0x0c78)
1076 else:
1077 self.assertEqual(8, len(m))
1078
1047 self.assertTrue('IndexInSeries' in m) 1079 self.assertTrue('IndexInSeries' in m)
1048 self.assertTrue('ReceptionDate' in m) 1080 self.assertTrue('ReceptionDate' in m)
1049 self.assertTrue('RemoteAET' in m) 1081 self.assertTrue('RemoteAET' in m)
1050 self.assertTrue('Origin' in m) 1082 self.assertTrue('Origin' in m)
1051 self.assertTrue('TransferSyntax' in m) 1083 self.assertTrue('TransferSyntax' in m)
1052 self.assertTrue('SopClassUid' in m) 1084 self.assertTrue('SopClassUid' in m)
1053 self.assertTrue('RemoteIP' in m) 1085 self.assertTrue('RemoteIP' in m)
1054 self.assertTrue('HttpUsername' in m) 1086 self.assertTrue('HttpUsername' in m)
1055 self.assertTrue('PixelDataOffset' in m) # New in Orthanc 1.9.1
1056 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/IndexInSeries' % i), 1) 1087 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/IndexInSeries' % i), 1)
1057 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i), 'RestApi') 1088 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i), 'RestApi')
1058 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i), '') # None, received by REST API 1089 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i), '') # None, received by REST API
1059 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i), '1.2.840.10008.1.2.4.91') # JPEG2k 1090 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i), '1.2.840.10008.1.2.4.91') # JPEG2k
1060 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i), '1.2.840.10008.5.1.4.1.1.4') 1091 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i), '1.2.840.10008.5.1.4.1.1.4')
1061 self.assertEqual(int(DoGet(_REMOTE, '/instances/%s/metadata/PixelDataOffset' % i)), 0x0c78)
1062 1092
1063 # Play with custom metadata 1093 # Play with custom metadata
1064 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou') 1094 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou')
1065 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) 1095 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
1066 self.assertEqual(2, len(m)) 1096 self.assertEqual(2, len(m))
1171 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) 1201 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
1172 1202
1173 i = DoGet(_REMOTE, '/instances') 1203 i = DoGet(_REMOTE, '/instances')
1174 self.assertEqual(1, len(i)) 1204 self.assertEqual(1, len(i))
1175 m = DoGet(_REMOTE, '/instances/%s/metadata' % i[0]) 1205 m = DoGet(_REMOTE, '/instances/%s/metadata' % i[0])
1176 self.assertEqual(9, len(m)) 1206
1207 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
1208 self.assertEqual(9, len(m))
1209 self.assertTrue('PixelDataOffset' in m) # New in Orthanc 1.9.1
1210 else:
1211 self.assertEqual(8, len(m))
1212
1177 self.assertTrue('IndexInSeries' in m) 1213 self.assertTrue('IndexInSeries' in m)
1178 self.assertTrue('ReceptionDate' in m) 1214 self.assertTrue('ReceptionDate' in m)
1179 self.assertTrue('RemoteAET' in m) 1215 self.assertTrue('RemoteAET' in m)
1180 self.assertTrue('Origin' in m) 1216 self.assertTrue('Origin' in m)
1181 self.assertTrue('TransferSyntax' in m) 1217 self.assertTrue('TransferSyntax' in m)
1182 self.assertTrue('SopClassUid' in m) 1218 self.assertTrue('SopClassUid' in m)
1183 self.assertTrue('RemoteIP' in m) 1219 self.assertTrue('RemoteIP' in m)
1184 self.assertTrue('CalledAET' in m) 1220 self.assertTrue('CalledAET' in m)
1185 self.assertTrue('PixelDataOffset' in m) # New in Orthanc 1.9.1
1186 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/IndexInSeries' % i[0]), 1) 1221 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/IndexInSeries' % i[0]), 1)
1187 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i[0]), 'DicomProtocol') 1222 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i[0]), 'DicomProtocol')
1188 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i[0]), 'STORESCU') 1223 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i[0]), 'STORESCU')
1189 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i[0]), '1.2.840.10008.1.2.1') 1224 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i[0]), '1.2.840.10008.1.2.1')
1190 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i[0]), '1.2.840.10008.5.1.4.1.1.7') 1225 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i[0]), '1.2.840.10008.5.1.4.1.1.7')
4426 4461
4427 4462
4428 def test_dicom_disk_size(self): 4463 def test_dicom_disk_size(self):
4429 dicomSize = 0 4464 dicomSize = 0
4430 4465
4431 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') 4466 a = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID']
4467 isCompressed = (DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % a) != 0)
4432 4468
4433 for i in range(2): 4469 for i in range(2):
4434 p = 'Knee/T%d/IM-0001-0001.dcm' % (i + 1) 4470 p = 'Knee/T%d/IM-0001-0001.dcm' % (i + 1)
4435 UploadInstance(_REMOTE, p) 4471 UploadInstance(_REMOTE, p)
4436 dicomSize += os.path.getsize(GetDatabasePath(p)) 4472 dicomSize += os.path.getsize(GetDatabasePath(p))
4437 4473
4438 s = DoGet(_REMOTE, '/patients/ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17/statistics') # Consider Knee patient 4474 s = DoGet(_REMOTE, '/patients/ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17/statistics') # Consider Knee patient
4439 self.assertEqual(2, s['CountInstances']) 4475 self.assertEqual(2, s['CountInstances'])
4440 self.assertEqual(2, s['CountSeries']) 4476 self.assertEqual(2, s['CountSeries'])
4441 self.assertEqual(1, s['CountStudies']) 4477 self.assertEqual(1, s['CountStudies'])
4442 self.assertEqual(dicomSize, int(s['DicomDiskSize'])) 4478
4443 self.assertEqual(dicomSize, int(s['DicomUncompressedSize'])) 4479 self.assertEqual(dicomSize, int(s['DicomUncompressedSize']))
4444 self.assertLess(dicomSize, int(s['UncompressedSize'])) 4480 self.assertLess(dicomSize, int(s['UncompressedSize']))
4445 self.assertEqual(s['UncompressedSize'], s['DiskSize']) 4481
4446 4482 if isCompressed:
4483 self.assertGreater(dicomSize, int(s['DicomDiskSize']))
4484 self.assertGreater(s['UncompressedSize'], s['DiskSize'])
4485 else:
4486 self.assertEqual(dicomSize, int(s['DicomDiskSize']))
4487 self.assertEqual(s['UncompressedSize'], s['DiskSize'])
4488
4447 4489
4448 def test_changes_2(self): 4490 def test_changes_2(self):
4449 # More consistent behavior since Orthanc 1.5.2 4491 # More consistent behavior since Orthanc 1.5.2
4450 # https://groups.google.com/d/msg/orthanc-users/QhzB6vxYeZ0/YxabgqpfBAAJ 4492 # https://groups.google.com/d/msg/orthanc-users/QhzB6vxYeZ0/YxabgqpfBAAJ
4451 4493