Mercurial > hg > orthanc-tests
comparison Tests/Tests.py @ 423:cef3847dc8af
test_query_retrieve_format
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 25 Jun 2021 18:12:48 +0200 |
parents | 07fbbd3a3fac |
children | 934f505677da |
comparison
equal
deleted
inserted
replaced
422:91170313187c | 423:cef3847dc8af |
---|---|
177 warnings.simplefilter("ignore", ResourceWarning) | 177 warnings.simplefilter("ignore", ResourceWarning) |
178 | 178 |
179 DropOrthanc(_LOCAL) | 179 DropOrthanc(_LOCAL) |
180 DropOrthanc(_REMOTE) | 180 DropOrthanc(_REMOTE) |
181 UninstallLuaCallbacks(_REMOTE) | 181 UninstallLuaCallbacks(_REMOTE) |
182 | |
183 # Reset stuff possibly set by some integration tests | |
184 DoPut(_REMOTE, '/tools/default-encoding', 'Latin1') | |
185 DoPut(_REMOTE, '/tools/accepted-transfer-syntaxes', [ '1.2.840.10008.1.*' ]) | |
186 DoPut(_REMOTE, '/tools/unknown-sop-class-accepted', '0') | |
187 | |
188 for i in [ 'toto', 'tata' ]: | |
189 if i in DoGet(_REMOTE, '/modalities'): | |
190 DoDelete(_REMOTE, '/modalities/%s' % i) | |
191 if i in DoGet(_REMOTE, '/peers'): | |
192 DoDelete(_REMOTE, '/peers/%s' % i) | |
193 | |
182 #print("%s: In test %s" % (datetime.now(), self._testMethodName)) | 194 #print("%s: In test %s" % (datetime.now(), self._testMethodName)) |
183 | 195 |
184 def AssertSameImages(self, truth, url): | 196 def AssertSameImages(self, truth, url): |
185 im = GetImage(_REMOTE, url) | 197 im = GetImage(_REMOTE, url) |
186 self.assertTrue(CompareLists(truth, im.getdata())) | 198 self.assertTrue(CompareLists(truth, im.getdata())) |
1540 'Modality' : 'MR\\US' }) | 1552 'Modality' : 'MR\\US' }) |
1541 self.assertEqual(0, len(t)) | 1553 self.assertEqual(0, len(t)) |
1542 | 1554 |
1543 | 1555 |
1544 def test_update_modalities(self): | 1556 def test_update_modalities(self): |
1545 try: | |
1546 DoDelete(_REMOTE, '/modalities/toto') | |
1547 except: | |
1548 pass | |
1549 try: | |
1550 DoDelete(_REMOTE, '/modalities/tata') | |
1551 except: | |
1552 pass | |
1553 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/toto')) | 1557 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/toto')) |
1554 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/modalities/toto')) | 1558 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/modalities/toto')) |
1555 DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000 ]) | 1559 DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000 ]) |
1556 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'MedInria' ]) # check backward compatiblity with obsolete manufacturer | 1560 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'MedInria' ]) # check backward compatiblity with obsolete manufacturer |
1557 DoDelete(_REMOTE, '/modalities/tata') | 1561 DoDelete(_REMOTE, '/modalities/tata') |
1577 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/tata')) | 1581 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/tata')) |
1578 | 1582 |
1579 | 1583 |
1580 def test_update_peers(self): | 1584 def test_update_peers(self): |
1581 # curl -X PUT http://localhost:8042/peers/toto -d '["http://localhost:8042/"]' -v | 1585 # curl -X PUT http://localhost:8042/peers/toto -d '["http://localhost:8042/"]' -v |
1582 try: | |
1583 DoDelete(_REMOTE, '/peers/toto') | |
1584 except: | |
1585 pass | |
1586 try: | |
1587 DoDelete(_REMOTE, '/peers/tata') | |
1588 except: | |
1589 pass | |
1590 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/toto')) | 1586 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/toto')) |
1591 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/peers/toto')) | 1587 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/peers/toto')) |
1592 DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/' ]) | 1588 DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/' ]) |
1593 DoPut(_REMOTE, '/peers/tata', { 'Url': 'http://localhost:8042/', | 1589 DoPut(_REMOTE, '/peers/tata', { 'Url': 'http://localhost:8042/', |
1594 'Username': 'user', | 1590 'Username': 'user', |
2585 DoDelete(_REMOTE, '/instances/%s' % f) | 2581 DoDelete(_REMOTE, '/instances/%s' % f) |
2586 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID'] | 2582 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID'] |
2587 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f) | 2583 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f) |
2588 self.assertNotEqual(u'Рентгенография', tags['SeriesDescription']) | 2584 self.assertNotEqual(u'Рентгенография', tags['SeriesDescription']) |
2589 | 2585 |
2590 # Back to UTF-8 | |
2591 self.assertEqual('Utf8', DoPut(_REMOTE, '/tools/default-encoding', 'Utf8')) | |
2592 | |
2593 | 2586 |
2594 def test_encodings(self): | 2587 def test_encodings(self): |
2595 # Latin-1 (ISO_IR 100) | 2588 # Latin-1 (ISO_IR 100) |
2596 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] | 2589 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] |
2597 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix) | 2590 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix) |
3642 'Query' : { }}) | 3635 'Query' : { }}) |
3643 self.assertEqual(1, len(a)) | 3636 self.assertEqual(1, len(a)) |
3644 | 3637 |
3645 tmp = ENCODINGS[name][1] | 3638 tmp = ENCODINGS[name][1] |
3646 self.assertEqual(TEST.encode(tmp, 'ignore').decode(tmp), a[0]["PatientMainDicomTags"]["PatientName"]) | 3639 self.assertEqual(TEST.encode(tmp, 'ignore').decode(tmp), a[0]["PatientMainDicomTags"]["PatientName"]) |
3647 | |
3648 # Back to UTF-8 | |
3649 self.assertEqual('Utf8', DoPut(_REMOTE, '/tools/default-encoding', 'Utf8')) | |
3650 | 3640 |
3651 | 3641 |
3652 def test_reconstruct(self): | 3642 def test_reconstruct(self): |
3653 def CompareMainDicomTag(expected, instance, level, tag): | 3643 def CompareMainDicomTag(expected, instance, level, tag): |
3654 self.assertEqual(expected, DoGet(_REMOTE, '/instances/%s/%s' % (instance, level))['MainDicomTags'][tag].strip()) | 3644 self.assertEqual(expected, DoGet(_REMOTE, '/instances/%s/%s' % (instance, level))['MainDicomTags'][tag].strip()) |
7842 | 7832 |
7843 instances = DoGet(_REMOTE, '/instances') | 7833 instances = DoGet(_REMOTE, '/instances') |
7844 self.assertEqual(2, len(instances)) | 7834 self.assertEqual(2, len(instances)) |
7845 self.assertTrue(brainix in instances) | 7835 self.assertTrue(brainix in instances) |
7846 self.assertFalse(knee in instances) | 7836 self.assertFalse(knee in instances) |
7837 | |
7838 | |
7839 def test_query_retrieve_format(self): | |
7840 # New in Orthanc 1.9.5 | |
7841 # https://groups.google.com/g/orthanc-users/c/1KC4d-0K8s0/m/hfYYz1-tAgAJ | |
7842 i = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') ['ID'] | |
7843 study = DoGet(_REMOTE, '/instances/%s/study' % i) ['MainDicomTags']['StudyInstanceUID'] | |
7844 | |
7845 a = DoPost(_REMOTE, '/modalities/self/query', { | |
7846 'Level' : 'Study', | |
7847 'Query' : {} | |
7848 }) | |
7849 | |
7850 b = DoGet(_REMOTE, a['Path'] + '/answers') | |
7851 self.assertEqual(1, len(b)) | |
7852 self.assertEqual('0', b[0]) | |
7853 | |
7854 b = DoGet(_REMOTE, a['Path'] + '/answers?expand') | |
7855 self.assertEqual(1, len(b)) | |
7856 self.assertEqual(6, len(b[0])) | |
7857 self.assertEqual('ISO_IR 100', b[0]['0008,0005']['Value']) | |
7858 self.assertEqual('SpecificCharacterSet', b[0]['0008,0005']['Name']) | |
7859 self.assertEqual('A10003245599', b[0]['0008,0050']['Value']) | |
7860 self.assertEqual('AccessionNumber', b[0]['0008,0050']['Name']) | |
7861 self.assertEqual('STUDY', b[0]['0008,0052']['Value']) | |
7862 self.assertEqual('QueryRetrieveLevel', b[0]['0008,0052']['Name']) | |
7863 self.assertEqual('ORTHANC', b[0]['0008,0054']['Value']) | |
7864 self.assertEqual('RetrieveAETitle', b[0]['0008,0054']['Name']) | |
7865 self.assertEqual('887', b[0]['0010,0020']['Value']) | |
7866 self.assertEqual('PatientID', b[0]['0010,0020']['Name']) | |
7867 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b[0]['0020,000d']['Value']) | |
7868 self.assertEqual('StudyInstanceUID', b[0]['0020,000d']['Name']) | |
7869 | |
7870 for (key, value) in b[0].items(): | |
7871 self.assertEqual('String', value['Type']) | |
7872 | |
7873 self.assertEqual(json.dumps(b[0]), | |
7874 json.dumps(DoGet(_REMOTE, a['Path'] + '/answers/0/content'))) | |
7875 | |
7876 # What is below this point didn't work on Orthanc <= 1.9.3 | |
7877 | |
7878 b = DoGet(_REMOTE, a['Path'] + '/answers?expand&short') | |
7879 self.assertEqual(1, len(b)) | |
7880 self.assertEqual(6, len(b[0])) | |
7881 self.assertEqual('ISO_IR 100', b[0]['0008,0005']) | |
7882 self.assertEqual('A10003245599', b[0]['0008,0050']) | |
7883 self.assertEqual('STUDY', b[0]['0008,0052']) | |
7884 self.assertEqual('ORTHANC', b[0]['0008,0054']) | |
7885 self.assertEqual('887', b[0]['0010,0020']) | |
7886 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b[0]['0020,000d']) | |
7887 self.assertEqual(json.dumps(b[0]), | |
7888 json.dumps(DoGet(_REMOTE, a['Path'] + '/answers/0/content?short'))) | |
7889 | |
7890 b = DoGet(_REMOTE, a['Path'] + '/answers?expand&simplify') | |
7891 self.assertEqual(1, len(b)) | |
7892 self.assertEqual(6, len(b[0])) | |
7893 self.assertEqual('ISO_IR 100', b[0]['SpecificCharacterSet']) | |
7894 self.assertEqual('A10003245599', b[0]['AccessionNumber']) | |
7895 self.assertEqual('STUDY', b[0]['QueryRetrieveLevel']) | |
7896 self.assertEqual('ORTHANC', b[0]['RetrieveAETitle']) | |
7897 self.assertEqual('887', b[0]['PatientID']) | |
7898 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b[0]['StudyInstanceUID']) | |
7899 self.assertEqual(json.dumps(b[0]), | |
7900 json.dumps(DoGet(_REMOTE, a['Path'] + '/answers/0/content?simplify'))) | |
7901 | |
7902 b = DoPost(_REMOTE, '/queries/%s/retrieve' % a['ID'], {}) | |
7903 self.assertEqual('REST API', b['Description']) | |
7904 self.assertEqual('ORTHANC', b['LocalAet']) | |
7905 self.assertEqual('ORTHANC', b['RemoteAet']) | |
7906 self.assertEqual(1, len(b['Query'])) | |
7907 self.assertEqual(4, len(b['Query'][0])) | |
7908 self.assertEqual('A10003245599', b['Query'][0]['0008,0050']) | |
7909 self.assertEqual('STUDY', b['Query'][0]['0008,0052']) | |
7910 self.assertEqual('887', b['Query'][0]['0010,0020']) | |
7911 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b['Query'][0]['0020,000d']) | |
7912 | |
7913 # What is below this point didn't work on Orthanc <= 1.9.4 | |
7914 | |
7915 b = DoPost(_REMOTE, '/queries/%s/retrieve' % a['ID'], { 'Full' : True }) | |
7916 self.assertEqual('REST API', b['Description']) | |
7917 self.assertEqual('ORTHANC', b['LocalAet']) | |
7918 self.assertEqual('ORTHANC', b['RemoteAet']) | |
7919 self.assertEqual(1, len(b['Query'])) | |
7920 self.assertEqual(4, len(b['Query'][0])) | |
7921 self.assertEqual('A10003245599', b['Query'][0]['0008,0050']['Value']) | |
7922 self.assertEqual('STUDY', b['Query'][0]['0008,0052']['Value']) | |
7923 self.assertEqual('887', b['Query'][0]['0010,0020']['Value']) | |
7924 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b['Query'][0]['0020,000d']['Value']) | |
7925 self.assertEqual('AccessionNumber', b['Query'][0]['0008,0050']['Name']) | |
7926 self.assertEqual('QueryRetrieveLevel', b['Query'][0]['0008,0052']['Name']) | |
7927 self.assertEqual('PatientID', b['Query'][0]['0010,0020']['Name']) | |
7928 self.assertEqual('StudyInstanceUID', b['Query'][0]['0020,000d']['Name']) | |
7929 | |
7930 b = DoPost(_REMOTE, '/queries/%s/retrieve' % a['ID'], { 'Simplify' : True }) | |
7931 self.assertEqual('REST API', b['Description']) | |
7932 self.assertEqual('ORTHANC', b['LocalAet']) | |
7933 self.assertEqual('ORTHANC', b['RemoteAet']) | |
7934 self.assertEqual(1, len(b['Query'])) | |
7935 self.assertEqual(4, len(b['Query'][0])) | |
7936 self.assertEqual('A10003245599', b['Query'][0]['AccessionNumber']) | |
7937 self.assertEqual('STUDY', b['Query'][0]['QueryRetrieveLevel']) | |
7938 self.assertEqual('887', b['Query'][0]['PatientID']) | |
7939 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b['Query'][0]['StudyInstanceUID']) |