Mercurial > hg > orthanc-tests
comparison Tests/Tests.py @ 380:b9adc7d06347
update tests following removal of dicom-as-json attachments
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 16 Feb 2021 12:03:27 +0100 |
parents | 097329b67509 |
children | a8dd562943a7 |
comparison
equal
deleted
inserted
replaced
379:097329b67509 | 380:b9adc7d06347 |
---|---|
104 '--call', _REMOTE['DicomAet'], # Called AET (i.e. Orthanc) | 104 '--call', _REMOTE['DicomAet'], # Called AET (i.e. Orthanc) |
105 '--aetitle', _LOCAL['DicomAet'], # Calling AET (i.e. storescp) | 105 '--aetitle', _LOCAL['DicomAet'], # Calling AET (i.e. storescp) |
106 _REMOTE['Server'], | 106 _REMOTE['Server'], |
107 str(_REMOTE['DicomPort']) | 107 str(_REMOTE['DicomPort']) |
108 ] | 108 ] |
109 | |
110 | |
111 def IsDicomUntilPixelDataStored(orthanc): | |
112 # This function detects whether the "StorageCompression" option is | |
113 # "true", OR the storage area does not support read-range | |
114 | |
115 if IsOrthancVersionAbove(orthanc, 1, 9, 1): | |
116 i = UploadInstance(orthanc, 'ColorTestMalaterre.dcm') ['ID'] | |
117 a = DoGet(orthanc, '/instances/%s/metadata/PixelDataOffset' % i) | |
118 if a != 0x03a0: | |
119 raise Exception('Internal error') | |
120 | |
121 a = DoGet(orthanc, '/instances/%s/attachments' % i) | |
122 if len(a) != 1 and len(a) != 2 or not 'dicom' in a: | |
123 raise Exception('Internal error') | |
124 | |
125 DoDelete(orthanc, '/instances/%s' % i) | |
126 | |
127 if len(a) == 1: | |
128 return False | |
129 elif 'dicom-until-pixel-data' in a: | |
130 return True | |
131 else: | |
132 raise Exception('Internal error') | |
133 | |
134 else: | |
135 return False | |
109 | 136 |
110 | 137 |
111 def CallMoveScu(args): | 138 def CallMoveScu(args): |
112 try: | 139 try: |
113 subprocess.check_call(GetMoveScuCommand() + args, | 140 subprocess.check_call(GetMoveScuCommand() + args, |
388 self.assertEqual(study['ID'], series['ParentStudy']) | 415 self.assertEqual(study['ID'], series['ParentStudy']) |
389 self.assertEqual('Unknown', series['Status']) | 416 self.assertEqual('Unknown', series['Status']) |
390 for instance in DoGet(_REMOTE, '/series/%s/instances' % series['ID']): | 417 for instance in DoGet(_REMOTE, '/series/%s/instances' % series['ID']): |
391 self.assertEqual(series['ID'], instance['ParentSeries']) | 418 self.assertEqual(series['ID'], instance['ParentSeries']) |
392 | 419 |
393 self.assertEqual(json.dumps(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % instance['ID'])), | 420 if not IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
394 json.dumps(DoGet(_REMOTE, '/instances/%s/tags' % instance['ID']))) | 421 # The "dicom-as-json" attachment was removed in Orthanc 1.9.1 |
422 self.assertEqual(json.dumps(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % instance['ID'])), | |
423 json.dumps(DoGet(_REMOTE, '/instances/%s/tags' % instance['ID']))) | |
395 | 424 |
396 | 425 |
397 r = DoDelete(_REMOTE, "/studies/%s" % brainixStudy)['RemainingAncestor'] | 426 r = DoDelete(_REMOTE, "/studies/%s" % brainixStudy)['RemainingAncestor'] |
398 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | 427 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) |
399 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | 428 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
1141 | 1170 |
1142 self.assertEqual(3 * d, e) | 1171 self.assertEqual(3 * d, e) |
1143 | 1172 |
1144 | 1173 |
1145 def test_custom_attachment(self): | 1174 def test_custom_attachment(self): |
1146 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | 1175 u = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID'] |
1176 | |
1147 patient = DoGet(_REMOTE, '/patients')[0] | 1177 patient = DoGet(_REMOTE, '/patients')[0] |
1148 instance = DoGet(_REMOTE, '/instances')[0] | 1178 instance = DoGet(_REMOTE, '/instances')[0] |
1149 size = int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']) | 1179 size = int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']) |
1150 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) | 1180 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
1151 | 1181 |
1152 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient))) | 1182 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient))) |
1153 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
1154 self.assertTrue('dicom' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) | 1183 self.assertTrue('dicom' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) |
1155 self.assertTrue('dicom-as-json' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) | 1184 |
1185 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): | |
1186 if IsDicomUntilPixelDataStored(_REMOTE): | |
1187 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
1188 self.assertTrue('dicom-until-pixel-data' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) | |
1189 else: | |
1190 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
1191 else: | |
1192 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
1193 self.assertTrue('dicom-as-json' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) | |
1156 | 1194 |
1157 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/22' % patient, 'hello')) | 1195 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/22' % patient, 'hello')) |
1158 hello = 'hellohellohellohellohellohellohellohellohello' | 1196 hello = 'hellohellohellohellohellohellohellohellohello' |
1159 DoPut(_REMOTE, '/patients/%s/attachments/1025' % patient, hello) | 1197 DoPut(_REMOTE, '/patients/%s/attachments/1025' % patient, hello) |
1160 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | 1198 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), |
2852 | 2890 |
2853 | 2891 |
2854 def test_compression(self): | 2892 def test_compression(self): |
2855 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | 2893 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
2856 | 2894 |
2857 data = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % i)[1] | 2895 aa = DoGet(_REMOTE, '/instances/%s/attachments/' % i) |
2858 | 2896 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
2859 # "StorageCompression" is enabled in the Orthanc to be tested, | 2897 # This file has *no* pixel data, so "dicom-until-pixel-data" is not stored |
2860 # uncompress the data before running the test | 2898 self.assertEqual(1, len(aa)) |
2861 if DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/is-compressed' % i) != 0: | 2899 self.assertTrue('dicom' in aa) |
2862 DoPost(_REMOTE, '/instances/%s/attachments/dicom-as-json/uncompress' % i) | 2900 else: |
2901 self.assertEqual(2, len(aa)) | |
2902 self.assertTrue('dicom' in aa) | |
2903 self.assertTrue('dicom-as-json' in aa) | |
2904 | |
2905 data = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/data' % i)[1] | |
2906 | |
2907 # If "StorageCompression" is enabled in the Orthanc to be | |
2908 # tested, uncompress the attachment before running the test | |
2909 if DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i) != 0: | |
2910 DoPost(_REMOTE, '/instances/%s/attachments/dicom/uncompress' % i) | |
2863 | 2911 |
2864 cs = DoGet(_REMOTE, '/statistics')['TotalDiskSize'] | 2912 cs = int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']) |
2865 us = DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'] | 2913 us = int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) |
2866 size = DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % i) | 2914 size = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/size' % i)) |
2867 md5 = DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/md5' % i) | 2915 md5 = DoGet(_REMOTE, '/instances/%s/attachments/dicom/md5' % i) |
2868 self.assertEqual(data, DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-data' % i)[1]) | 2916 self.assertEqual(data, DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/compressed-data' % i)[1]) |
2869 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-md5' % i)) | 2917 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-md5' % i)) |
2870 self.assertEqual(size, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-size' % i)) | 2918 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-size' % i))) |
2871 | 2919 |
2872 ops = DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json' % i) | 2920 ops = DoGet(_REMOTE, '/instances/%s/attachments/dicom' % i) |
2873 self.assertTrue('compress' in ops) | 2921 self.assertTrue('compress' in ops) |
2874 self.assertTrue('uncompress' in ops) | 2922 self.assertTrue('uncompress' in ops) |
2875 self.assertTrue('is-compressed' in ops) | 2923 self.assertTrue('is-compressed' in ops) |
2876 self.assertEqual(0, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/is-compressed' % i)) | 2924 self.assertEqual(0, DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i)) |
2877 DoPost(_REMOTE, '/instances/%s/attachments/dicom-as-json/verify-md5' % i) | 2925 DoPost(_REMOTE, '/instances/%s/attachments/dicom/verify-md5' % i) |
2878 | 2926 |
2879 DoPost(_REMOTE, '/instances/%s/attachments/dicom-as-json/compress' % i) | 2927 # Re-compress the attachment |
2880 DoPost(_REMOTE, '/instances/%s/attachments/dicom-as-json/verify-md5' % i) | 2928 DoPost(_REMOTE, '/instances/%s/attachments/dicom/compress' % i) |
2881 self.assertEqual(1, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/is-compressed' % i)) | 2929 DoPost(_REMOTE, '/instances/%s/attachments/dicom/verify-md5' % i) |
2882 self.assertLess(cs, DoGet(_REMOTE, '/statistics')['TotalDiskSize']) | 2930 self.assertEqual(1, DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i)) |
2883 self.assertEqual(us, DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) | 2931 self.assertGreater(cs, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
2884 self.assertGreater(len(data), len(DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-data' % i)[1])) | 2932 self.assertEqual(us, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
2885 self.assertGreater(size, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-size' % i)) | 2933 self.assertGreater(len(data), len(DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/compressed-data' % i)[1])) |
2886 self.assertEqual(size, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % i)) | 2934 self.assertGreater(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-size' % i))) |
2887 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/md5' % i)) | 2935 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/size' % i))) |
2888 self.assertNotEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-md5' % i)) | 2936 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/md5' % i)) |
2889 | 2937 self.assertNotEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-md5' % i)) |
2890 DoPost(_REMOTE, '/instances/%s/attachments/dicom-as-json/uncompress' % i) | 2938 |
2891 DoPost(_REMOTE, '/instances/%s/attachments/dicom-as-json/verify-md5' % i) | 2939 DoPost(_REMOTE, '/instances/%s/attachments/dicom/uncompress' % i) |
2892 self.assertEqual(0, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/is-compressed' % i)) | 2940 DoPost(_REMOTE, '/instances/%s/attachments/dicom/verify-md5' % i) |
2893 self.assertEqual(data, DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-data' % i)[1]) | 2941 self.assertEqual(0, DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i)) |
2894 self.assertEqual(size, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-size' % i)) | 2942 self.assertEqual(data, DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/compressed-data' % i)[1]) |
2895 self.assertEqual(size, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % i)) | 2943 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-size' % i))) |
2896 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/md5' % i)) | 2944 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/size' % i))) |
2897 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/compressed-md5' % i)) | 2945 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/md5' % i)) |
2898 self.assertEqual(cs, DoGet(_REMOTE, '/statistics')['TotalDiskSize']) | 2946 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-md5' % i)) |
2899 self.assertEqual(us, DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) | 2947 self.assertEqual(cs, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
2948 self.assertEqual(us, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) | |
2900 | 2949 |
2901 | 2950 |
2902 def test_ordered_slices(self): | 2951 def test_ordered_slices(self): |
2903 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID'] | 2952 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID'] |
2904 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'] | 2953 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'] |
3015 t = DoGet(_REMOTE, '/instances/%s/tags' % j) | 3064 t = DoGet(_REMOTE, '/instances/%s/tags' % j) |
3016 with open(GetDatabasePath('PrivateTagsFull.json'), 'r') as f: | 3065 with open(GetDatabasePath('PrivateTagsFull.json'), 'r') as f: |
3017 a = json.loads(f.read()) | 3066 a = json.loads(f.read()) |
3018 | 3067 |
3019 # Starting with Orthanc 1.9.1, the DICOM-as-JSON | 3068 # Starting with Orthanc 1.9.1, the DICOM-as-JSON |
3020 # attachments are truncated starting with PixelData | 3069 # reports are truncated starting with PixelData |
3021 if not '7fe1,0010' in t: | 3070 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
3071 self.assertFalse('7fe1,0010' in t) | |
3072 self.assertFalse('7fe1,1001' in t) | |
3022 del a['7fe1,0010'] | 3073 del a['7fe1,0010'] |
3023 del a['7fe1,1001'] | 3074 del a['7fe1,1001'] |
3075 else: | |
3076 self.assertTrue('7fe1,0010' in t) | |
3077 self.assertTrue('7fe1,1001' in t) | |
3024 | 3078 |
3025 aa = json.dumps(a).replace('2e+022', '2e+22') | 3079 aa = json.dumps(a).replace('2e+022', '2e+22') |
3026 tt = (json.dumps(t) | 3080 tt = (json.dumps(t) |
3027 .replace('2e+022', '2e+22') | 3081 .replace('2e+022', '2e+22') |
3028 # The "IllegalPrivatePixelSequence" tag was introduced in DCMTK 3.6.6 dictionary | 3082 # The "IllegalPrivatePixelSequence" tag was introduced in DCMTK 3.6.6 dictionary |
3361 | 3415 |
3362 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | 3416 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
3363 first = DoGet(_REMOTE, '/instances/%s/tags' % instance) | 3417 first = DoGet(_REMOTE, '/instances/%s/tags' % instance) |
3364 | 3418 |
3365 self.assertEqual('TWINOW', first['0008,1010']['Value']) | 3419 self.assertEqual('TWINOW', first['0008,1010']['Value']) |
3366 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | 3420 |
3421 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): | |
3422 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
3423 else: | |
3424 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
3367 | 3425 |
3368 # Cannot delete the "DICOM" attachment | 3426 # Cannot delete the "DICOM" attachment |
3369 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/instances/%s/attachments/dicom' % instance)) | 3427 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/instances/%s/attachments/dicom' % instance)) |
3370 | 3428 |
3371 # Can delete the "DICOM as JSON" attachment | 3429 # Can delete the "DICOM as JSON" attachment |
3379 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/dicom-as-json' % patient, 'hello')) | 3437 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/dicom-as-json' % patient, 'hello')) |
3380 | 3438 |
3381 # Transparently reconstruct the "DICOM as JSON" attachment | 3439 # Transparently reconstruct the "DICOM as JSON" attachment |
3382 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance)) | 3440 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance)) |
3383 second = DoGet(_REMOTE, '/instances/%s/tags' % instance) | 3441 second = DoGet(_REMOTE, '/instances/%s/tags' % instance) |
3384 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
3385 | |
3386 third = DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % instance) | |
3387 self.assertEqual(str(first), str(second)) | 3442 self.assertEqual(str(first), str(second)) |
3388 self.assertEqual(str(first), str(third)) | 3443 |
3444 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): | |
3445 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
3446 else: | |
3447 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) | |
3448 third = DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % instance) | |
3449 self.assertEqual(str(first), str(third)) | |
3389 | 3450 |
3390 | 3451 |
3391 def test_reconstruct_json2(self): | 3452 def test_reconstruct_json2(self): |
3392 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | 3453 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
3393 | 3454 |
3395 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')['ID'] | 3456 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')['ID'] |
3396 | 3457 |
3397 self.assertEqual('BRAINIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)['PatientName']) | 3458 self.assertEqual('BRAINIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)['PatientName']) |
3398 self.assertEqual('KNEE', DoGet(_REMOTE, '/instances/%s/tags?simplify' % b)['PatientName']) | 3459 self.assertEqual('KNEE', DoGet(_REMOTE, '/instances/%s/tags?simplify' % b)['PatientName']) |
3399 | 3460 |
3400 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) | 3461 aa = DoGet(_REMOTE, '/instances/%s/attachments' % a) |
3401 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) | 3462 bb = DoGet(_REMOTE, '/instances/%s/attachments' % b) |
3402 | 3463 |
3464 if not IsOrthancVersionAbove(_REMOTE, 1, 9, 1): | |
3465 self.assertEqual(2, len(aa)) | |
3466 self.assertEqual(aa, bb) | |
3467 self.assertTrue('dicom' in aa) | |
3468 self.assertTrue('dicom-as-json' in aa) | |
3469 elif IsDicomUntilPixelDataStored(_REMOTE): | |
3470 self.assertEqual(2, len(aa)) | |
3471 self.assertEqual(aa, bb) | |
3472 self.assertTrue('dicom' in aa) | |
3473 self.assertTrue('dicom-until-pixel-data' in aa) | |
3474 else: | |
3475 self.assertEqual(1, len(aa)) | |
3476 self.assertEqual(aa, bb) | |
3477 self.assertTrue('dicom' in aa) | |
3478 | |
3479 # In Orthanc <= 1.9.0, this call deletes "dicom-as-json" | |
3403 DoPost(_REMOTE, '/tools/invalidate-tags', '', 'text/plain') | 3480 DoPost(_REMOTE, '/tools/invalidate-tags', '', 'text/plain') |
3404 | 3481 |
3405 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) | 3482 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1) and IsDicomUntilPixelDataStored(_REMOTE): |
3406 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) | 3483 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) |
3407 | 3484 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) |
3485 else: | |
3486 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) | |
3487 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) | |
3488 | |
3489 # In Orthanc <= 1.9.0, this call reconstructs "dicom-as-json" | |
3408 self.assertEqual('BRAINIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)['PatientName']) | 3490 self.assertEqual('BRAINIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)['PatientName']) |
3409 self.assertEqual('KNEE', DoGet(_REMOTE, '/instances/%s/tags?simplify' % b)['PatientName']) | 3491 self.assertEqual('KNEE', DoGet(_REMOTE, '/instances/%s/tags?simplify' % b)['PatientName']) |
3410 | 3492 |
3411 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) | 3493 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1) and not IsDicomUntilPixelDataStored(_REMOTE): |
3412 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) | 3494 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) |
3495 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) | |
3496 else: | |
3497 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) | |
3498 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) | |
3413 | 3499 |
3414 | 3500 |
3415 def test_private_tags(self): | 3501 def test_private_tags(self): |
3416 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] | 3502 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] |
3417 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) | 3503 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) |
4475 self.assertEqual(2, s['CountInstances']) | 4561 self.assertEqual(2, s['CountInstances']) |
4476 self.assertEqual(2, s['CountSeries']) | 4562 self.assertEqual(2, s['CountSeries']) |
4477 self.assertEqual(1, s['CountStudies']) | 4563 self.assertEqual(1, s['CountStudies']) |
4478 | 4564 |
4479 self.assertEqual(dicomSize, int(s['DicomUncompressedSize'])) | 4565 self.assertEqual(dicomSize, int(s['DicomUncompressedSize'])) |
4480 self.assertLess(dicomSize, int(s['UncompressedSize'])) | |
4481 | 4566 |
4482 if isCompressed: | 4567 if isCompressed: |
4483 self.assertGreater(dicomSize, int(s['DicomDiskSize'])) | 4568 self.assertGreater(dicomSize, int(s['DicomDiskSize'])) |
4484 self.assertGreater(s['UncompressedSize'], s['DiskSize']) | 4569 self.assertGreater(s['UncompressedSize'], s['DiskSize']) |
4570 self.assertLess(dicomSize, int(s['UncompressedSize'])) | |
4485 else: | 4571 else: |
4486 self.assertEqual(dicomSize, int(s['DicomDiskSize'])) | 4572 self.assertEqual(dicomSize, int(s['DicomDiskSize'])) |
4487 self.assertEqual(s['UncompressedSize'], s['DiskSize']) | 4573 self.assertEqual(s['UncompressedSize'], s['DiskSize']) |
4488 | 4574 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
4575 if IsDicomUntilPixelDataStored(_REMOTE): | |
4576 self.assertLess(dicomSize, int(s['UncompressedSize'])) | |
4577 else: | |
4578 self.assertEqual(dicomSize, int(s['UncompressedSize'])) | |
4579 else: | |
4580 # In Orthanc <= 1.9.0, there is the "dicom-as-json" | |
4581 # attachment in addition to the DICOM file | |
4582 self.assertLess(dicomSize, int(s['UncompressedSize'])) | |
4583 | |
4489 | 4584 |
4490 def test_changes_2(self): | 4585 def test_changes_2(self): |
4491 # More consistent behavior since Orthanc 1.5.2 | 4586 # More consistent behavior since Orthanc 1.5.2 |
4492 # https://groups.google.com/d/msg/orthanc-users/QhzB6vxYeZ0/YxabgqpfBAAJ | 4587 # https://groups.google.com/d/msg/orthanc-users/QhzB6vxYeZ0/YxabgqpfBAAJ |
4493 | 4588 |