Mercurial > hg > orthanc-tests
annotate Tests/Tests.py @ 390:5c2472f008eb
Check the order in which the creation events are reported
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 08 Mar 2021 16:59:25 +0100 |
parents | 27e0a2fcdc85 |
children | 227d9a932467 |
rev | line source |
---|---|
22 | 1 #!/usr/bin/env python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 | |
3 | 5 # Orthanc - A Lightweight, RESTful DICOM Store |
73 | 6 # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
3 | 7 # Department, University Hospital of Liege, Belgium |
363
79ce0f7a9714
upgrade to year 2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
361
diff
changeset
|
8 # Copyright (C) 2017-2021 Osimis S.A., Belgium |
3 | 9 # |
10 # This program is free software: you can redistribute it and/or | |
11 # modify it under the terms of the GNU General Public License as | |
12 # published by the Free Software Foundation, either version 3 of the | |
13 # License, or (at your option) any later version. | |
14 # | |
15 # This program is distributed in the hope that it will be useful, but | |
16 # WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 # General Public License for more details. | |
19 # | |
20 # You should have received a copy of the GNU General Public License | |
21 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
22 | |
23 | |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
24 import base64 |
290
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
25 import bz2 |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
26 import copy |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
27 import pprint |
14 | 28 import tempfile |
3 | 29 import unittest |
295 | 30 import shutil |
3 | 31 |
11 | 32 from PIL import ImageChops |
3 | 33 from Toolbox import * |
13 | 34 from xml.dom import minidom |
312 | 35 from datetime import datetime |
3 | 36 |
37 _LOCAL = None | |
38 _REMOTE = None | |
306
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
39 _DOCKER = False |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
40 |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
41 |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
42 def SetOrthancParameters(local, remote, withinDocker): |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
43 global _LOCAL, _REMOTE, _DOCKER |
3 | 44 _LOCAL = local |
45 _REMOTE = remote | |
306
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
46 _DOCKER = withinDocker |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
47 |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
48 |
14 | 49 def ExtractDicomTags(rawDicom, tags): |
50 with tempfile.NamedTemporaryFile(delete = True) as f: | |
51 f.write(rawDicom) | |
52 f.flush() | |
45 | 53 data = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ]) |
14 | 54 |
55 result = [] | |
56 for tag in tags: | |
57 match = re.search('<element[^>]+name="%s">([^>]*)</element>' % tag, data) | |
58 if match == None: | |
59 result.append('') | |
60 else: | |
61 result.append(match.group(1)) | |
62 | |
63 return result | |
64 | |
65 | |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
66 def CompareLists(a, b): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
67 if len(a) != len(b): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
68 return False |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
69 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
70 for i in range(len(a)): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
71 d = a[i] - b[i] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
72 if abs(d) >= 0.51: # Add some tolerance for rounding errors |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
73 return False |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
74 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
75 return True |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
76 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
77 |
80
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
78 def CompareTags(a, b, tagsToIgnore): |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
79 for i in tagsToIgnore: |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
80 if i in a: |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
81 del a[i] |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
82 if i in b: |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
83 del b[i] |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
84 |
123 | 85 if a.keys() == b.keys(): |
86 return True | |
87 else: | |
88 print('Mismatch in tags: %s' % str(set(a.keys()) ^ set(b.keys()))) | |
89 return False | |
80
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
90 |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
91 |
71
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
92 def CallFindScu(args): |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
93 p = subprocess.Popen([ FindExecutable('findscu'), |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
94 '-P', '-aec', _REMOTE['DicomAet'], '-aet', _LOCAL['DicomAet'], |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
95 _REMOTE['Server'], str(_REMOTE['DicomPort']) ] + args, |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
96 stderr=subprocess.PIPE) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
97 return p.communicate()[1] |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
98 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
99 |
142 | 100 def GetMoveScuCommand(): |
101 return [ | |
102 FindExecutable('movescu'), | |
103 '--move', _LOCAL['DicomAet'], # Target AET (i.e. storescp) | |
104 '--call', _REMOTE['DicomAet'], # Called AET (i.e. Orthanc) | |
105 '--aetitle', _LOCAL['DicomAet'], # Calling AET (i.e. storescp) | |
106 _REMOTE['Server'], | |
107 str(_REMOTE['DicomPort']) | |
108 ] | |
109 | |
231
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
110 |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
111 def IsDicomUntilPixelDataStored(orthanc): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
112 # This function detects whether the "StorageCompression" option is |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
113 # "true", OR the storage area does not support read-range |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
114 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
115 if IsOrthancVersionAbove(orthanc, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
116 i = UploadInstance(orthanc, 'ColorTestMalaterre.dcm') ['ID'] |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
117 a = DoGet(orthanc, '/instances/%s/metadata/PixelDataOffset' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
118 if a != 0x03a0: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
119 raise Exception('Internal error') |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
120 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
121 a = DoGet(orthanc, '/instances/%s/attachments' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
122 if len(a) != 1 and len(a) != 2 or not 'dicom' in a: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
123 raise Exception('Internal error') |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
124 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
125 DoDelete(orthanc, '/instances/%s' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
126 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
127 if len(a) == 1: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
128 return False |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
129 elif 'dicom-until-pixel-data' in a: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
130 return True |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
131 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
132 raise Exception('Internal error') |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
133 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
134 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
135 return False |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
136 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
137 |
54
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
138 def CallMoveScu(args): |
231
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
139 try: |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
140 subprocess.check_call(GetMoveScuCommand() + args, |
318
bac7cc80f240
dicomweb: test_wado_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
315
diff
changeset
|
141 stderr = subprocess.PIPE) |
231
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
142 except subprocess.CalledProcessError as e: |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
143 # The error code "69" corresponds to "EXITCODE_CMOVE_ERROR", |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
144 # that has been introduced in DCMTK 3.6.2. This error code is |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
145 # expected by some tests that try and C-MOVE non-existing |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
146 # DICOM instances. |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
147 # https://groups.google.com/d/msg/orthanc-users/DCRc5NeSCbM/DG-pSWj-BwAJ |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
148 if e.returncode != 69: |
4087505ddfe3
catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
149 raise e |
54
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
150 |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
151 |
51
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
152 def GenerateTestSequence(): |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
153 return [ |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
154 { |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
155 'StudyDescription': 'Hello^', |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
156 'ReferencedStudySequence' : [ |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
157 { |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
158 'StudyDescription': 'Toto', |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
159 }, |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
160 { |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
161 'StudyDescription': 'Tata', |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
162 }, |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
163 ] |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
164 }, |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
165 { |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
166 'StudyDescription': 'Sébastien^', |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
167 'StudyDate' : '19700202', |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
168 } |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
169 ] |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
170 |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
171 |
3 | 172 class Orthanc(unittest.TestCase): |
173 def setUp(self): | |
83 | 174 if (sys.version_info >= (3, 0)): |
175 # Remove annoying warnings about unclosed socket in Python 3 | |
176 import warnings | |
177 warnings.simplefilter("ignore", ResourceWarning) | |
178 | |
3 | 179 DropOrthanc(_LOCAL) |
180 DropOrthanc(_REMOTE) | |
174 | 181 UninstallLuaCallbacks(_REMOTE) |
312 | 182 #print("%s: In test %s" % (datetime.now(), self._testMethodName)) |
44
ffa542cce638
Toolbox.FindExecutable()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
43
diff
changeset
|
183 |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
184 def AssertSameImages(self, truth, url): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
185 im = GetImage(_REMOTE, url) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
186 self.assertTrue(CompareLists(truth, im.getdata())) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
187 |
3 | 188 |
189 def test_system(self): | |
177 | 190 self.assertTrue('Version' in DoGet(_REMOTE, '/system')) |
191 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize']) | |
192 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) | |
193 | |
194 systemInfo = DoGet(_REMOTE, '/system') | |
195 if systemInfo["Version"] == "mainline": | |
196 print "Skipping version checks since you're currently in mainline" | |
197 return | |
198 | |
173 | 199 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 8, 6)) |
200 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 8, 7)) | |
201 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 7, 6)) | |
202 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 9, 6)) | |
203 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 1, 8, 6)) | |
3 | 204 |
205 def test_upload(self): | |
173 | 206 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize']) |
207 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) | |
208 | |
209 sizeDummyCT = 2472 | |
210 sizeOverwrite = 2476 | |
211 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d' | |
212 | |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
213 # This file has *no* pixel data => "dicom-until-pixel-data" is not created |
3 | 214 u = UploadInstance(_REMOTE, 'DummyCT.dcm') |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
215 isCompressed = (DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % u['ID']) != 0) |
183 | 216 self.assertEqual(instance, u['ID']) |
3 | 217 self.assertEqual('Success', u['Status']) |
173 | 218 |
183 | 219 if True: |
220 # New test for Orthanc 1.4.3 | |
221 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', u['ParentSeries']) | |
222 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', u['ParentStudy']) | |
223 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', u['ParentPatient']) | |
224 | |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
225 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
226 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
227 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-until-pixel-data' % instance)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
228 j = 0 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
229 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
230 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-until-pixel-data' % instance)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
231 j = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % instance)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
232 |
173 | 233 s = sizeDummyCT + j |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
234 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
235 if isCompressed: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
236 self.assertGreater(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
237 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
238 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
239 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
240 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
173 | 241 |
3 | 242 u = UploadInstance(_REMOTE, 'DummyCT.dcm') |
243 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
244 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
245 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
246 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
247 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
248 if isCompressed: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
249 self.assertGreater(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
250 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
251 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
252 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
253 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
173 | 254 |
255 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance) | |
3 | 256 self.assertEqual('20070101', i['StudyDate']) |
173 | 257 self.assertEqual('KNIX', i['PatientName']) |
258 | |
259 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2): | |
260 # Overwriting | |
261 self.assertEqual('Success', u['Status']) | |
262 else: | |
263 self.assertEqual('AlreadyStored', u['Status']) | |
264 | |
265 u = UploadInstance(_REMOTE, 'DummyCT-overwrite.dcm') | |
266 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
267 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
268 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
269 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
270 | |
271 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2): | |
272 # Overwriting | |
273 self.assertEqual('Success', u['Status']) | |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
274 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
275 j2 = 0 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
276 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
277 j2 = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/size' % instance)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
278 self.assertNotEqual(j, j2) |
173 | 279 s2 = sizeOverwrite + j2 |
280 self.assertNotEqual(s, s2) | |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
281 if isCompressed: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
282 self.assertGreater(s2, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
283 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
284 self.assertEqual(s2, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
285 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
286 self.assertEqual(s2, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
173 | 287 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance) |
288 self.assertEqual('ANOTHER', i['PatientName']) | |
289 else: | |
290 self.assertEqual('AlreadyStored', u['Status']) | |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
291 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
292 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
3 | 293 |
5 | 294 def test_upload_2(self): |
3 | 295 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
296 instance = DoGet(_REMOTE, '/instances/%s' % i) | |
297 self.assertEqual(i, instance['ID']) | |
298 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', | |
299 instance['MainDicomTags']['SOPInstanceUID']) | |
300 | |
301 series = DoGet(_REMOTE, '/series/%s' % instance['ParentSeries']) | |
302 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', | |
303 series['MainDicomTags']['SeriesInstanceUID']) | |
304 | |
305 study = DoGet(_REMOTE, '/studies/%s' % series['ParentStudy']) | |
306 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', | |
307 study['MainDicomTags']['StudyInstanceUID']) | |
308 | |
309 patient = DoGet(_REMOTE, '/patients/%s' % study['ParentPatient']) | |
310 self.assertEqual('ozp00SjY2xG', | |
311 patient['MainDicomTags']['PatientID']) | |
312 | |
313 dicom = DoGet(_REMOTE, '/instances/%s/file' % instance['ID']) | |
314 self.assertEqual(2472, len(dicom)) | |
315 self.assertEqual('3e29b869978b6db4886355a2b1132124', ComputeMD5(dicom)) | |
316 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/frames' % i))) | |
317 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/simplified-tags' % i)['StationName']) | |
318 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/tags' % i)['0008,1010']['Value']) | |
136
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
319 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)['StationName']) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
320 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/tags?short' % i)['0008,1010']) |
3 | 321 |
322 | |
5 | 323 def test_images(self): |
324 i = UploadInstance(_REMOTE, 'Phenix/IM-0001-0001.dcm')['ID'] | |
325 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/frames' % i))) | |
3 | 326 |
5 | 327 im = GetImage(_REMOTE, '/instances/%s/preview' % i) |
328 self.assertEqual("L", im.mode) | |
329 self.assertEqual(512, im.size[0]) | |
330 self.assertEqual(358, im.size[1]) | |
331 | |
332 im = GetImage(_REMOTE, '/instances/%s/image-uint8' % i) | |
333 self.assertEqual("L", im.mode) | |
334 self.assertEqual(512, im.size[0]) | |
335 self.assertEqual(358, im.size[1]) | |
336 | |
337 im = GetImage(_REMOTE, '/instances/%s/image-uint16' % i) | |
338 self.assertEqual(512, im.size[0]) | |
339 self.assertEqual(358, im.size[1]) | |
340 | |
341 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % i) | |
342 self.assertEqual("L", im.mode) | |
343 self.assertEqual(512, im.size[0]) | |
344 self.assertEqual(358, im.size[1]) | |
345 | |
346 im = GetImage(_REMOTE, '/instances/%s/frames/0/image-uint8' % i) | |
347 self.assertEqual("L", im.mode) | |
348 self.assertEqual(512, im.size[0]) | |
349 self.assertEqual(358, im.size[1]) | |
350 | |
351 im = GetImage(_REMOTE, '/instances/%s/frames/0/image-uint16' % i) | |
352 self.assertEqual(512, im.size[0]) | |
353 self.assertEqual(358, im.size[1]) | |
64 | 354 |
355 # This is Little Endian Explicit | |
356 self.assertEqual('1.2.840.10008.1.2.1', DoGet(_REMOTE, '/instances/%s/header?simplify' % i)['TransferSyntaxUID']) | |
357 | |
6 | 358 |
359 def test_hierarchy(self): | |
360 UploadFolder(_REMOTE, 'Brainix/Epi') | |
361 UploadFolder(_REMOTE, 'Brainix/Flair') | |
362 UploadFolder(_REMOTE, 'Knee/T1') | |
363 UploadFolder(_REMOTE, 'Knee/T2') | |
364 | |
365 p = DoGet(_REMOTE, '/patients') | |
366 s = DoGet(_REMOTE, '/studies') | |
367 t = DoGet(_REMOTE, '/series') | |
368 self.assertEqual(2, len(p)) | |
369 self.assertEqual(2, len(s)) | |
370 self.assertEqual(4, len(t)) | |
371 self.assertEqual(94, len(DoGet(_REMOTE, '/instances'))) | |
372 | |
373 brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0' | |
374 brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988' | |
375 brainixEpi = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8' | |
376 brainixFlair = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0' | |
377 | |
378 kneePatient = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' | |
379 kneeStudy = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918' | |
380 kneeT1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285' | |
381 kneeT2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59' | |
382 | |
383 self.assertTrue(brainixPatient in p) | |
384 self.assertTrue(kneePatient in p) | |
385 self.assertTrue(brainixStudy in s) | |
386 self.assertTrue(kneeStudy in s) | |
387 self.assertTrue(brainixEpi in t) | |
388 self.assertTrue(brainixFlair in t) | |
389 self.assertTrue(kneeT1 in t) | |
390 self.assertTrue(kneeT2 in t) | |
391 | |
392 self.assertEqual(44, len(DoGet(_REMOTE, '/patients/%s/instances' % brainixPatient))) | |
393 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/series' % brainixPatient))) | |
394 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/studies' % brainixPatient))) | |
395 | |
396 self.assertEqual(50, len(DoGet(_REMOTE, '/patients/%s/instances' % kneePatient))) | |
397 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/series' % kneePatient))) | |
398 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/studies' % kneePatient))) | |
399 | |
400 self.assertEqual(2, len(DoGet(_REMOTE, '/studies/%s/series' % brainixStudy))) | |
401 self.assertEqual(44, len(DoGet(_REMOTE, '/studies/%s/instances' % brainixStudy))) | |
402 | |
403 self.assertEqual(2, len(DoGet(_REMOTE, '/studies/%s/series' % kneeStudy))) | |
404 self.assertEqual(50, len(DoGet(_REMOTE, '/studies/%s/instances' % kneeStudy))) | |
405 | |
406 self.assertEqual(22, len(DoGet(_REMOTE, '/series/%s/instances' % brainixEpi))) | |
407 self.assertEqual(22, len(DoGet(_REMOTE, '/series/%s/instances' % brainixFlair))) | |
408 self.assertEqual(24, len(DoGet(_REMOTE, '/series/%s/instances' % kneeT1))) | |
409 self.assertEqual(26, len(DoGet(_REMOTE, '/series/%s/instances' % kneeT2))) | |
410 | |
411 for patient in p: | |
412 for study in DoGet(_REMOTE, '/patients/%s/studies' % patient): | |
413 self.assertEqual(patient, study['ParentPatient']) | |
414 for series in DoGet(_REMOTE, '/studies/%s/series' % study['ID']): | |
415 self.assertEqual(study['ID'], series['ParentStudy']) | |
211 | 416 self.assertEqual('Unknown', series['Status']) |
6 | 417 for instance in DoGet(_REMOTE, '/series/%s/instances' % series['ID']): |
418 self.assertEqual(series['ID'], instance['ParentSeries']) | |
419 | |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
420 if not IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
421 # The "dicom-as-json" attachment was removed in Orthanc 1.9.1 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
422 self.assertEqual(json.dumps(DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % instance['ID'])), |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
423 json.dumps(DoGet(_REMOTE, '/instances/%s/tags' % instance['ID']))) |
6 | 424 |
425 | |
426 r = DoDelete(_REMOTE, "/studies/%s" % brainixStudy)['RemainingAncestor'] | |
427 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
428 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
429 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) | |
430 self.assertEqual(50, len(DoGet(_REMOTE, '/instances'))) | |
431 self.assertEqual(None, r) | |
432 | |
433 r = DoDelete(_REMOTE, "/series/%s" % kneeT2)['RemainingAncestor'] | |
434 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
435 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
436 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
437 self.assertEqual(24, len(DoGet(_REMOTE, '/instances'))) | |
438 self.assertEqual('Study', r['Type']) | |
439 self.assertEqual(kneeStudy, r['ID']) | |
440 | |
441 r = DoDelete(_REMOTE, "/instances/%s" % DoGet(_REMOTE, '/instances')[0])['RemainingAncestor'] | |
442 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
443 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
444 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
445 self.assertEqual(23, len(DoGet(_REMOTE, '/instances'))) | |
446 self.assertEqual('Series', r['Type']) | |
447 self.assertEqual(kneeT1, r['ID']) | |
448 | |
449 r = DoDelete(_REMOTE, "/patients/%s" % kneePatient)['RemainingAncestor'] | |
450 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
451 self.assertEqual(0, len(DoGet(_REMOTE, '/studies'))) | |
452 self.assertEqual(0, len(DoGet(_REMOTE, '/series'))) | |
453 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) | |
454 self.assertEqual(None, r) | |
455 | |
456 DropOrthanc(_REMOTE) | |
457 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize']) | |
458 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) | |
7 | 459 |
213
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
460 def test_delete_cascade(self): |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
461 # make sure deleting the last instance of a study deletes the series, study and patient |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
462 |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
463 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) # make sure orthanc is empty when starting the test |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
464 a = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
465 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
466 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
467 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
468 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
469 |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
470 DoDelete(_REMOTE, '/instances/%s' % a) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
471 |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
472 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
473 self.assertEqual(0, len(DoGet(_REMOTE, '/series'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
474 self.assertEqual(0, len(DoGet(_REMOTE, '/studies'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
475 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
eba6b8c38eee
added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents:
211
diff
changeset
|
476 |
7 | 477 |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
478 def test_multiframe(self): |
7 | 479 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID'] |
480 self.assertEqual(76, len(DoGet(_REMOTE, '/instances/%s/frames' % i))) | |
481 | |
482 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % i) | |
483 self.assertEqual("L", im.mode) | |
484 self.assertEqual(512, im.size[0]) | |
485 self.assertEqual(512, im.size[1]) | |
486 | |
487 DoGet(_REMOTE, '/instances/%s/frames/0/image-uint8' % i) | |
488 DoGet(_REMOTE, '/instances/%s/frames/0/image-uint16' % i) | |
489 DoGet(_REMOTE, '/instances/%s/frames/75/preview' % i) | |
490 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/aaa/preview' % i)) | |
491 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/76/preview' % i)) | |
492 | |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
493 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
494 def test_changes(self): |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
495 # Check emptiness |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
496 c = DoGet(_REMOTE, '/changes') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
497 self.assertEqual(0, len(c['Changes'])) |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
498 #self.assertEqual(0, c['Last']) # Not true anymore for Orthanc >= 1.5.2 |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
499 self.assertTrue(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
500 c = DoGet(_REMOTE, '/changes?last') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
501 self.assertEqual(0, len(c['Changes'])) |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
502 #self.assertEqual(0, c['Last']) # Not true anymore for Orthanc >= 1.5.2 |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
503 self.assertTrue(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
504 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
505 # Add 1 instance |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
506 i = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
507 c = DoGet(_REMOTE, '/changes') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
508 begin = c['Last'] |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
509 self.assertEqual(4, len(c['Changes'])) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
510 self.assertTrue(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
511 self.assertEqual(c['Changes'][-1]['Seq'], c['Last']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
512 |
390
5c2472f008eb
Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
513 # Check the order in which the creation events are reported |
5c2472f008eb
Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
514 self.assertEqual(c['Changes'][0]['ChangeType'], 'NewInstance') |
5c2472f008eb
Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
515 self.assertEqual(c['Changes'][1]['ChangeType'], 'NewSeries') |
5c2472f008eb
Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
516 self.assertEqual(c['Changes'][2]['ChangeType'], 'NewStudy') |
5c2472f008eb
Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
517 self.assertEqual(c['Changes'][3]['ChangeType'], 'NewPatient') |
5c2472f008eb
Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
518 |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
519 c = DoGet(_REMOTE, '/changes?last') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
520 self.assertEqual(1, len(c['Changes'])) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
521 self.assertEqual(begin, c['Last']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
522 self.assertTrue(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
523 c = DoGet(_REMOTE, '/changes?limit=1&since=' + str(begin - 1)) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
524 self.assertEqual(1, len(c['Changes'])) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
525 self.assertEqual(begin, c['Last']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
526 self.assertTrue(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
527 c = DoGet(_REMOTE, '/changes?limit=1&since=' + str(begin - 2)) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
528 self.assertEqual(1, len(c['Changes'])) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
529 self.assertEqual(begin - 1, c['Last']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
530 self.assertFalse(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
531 c = DoGet(_REMOTE, '/changes?limit=1&since=' + str(begin - 3)) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
532 self.assertEqual(1, len(c['Changes'])) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
533 self.assertEqual(begin - 2, c['Last']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
534 self.assertFalse(c['Done']) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
535 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
536 UploadFolder(_REMOTE, 'Knee/T1') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
537 UploadFolder(_REMOTE, 'Knee/T2') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
538 since = begin |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
539 countPatients = 0 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
540 countStudies = 0 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
541 countSeries = 0 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
542 countInstances = 0 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
543 completed = 0 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
544 while True: |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
545 c = DoGet(_REMOTE, '/changes', { 'since' : since, 'limit' : 3 }) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
546 since = c['Last'] |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
547 for i in c['Changes']: |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
548 if i['ResourceType'] == 'Instance': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
549 countInstances += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
550 if i['ResourceType'] == 'Patient': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
551 countPatients += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
552 if i['ResourceType'] == 'Study': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
553 countStudies += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
554 if i['ResourceType'] == 'Series': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
555 countSeries += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
556 if i['ChangeType'] == 'NewInstance': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
557 countInstances += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
558 if i['ChangeType'] == 'NewPatient': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
559 countPatients += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
560 if i['ChangeType'] == 'NewStudy': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
561 countStudies += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
562 if i['ChangeType'] == 'NewSeries': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
563 countSeries += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
564 if i['ChangeType'] == 'CompletedSeries': |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
565 completed += 1 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
566 self.assertTrue('ID' in i) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
567 self.assertTrue('Path' in i) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
568 self.assertTrue('Seq' in i) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
569 if c['Done']: |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
570 break |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
571 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
572 self.assertEqual(2 * 50, countInstances) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
573 self.assertEqual(2 * 1, countPatients) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
574 self.assertEqual(2 * 1, countStudies) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
575 self.assertEqual(2 * 2, countSeries) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
576 self.assertEqual(0, completed) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
577 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
578 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
579 def test_archive(self): |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
580 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
581 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') |
192 | 582 knee = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' |
583 | |
584 z = GetArchive(_REMOTE, '/patients/%s/archive' % knee) | |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
585 self.assertEqual(2, len(z.namelist())) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
586 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
587 z = GetArchive(_REMOTE, '/studies/%s/archive' % DoGet(_REMOTE, '/studies')[0]) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
588 self.assertEqual(2, len(z.namelist())) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
589 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
590 z = GetArchive(_REMOTE, '/series/%s/archive' % DoGet(_REMOTE, '/series')[0]) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
591 self.assertEqual(1, len(z.namelist())) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
592 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
593 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') |
192 | 594 brainix = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0' |
595 | |
596 z = GetArchive(_REMOTE, '/patients/%s/archive' % knee) | |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
597 self.assertEqual(2, len(z.namelist())) |
192 | 598 |
599 z = PostArchive(_REMOTE, '/tools/create-archive', { | |
600 'Resources' : [ brainix, knee ] | |
601 }) | |
602 self.assertEqual(3, len(z.namelist())) | |
603 | |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
604 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
605 def test_media_archive(self): |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
606 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
607 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
608 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
609 z = GetArchive(_REMOTE, '/patients/%s/media' % DoGet(_REMOTE, '/patients')[0]) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
610 self.assertEqual(3, len(z.namelist())) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
611 self.assertTrue('IMAGES/IM0' in z.namelist()) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
612 self.assertTrue('IMAGES/IM1' in z.namelist()) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
613 self.assertTrue('DICOMDIR' in z.namelist()) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
614 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
615 try: |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
616 os.remove('/tmp/DICOMDIR') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
617 except: |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
618 # The file does not exist |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
619 pass |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
620 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
621 z.extract('DICOMDIR', '/tmp') |
45 | 622 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ], |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
623 stderr = subprocess.STDOUT).split('\n') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
624 self.assertEqual(3, len(a)) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
625 self.assertTrue(a[0].startswith('Warning')) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
626 self.assertEqual('BasicDirectory', a[1]) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
627 self.assertEqual('', a[2]) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
628 |
45 | 629 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ], |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
630 stderr = subprocess.STDOUT).split('\n') |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
631 self.assertEqual(1, len(a)) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
632 self.assertEqual('', a[0]) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
633 |
45 | 634 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ]) |
8
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
635 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081908590448738', a) != None) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
636 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081909113806560', a) != None) |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
637 |
f8d781d1d267
test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
7
diff
changeset
|
638 os.remove('/tmp/DICOMDIR') |
10 | 639 |
640 | |
641 def test_protection(self): | |
642 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
643 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
644 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
645 a = DoGet(_REMOTE, '/patients')[0] | |
646 b = DoGet(_REMOTE, '/patients')[1] | |
647 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
648 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain') | |
649 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
650 DoPut(_REMOTE, '/patients/%s/protected' % a, '1', 'text/plain') | |
651 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
652 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain') | |
653 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
654 | |
655 | |
12 | 656 def test_raw_tags(self): |
10 | 657 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID'] |
658 | |
659 dicom = DoGet(_REMOTE, '/instances/%s/file' % i) | |
660 self.assertEqual('1a7c56cb02d6e742cc9c856a8ac182e3', ComputeMD5(dicom)) | |
661 | |
662 s = '/instances/%s/content/' % i | |
663 | |
664 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, s + '0008-1010').strip()) | |
665 self.assertRaises(Exception, lambda: DoGet(_REMOTE, s + '0008-1011')) | |
666 | |
667 self.assertEqual('Abdomen', DoGet(_REMOTE, s + '7fe1-1001/0/7fe1-1008/0/7fe1-1057').strip()) | |
668 self.assertEqual('cla_3c', DoGet(_REMOTE, s + '7fe1-1001/0/7fe1-1008/8/7fe1-1057').strip()) | |
669 | |
670 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm') | |
671 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
672 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
673 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
674 | |
675 for i in DoGet(_REMOTE, '/instances'): | |
676 aid = DoGet(_REMOTE, '/instances/%s' % i)['MainDicomTags']['SOPInstanceUID'] | |
677 self.assertEqual(aid, DoGet(_REMOTE, '/instances/%s/content/0008-0018' % i).replace(chr(0), '')) | |
678 | |
679 | |
680 def test_raw_tags_mdn(self): | |
681 # Bug reported by Cyril Paulus | |
682 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] | |
683 self.assertAlmostEqual(0.000027, DoGet(_REMOTE, '/instances/%s/content/7053-1000' % i)) | |
684 | |
685 | |
686 def test_modify_instance(self): | |
687 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID'] | |
688 modified = DoPost(_REMOTE, '/instances/%s/modify' % i, | |
689 json.dumps({ | |
690 "Replace" : { | |
691 "PatientName" : "hello", | |
692 #"PatientID" : "world" | |
693 }, | |
694 "Remove" : [ "StationName" ], | |
118
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
695 "RemovePrivateTags" : True |
10 | 696 }), |
697 'application/json') | |
698 j = DoPost(_REMOTE, '/instances', modified, 'application/dicom')['ID'] | |
699 | |
700 self.assertNotEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip()) | |
701 #self.assertNotEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % i).strip()) | |
83 | 702 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i).strip()) |
10 | 703 DoGet(_REMOTE, '/instances/%s/content/6003-1010' % i) # Some private tag |
704 | |
705 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip()) | |
706 #self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % j).strip()) | |
707 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j)) | |
708 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/6003-1010' % j)) | |
709 | |
710 | |
711 def test_modify_series(self): | |
712 # Upload 4 images from the same series | |
713 for i in range(4): | |
714 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
715 | |
716 origSeries = DoGet(_REMOTE, '/series')[0] | |
717 newSeries = DoPost(_REMOTE, '/series/%s/modify' % origSeries, | |
718 '{"Replace":{"PatientName":"Jodogne"}}', | |
719 'application/json')['ID'] | |
720 | |
721 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['ModifiedFrom']) | |
722 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances'] | |
723 self.assertEqual(4, len(instances)) | |
724 for i in instances: | |
725 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom'] | |
726 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']) | |
727 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries']) | |
728 | |
729 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip()) | |
730 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip()) | |
731 | |
732 | |
733 def test_modify_study(self): | |
734 # Upload 4 images from the 2 series of the same study | |
735 for i in range(4): | |
736 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) | |
737 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
738 | |
739 origStudy = DoGet(_REMOTE, '/studies')[0] | |
740 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy, | |
741 '{"Replace":{"PatientName":"Jodogne"}}', | |
742 'application/json')['ID'] | |
743 | |
744 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['ModifiedFrom']) | |
745 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series'] | |
746 self.assertEqual(2, len(series)) | |
747 for s in series: | |
748 ss = DoGet(_REMOTE, '/series/%s' % s)['ModifiedFrom'] | |
749 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy']) | |
750 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy']) | |
751 | |
752 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances'] | |
753 for i in instances: | |
754 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom'] | |
755 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']) | |
756 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries']) | |
757 | |
758 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip()) | |
759 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip()) | |
760 | |
761 | |
762 def test_anonymize_series(self): | |
763 # Upload 4 images from the same series | |
764 for i in range(4): | |
765 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
766 | |
767 origSeries = DoGet(_REMOTE, '/series')[0] | |
768 newSeries = DoPost(_REMOTE, '/series/%s/anonymize' % origSeries, | |
769 '{}', | |
770 'application/json')['ID'] | |
771 | |
772 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['AnonymizedFrom']) | |
773 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances'] | |
774 self.assertEqual(4, len(instances)) | |
775 for i in instances: | |
776 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom'] | |
777 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']) | |
778 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries']) | |
779 | |
780 DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j) | |
781 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i)) | |
782 | |
783 | |
784 def test_anonymize_study(self): | |
785 # Upload 4 images from the 2 series of the same study | |
786 for i in range(4): | |
787 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) | |
788 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
789 | |
790 origStudy = DoGet(_REMOTE, '/studies')[0] | |
791 newStudy = DoPost(_REMOTE,'/studies/%s/anonymize' % origStudy, | |
792 '{"Replace":{"PatientName":"Jodogne"}}', | |
793 'application/json')['ID'] | |
794 | |
795 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['AnonymizedFrom']) | |
796 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series'] | |
797 self.assertEqual(2, len(series)) | |
798 for s in series: | |
799 ss = DoGet(_REMOTE, '/series/%s' % s)['AnonymizedFrom'] | |
800 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy']) | |
801 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy']) | |
802 | |
803 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances'] | |
804 for i in instances: | |
805 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom'] | |
806 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']) | |
807 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries']) | |
808 | |
809 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip()) | |
810 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip()) | |
11 | 811 |
812 | |
813 | |
814 def test_storescu(self): | |
815 # Check emptiness | |
816 e = DoGet(_REMOTE, '/exports') | |
817 self.assertEqual(0, len(e['Exports'])) | |
818 self.assertEqual(0, e['Last']) | |
819 self.assertTrue(e['Done']) | |
820 e = DoGet(_REMOTE, '/exports?last') | |
821 self.assertEqual(0, len(e['Exports'])) | |
822 self.assertEqual(0, e['Last']) | |
823 self.assertTrue(e['Done']) | |
824 | |
825 # Add 1 instance | |
826 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
827 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
828 | |
829 # Export the instance | |
830 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') # instance | |
831 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
832 self.assertEqual(1, len(DoGet(_LOCAL, '/studies'))) | |
833 self.assertEqual(1, len(DoGet(_LOCAL, '/series'))) | |
834 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
835 | |
836 e = DoGet(_REMOTE, '/exports') | |
837 self.assertEqual(1, len(e['Exports'])) | |
838 self.assertTrue(e['Done']) | |
839 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
840 e = DoGet(_REMOTE, '/exports?limit=1') | |
841 self.assertEqual(1, len(e['Exports'])) | |
842 self.assertTrue(e['Done']) | |
843 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
844 e = DoGet(_REMOTE, '/exports?last') | |
845 self.assertEqual(1, len(e['Exports'])) | |
846 self.assertTrue(e['Done']) | |
847 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
848 seqInstance = e['Last'] | |
849 | |
850 # Export the series | |
851 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', 'text/plain') | |
852 | |
853 e = DoGet(_REMOTE, '/exports') | |
854 self.assertEqual(2, len(e['Exports'])) | |
855 self.assertTrue(e['Done']) | |
856 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
857 seqSeries = e['Last'] | |
858 self.assertNotEqual(seqInstance, seqSeries) | |
859 e = DoGet(_REMOTE, '/exports?limit=1&since=0') | |
860 self.assertEqual(1, len(e['Exports'])) | |
861 self.assertFalse(e['Done']) | |
862 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance) | |
863 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance)) | |
864 self.assertEqual(1, len(e['Exports'])) | |
865 self.assertTrue(e['Done']) | |
866 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries) | |
867 e = DoGet(_REMOTE, '/exports?last') | |
868 self.assertEqual(1, len(e['Exports'])) | |
869 self.assertTrue(e['Done']) | |
870 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries) | |
871 | |
872 # Export the study | |
873 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', 'text/plain') | |
874 seqStudy = DoGet(_REMOTE, '/exports')['Last'] | |
875 | |
876 # Export the patient | |
877 j = DoPost(_REMOTE, '/modalities/orthanctest/store', '6816cb19-844d5aee-85245eba-28e841e6-2414fae2', 'text/plain') | |
878 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
879 self.assertEqual(1, len(DoGet(_LOCAL, '/studies'))) | |
880 self.assertEqual(1, len(DoGet(_LOCAL, '/series'))) | |
881 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
882 | |
883 e = DoGet(_REMOTE, '/exports') | |
884 self.assertEqual(4, len(e['Exports'])) | |
885 self.assertTrue(e['Done']) | |
886 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
887 seqPatient = e['Last'] | |
888 self.assertNotEqual(seqInstance, seqSeries) | |
889 self.assertNotEqual(seqSeries, seqStudy) | |
890 self.assertNotEqual(seqStudy, seqPatient) | |
891 self.assertTrue(seqInstance < seqSeries) | |
892 self.assertTrue(seqSeries < seqStudy) | |
893 self.assertTrue(seqStudy < seqPatient) | |
894 e = DoGet(_REMOTE, '/exports?limit=1&since=0') | |
895 self.assertEqual(1, len(e['Exports'])) | |
896 self.assertFalse(e['Done']) | |
897 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance) | |
898 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance)) | |
899 self.assertEqual(1, len(e['Exports'])) | |
900 self.assertFalse(e['Done']) | |
901 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries) | |
902 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqSeries)) | |
903 self.assertEqual(1, len(e['Exports'])) | |
904 self.assertFalse(e['Done']) | |
905 self.assertEqual(e['Exports'][-1]['Seq'], seqStudy) | |
906 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqStudy)) | |
907 self.assertEqual(1, len(e['Exports'])) | |
908 self.assertTrue(e['Done']) | |
909 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient) | |
910 e = DoGet(_REMOTE, '/exports?last') | |
911 self.assertEqual(1, len(e['Exports'])) | |
912 self.assertTrue(e['Done']) | |
913 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient) | |
914 | |
915 | |
916 # Check the content of the logged information | |
917 e = DoGet(_REMOTE, '/exports')['Exports'] | |
918 | |
919 if 'PatientID' in e[0]: | |
920 # Since Orthanc 0.8.6 | |
921 patient = 'PatientID' | |
922 study = 'StudyInstanceUID' | |
923 series = 'SeriesInstanceUID' | |
924 instance = 'SOPInstanceUID' | |
925 else: | |
926 # Up to Orthanc 0.8.5 | |
927 patient = 'PatientId' | |
928 study = 'StudyInstanceUid' | |
929 series = 'SeriesInstanceUid' | |
930 instance = 'SopInstanceUid' | |
931 | |
932 for k in range(4): | |
933 self.assertTrue('Date' in e[k]) | |
934 self.assertTrue('Seq' in e[k]) | |
935 self.assertEqual('orthanctest', e[k]['RemoteModality']) | |
936 | |
937 self.assertEqual(10, len(e[0])) | |
938 self.assertEqual('Instance', e[0]['ResourceType']) | |
939 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['ID']) | |
940 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['Path']) | |
941 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', e[0][instance]) | |
942 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', e[0][series]) | |
943 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[0][study]) | |
944 self.assertEqual('ozp00SjY2xG', e[0][patient]) | |
945 | |
946 self.assertEqual(9, len(e[1])) | |
947 self.assertEqual('Series', e[1]['ResourceType']) | |
948 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['ID']) | |
949 self.assertEqual('/series/f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['Path']) | |
950 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', e[1][series]) | |
951 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[1][study]) | |
952 self.assertEqual('ozp00SjY2xG', e[1][patient]) | |
953 | |
954 self.assertEqual(8, len(e[2])) | |
955 self.assertEqual('Study', e[2]['ResourceType']) | |
956 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['ID']) | |
957 self.assertEqual('/studies/b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['Path']) | |
958 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[2][study]) | |
959 self.assertEqual('ozp00SjY2xG', e[2][patient]) | |
960 | |
961 self.assertEqual(7, len(e[3])) | |
962 self.assertEqual('Patient', e[3]['ResourceType']) | |
963 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['ID']) | |
964 self.assertEqual('/patients/6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['Path']) | |
965 self.assertEqual('ozp00SjY2xG', e[3][patient]) | |
966 | |
967 DropOrthanc(_REMOTE) | |
968 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
969 | |
970 | |
971 def test_store_peer(self): | |
972 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports'])) | |
973 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
974 | |
975 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
976 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
977 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
978 | |
979 j = DoPost(_REMOTE, '/peers/peer/store', str(i), 'text/plain') | |
980 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
981 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
982 | |
983 self.assertEqual(1, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
984 | |
985 DropOrthanc(_REMOTE) | |
986 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
987 | |
988 | |
989 def test_bulk_storescu(self): | |
990 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
991 | |
992 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
993 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
994 | |
995 j = DoPost(_REMOTE, '/modalities/orthanctest/store', [ a['ID'], b['ID'] ], 'application/json') | |
996 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) | |
997 | |
998 DropOrthanc(_LOCAL) | |
999 | |
1000 # Send using patient's UUID | |
1001 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
1002 j = DoPost(_REMOTE, '/modalities/orthanctest/store', | |
1003 [ 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' ], 'application/json') | |
1004 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) | |
1005 | |
1006 | |
1007 def test_color(self): | |
1008 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID'] | |
1009 im = GetImage(_REMOTE, '/instances/%s/preview' % i) | |
1010 self.assertEqual("RGB", im.mode) | |
1011 self.assertEqual(41, im.size[0]) | |
1012 self.assertEqual(41, im.size[1]) | |
1013 | |
1014 # http://effbot.org/zone/pil-comparing-images.htm | |
13 | 1015 truth = Image.open(GetDatabasePath('ColorTestMalaterre.png')) |
11 | 1016 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None) |
1017 | |
1018 | |
12 | 1019 def test_faking_ruby_put(self): |
1020 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
1021 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
1022 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
1023 a = DoGet(_REMOTE, '/patients')[0] | |
1024 b = DoGet(_REMOTE, '/patients')[1] | |
1025 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1026 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '0') | |
1027 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1028 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '1') | |
1029 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1030 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '0') | |
1031 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1032 | |
1033 | |
1034 def test_faking_ruby_delete(self): | |
1035 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
1036 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
1037 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
1038 a = DoGet(_REMOTE, '/patients')[0] | |
1039 b = DoGet(_REMOTE, '/patients')[1] | |
1040 DoGet(_REMOTE, '/patients/%s' % a, data = { '_method' : 'DELETE' }) | |
1041 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
1042 DoGet(_REMOTE, '/patients/%s' % b, data = { '_method' : 'DELETE' }) | |
1043 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
1044 | |
1045 | |
1046 def test_faking_google_put(self): | |
1047 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
1048 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
1049 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
1050 a = DoGet(_REMOTE, '/patients')[0] | |
1051 b = DoGet(_REMOTE, '/patients')[1] | |
1052 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1053 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '0') | |
1054 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1055 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '1') | |
1056 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1057 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '0') | |
1058 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a)) | |
1059 | |
1060 | |
1061 def test_faking_google_delete(self): | |
1062 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
1063 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
1064 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
1065 a = DoGet(_REMOTE, '/patients')[0] | |
1066 b = DoGet(_REMOTE, '/patients')[1] | |
1067 DoPost(_REMOTE, '/patients/%s' % a, headers = { 'X-HTTP-Method-Override' : 'DELETE' }) | |
1068 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
1069 DoPost(_REMOTE, '/patients/%s' % b, headers = { 'X-HTTP-Method-Override' : 'DELETE' }) | |
1070 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
1071 | |
1072 | |
1073 def test_lua(self): | |
1074 self.assertEqual(42, DoPost(_REMOTE, '/tools/execute-script', 'print(42)')) | |
1075 self.assertTrue(IsDefinedInLua(_REMOTE, 'PrintRecursive')) | |
1076 self.assertFalse(IsDefinedInLua(_REMOTE, 'HelloWorld')) | |
1077 | |
1078 | |
1079 def test_metadata(self): | |
1080 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
1081 p = DoGet(_REMOTE, '/patients')[0] | |
1082 i = DoGet(_REMOTE, '/instances')[0] | |
369
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1083 series = DoGet(_REMOTE, '/series')[0] |
12 | 1084 |
1085 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) | |
1086 self.assertEqual(1, len(m)) | |
1087 self.assertEqual('LastUpdate', m[0]) | |
1088 | |
369
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1089 # The lines below failed on Orthanc <= 1.8.2 |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1090 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/studies/%s/metadata' % p)) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1091 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/series/%s/metadata' % p)) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1092 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata' % p)) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1093 |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1094 m = DoGet(_REMOTE, '/studies/%s/metadata' % DoGet(_REMOTE, '/studies')[0]) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1095 self.assertEqual(1, len(m)) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1096 self.assertEqual('LastUpdate', m[0]) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1097 |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1098 m = DoGet(_REMOTE, '/series/%s/metadata' % series) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1099 self.assertEqual(2, len(m)) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1100 self.assertTrue('LastUpdate' in m) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1101 |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1102 # New in Orthanc 1.9.0 |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1103 self.assertTrue('RemoteAET' in m) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1104 self.assertEqual(DoGet(_REMOTE, '/series/%s/metadata/RemoteAET' % series), '') # None, received by REST API |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1105 |
12 | 1106 m = DoGet(_REMOTE, '/instances/%s/metadata' % i) |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1107 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1108 self.assertEqual(9, len(m)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1109 self.assertTrue('PixelDataOffset' in m) # New in Orthanc 1.9.1 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1110 self.assertEqual(int(DoGet(_REMOTE, '/instances/%s/metadata/PixelDataOffset' % i)), 0x0c78) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1111 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1112 self.assertEqual(8, len(m)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1113 |
12 | 1114 self.assertTrue('IndexInSeries' in m) |
1115 self.assertTrue('ReceptionDate' in m) | |
1116 self.assertTrue('RemoteAET' in m) | |
63
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1117 self.assertTrue('Origin' in m) |
89
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
1118 self.assertTrue('TransferSyntax' in m) |
95
a807a4699eb4
testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
92
diff
changeset
|
1119 self.assertTrue('SopClassUid' in m) |
145 | 1120 self.assertTrue('RemoteIP' in m) |
1121 self.assertTrue('HttpUsername' in m) | |
63
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1122 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/IndexInSeries' % i), 1) |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1123 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i), 'RestApi') |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1124 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i), '') # None, received by REST API |
89
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
1125 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i), '1.2.840.10008.1.2.4.91') # JPEG2k |
95
a807a4699eb4
testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
92
diff
changeset
|
1126 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i), '1.2.840.10008.5.1.4.1.1.4') |
12 | 1127 |
1128 # Play with custom metadata | |
1129 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou') | |
1130 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) | |
1131 self.assertEqual(2, len(m)) | |
1132 self.assertTrue('LastUpdate' in m) | |
1133 self.assertTrue('5555' in m) | |
1134 self.assertEqual('coucou', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p)) | |
1135 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'hello') | |
1136 self.assertEqual('hello', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p)) | |
1137 DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p) | |
1138 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) | |
1139 self.assertEqual(1, len(m)) | |
1140 self.assertTrue('LastUpdate' in m) | |
13 | 1141 |
1142 | |
1143 def test_statistics(self): | |
1144 # Upload 16 instances | |
1145 for i in range(4): | |
1146 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) | |
1147 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
1148 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1)) | |
1149 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1)) | |
1150 | |
1151 s = DoGet(_REMOTE, '/statistics') | |
1152 self.assertEqual(16, s['CountInstances']) | |
1153 self.assertEqual(2, s['CountPatients']) | |
1154 self.assertEqual(2, s['CountStudies']) | |
1155 self.assertEqual(4, s['CountSeries']) | |
1156 d = int(s['TotalUncompressedSize']) | |
1157 | |
1158 e = 0 | |
1159 for patient in DoGet(_REMOTE, '/patients'): | |
1160 s = DoGet(_REMOTE, '/patients/%s/statistics' % patient) | |
1161 self.assertEqual(8, s['CountInstances']) | |
1162 self.assertEqual(1, s['CountStudies']) | |
1163 self.assertEqual(2, s['CountSeries']) | |
1164 e += int(s['UncompressedSize']) | |
1165 | |
1166 for study in DoGet(_REMOTE, '/studies'): | |
1167 s = DoGet(_REMOTE, '/studies/%s/statistics' % study) | |
1168 self.assertEqual(8, s['CountInstances']) | |
1169 self.assertEqual(2, s['CountSeries']) | |
1170 e += int(s['UncompressedSize']) | |
1171 | |
1172 for series in DoGet(_REMOTE, '/series'): | |
1173 s = DoGet(_REMOTE, '/series/%s/statistics' % series) | |
1174 self.assertEqual(4, s['CountInstances']) | |
1175 e += int(s['UncompressedSize']) | |
1176 | |
1177 self.assertEqual(3 * d, e) | |
1178 | |
1179 | |
1180 def test_custom_attachment(self): | |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1181 u = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID'] |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1182 |
13 | 1183 patient = DoGet(_REMOTE, '/patients')[0] |
1184 instance = DoGet(_REMOTE, '/instances')[0] | |
1185 size = int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']) | |
1186 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) | |
1187 | |
1188 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient))) | |
1189 self.assertTrue('dicom' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) | |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1190 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1191 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1192 if IsDicomUntilPixelDataStored(_REMOTE): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1193 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1194 self.assertTrue('dicom-until-pixel-data' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1195 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1196 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1197 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1198 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1199 self.assertTrue('dicom-as-json' in DoGet(_REMOTE, '/instances/%s/attachments' % instance)) |
13 | 1200 |
1201 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/22' % patient, 'hello')) | |
1202 hello = 'hellohellohellohellohellohellohellohellohello' | |
1203 DoPut(_REMOTE, '/patients/%s/attachments/1025' % patient, hello) | |
1204 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | |
1205 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) | |
1206 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | |
1207 size + int(DoGet(_REMOTE, '/patients/%s/attachments/1025/compressed-size' % patient))) | |
1208 | |
1209 DoPut(_REMOTE, '/patients/%s/attachments/1026' % patient, 'world') | |
1210 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | |
1211 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) | |
1212 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | |
1213 size + | |
1214 int(DoGet(_REMOTE, '/patients/%s/attachments/1025/compressed-size' % patient)) + | |
1215 int(DoGet(_REMOTE, '/patients/%s/attachments/1026/compressed-size' % patient))) | |
1216 | |
1217 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient))) | |
1218 self.assertEqual(hello, DoGet(_REMOTE, '/patients/%s/attachments/1025/data' % patient)) | |
1219 self.assertEqual('world', DoGet(_REMOTE, '/patients/%s/attachments/1026/data' % patient)) | |
1220 DoPost(_REMOTE, '/patients/%s/attachments/1025/verify-md5' % patient) | |
1221 DoPost(_REMOTE, '/patients/%s/attachments/1026/verify-md5' % patient) | |
1222 DoPut(_REMOTE, '/patients/%s/attachments/1026' % patient, 'world2') | |
1223 self.assertEqual('world2', DoGet(_REMOTE, '/patients/%s/attachments/1026/data' % patient)) | |
1224 | |
1225 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/instances/%s/attachments/dicom' % instance)) | |
1226 DoDelete(_REMOTE, '/patients/%s/attachments/1025' % patient) | |
1227 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | |
1228 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) | |
1229 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), | |
1230 size + int(DoGet(_REMOTE, '/patients/%s/attachments/1026/compressed-size' % patient))) | |
1231 | |
1232 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient))) | |
1233 DoDelete(_REMOTE, '/patients/%s/attachments/1026' % patient) | |
1234 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient))) | |
1235 | |
1236 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), size) | |
1237 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) | |
1238 | |
1239 | |
1240 def test_incoming_storescu(self): | |
1241 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
45 | 1242 subprocess.check_call([ FindExecutable('storescu'), |
44
ffa542cce638
Toolbox.FindExecutable()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
43
diff
changeset
|
1243 _REMOTE['Server'], str(_REMOTE['DicomPort']), |
13 | 1244 GetDatabasePath('ColorTestImageJ.dcm') ]) |
1245 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
1246 | |
63
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1247 i = DoGet(_REMOTE, '/instances') |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1248 self.assertEqual(1, len(i)) |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1249 m = DoGet(_REMOTE, '/instances/%s/metadata' % i[0]) |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1250 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1251 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1252 self.assertEqual(9, len(m)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1253 self.assertTrue('PixelDataOffset' in m) # New in Orthanc 1.9.1 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1254 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1255 self.assertEqual(8, len(m)) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
1256 |
63
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1257 self.assertTrue('IndexInSeries' in m) |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1258 self.assertTrue('ReceptionDate' in m) |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1259 self.assertTrue('RemoteAET' in m) |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1260 self.assertTrue('Origin' in m) |
89
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
1261 self.assertTrue('TransferSyntax' in m) |
95
a807a4699eb4
testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
92
diff
changeset
|
1262 self.assertTrue('SopClassUid' in m) |
145 | 1263 self.assertTrue('RemoteIP' in m) |
1264 self.assertTrue('CalledAET' in m) | |
63
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1265 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/IndexInSeries' % i[0]), 1) |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1266 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i[0]), 'DicomProtocol') |
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1267 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i[0]), 'STORESCU') |
89
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
1268 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i[0]), '1.2.840.10008.1.2.1') |
95
a807a4699eb4
testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
92
diff
changeset
|
1269 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i[0]), '1.2.840.10008.5.1.4.1.1.7') |
63
2652d562267a
test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
1270 |
369
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1271 series = DoGet(_REMOTE, '/series')[0] |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1272 m = DoGet(_REMOTE, '/series/%s/metadata' % series) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1273 self.assertEqual(2, len(m)) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1274 self.assertTrue('LastUpdate' in m) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1275 self.assertTrue('RemoteAET' in m) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1276 self.assertEqual(DoGet(_REMOTE, '/series/%s/metadata/RemoteAET' % series), 'STORESCU') |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1277 self.assertEqual(DoGet(_REMOTE, '/series/%s/metadata/LastUpdate' % series), |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1278 DoGet(_REMOTE, '/instances/%s/metadata/ReceptionDate' % i[0])) |
24d93b42873a
test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
368
diff
changeset
|
1279 |
13 | 1280 |
1281 def test_incoming_findscu(self): | |
1282 UploadInstance(_REMOTE, 'Multiframe.dcm') | |
1283 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm') | |
1284 | |
1285 i = CallFindScu([ '-k', '0008,0052=PATIENT', '-k', '0010,0010' ]) | |
1286 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i) | |
1287 self.assertEqual(2, len(patientNames)) | |
1288 self.assertTrue('Test Patient BG ' in patientNames) | |
1289 self.assertTrue('Anonymized' in patientNames) | |
1290 | |
1291 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0008,0021' ]) | |
1292 series = re.findall('\(0008,0021\).*?\[\s*(.*?)\s*\]', i) | |
1293 self.assertEqual(2, len(series)) | |
1294 self.assertTrue('20070208' in series) | |
1295 self.assertTrue('19980312' in series) | |
1296 | |
335
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
1297 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0008,0021', '-k', 'Modality=MR\\XA' ]) |
56
1059b8de42de
ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
1298 series = re.findall('\(0008,0021\).*?\[\s*(.*?)\s*\]', i) |
1059b8de42de
ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
1299 self.assertEqual(1, len(series)) |
1059b8de42de
ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
1300 self.assertTrue('19980312' in series) |
1059b8de42de
ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
1301 |
13 | 1302 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'PatientName=Anonymized' ]) |
1303 series = re.findall('\(0010,0010\).*?\[\s*(.*?)\s*\]', i) | |
1304 self.assertEqual(1, len(series)) | |
1305 | |
1306 # Test the "CaseSentitivePN" flag (false by default) | |
1307 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'PatientName=anonymized' ]) | |
1308 series = re.findall('\(0010,0010\).*?\[\s*(.*?)\s*\]', i) | |
1309 self.assertEqual(1, len(series)) | |
66
821d9eb73c45
Test returning sequence values
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
64
diff
changeset
|
1310 |
70 | 1311 # Test range search (buggy if Orthanc <= 0.9.6) |
1312 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=19980312-' ]) | |
1313 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i) | |
1314 self.assertEqual(2, len(studies)) | |
1315 self.assertTrue('20070208' in studies) | |
1316 self.assertTrue('19980312' in studies) | |
1317 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=19980312-19980312' ]) | |
1318 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i) | |
1319 self.assertEqual(1, len(studies)) | |
1320 self.assertTrue('19980312' in studies) | |
1321 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=-19980312' ]) | |
1322 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i) | |
1323 self.assertEqual(1, len(studies)) | |
1324 self.assertTrue('19980312' in studies) | |
326
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1325 |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1326 # Test that "Retrieve AE Title (0008,0054)" is present, which |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1327 # was *not* the case in Orthanc <= 1.7.2 |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1328 i = CallFindScu([ '-k', '0008,0052=INSTANCE' ]) |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1329 instances = re.findall('\(0008,0054\).*?\[\s*(.*?)\s*\]', i) |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1330 self.assertEqual(2, len(instances)) |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1331 self.assertEqual('ORTHANC', instances[0].strip()) |
05f48c19c60d
Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
324
diff
changeset
|
1332 self.assertEqual('ORTHANC', instances[1].strip()) |
13 | 1333 |
1334 | |
191
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1335 def test_incoming_findscu_2(self): |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1336 # This test fails if "LookupMode_DatabaseOnly" is used |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1337 # (sequences are not available in this mode, and only main |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1338 # DICOM tags are returned) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1339 UploadInstance(_REMOTE, 'Multiframe.dcm') |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1340 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm') |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1341 |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1342 # Test returning sequence values (only since Orthanc 0.9.5) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1343 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0008,2112' ]) # "ColorTestImageJ" has this sequence tag |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1344 sequences = re.findall('\(0008,2112\)', i) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1345 self.assertEqual(1, len(sequences)) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1346 |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1347 # Test returning a non-main DICOM tag, |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1348 # "SecondaryCaptureDeviceID" (0018,1010), whose value is |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1349 # "MEDPC" in "ColorTestImageJ.dcm" |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1350 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0018,1010' ]) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1351 tags = re.findall('\(0018,1010\).*MEDPC', i) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1352 self.assertEqual(1, len(tags)) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1353 |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1354 |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1355 def test_incoming_findscu_3(self): |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1356 # This test fails if "LookupMode_DatabaseOnly" or |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1357 # "LookupMode_DiskOnAnswer" is used, as |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1358 # "SecondaryCaptureDeviceID" (0018,1010) is not a main DICOM |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1359 # tag, as thus a constraint cannot be applied to it |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1360 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm') |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1361 |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1362 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0018,1010=MEDPC' ]) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1363 sequences = re.findall('\(0018,1010\)', i) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1364 self.assertEqual(1, len(sequences)) |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1365 |
bc8bc83465dc
testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
189
diff
changeset
|
1366 |
13 | 1367 def test_incoming_movescu(self): |
1368 UploadInstance(_REMOTE, 'Multiframe.dcm') | |
137
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
1369 |
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
1370 # No matching patient, so no job is created |
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
1371 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) |
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
1372 CallMoveScu([ '--patient', '-k', '0008,0052=PATIENT', '-k', 'PatientID=none' ]) |
13 | 1373 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) |
137
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
1374 |
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
1375 # 1 Matching patient, track the job |
138 | 1376 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ |
1377 '--patient', | |
1378 '-k', '0008,0052=PATIENT', | |
1379 '-k', 'PatientID=12345678' | |
1380 ]))) | |
13 | 1381 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) |
1382 | |
1383 | |
1384 def test_findscu(self): | |
1385 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
1386 j = UploadInstance(_REMOTE, 'Issue22.dcm')['ID'] | |
1387 k = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID'] | |
1388 DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') | |
1389 | |
1390 # Test the "find-patient" level | |
1391 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { }) | |
1392 self.assertEqual(1, len(p)) | |
1393 self.assertEqual('ozp00SjY2xG', p[0]['PatientID']) | |
1394 | |
1395 # Test wildcards constraints. The "LO" value representation | |
1396 # for PatientID is always case-sensitive, but the "PN" for | |
1397 # PatientName might depend on the implementation: | |
1398 # "GenerateConfigurationForTests.py" will force it to be case | |
1399 # insensitive (which was the default until Orthanc 0.8.6). | |
1400 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'K*' }) | |
1401 self.assertEqual(1, len(p)) | |
1402 | |
1403 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'k*' }) | |
1404 self.assertEqual(1, len(p)) | |
1405 | |
1406 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : 'ozp*' }) | |
1407 self.assertEqual(1, len(p)) | |
1408 | |
1409 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : 'o?p*' }) | |
1410 self.assertEqual(1, len(p)) | |
1411 | |
1412 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : '0?q*' }) | |
1413 self.assertEqual(0, len(p)) | |
1414 | |
1415 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'B*' }) | |
1416 self.assertEqual(0, len(p)) | |
1417 | |
1418 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'b*' }) | |
1419 self.assertEqual(0, len(p)) | |
1420 | |
1421 DoPost(_REMOTE, '/modalities/orthanctest/store', str(j), 'text/plain') | |
1422 DoPost(_REMOTE, '/modalities/orthanctest/store', str(k), 'text/plain') | |
1423 DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { }) | |
1424 self.assertEqual(3, len(DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { }))) | |
1425 | |
1426 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'A*' }) | |
1427 self.assertEqual(2, len(p)) | |
1428 | |
1429 # Test the "find-study" level. This is the instance "ColorTestImageJ.dcm" | |
1430 s = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ' }) | |
1431 self.assertEqual(1, len(s)) | |
1432 self.assertEqual('20070208', s[0]['StudyDate']) | |
1433 | |
1434 # Test range searches | |
1435 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1436 'StudyDate' : '-20070101' }) | |
1437 self.assertEqual(0, len(t)) | |
1438 | |
1439 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1440 'StudyDate' : '20090101-' }) | |
1441 self.assertEqual(0, len(t)) | |
1442 | |
1443 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1444 'StudyDate' : '20070101-' }) | |
1445 self.assertEqual(1, len(t)) | |
1446 | |
1447 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1448 'StudyDate' : '-20090101' }) | |
1449 self.assertEqual(1, len(t)) | |
1450 | |
1451 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1452 'StudyDate' : '20070207-20070207' }) | |
1453 self.assertEqual(0, len(t)) | |
1454 | |
1455 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1456 'StudyDate' : '20070208-20070208' }) | |
1457 self.assertEqual(1, len(t)) | |
1458 | |
1459 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ', | |
1460 'StudyDate' : '20070209-20070209' }) | |
1461 self.assertEqual(0, len(t)) | |
1462 | |
1463 # Test the ModalitiesInStudy tag | |
1464 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { | |
1465 'PatientID' : 'B9uTHKOZ', | |
1466 'ModalitiesInStudy' : 'US' }) | |
1467 self.assertEqual(0, len(t)) | |
1468 | |
1469 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { | |
1470 'PatientID' : 'B9uTHKOZ', | |
1471 'ModalitiesInStudy' : 'CT' }) | |
1472 self.assertEqual(1, len(t)) | |
1473 | |
1474 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { | |
1475 'PatientID' : 'B9uTHKOZ', | |
1476 'ModalitiesInStudy' : 'US\\CT' }) | |
1477 self.assertEqual(1, len(t)) | |
1478 | |
1479 # Test the "find-series" level | |
1480 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', { | |
1481 'PatientID' : 'B9uTHKOZ', | |
1482 'StudyInstanceUID' : s[0]['StudyInstanceUID'] }) | |
1483 self.assertEqual(1, len(t)) | |
1484 | |
1485 # Test "\" separator | |
1486 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', { | |
1487 'PatientID' : 'B9uTHKOZ', | |
1488 'StudyInstanceUID' : s[0]['StudyInstanceUID'], | |
1489 'Modality' : 'MR\\CT\\US' }) | |
1490 self.assertEqual(1, len(t)) | |
1491 | |
1492 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', { | |
1493 'PatientID' : 'B9uTHKOZ', | |
1494 'StudyInstanceUID' : s[0]['StudyInstanceUID'], | |
1495 'Modality' : 'MR\\US' }) | |
1496 self.assertEqual(0, len(t)) | |
1497 | |
1498 | |
1499 def test_update_modalities(self): | |
1500 try: | |
1501 DoDelete(_REMOTE, '/modalities/toto') | |
1502 except: | |
1503 pass | |
1504 try: | |
1505 DoDelete(_REMOTE, '/modalities/tata') | |
1506 except: | |
1507 pass | |
1508 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/toto')) | |
348
bed0ab3a1391
test deleting inexistent modality/peer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
342
diff
changeset
|
1509 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/modalities/toto')) |
13 | 1510 DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000 ]) |
116 | 1511 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'MedInria' ]) # check backward compatiblity with obsolete manufacturer |
1512 DoDelete(_REMOTE, '/modalities/tata') | |
124 | 1513 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'GenericNoUniversalWildcard' ]) |
121
1a19f953f53c
also test GenericNoWildcardInDates
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
120
diff
changeset
|
1514 DoDelete(_REMOTE, '/modalities/tata') |
1a19f953f53c
also test GenericNoWildcardInDates
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
120
diff
changeset
|
1515 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'GenericNoWildcardInDates' ]) |
128 | 1516 modalitiesReadback = DoGet(_REMOTE, '/modalities?expand') |
182
7a6b532853ab
modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
181
diff
changeset
|
1517 self.assertEqual('STORESCP', modalitiesReadback['tata']['AET']) |
7a6b532853ab
modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
181
diff
changeset
|
1518 self.assertEqual('localhost', modalitiesReadback['tata']['Host']) |
7a6b532853ab
modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
181
diff
changeset
|
1519 self.assertEqual(2000, modalitiesReadback['tata']['Port']) |
7a6b532853ab
modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
181
diff
changeset
|
1520 self.assertEqual('GenericNoWildcardInDates', modalitiesReadback['tata']['Manufacturer']) |
116 | 1521 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000, 'InvalidManufacturerName' ])) |
13 | 1522 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/toto')) |
1523 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/tata')) | |
351
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1524 |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1525 # New in Orthanc 1.8.1 |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1526 self.assertTrue('configuration' in DoGet(_REMOTE, '/modalities/tata')) |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1527 self.assertEqual(modalitiesReadback['tata'], DoGet(_REMOTE, '/modalities/tata/configuration')) |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1528 |
13 | 1529 DoDelete(_REMOTE, '/modalities/toto') |
1530 DoDelete(_REMOTE, '/modalities/tata') | |
1531 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/toto')) | |
1532 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/tata')) | |
1533 | |
1534 | |
1535 def test_update_peers(self): | |
1536 # curl -X PUT http://localhost:8042/peers/toto -d '["http://localhost:8042/"]' -v | |
1537 try: | |
1538 DoDelete(_REMOTE, '/peers/toto') | |
1539 except: | |
1540 pass | |
1541 try: | |
1542 DoDelete(_REMOTE, '/peers/tata') | |
1543 except: | |
1544 pass | |
1545 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/toto')) | |
348
bed0ab3a1391
test deleting inexistent modality/peer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
342
diff
changeset
|
1546 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/peers/toto')) |
13 | 1547 DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/' ]) |
214 | 1548 DoPut(_REMOTE, '/peers/tata', { 'Url': 'http://localhost:8042/', |
1549 'Username': 'user', | |
1550 'Password' : 'pass', | |
1551 'RemoteSelf' : 'self' }) | |
128 | 1552 self.assertTrue('tata' in DoGet(_REMOTE, '/peers')) |
1553 peersReadback = DoGet(_REMOTE, '/peers?expand') | |
1554 self.assertEqual('http://localhost:8042/', peersReadback['tata']['Url']) | |
1555 self.assertEqual('user', peersReadback['tata']['Username']) | |
214 | 1556 |
1557 if IsOrthancVersionAbove(_REMOTE, 1, 5, 4): | |
1558 self.assertEqual(None, peersReadback['tata']['Password']) # make sure no sensitive data is included | |
1559 self.assertFalse(peersReadback['tata']['Pkcs11']) # make sure no sensitive data is included | |
1560 self.assertEqual('self', peersReadback['tata']['RemoteSelf']) | |
1561 else: | |
1562 self.assertFalse('Password' in peersReadback['tata']) # make sure no sensitive data is included | |
1563 self.assertFalse('Pkcs11' in peersReadback['tata']) # make sure no sensitive data is included | |
1564 self.assertFalse('RemoteSelf' in peersReadback['tata']) | |
1565 | |
128 | 1566 self.assertFalse('CertificateFile' in peersReadback['tata']) # make sure no sensitive data is included |
1567 self.assertFalse('CertificateKeyFile' in peersReadback['tata']) # make sure no sensitive data is included | |
1568 self.assertFalse('CertificateKeyPassword' in peersReadback['tata']) # make sure no sensitive data is included | |
214 | 1569 |
13 | 1570 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/', 'a' ])) |
1571 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/', 'a', 'b', 'c' ])) | |
1572 self.assertTrue('store' in DoGet(_REMOTE, '/peers/toto')) | |
1573 self.assertTrue('store' in DoGet(_REMOTE, '/peers/tata')) | |
351
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1574 |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1575 # New in Orthanc 1.8.1 |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1576 self.assertTrue('configuration' in DoGet(_REMOTE, '/peers/tata')) |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1577 self.assertEqual(peersReadback['tata'], DoGet(_REMOTE, '/peers/tata/configuration')) |
429cc9d03610
test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
350
diff
changeset
|
1578 |
13 | 1579 DoDelete(_REMOTE, '/peers/toto') |
1580 DoDelete(_REMOTE, '/peers/tata') | |
1581 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/toto')) | |
1582 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/tata')) | |
1583 | |
1584 | |
1585 def test_mesterhazy_modification(self): | |
1586 # When I modify a series ( eg. curl | |
1587 # http://localhost:8042/series/uidhere/modify -X POST -d | |
1588 # '{"Replace":{"SeriesDate":"19990101"}}' ) the modified | |
1589 # series is added to a new Study, instead of the existing | |
1590 # Study. Fixed in Orthanc 0.7.5 | |
1591 | |
1592 u = UploadInstance(_REMOTE, 'DummyCT.dcm') | |
1593 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0' | |
1594 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe' | |
1595 | |
1596 modified = DoPost(_REMOTE, '/series/%s/modify' % series, | |
1597 json.dumps({ "Replace" : { "SeriesDate" : "19990101" }})) | |
1598 | |
1599 self.assertEqual(study, DoGet(_REMOTE, '/series/%s' % modified['ID']) ['ParentStudy']) | |
1600 | |
1601 | |
1602 def test_create(self): | |
1603 i = DoPost(_REMOTE, '/tools/create-dicom', | |
1604 json.dumps({ | |
1605 'PatientName' : 'Jodogne', | |
1606 'Modality' : 'CT', | |
58 | 1607 'SOPClassUID' : '1.2.840.10008.5.1.4.1.1.1', |
13 | 1608 'PixelData' : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' # red dot in RGBA |
1609 })) | |
1610 | |
1611 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip()) | |
1612 self.assertEqual('CT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i['ID']).strip()) | |
1613 | |
1614 png = GetImage(_REMOTE, '/instances/%s/preview' % i['ID']) | |
1615 self.assertEqual((5, 5), png.size) | |
1616 | |
38 | 1617 j = DoGet(_REMOTE, i['Path']) |
1618 self.assertEqual('Instance', j['Type']) | |
1619 self.assertEqual(j['ID'], i['ID']) | |
1620 | |
13 | 1621 |
1622 def test_pilates(self): | |
1623 # "SCU failed error when accessing orthanc with osirix" by | |
1624 # Pilates Agentur (Mar 10, 2014 at 9:33 PM) | |
1625 i = UploadInstance(_REMOTE, 'PilatesArgenturGEUltrasoundOsiriX.dcm')['ID'] | |
1626 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
1627 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') | |
1628 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
1629 | |
1630 | |
1631 def test_shared_tags(self): | |
1632 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID'] | |
1633 b = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')['ID'] | |
1634 p = DoGet(_REMOTE, '/patients')[0] | |
1635 | |
1636 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p)) | |
1637 self.assertTrue('PatientName' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p)) | |
136
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
1638 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/shared-tags?short' % p)) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
1639 |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
1640 self.assertEqual('KNEE', DoGet(_REMOTE, '/patients/%s/shared-tags' % p)['0010,0010']['Value']) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
1641 self.assertEqual('KNEE', DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p)['PatientName']) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
1642 self.assertEqual('KNEE', DoGet(_REMOTE, '/patients/%s/shared-tags?short' % p)['0010,0010']) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
1643 |
13 | 1644 self.assertTrue('0008,1030' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p)) |
1645 self.assertTrue('StudyDescription' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p)) | |
1646 self.assertTrue('0008,103e' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p)) | |
1647 self.assertTrue('SeriesDescription' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p)) | |
1648 self.assertFalse('0008,0018' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p)) | |
1649 self.assertFalse('SOPInstanceUID' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p)) | |
1650 | |
1651 self.assertTrue('0008,0018' in DoGet(_REMOTE, '/instances/%s/tags' % a)) | |
1652 self.assertTrue('SOPInstanceUID' in DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)) | |
1653 | |
1654 | |
1655 def test_modules(self): | |
1656 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID'] | |
1657 p = DoGet(_REMOTE, '/patients')[0] | |
1658 s = DoGet(_REMOTE, '/studies')[0] | |
1659 t = DoGet(_REMOTE, '/series')[0] | |
1660 | |
1661 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/module' % p)) | |
1662 self.assertTrue('PatientName' in DoGet(_REMOTE, '/patients/%s/module?simplify' % p)) | |
1663 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/studies/%s/module-patient' % p)) | |
1664 self.assertTrue('PatientName' in DoGet(_REMOTE, '/studies/%s/module-patient?simplify' % p)) | |
1665 self.assertTrue('0008,1030' in DoGet(_REMOTE, '/studies/%s/module' % s)) | |
1666 self.assertTrue('StudyDescription' in DoGet(_REMOTE, '/studies/%s/module?simplify' % s)) | |
1667 self.assertTrue('0008,103e' in DoGet(_REMOTE, '/series/%s/module' % p)) | |
1668 self.assertTrue('SeriesDescription' in DoGet(_REMOTE, '/series/%s/module?simplify' % p)) | |
1669 self.assertTrue('0008,0018' in DoGet(_REMOTE, '/instances/%s/module' % a)) | |
1670 self.assertTrue('SOPInstanceUID' in DoGet(_REMOTE, '/instances/%s/module?simplify' % a)) | |
1671 | |
1672 | |
1673 def test_auto_directory(self): | |
1674 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID'] | |
1675 self.assertTrue('now' in DoGet(_REMOTE, '/tools')) | |
1676 self.assertTrue('dicom-conformance' in DoGet(_REMOTE, '/tools')) | |
87
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
1677 self.assertTrue('invalidate-tags' in DoGet(_REMOTE, '/tools')) |
13 | 1678 self.assertTrue(len(DoGet(_REMOTE, '/tools/dicom-conformance')) > 1000) |
1679 self.assertTrue('orthanctest' in DoGet(_REMOTE, '/modalities')) | |
1680 self.assertTrue('echo' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1681 self.assertTrue('find' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1682 self.assertTrue('find-instance' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1683 self.assertTrue('find-patient' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1684 self.assertTrue('find-series' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1685 self.assertTrue('find-study' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1686 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/orthanctest')) | |
1687 self.assertTrue('store' in DoGet(_REMOTE, '/peers/peer')) | |
1688 self.assertTrue('matlab' in DoGet(_REMOTE, '/instances/%s/frames/0' % a)) | |
79 | 1689 self.assertTrue('raw' in DoGet(_REMOTE, '/instances/%s/frames/0' % a)) |
13 | 1690 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/tools/nope')) |
28 | 1691 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/nope')) |
1692 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/nope/nope.html')) | |
1693 self.assertEqual(404, DoGetRaw(_REMOTE, '/nope')[0].status) | |
1694 self.assertEqual(404, DoGetRaw(_REMOTE, '/nope/nope.html')[0].status) | |
13 | 1695 |
1696 | |
1697 def test_echo(self): | |
1698 DoPost(_REMOTE, '/modalities/orthanctest/echo') | |
359
8b476a383999
test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
357
diff
changeset
|
1699 DoPost(_REMOTE, '/modalities/orthanctest/echo', '{}') |
8b476a383999
test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
357
diff
changeset
|
1700 |
8b476a383999
test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
357
diff
changeset
|
1701 # The following was not working in Orthanc 1.7.0 -> 1.8.1 |
8b476a383999
test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
357
diff
changeset
|
1702 DoPost(_REMOTE, '/modalities/orthanctest/echo', '') |
352
3d406c0261fc
test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
351
diff
changeset
|
1703 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/nope/echo')) |
3d406c0261fc
test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
351
diff
changeset
|
1704 |
3d406c0261fc
test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
351
diff
changeset
|
1705 # New in Orthanc 1.8.1 |
3d406c0261fc
test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
351
diff
changeset
|
1706 DoPost(_REMOTE, '/tools/dicom-echo', [ |
355 | 1707 _REMOTE['DicomAet'], _REMOTE['Server'], _REMOTE['DicomPort'] ]) |
352
3d406c0261fc
test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
351
diff
changeset
|
1708 DoPost(_REMOTE, '/tools/dicom-echo', DoGet(_REMOTE, '/modalities/orthanctest/configuration')) |
13 | 1709 |
353 | 1710 # Use the 'CheckFind' new option in Orthanc 1.8.1 |
1711 DoPost(_REMOTE, '/modalities/self/echo', { 'CheckFind' : True }) | |
1712 DoPost(_REMOTE, '/tools/dicom-echo', { | |
1713 'AET' : _REMOTE['DicomAet'], | |
1714 'Host' : _REMOTE['Server'], | |
1715 'Port' : _REMOTE['DicomPort'], | |
1716 'CheckFind' : True | |
1717 }) | |
1718 | |
13 | 1719 |
1720 def test_xml(self): | |
1721 json = DoGet(_REMOTE, '/tools', headers = { 'accept' : 'application/json' }) | |
1722 xml = minidom.parseString(DoGet(_REMOTE, '/tools', headers = { 'accept' : 'application/xml' })) | |
1723 items = xml.getElementsByTagName('root')[0].getElementsByTagName('item') | |
1724 self.assertEqual(len(items), len(json)) | |
1725 | |
1726 self.assertTrue('dicom-conformance' in json) | |
1727 | |
1728 ok = False | |
1729 for i in items: | |
1730 if i.childNodes[0].data == 'dicom-conformance': | |
1731 ok = True | |
1732 self.assertTrue(ok) | |
1733 | |
1734 | |
46
85b2e36ed392
explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
45
diff
changeset
|
1735 def test_googlecode_issue_16(self): |
13 | 1736 i = UploadInstance(_REMOTE, 'Issue16.dcm')['ID'] |
1737 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)['FrameIncrementPointer'] | |
1738 self.assertEqual('0018,1063', t) | |
1739 | |
1740 | |
46
85b2e36ed392
explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
45
diff
changeset
|
1741 def test_googlecode_issue_22(self): |
13 | 1742 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID'] |
1743 a = [ | |
1744 "f804691f62197040438f4627c6b994f1", # Frame 0 | |
1745 "c69eee9a51eea3e8611e82e578897254", | |
1746 "315666be83e2d0111c77bc0996d84901", | |
1747 "3e27aa959d911172c48a1436443c72b1", | |
1748 "958642c9e7e9d232d3869faff546058c", | |
1749 "5e7ea8e3e4230cae707d143481355c59", | |
1750 "eda37f83558d858a596175aed8b2ad47", | |
1751 "486713bd2895c4ecbe0e97715ac7f80a", | |
1752 "091ef729eb169e67da8a0faa9631f9a8", | |
1753 "5aa2b8c7ffe0a483efaa8e12417686ca", | |
1754 "e2f39e85896fe58876654b94cd0b5013", | |
1755 "6fd2129e4950abbe1be053bc814d5da8", | |
1756 "c3331a8ba7a757f3d423735ab7fa81f9", | |
1757 "746f808582156734dd6b6fdfd3a0b72c", | |
1758 "8075ea2b227a70c60ea6b7b75a6bb190", | |
1759 "806b8b3e300c615099c11a5ec23465aa", | |
1760 "7c836aa298ba6eef96434579af631a11", | |
1761 "a0357dc9f4f72d73a885c33d7c287446", | |
1762 "f25ba3be1cc7d7fad95706adc199ea7d", | |
1763 "8b114c526b8cbed6cad8a3248b7b480c", | |
1764 "44e6670f127e612a2b4aa60a0d207698", | |
1765 "b8945f90fe02facf2ace24ca1ecbe0a5", | |
1766 "95c796c2fa8f59018b15cf2987b1f79b", | |
1767 "ce0a51ab30224205b44920221dc27351", # Frame 23 | |
1768 ] | |
1769 | |
1770 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s))) | |
1771 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/24/preview' % s)) | |
1772 | |
1773 for i in range(len(a)): | |
1774 self.assertEqual(a[i], ComputeMD5(DoGet(_REMOTE, '/instances/%s/frames/%d/preview' % (s, i)))) | |
1775 | |
1776 | |
46
85b2e36ed392
explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
45
diff
changeset
|
1777 def test_googlecode_issue_19(self): |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
1778 # This is an image with "YBR_FULL" photometric interpretation, it is not supported by Orthanc |
13 | 1779 # gdcmconv -i /home/jodogne/DICOM/GdcmDatabase/US_DataSet/HDI5000_US/3EAF5E01 -w -o Issue19.dcm |
1780 | |
1781 a = UploadInstance(_REMOTE, 'Issue19.dcm')['ID'] | |
304 | 1782 if not HasGdcmPlugin(_REMOTE): |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
1783 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/941ad3c8-05d05b88-560459f9-0eae0e20-6cddd533/preview')) |
13 | 1784 |
1785 | |
46
85b2e36ed392
explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
45
diff
changeset
|
1786 def test_googlecode_issue_37(self): |
13 | 1787 # Same test for issues 35 and 37. Fixed in Orthanc 0.9.1 |
1788 u = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID'] | |
1789 | |
1790 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series', | |
1791 'CaseSensitive' : True, | |
1792 'Query' : { 'StationName' : 'SMR4-MP3' }}) | |
1793 self.assertEqual(1, len(a)) | |
14 | 1794 |
1795 | |
1796 def test_rest_find(self): | |
1797 # Upload 8 instances | |
1798 for i in range(2): | |
1799 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) | |
1800 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
1801 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1)) | |
1802 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1)) | |
1803 | |
1804 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', | |
1805 'CaseSensitive' : False, | |
194
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1806 'Query' : { 'PatientName' : 'BRAINIX' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1807 self.assertEqual(1, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1808 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1809 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1810 'CaseSensitive' : False, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1811 'Query' : { 'PatientName' : 'BRAINIX\\KNEE\\NOPE' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1812 self.assertEqual(2, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1813 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1814 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1815 'CaseSensitive' : False, |
14 | 1816 'Query' : { 'PatientName' : '*n*' }}) |
1817 self.assertEqual(2, len(a)) | |
1818 | |
1819 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', | |
1820 'CaseSensitive' : True, | |
1821 'Query' : { 'PatientName' : '*n*' }}) | |
1822 self.assertEqual(0, len(a)) | |
1823 | |
1824 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True, | |
1825 'Level' : 'Patient', | |
1826 'CaseSensitive' : False, | |
1827 'Query' : { 'PatientName' : '*ne*' }}) | |
1828 self.assertEqual(1, len(a)) | |
1829 self.assertEqual('20080822', a[0]['MainDicomTags']['PatientBirthDate']) | |
1830 | |
1831 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', | |
1832 'CaseSensitive' : True, | |
1833 'Query' : { 'PatientName' : '*ne*' }}) | |
1834 self.assertEqual(0, len(a)) | |
1835 | |
1836 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', | |
1837 'CaseSensitive' : True, | |
1838 'Query' : { 'PatientName' : '*NE*' }}) | |
1839 self.assertEqual(1, len(a)) | |
1840 | |
1841 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series', | |
1842 'CaseSensitive' : True, | |
1843 'Query' : { 'PatientName' : '*NE*' }}) | |
1844 self.assertEqual(2, len(a)) | |
1845 | |
1846 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', | |
1847 'CaseSensitive' : True, | |
1848 'Query' : { 'PatientName' : '*NE*' }}) | |
1849 self.assertEqual(4, len(a)) | |
1850 | |
1851 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', 'Query' : { }}) | |
1852 self.assertEqual(2, len(a)) | |
1853 | |
1854 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', 'Query' : { }}) | |
1855 self.assertEqual(2, len(a)) | |
1856 | |
1857 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series', 'Query' : { }}) | |
1858 self.assertEqual(4, len(a)) | |
1859 | |
1860 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', 'Query' : { }}) | |
1861 self.assertEqual(8, len(a)) | |
1862 | |
194
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1863 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1864 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1865 'Query' : { 'StudyDate' : '20061201-20061201' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1866 self.assertEqual(1, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1867 self.assertEqual('BRAINIX', a[0]['PatientMainDicomTags']['PatientName']) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1868 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1869 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1870 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1871 'Query' : { 'StudyDate' : '20061201-20091201' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1872 self.assertEqual(2, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1873 for i in range(2): |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1874 self.assertTrue(a[i]['PatientMainDicomTags']['PatientName'] in ['BRAINIX', 'KNEE']) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1875 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1876 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1877 'Query' : { 'StudyDate' : '20061202-20061202' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1878 self.assertEqual(0, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1879 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1880 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1881 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1882 'Query' : { 'StudyDate' : '-20061201' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1883 self.assertEqual(1, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1884 self.assertEqual('BRAINIX', a[0]['PatientMainDicomTags']['PatientName']) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1885 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1886 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1887 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1888 'Query' : { 'StudyDate' : '-20051201' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1889 self.assertEqual(0, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1890 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1891 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1892 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1893 'Query' : { 'StudyDate' : '20061201-' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1894 self.assertEqual(2, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1895 for i in range(2): |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1896 self.assertTrue(a[i]['PatientMainDicomTags']['PatientName'] in ['BRAINIX', 'KNEE']) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1897 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1898 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1899 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1900 'Query' : { 'StudyDate' : '20061202-' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1901 self.assertEqual(1, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1902 self.assertEqual('KNEE', a[0]['PatientMainDicomTags']['PatientName']) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1903 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1904 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1905 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1906 'Query' : { 'StudyDate' : '20080819-' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1907 self.assertEqual(1, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1908 self.assertEqual('KNEE', a[0]['PatientMainDicomTags']['PatientName']) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1909 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1910 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1911 'Expand' : True, |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1912 'Query' : { 'StudyDate' : '20080820-' }}) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1913 self.assertEqual(0, len(a)) |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1914 |
9f7ae64c0fda
more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
1915 |
14 | 1916 |
1917 def test_rest_query_retrieve(self): | |
1918 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
1919 | |
1920 # Upload 8 instances | |
1921 for i in range(2): | |
1922 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) | |
1923 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) | |
1924 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1)) | |
1925 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1)) | |
1926 | |
1927 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
1928 for p in DoGet(_REMOTE, '/patients'): | |
1929 DoPost(_REMOTE, '/modalities/orthanctest/store', p) | |
1930 DoDelete(_REMOTE, '/patients/%s' % p) | |
1931 | |
1932 for q in DoGet(_REMOTE, '/queries'): | |
1933 DoDelete(_REMOTE, '/queries/%s' % q) | |
1934 | |
1935 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
1936 self.assertEqual(0, len(DoGet(_REMOTE, '/queries'))) | |
1937 a = DoPost(_REMOTE, '/modalities/orthanctest/query', { 'Level' : 'Series', | |
27 | 1938 'Query' : { |
1939 'PatientName' : '*NE*', | |
1940 'StudyDate' : '*', | |
1941 }})['ID'] | |
14 | 1942 self.assertEqual(1, len(DoGet(_REMOTE, '/queries'))) |
1943 | |
1944 b = DoGet(_REMOTE, '/queries/%s' % a) | |
1945 self.assertTrue('answers' in b) | |
1946 self.assertTrue('level' in b) | |
1947 self.assertTrue('modality' in b) | |
1948 self.assertTrue('query' in b) | |
1949 self.assertTrue('retrieve' in b) | |
1950 self.assertEqual('Series', DoGet(_REMOTE, '/queries/%s/level' % a)) | |
1951 self.assertEqual('orthanctest', DoGet(_REMOTE, '/queries/%s/modality' % a)) | |
1952 | |
1953 q = DoGet(_REMOTE, '/queries/%s/query?simplify' % a) | |
27 | 1954 self.assertEqual(2, len(q)) |
14 | 1955 self.assertTrue('PatientName' in q) |
27 | 1956 self.assertTrue('StudyDate' in q) |
14 | 1957 self.assertEqual('*NE*', q['PatientName']) |
27 | 1958 self.assertEqual('*', q['StudyDate']) |
14 | 1959 |
1960 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) | |
1961 | |
1962 s = DoGet(_REMOTE, '/queries/%s/answers/0' % a) | |
1963 self.assertTrue('content' in s) | |
1964 self.assertTrue('retrieve' in s) | |
1965 | |
1966 s = DoGet(_REMOTE, '/queries/%s/answers/0/content?simplify' % a) | |
1967 self.assertEqual('887', s['PatientID']) | |
1968 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s['StudyInstanceUID']) | |
1969 | |
1970 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
1971 DoPost(_REMOTE, '/queries/%s/answers/0/retrieve' % a, 'ORTHANC') | |
1972 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
1973 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
1974 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
1975 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) | |
1976 | |
112 | 1977 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) |
14 | 1978 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) |
1979 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
1980 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) | |
1981 self.assertEqual(4, len(DoGet(_REMOTE, '/instances'))) | |
1982 | |
186
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1983 # New in Orthanc 1.4.3 |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1984 s = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1985 self.assertEqual(2, len(s)) |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1986 for i in range(2): |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1987 self.assertEqual('SERIES', s[i]['QueryRetrieveLevel']) |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1988 self.assertEqual('887', s[i]['PatientID']) |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1989 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s[i]['StudyInstanceUID']) |
8feebc2bf9fc
test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
1990 |
14 | 1991 DoDelete(_REMOTE, '/queries/%s' % a) |
1992 self.assertEqual(0, len(DoGet(_REMOTE, '/queries'))) | |
1993 | |
1994 | |
1995 def test_parent(self): | |
1996 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
1997 patient = '6816cb19-844d5aee-85245eba-28e841e6-2414fae2' | |
1998 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0' | |
1999 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe' | |
2000 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d' | |
107
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
2001 self.assertEqual(instance, u) |
14 | 2002 |
2003 a = DoGet(_REMOTE, '/studies/%s/patient' % study) | |
2004 self.assertEqual('Patient', a['Type']) | |
2005 self.assertEqual(patient, a['ID']) | |
2006 | |
2007 a = DoGet(_REMOTE, '/series/%s/patient' % series) | |
2008 self.assertEqual('Patient', a['Type']) | |
2009 self.assertEqual(patient, a['ID']) | |
2010 | |
2011 a = DoGet(_REMOTE, '/series/%s/study' % series) | |
2012 self.assertEqual('Study', a['Type']) | |
2013 self.assertEqual(study, a['ID']) | |
2014 | |
2015 a = DoGet(_REMOTE, '/instances/%s/patient' % instance) | |
2016 self.assertEqual('Patient', a['Type']) | |
2017 self.assertEqual(patient, a['ID']) | |
2018 | |
2019 a = DoGet(_REMOTE, '/instances/%s/study' % instance) | |
2020 self.assertEqual('Study', a['Type']) | |
2021 self.assertEqual(study, a['ID']) | |
2022 | |
2023 a = DoGet(_REMOTE, '/instances/%s/series' % instance) | |
2024 self.assertEqual('Series', a['Type']) | |
2025 self.assertEqual(series, a['ID']) | |
2026 | |
2027 | |
2028 def test_shanon(self): | |
2029 def Anonymize(instance, replacements = {}): | |
119 | 2030 return DoPost(_REMOTE, '/instances/%s/anonymize' % instance, { |
2031 'Replace' : replacements, | |
2032 'Force' : True, | |
2033 }, 'application/json') | |
14 | 2034 |
2035 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) | |
2036 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
2037 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
2038 | |
2039 tags = [ 'PatientID', 'StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID', 'DeidentificationMethod' ] | |
2040 ids = [ 'ozp00SjY2xG', | |
2041 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', | |
2042 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', | |
2043 '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' ] | |
2044 | |
2045 a = ExtractDicomTags(Anonymize(u), tags) | |
2046 for i in range(4): | |
2047 self.assertNotEqual(ids[i], a[i]) | |
2048 self.assertTrue(a[4].startswith('Orthanc')) | |
2049 | |
2050 a = ExtractDicomTags(Anonymize(u, { 'PatientName' : 'toto' }), tags) | |
2051 for i in range(4): | |
2052 self.assertNotEqual(ids[i], a[i]) | |
2053 self.assertFalse(a[4].startswith('Orthanc')) | |
2054 | |
2055 a = ExtractDicomTags(Anonymize(u, { 'SOPInstanceUID' : 'instance' }), tags) | |
2056 self.assertEqual('instance', a[3]) | |
2057 self.assertFalse(a[4].startswith('Orthanc')) | |
2058 | |
2059 a = ExtractDicomTags(Anonymize(u, { 'SeriesInstanceUID' : 'series' }), tags) | |
2060 self.assertEqual('series', a[2]) | |
2061 self.assertFalse(a[4].startswith('Orthanc')) | |
2062 | |
2063 a = ExtractDicomTags(Anonymize(u, { 'StudyInstanceUID' : 'study' }), tags) | |
2064 self.assertEqual('study', a[1]) | |
2065 self.assertFalse(a[4].startswith('Orthanc')) | |
2066 | |
2067 a = ExtractDicomTags(Anonymize(u, { 'PatientID' : 'patient' }), tags) | |
2068 self.assertEqual('patient', a[0]) | |
2069 self.assertFalse(a[4].startswith('Orthanc')) | |
2070 | |
2071 a = ExtractDicomTags(Anonymize(u, { 'PatientID' : 'patient', | |
2072 'StudyInstanceUID' : 'study', | |
2073 'SeriesInstanceUID' : 'series', | |
2074 'SOPInstanceUID' : 'instance' }), tags) | |
2075 self.assertEqual('patient', a[0]) | |
2076 self.assertFalse(a[4].startswith('Orthanc')) | |
2077 | |
2078 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
2079 | |
2080 | |
2081 def test_shanon_2(self): | |
2082 def Modify(instance, replacements = {}): | |
119 | 2083 return DoPost(_REMOTE, '/instances/%s/modify' % instance, { |
2084 'Replace' : replacements, | |
2085 'Force': True, | |
2086 }, 'application/json') | |
14 | 2087 |
2088 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) | |
2089 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
2090 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
2091 | |
2092 tags = [ 'PatientID', 'StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID', 'DeidentificationMethod' ] | |
2093 ids = [ 'ozp00SjY2xG', | |
2094 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', | |
2095 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', | |
2096 '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' ] | |
2097 | |
2098 a = ExtractDicomTags(Modify(u), tags) | |
2099 self.assertEqual(ids[0], a[0]) | |
2100 self.assertEqual(ids[1], a[1]) | |
2101 self.assertEqual(ids[2], a[2]) | |
2102 self.assertNotEqual(ids[3], a[3]) | |
2103 self.assertEqual(0, len(a[4])) | |
2104 | |
2105 a = ExtractDicomTags(Modify(u, { 'SOPInstanceUID' : 'instance' }), tags) | |
2106 self.assertEqual(ids[0], a[0]) | |
2107 self.assertEqual(ids[1], a[1]) | |
2108 self.assertEqual(ids[2], a[2]) | |
2109 self.assertEqual('instance', a[3]) | |
2110 | |
2111 a = ExtractDicomTags(Modify(u, { 'SeriesInstanceUID' : 'series' }), tags) | |
2112 self.assertEqual(ids[0], a[0]) | |
2113 self.assertEqual(ids[1], a[1]) | |
2114 self.assertEqual('series', a[2]) | |
2115 self.assertNotEqual(ids[3], a[3]) | |
2116 | |
2117 a = ExtractDicomTags(Modify(u, { 'StudyInstanceUID' : 'study' }), tags) | |
2118 self.assertEqual(ids[0], a[0]) | |
2119 self.assertEqual('study', a[1]) | |
2120 self.assertNotEqual(ids[2], a[2]) | |
2121 self.assertNotEqual(ids[3], a[3]) | |
2122 | |
2123 a = ExtractDicomTags(Modify(u, { 'PatientID' : 'patient' }), tags) | |
2124 self.assertEqual('patient', a[0]) | |
2125 self.assertNotEqual(ids[1], a[1]) | |
2126 self.assertNotEqual(ids[2], a[2]) | |
2127 self.assertNotEqual(ids[3], a[3]) | |
2128 | |
2129 a = ExtractDicomTags(Modify(u, { 'PatientID' : 'patient', | |
2130 'StudyInstanceUID' : 'study', | |
2131 'SeriesInstanceUID' : 'series', | |
2132 'SOPInstanceUID' : 'instance' }), tags) | |
2133 self.assertEqual('patient', a[0]) | |
2134 self.assertEqual('study', a[1]) | |
2135 self.assertEqual('series', a[2]) | |
2136 self.assertEqual('instance', a[3]) | |
2137 | |
2138 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
2139 | |
2140 | |
2141 def test_instances_tags(self): | |
2142 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID'] | |
2143 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')['ID'] | |
2144 #a = UploadInstance(_REMOTE, 'Cardiac/MR.X.1.2.276.0.7230010.3.1.4.2831157719.2256.1336386937.676343')['ID'] | |
2145 #b = UploadInstance(_REMOTE, 'Cardiac/MR.X.1.2.276.0.7230010.3.1.4.2831157719.2256.1336386925.676329')['ID'] | |
2146 | |
2147 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/patients')[0]) | |
2148 self.assertEqual(2, len(i)) | |
2149 self.assertEqual('887', i[i.keys()[0]]['PatientID']) | |
2150 self.assertEqual('887', i[i.keys()[1]]['PatientID']) | |
2151 | |
2152 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/studies')[0]) | |
2153 self.assertEqual(2, len(i)) | |
2154 self.assertEqual('887', i[i.keys()[0]]['PatientID']) | |
2155 self.assertEqual('887', i[i.keys()[1]]['PatientID']) | |
2156 | |
2157 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) | |
2158 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/series')[0]) | |
2159 self.assertEqual(1, len(i)) | |
2160 self.assertEqual('887', i[i.keys()[0]]['PatientID']) | |
2161 | |
2162 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/series')[1]) | |
2163 self.assertEqual(1, len(i)) | |
2164 self.assertEqual('887', i[i.keys()[0]]['PatientID']) | |
2165 | |
136
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
2166 i = DoGet(_REMOTE, '/patients/%s/instances-tags?short' % DoGet(_REMOTE, '/series')[1]) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
2167 self.assertEqual(1, len(i)) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
2168 self.assertEqual('887', i[i.keys()[0]]['0010,0020']) |
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
2169 |
14 | 2170 |
2171 def test_lookup(self): | |
2172 a = DoPost(_REMOTE, '/tools/lookup', 'ozp00SjY2xG') | |
2173 self.assertEqual(0, len(a)) | |
2174 | |
2175 UploadInstance(_REMOTE, 'DummyCT.dcm') | |
2176 | |
2177 a = DoPost(_REMOTE, '/tools/lookup', 'ozp00SjY2xG') | |
2178 self.assertEqual(1, len(a)) | |
2179 self.assertEqual('Patient', a[0]['Type']) | |
2180 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', a[0]['ID']) | |
2181 self.assertEqual('/patients/%s' % a[0]['ID'], a[0]['Path']) | |
2182 | |
2183 a = DoPost(_REMOTE, '/tools/lookup', '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390') | |
2184 self.assertEqual(1, len(a)) | |
2185 self.assertEqual('Study', a[0]['Type']) | |
2186 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', a[0]['ID']) | |
2187 self.assertEqual('/studies/%s' % a[0]['ID'], a[0]['Path']) | |
2188 | |
2189 a = DoPost(_REMOTE, '/tools/lookup', '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394') | |
2190 self.assertEqual(1, len(a)) | |
2191 self.assertEqual('Series', a[0]['Type']) | |
2192 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', a[0]['ID']) | |
2193 self.assertEqual('/series/%s' % a[0]['ID'], a[0]['Path']) | |
2194 | |
2195 a = DoPost(_REMOTE, '/tools/lookup', '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109') | |
2196 self.assertEqual(1, len(a)) | |
2197 self.assertEqual('Instance', a[0]['Type']) | |
2198 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', a[0]['ID']) | |
2199 self.assertEqual('/instances/%s' % a[0]['ID'], a[0]['Path']) | |
2200 | |
2201 DropOrthanc(_REMOTE) | |
2202 a = DoPost(_REMOTE, '/tools/lookup', '3113719P') | |
2203 self.assertEqual(0, len(a)) | |
2204 | |
15 | 2205 |
2206 def test_autorouting(self): | |
2207 knee1 = 'Knee/T1/IM-0001-0001.dcm' | |
2208 knee2 = 'Knee/T2/IM-0001-0002.dcm' | |
2209 other = 'Brainix/Flair/IM-0001-0001.dcm' | |
2210 | |
2211 # Check that this version is >= 0.8.0 | |
2212 self.assertTrue(IsDefinedInLua(_REMOTE, '_InitializeJob')) | |
2213 self.assertTrue('orthanctest' in DoGet(_REMOTE, '/modalities')) | |
2214 | |
2215 UploadInstance(_REMOTE, knee1) | |
2216 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
2217 | |
2218 DropOrthanc(_REMOTE) | |
2219 DropOrthanc(_LOCAL) | |
174 | 2220 InstallLuaScriptFromPath(_REMOTE, 'Lua/Autorouting.lua') |
15 | 2221 UploadInstance(_REMOTE, knee1) |
2222 UploadInstance(_REMOTE, knee2) | |
2223 UploadInstance(_REMOTE, other) | |
2224 WaitEmpty(_REMOTE) | |
174 | 2225 UninstallLuaCallbacks(_REMOTE) |
15 | 2226 self.assertEqual(3, len(DoGet(_LOCAL, '/instances'))) |
2227 | |
2228 DropOrthanc(_REMOTE) | |
2229 DropOrthanc(_LOCAL) | |
174 | 2230 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingConditional.lua') |
15 | 2231 UploadInstance(_REMOTE, knee1) |
2232 UploadInstance(_REMOTE, knee2) | |
2233 UploadInstance(_REMOTE, other) | |
2234 WaitEmpty(_REMOTE) | |
174 | 2235 UninstallLuaCallbacks(_REMOTE) |
15 | 2236 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
2237 | |
2238 DropOrthanc(_REMOTE) | |
2239 DropOrthanc(_LOCAL) | |
174 | 2240 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingModification.lua') |
15 | 2241 UploadInstance(_REMOTE, knee1) |
2242 WaitEmpty(_REMOTE) | |
174 | 2243 UninstallLuaCallbacks(_REMOTE) |
15 | 2244 i = DoGet(_LOCAL, '/instances') |
2245 self.assertEqual(1, len(i)) | |
2246 | |
2247 with tempfile.NamedTemporaryFile(delete = True) as f: | |
2248 f.write(DoGet(_LOCAL, '/instances/%s/file' % i[0])) | |
2249 f.flush() | |
45 | 2250 routed = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ]) |
15 | 2251 self.assertEqual('My Medical Device', re.search('"StationName">(.*?)<', routed).group(1).strip()) |
2252 self.assertEqual(None, re.search('"MilitaryRank"', routed)) | |
2253 self.assertEqual(None, re.search('"0051,0010"', routed)) # A private tag | |
17 | 2254 |
2255 | |
2256 def test_storescu_rf(self): | |
2257 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID'] | |
2258 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
2259 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') | |
2260 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
18 | 2261 |
2262 | |
2263 def test_anonymize_instance(self): | |
2264 def AnonymizeAndUpload(instanceId, parameters): | |
2265 return DoPost(_REMOTE, '/instances', DoPost(_REMOTE, '/instances/%s/anonymize' % instanceId, parameters, | |
2266 'application/json'), 'application/dicom')['ID'] | |
2267 | |
2268 def ModifyAndUpload(instanceId, parameters): | |
2269 return DoPost(_REMOTE, '/instances', DoPost(_REMOTE, '/instances/%s/modify' % instanceId, parameters, | |
2270 'application/json'), 'application/dicom')['ID'] | |
2271 | |
2272 a = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] | |
2273 s1 = DoGet(_REMOTE, '/instances/%s/content/PatientName' % a) | |
2274 s2 = DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % a) # Some private tag | |
2275 s3 = DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % a) | |
2276 s4 = DoGet(_REMOTE, '/instances/%s/content/SeriesDescription' % a) | |
2277 s5 = DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % a) | |
2278 | |
2279 b = AnonymizeAndUpload(a, '{}') | |
2280 self.assertNotEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b)) | |
2281 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b)) | |
2282 | |
2283 # Keep private tag (only OK since Orthanc 0.8.0) | |
2284 b = AnonymizeAndUpload(a, '{"Keep":["00e1-10c2"]}') | |
2285 self.assertNotEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b)) | |
2286 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b)) | |
2287 | |
2288 b = AnonymizeAndUpload(a, '{"Keep":["00e1,10c2","PatientName"]}') | |
2289 self.assertEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b)) | |
2290 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b)) | |
2291 | |
2292 b = AnonymizeAndUpload(a, '{"Keep":["PatientName"],"Replace":{"00e1,10c2":"Hello"}}') | |
2293 self.assertEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b)) | |
2294 self.assertTrue(DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b).startswith('Hello')) | |
2295 | |
2296 # Examples from the Wiki | |
118
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
2297 b = AnonymizeAndUpload(a, '{"Replace":{"PatientName":"hello","0010-0020":"world"},"Keep":["StudyDescription", "SeriesDescription"],"KeepPrivateTags": true,"Force":true}') |
18 | 2298 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip()) |
2299 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip()) | |
2300 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b)) | |
2301 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008,103e' % b)) | |
2302 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008-103E' % b)) | |
2303 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b)) | |
2304 DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % a) | |
2305 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b)) | |
2306 | |
118
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
2307 b = ModifyAndUpload(a, '{"Replace":{"PatientName":"hello","PatientID":"world"},"Remove":["InstitutionName"],"RemovePrivateTags": true,"Force":true}') |
18 | 2308 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip()) |
2309 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip()) | |
2310 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b)) | |
2311 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008,103e' % b)) | |
2312 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b)) | |
2313 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b)) | |
2314 | |
118
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
2315 b = ModifyAndUpload(a, '{"Replace":{"PatientName":"hello","PatientID":"world"},"Force":true}') |
18 | 2316 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip()) |
2317 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip()) | |
2318 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1,10c2' % b)) | |
2319 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b)) | |
2320 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008-103E' % b)) | |
2321 self.assertEqual(s5, DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b)) | |
2322 | |
2323 | |
2324 # Test modify non-existing | |
2325 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2326 json.dumps({ | |
2327 'PatientName' : 'Jodogne', | |
2328 'Modality' : 'CT', | |
2329 }))['ID'] | |
2330 | |
2331 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i).strip()) | |
2332 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % i)) | |
2333 self.assertEqual('CT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i).strip()) | |
2334 | |
2335 b = ModifyAndUpload(i, '{"Replace":{"StudyDescription":"hello","Modality":"world"}}') | |
2336 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % b).strip()) | |
2337 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % b).strip()) | |
2338 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/Modality' % b).strip()) | |
2339 | |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2340 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2341 def test_incoming_jpeg(self): |
61
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2342 def storescu(image, acceptUnknownSopClassUid): |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2343 if acceptUnknownSopClassUid: |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2344 tmp = [ '-xf', GetDatabasePath('UnknownSopClassUid.cfg'), 'Default' ] |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2345 else: |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2346 tmp = [ '-xs' ] |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2347 |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2348 with open(os.devnull, 'w') as FNULL: |
61
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2349 subprocess.check_call([ FindExecutable('storescu') ] + tmp + |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2350 [ _REMOTE['Server'], str(_REMOTE['DicomPort']), |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2351 GetDatabasePath(image) ], |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2352 stderr = FNULL) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2353 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2354 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
373
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2355 |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2356 if IsOrthancVersionAbove(_REMOTE, 1, 9, 0): |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2357 a = DoPut(_REMOTE, '/tools/accepted-transfer-syntaxes', [ |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2358 '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2359 ]) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2360 self.assertTrue('1.2.840.10008.1.2' in a) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2361 self.assertTrue('1.2.840.10008.1.2.1' in a) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2362 self.assertTrue('1.2.840.10008.1.2.2' in a) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2363 self.assertEqual(3, len(a)) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2364 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/unknown-sop-class-accepted', 'nope')) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2365 DoPut(_REMOTE, '/tools/unknown-sop-class-accepted', '0') |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2366 self.assertEqual(0, DoGet(_REMOTE, '/tools/unknown-sop-class-accepted')) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2367 else: |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2368 InstallLuaScriptFromPath(_REMOTE, 'Lua/TransferSyntaxDisable.lua') |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2369 |
61
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2370 self.assertRaises(Exception, lambda: storescu('Knix/Loc/IM-0001-0001.dcm', False)) |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2371 self.assertRaises(Exception, lambda: storescu('UnknownSopClassUid.dcm', True)) |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2372 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
373
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2373 |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2374 if IsOrthancVersionAbove(_REMOTE, 1, 9, 0): |
374 | 2375 a = DoPut(_REMOTE, '/tools/accepted-transfer-syntaxes', '*', 'text/plain') |
373
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2376 self.assertGreaterEqual(42, len(a)) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2377 DoPut(_REMOTE, '/tools/unknown-sop-class-accepted', 'true') |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2378 self.assertEqual(1, DoGet(_REMOTE, '/tools/unknown-sop-class-accepted')) |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2379 else: |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2380 InstallLuaScriptFromPath(_REMOTE, 'Lua/TransferSyntaxEnable.lua') |
f673153f27a4
use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2381 |
62
f9c4ce95756f
removal of useless information
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
61
diff
changeset
|
2382 DoPost(_REMOTE, '/tools/execute-script', "print('All special transfer syntaxes are now accepted')") |
61
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2383 storescu('Knix/Loc/IM-0001-0001.dcm', False) |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2384 storescu('UnknownSopClassUid.dcm', True) |
967d44407308
test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
60
diff
changeset
|
2385 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2386 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2387 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2388 def test_storescu_jpeg(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2389 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2390 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2391 knixStudy = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0' |
64 | 2392 i = UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm')['ID'] |
2393 | |
2394 # This is JPEG lossless | |
136
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
2395 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header' % i)['0002,0010']['Value']) |
64 | 2396 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header?simplify' % i)['TransferSyntaxUID']) |
136
5634ef96fcc5
testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
2397 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header?short' % i)['0002,0010']) |
64 | 2398 |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2399 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0002.dcm') |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2400 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0003.dcm') |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2401 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2402 a = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2403 b = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2404 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2405 DoPost(_REMOTE, '/modalities/orthanctest/store', [ knixStudy, a, b ]) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2406 self.assertEqual(5, len(DoGet(_LOCAL, '/instances'))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2407 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2408 self.assertEqual(3, len(DoGet(_REMOTE, '/exports')['Exports'])) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2409 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2410 DropOrthanc(_REMOTE) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2411 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2412 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2413 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2414 def test_pixel_data(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2415 jpeg = UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2416 color = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2417 phenix = UploadInstance(_REMOTE, 'Phenix/IM-0001-0001.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2418 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2419 phenixSize = 358 * 512 * 2 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2420 colorSize = 1000 * 1000 * 3 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2421 jpegSize = 51918 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2422 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2423 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010' % phenix))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2424 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010' % color))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2425 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010' % jpeg))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2426 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2427 self.assertEqual(0, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010/0' % jpeg))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2428 self.assertEqual(jpegSize, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010/1' % jpeg))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2429 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2430 self.assertEqual(phenixSize, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010/0' % phenix))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2431 self.assertEqual(colorSize, len(DoGet(_REMOTE, '/instances/%s/content/7fe0-0010/0' % color))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2432 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2433 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2434 def test_decode_brainix(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2435 brainix = [ |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2436 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'], # (*) |
384 | 2437 UploadInstance(_REMOTE, 'Formats/JpegLossless.dcm')['ID'], # JPEG-LS, same as (*) (since Orthanc 0.7.6) => doesn't work on big-endian |
21
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2438 UploadInstance(_REMOTE, 'Formats/Jpeg.dcm')['ID'], # JPEG, same as (*) (since Orthanc 0.7.6) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2439 ] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2440 h = '6fb11b932d535c2be04beabd99793ff8' |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2441 maxValue = 426.0 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2442 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2443 truth = Image.open(GetDatabasePath('Formats/Brainix.png')) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2444 for i in brainix: |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2445 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % i) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2446 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % i) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2447 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2448 truth2 = map(lambda x: min(255, x), truth.getdata()) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2449 for i in brainix: |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2450 self.AssertSameImages(truth2, '/instances/%s/image-uint8' % i) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2451 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2452 truth2 = map(lambda x: x * 255.0 / maxValue, truth.getdata()) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2453 for i in brainix: |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2454 self.AssertSameImages(truth2, '/instances/%s/preview' % i) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2455 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2456 for i in brainix: |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2457 self.assertEqual(h, ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % i))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2458 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2459 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2460 def test_decode_color(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2461 imagej = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2462 color = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2463 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2464 for i in [ imagej, color ]: |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2465 for j in [ 'image-uint8', 'image-uint16', 'image-int16' ]: |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2466 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/%s' % (i, j))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2467 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2468 self.assertEqual('c14c687f7a1ea9fe022479fc87c67274', ComputeMD5(DoGet(_REMOTE, '/instances/%s/preview' % imagej))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2469 self.assertEqual('a87d122918a56f803bcfe9d2586b9125', ComputeMD5(DoGet(_REMOTE, '/instances/%s/preview' % color))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2470 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2471 self.assertEqual('30cc46bfa7aba77a40e4178f6184c25a', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % imagej))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2472 self.assertEqual('ff195005cef06b59666fd220a9b4cd9a', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % color))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2473 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2474 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2475 def test_decode_rf(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2476 rf = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2477 truth = Image.open(GetDatabasePath('Formats/KarstenHilbertRF.png')) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2478 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2479 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint8' % rf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2480 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % rf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2481 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % rf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2482 self.AssertSameImages(truth.getdata(), '/instances/%s/preview' % rf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2483 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2484 self.assertEqual('42254d70efd2f4a1b8f3455909689f0e', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % rf))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2485 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2486 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2487 def test_decode_multiframe(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2488 mf = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2489 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2490 # Test the first frame |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2491 truth = Image.open(GetDatabasePath('Formats/Multiframe0.png')) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2492 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint8' % mf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2493 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % mf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2494 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % mf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2495 self.AssertSameImages(truth.getdata(), '/instances/%s/preview' % mf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2496 self.assertEqual('9812b99d93bbcd4e7684ded089b5dfb3', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % mf))) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2497 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2498 self.AssertSameImages(truth.getdata(), '/instances/%s/frames/0/image-uint16' % mf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2499 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2500 # Test the last frame |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2501 truth = Image.open(GetDatabasePath('Formats/Multiframe75.png')) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2502 self.AssertSameImages(truth.getdata(), '/instances/%s/frames/75/image-uint16' % mf) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2503 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2504 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2505 def test_decode_signed(self): |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2506 signed = UploadInstance(_REMOTE, 'SignedCT.dcm')['ID'] |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2507 minValue = -2000 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2508 maxValue = 4042 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2509 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2510 truth = Image.open(GetDatabasePath('Formats/SignedCT.png')) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2511 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % signed) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2512 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2513 truth2 = map(lambda x: 0 if x >= 32768 else x, truth.getdata()) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2514 self.AssertSameImages(truth2, '/instances/%s/image-uint16' % signed) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2515 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2516 truth3 = map(lambda x: 255 if x >= 256 else x, truth2) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2517 self.AssertSameImages(truth3, '/instances/%s/image-uint8' % signed) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2518 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2519 tmp = map(lambda x: x - 65536 if x >= 32768 else x, truth.getdata()) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2520 tmp = map(lambda x: (255.0 * (x - minValue)) / (maxValue - minValue), tmp) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2521 self.AssertSameImages(tmp, '/instances/%s/preview' % signed) |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2522 |
2a29bcff60a7
tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
18
diff
changeset
|
2523 self.assertEqual('b57e6c872a3da50877c7da689b03a444', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % signed))) |
22 | 2524 |
2525 | |
46
85b2e36ed392
explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
45
diff
changeset
|
2526 def test_googlecode_issue_32(self): |
92
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2527 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/default-encoding', 'nope')) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2528 self.assertEqual('Windows1251', DoPut(_REMOTE, '/tools/default-encoding', 'Windows1251')) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2529 self.assertEqual('Windows1251', DoGet(_REMOTE, '/tools/default-encoding')) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2530 |
22 | 2531 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID'] |
2532 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f) | |
2533 self.assertEqual(u'Рентгенография', tags['SeriesDescription']) | |
2534 self.assertEqual(u'Таз', tags['BodyPartExamined']) | |
2535 self.assertEqual(u'Прямая', tags['ViewPosition']) | |
2536 | |
92
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2537 # Replay the same test using Latin1 as default encoding: This must fail |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2538 self.assertEqual('Latin1', DoPut(_REMOTE, '/tools/default-encoding', 'Latin1')) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2539 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2540 DoDelete(_REMOTE, '/instances/%s' % f) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2541 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID'] |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2542 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2543 self.assertNotEqual(u'Рентгенография', tags['SeriesDescription']) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2544 |
314 | 2545 # Back to UTF-8 |
2546 self.assertEqual('Utf8', DoPut(_REMOTE, '/tools/default-encoding', 'Utf8')) | |
2547 | |
92
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
2548 |
22 | 2549 def test_encodings(self): |
23 | 2550 # Latin-1 (ISO_IR 100) |
22 | 2551 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] |
2552 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix) | |
2553 self.assertEqual(u'IRM cérébrale, neuro-crâne', tags['StudyDescription']) | |
23 | 2554 |
2555 # Latin-2 (ISO_IR 101) | |
2556 a = UploadInstance(_REMOTE, 'MarekLatin2.dcm')['ID'] | |
2557 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % a) | |
2558 # dcm2xml MarekLatin2.dcm | iconv -f latin2 -t utf-8 | xmllint --format - | |
2559 self.assertEqual('Imię i Nazwisko osoby opisującej', | |
2560 i['ContentSequence'][4]['ConceptNameCodeSequence'][0]['CodeMeaning'].encode('utf-8')) | |
2561 | |
26
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2562 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2563 def test_storescu_custom_aet(self): |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2564 # This tests a feature introduced in Orthanc 0.9.1: "Custom |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2565 # setting of the local AET during C-Store SCU (both in Lua and |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2566 # in the REST API)." |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2567 # https://groups.google.com/forum/#!msg/orthanc-users/o5qMULformU/wZjW2iSaMcAJ |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2568 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2569 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2570 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2571 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2572 b = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2573 c = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0003.dcm') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2574 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2575 j = DoPost(_REMOTE, '/modalities/orthanctest/store', { |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2576 'LocalAet' : 'YOP', |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2577 'Resources' : [ a['ID'], b['ID'] ] |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2578 }) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2579 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2580 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2581 self.assertEqual('YOP', DoGet(_LOCAL, '/instances/%s/metadata/RemoteAET' % a['ID'])) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2582 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2583 DropOrthanc(_LOCAL) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2584 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2585 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2586 j = DoPost(_REMOTE, '/modalities/orthanctest/store', { |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2587 'Resources' : [ c['ID'] ] |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2588 }) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2589 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2590 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2591 self.assertEqual('ORTHANC', DoGet(_LOCAL, '/instances/%s/metadata/RemoteAET' % c['ID'])) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2592 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2593 DropOrthanc(_REMOTE) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2594 DropOrthanc(_LOCAL) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2595 |
174 | 2596 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingChangeAet.lua') |
26
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2597 DoPost(_REMOTE, '/tools/execute-script', 'aet = "HELLO"', 'application/lua') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2598 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2599 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2600 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2601 WaitEmpty(_REMOTE) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2602 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2603 self.assertEqual('HELLO', DoGet(_LOCAL, '/instances/%s/metadata/RemoteAET' % a['ID'])) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2604 |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2605 DoPost(_REMOTE, '/tools/execute-script', 'aet = nill', 'application/lua') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2606 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm') |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2607 WaitEmpty(_REMOTE) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2608 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
040f6ef1394a
test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
2609 self.assertEqual('ORTHANC', DoGet(_LOCAL, '/instances/%s/metadata/RemoteAET' % b['ID'])) |
34
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2610 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2611 def test_resources_since_limit(self): |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2612 # Upload 16 instances |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2613 for i in range(4): |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2614 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2615 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2616 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2617 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2618 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2619 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2620 self.assertEqual(2, len(DoGet(_REMOTE, '/studies'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2621 self.assertEqual(4, len(DoGet(_REMOTE, '/series'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2622 self.assertEqual(16, len(DoGet(_REMOTE, '/instances'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2623 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2624 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients&since=10' % i)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2625 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients&limit=10' % i)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2626 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2627 self.assertEqual(0, len(DoGet(_REMOTE, '/patients?since=0&limit=0'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2628 self.assertEqual(2, len(DoGet(_REMOTE, '/patients?since=0&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2629 self.assertEqual(2, len(DoGet(_REMOTE, '/studies?since=0&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2630 self.assertEqual(4, len(DoGet(_REMOTE, '/series?since=0&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2631 self.assertEqual(16, len(DoGet(_REMOTE, '/instances?since=0&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2632 self.assertEqual(1, len(DoGet(_REMOTE, '/patients?since=1&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2633 self.assertEqual(0, len(DoGet(_REMOTE, '/patients?since=2&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2634 self.assertEqual(0, len(DoGet(_REMOTE, '/patients?since=3&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2635 self.assertEqual(1, len(DoGet(_REMOTE, '/studies?since=1&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2636 self.assertEqual(3, len(DoGet(_REMOTE, '/series?since=1&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2637 self.assertEqual(2, len(DoGet(_REMOTE, '/series?since=2&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2638 self.assertEqual(1, len(DoGet(_REMOTE, '/series?since=3&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2639 self.assertEqual(0, len(DoGet(_REMOTE, '/series?since=4&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2640 self.assertEqual(0, len(DoGet(_REMOTE, '/series?since=100&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2641 self.assertEqual(15, len(DoGet(_REMOTE, '/instances?since=1&limit=100'))) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2642 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2643 for limit in [ 1, 2, 3, 7, 16, 17 ]: |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2644 s = {} |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2645 since = 0 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2646 while True: |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2647 t = DoGet(_REMOTE, '/instances?since=%d&limit=%d' % (since, limit)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2648 if len(t) == 0: |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2649 break |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2650 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2651 since += len(t) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2652 for i in t: |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2653 s[i] = None |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2654 |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2655 self.assertEqual(16, len(s)) |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2656 for instance in DoGet(_REMOTE, '/instances'): |
1047d7bc5210
test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
2657 self.assertTrue(instance in s) |
36 | 2658 |
2659 | |
2660 def test_create_pdf(self): | |
2661 # Upload 4 instances | |
2662 brainixInstance = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] | |
2663 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm') | |
2664 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
2665 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
2666 | |
2667 brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0' | |
2668 brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988' | |
2669 brainixEpi = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8' | |
2670 | |
2671 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f: | |
2672 pdf = f.read() | |
2673 | |
2674 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2675 json.dumps({ | |
2676 'Tags' : { | |
2677 'PatientName' : 'Jodogne', | |
2678 'Modality' : 'CT', | |
2679 }, | |
2680 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf) | |
2681 })) | |
2682 | |
2683 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip()) | |
2684 self.assertEqual('OT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i['ID']).strip()) | |
2685 | |
2686 b = DoGet(_REMOTE, '/instances/%s/content/0042-0011' % i['ID']) | |
2687 self.assertEqual(len(b), len(pdf) + 1) | |
2688 self.assertEqual(ComputeMD5(b), ComputeMD5(pdf + '\0')) | |
2689 | |
2690 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/tools/create-dicom', | |
2691 json.dumps({ | |
2692 'Parent' : brainixPatient, | |
2693 'Tags' : { | |
2694 'PatientName' : 'Jodogne', | |
2695 } | |
2696 }))) | |
2697 | |
2698 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2699 json.dumps({ | |
2700 'Parent' : brainixPatient, | |
2701 'Tags' : { 'StudyDescription' : 'PDF^Patient' }, | |
2702 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf) | |
2703 })) | |
2704 | |
2705 self.assertEqual(brainixPatient, DoGet(_REMOTE, '/instances/%s/patient' % i['ID'])['ID']) | |
2706 | |
2707 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2708 json.dumps({ | |
2709 'Parent' : brainixStudy, | |
2710 'Tags' : { 'SeriesDescription' : 'PDF^Study' }, | |
2711 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf) | |
2712 })) | |
2713 | |
2714 self.assertEqual(brainixStudy, DoGet(_REMOTE, '/instances/%s/study' % i['ID'])['ID']) | |
2715 | |
2716 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2717 json.dumps({ | |
2718 'Parent' : brainixEpi, | |
37 | 2719 'Tags' : { 'SpecificCharacterSet' : 'ISO_IR 13' }, |
36 | 2720 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf) |
2721 })) | |
2722 | |
2723 self.assertEqual(brainixEpi, DoGet(_REMOTE, '/instances/%s/series' % i['ID'])['ID']) | |
2724 | |
2725 b = DoGet(_REMOTE, '/instances/%s/pdf' % i['ID']) | |
2726 self.assertEqual(len(b), len(pdf)) | |
2727 self.assertEqual(ComputeMD5(b), ComputeMD5(pdf)) | |
2728 | |
2729 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/pdf' % brainixInstance)) | |
38 | 2730 |
2731 | |
2732 def test_create_series(self): | |
2733 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2734 json.dumps({ | |
2735 'Tags' : { | |
40 | 2736 'SpecificCharacterSet' : 'ISO_IR 100', |
2737 'PatientName' : 'Sébastien Jodogne', | |
38 | 2738 'Modality' : 'CT', |
2739 }, | |
2740 'Content' : [ | |
40 | 2741 { |
2742 'Content': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', # red dot in RGBA | |
2743 'Tags' : { 'ImageComments' : 'Tutu' } | |
2744 }, | |
38 | 2745 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVQ4jZ2SWw3EIBREjwUsYAELa2EtoAULFUCyXAtroRZqoRbox254BdLC/DZnZjoXWJFgCDg8egW2CBEhEnDzyRk+Ecxz2KP/0AL8S99T+jQccAVs22qKwAuPuq0uyNg9cPLh3am+pe/dkHLZtqJHj6vXJrZ7nvzvxxgemXgUwnGfXqpee09mUwp8m022OYP6bLF7mVuVe0y/umxinsAXRd9z0k1ubWsAAAAASUVORK5CYII=', |
2746 ] | |
2747 })) | |
2748 | |
2749 s = DoGet(_REMOTE, i['Path']) | |
2750 self.assertEqual('Series', s['Type']) | |
2751 self.assertEqual(s['ID'], i['ID']) | |
2752 self.assertEqual(2, len(s['Instances'])) | |
39 | 2753 self.assertEqual(2, s['ExpectedNumberOfInstances']) |
2754 self.assertEqual('Complete', s['Status']) | |
40 | 2755 |
2756 a = DoGet(_REMOTE, '/instances/%s/tags?simplify' % s['Instances'][0]) | |
2757 b = DoGet(_REMOTE, '/instances/%s/tags?simplify' % s['Instances'][1]) | |
2758 self.assertTrue('ImageComments' in a or 'ImageComments' in b) | |
2759 if 'ImageComments' in a: | |
2760 self.assertEqual('Tutu', a['ImageComments']) | |
2761 else: | |
2762 self.assertEqual('Tutu', b['ImageComments']) | |
2763 | |
2764 patient = DoGet(_REMOTE, '/instances/%s/patient' % s['Instances'][0]) | |
2765 self.assertEqual(patient['MainDicomTags']['PatientName'].encode('utf-8'), | |
2766 'Sébastien Jodogne') | |
47 | 2767 |
2768 | |
2769 def test_create_binary(self): | |
2770 binary = ''.join(map(chr, range(256))) | |
2771 encoded = 'data:application/octet-stream;base64,' + base64.b64encode(binary) | |
2772 tags = { | |
2773 'PatientName' : 'Jodogne', | |
2774 '8899-8899' : encoded | |
2775 } | |
2776 | |
2777 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2778 json.dumps({ | |
266 | 2779 'Tags' : tags, |
2780 'PrivateCreator' : 'TestBinary', | |
47 | 2781 })) |
2782 | |
2783 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip()) | |
2784 self.assertEqual(binary, DoGet(_REMOTE, '/instances/%s/content/8899-8899' % i['ID']).strip()) | |
2785 | |
2786 i = DoPost(_REMOTE, '/tools/create-dicom', | |
2787 json.dumps({ | |
2788 'InterpretBinaryTags' : False, | |
266 | 2789 'Tags' : tags, |
2790 'PrivateCreator' : 'TestBinary', | |
47 | 2791 })) |
2792 | |
2793 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip()) | |
2794 self.assertEqual(encoded, DoGet(_REMOTE, '/instances/%s/content/8899-8899' % i['ID'])[0:-1]) | |
48
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2795 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2796 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2797 def test_patient_ids_collision(self): |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2798 # Upload 3 instances from 3 different studies, but with the |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2799 # same PatientID |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2800 for i in range(3): |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2801 UploadInstance(_REMOTE, 'PatientIdsCollision/Image%d.dcm' % (i + 1)) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2802 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2803 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2804 'Query' : { 'PatientName' : '*' }}) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2805 self.assertEqual(1, len(a)) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2806 self.assertEqual('COMMON', DoGet(_REMOTE, '/patients/%s' % a[0]) ['MainDicomTags']['PatientID']) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2807 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2808 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2809 'CaseSensitive' : True, |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2810 'Query' : { 'PatientName' : 'FOO\\HELLO' }}) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2811 self.assertEqual(2, len(a)) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2812 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2813 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series', |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2814 'CaseSensitive' : False, |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2815 'Query' : { 'PatientName' : 'Foo' }}) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2816 self.assertEqual(1, len(a)) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2817 self.assertEqual('FOO^SERIES', DoGet(_REMOTE, '/series/%s/study' % a[0]) ['MainDicomTags']['StudyDescription']) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2818 self.assertEqual('FOO', DoGet(_REMOTE, '/series/%s/study' % a[0]) ['PatientMainDicomTags']['PatientName']) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2819 self.assertEqual('COMMON', DoGet(_REMOTE, '/series/%s/study' % a[0]) ['PatientMainDicomTags']['PatientID']) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2820 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2821 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2822 'Query' : { 'PatientName' : '*' }}) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2823 self.assertEqual(3, len(a)) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2824 d = map(lambda x: DoGet(_REMOTE, '/studies/%s' % x) ['MainDicomTags']['StudyDescription'], a) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2825 self.assertTrue('FOO^SERIES' in d) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2826 self.assertTrue('HELLO^SERIES' in d) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2827 self.assertTrue('WORLD^SERIES' in d) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2828 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2829 d = map(lambda x: DoGet(_REMOTE, '/studies/%s' % x) ['PatientMainDicomTags']['PatientID'], a) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2830 self.assertEqual(1, len(set(d))) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2831 self.assertEqual('COMMON', d[0]) |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2832 |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2833 for i in a: |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2834 d = DoGet(_REMOTE, '/studies/%s' % i) ['MainDicomTags']['StudyDescription'] |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2835 p = DoGet(_REMOTE, '/studies/%s' % i) ['PatientMainDicomTags']['PatientName'] |
e4352463ff74
test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
47
diff
changeset
|
2836 self.assertEqual('%s^SERIES' % p, d) |
49
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2837 |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2838 |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2839 def test_bitbucket_issue_4(self): |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2840 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2841 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2842 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0003.dcm') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2843 UploadInstance(_REMOTE, 'Formats/Jpeg.dcm') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2844 UploadInstance(_REMOTE, 'Formats/JpegLossless.dcm') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2845 UploadInstance(_REMOTE, 'Formats/Rle.dcm') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2846 |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2847 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2848 self.assertEqual(6, len(DoGet(_REMOTE, '/instances'))) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2849 |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2850 p = DoGet(_REMOTE, '/patients') |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2851 self.assertEqual(2, len(p)) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2852 i1 = map(lambda x: x['ID'], DoGet(_REMOTE, '/patients/%s/instances' % p[0])) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2853 i2 = map(lambda x: x['ID'], DoGet(_REMOTE, '/patients/%s/instances' % p[1])) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2854 self.assertEqual(3, len(i1)) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2855 self.assertEqual(3, len(i2)) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2856 |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2857 j = DoPost(_REMOTE, '/modalities/orthanctest/store', i2[0:1] + i1 + i2[1:3]) |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2858 |
e7f9b8199545
test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
48
diff
changeset
|
2859 self.assertEqual(6, len(DoGet(_LOCAL, '/instances'))) |
50
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2860 |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2861 |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2862 def test_create_sequence(self): |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2863 i = DoPost(_REMOTE, '/tools/create-dicom', |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2864 json.dumps({ |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2865 'Tags' : { |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2866 'SpecificCharacterSet': 'ISO_IR 100', # Encode using Latin1 |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2867 'PatientName': 'Jodogne^', |
51
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2868 'ReferencedStudySequence': GenerateTestSequence(), |
50
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2869 } |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2870 }))['ID'] |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2871 |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2872 self.assertEqual('Jodogne^', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i)) |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2873 self.assertEqual('Hello^', DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence/0/StudyDescription' % i)) |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2874 self.assertEqual('Toto', DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence/0/ReferencedStudySequence/0/StudyDescription' % i)) |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2875 self.assertEqual('Tata', DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence/0/ReferencedStudySequence/1/StudyDescription' % i)) |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2876 self.assertEqual(u'Sébastien^'.encode('latin-1'), |
8de63d56cf11
test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
49
diff
changeset
|
2877 DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence/1/StudyDescription' % i)) |
51
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2878 |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2879 |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2880 def test_modify_sequence(self): |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2881 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID'] |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2882 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence' % i)) |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2883 |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2884 j = DoPost(_REMOTE, '/instances/%s/modify' % i, |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2885 json.dumps({ |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2886 "Replace" : { |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2887 "PatientName" : "hello", |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2888 'ReferencedStudySequence': GenerateTestSequence(), |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2889 }, |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2890 }), |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2891 'application/json') |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2892 j = DoPost(_REMOTE, '/instances', j, 'application/dicom')['ID'] |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2893 DoDelete(_REMOTE, '/instances/%s' % i) |
264a20a0276d
test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
50
diff
changeset
|
2894 |
52 | 2895 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence' % j))) |
2896 | |
2897 | |
2898 def test_compression(self): | |
2899 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
2900 | |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2901 aa = DoGet(_REMOTE, '/instances/%s/attachments/' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2902 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2903 # This file has *no* pixel data, so "dicom-until-pixel-data" is not stored |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2904 self.assertEqual(1, len(aa)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2905 self.assertTrue('dicom' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2906 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2907 self.assertEqual(2, len(aa)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2908 self.assertTrue('dicom' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2909 self.assertTrue('dicom-as-json' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2910 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2911 data = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/data' % i)[1] |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2912 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2913 # If "StorageCompression" is enabled in the Orthanc to be |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2914 # tested, uncompress the attachment before running the test |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2915 if DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i) != 0: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2916 DoPost(_REMOTE, '/instances/%s/attachments/dicom/uncompress' % i) |
52 | 2917 |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2918 cs = int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2919 us = int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2920 size = int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/size' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2921 md5 = DoGet(_REMOTE, '/instances/%s/attachments/dicom/md5' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2922 self.assertEqual(data, DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/compressed-data' % i)[1]) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2923 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-md5' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2924 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-size' % i))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2925 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2926 ops = DoGet(_REMOTE, '/instances/%s/attachments/dicom' % i) |
52 | 2927 self.assertTrue('compress' in ops) |
2928 self.assertTrue('uncompress' in ops) | |
2929 self.assertTrue('is-compressed' in ops) | |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2930 self.assertEqual(0, DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2931 DoPost(_REMOTE, '/instances/%s/attachments/dicom/verify-md5' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2932 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2933 # Re-compress the attachment |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2934 DoPost(_REMOTE, '/instances/%s/attachments/dicom/compress' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2935 DoPost(_REMOTE, '/instances/%s/attachments/dicom/verify-md5' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2936 self.assertEqual(1, DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2937 self.assertGreater(cs, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2938 self.assertEqual(us, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2939 self.assertGreater(len(data), len(DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/compressed-data' % i)[1])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2940 self.assertGreater(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-size' % i))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2941 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/size' % i))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2942 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/md5' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2943 self.assertNotEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-md5' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2944 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2945 DoPost(_REMOTE, '/instances/%s/attachments/dicom/uncompress' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2946 DoPost(_REMOTE, '/instances/%s/attachments/dicom/verify-md5' % i) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2947 self.assertEqual(0, DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2948 self.assertEqual(data, DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/compressed-data' % i)[1]) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2949 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-size' % i))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2950 self.assertEqual(size, int(DoGet(_REMOTE, '/instances/%s/attachments/dicom/size' % i))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2951 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/md5' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2952 self.assertEqual(md5, DoGet(_REMOTE, '/instances/%s/attachments/dicom/compressed-md5' % i)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2953 self.assertEqual(cs, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize'])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
2954 self.assertEqual(us, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])) |
53 | 2955 |
2956 | |
2957 def test_ordered_slices(self): | |
2958 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID'] | |
2959 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'] | |
2960 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s) | |
2961 self.assertEqual('Sequence', o['Type']) | |
2962 self.assertEqual(1, len(o['Dicom'])) | |
2963 self.assertEqual('/instances/9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02/file', o['Dicom'][0]) | |
2964 self.assertEqual(76, len(o['Slices'])) | |
2965 for j in range(76): | |
2966 self.assertEqual('/instances/9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02/frames/%d' % j, o['Slices'][j]) | |
2967 | |
68 | 2968 self.assertEqual(1, len(o['SlicesShort'])) |
2969 self.assertEqual('9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02', o['SlicesShort'][0][0]) | |
2970 self.assertEqual(0, o['SlicesShort'][0][1]) | |
2971 self.assertEqual(76, o['SlicesShort'][0][2]) | |
2972 | |
53 | 2973 i = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] |
2974 j = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')['ID'] | |
2975 k = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0003.dcm')['ID'] | |
2976 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'] | |
2977 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s) | |
2978 | |
2979 self.assertEqual('Volume', o['Type']) | |
2980 self.assertEqual(3, len(o['Dicom'])) | |
2981 self.assertEqual(3, len(o['Slices'])) | |
2982 self.assertEqual('/instances/%s/file' % i, o['Dicom'][2]) | |
2983 self.assertEqual('/instances/%s/file' % j, o['Dicom'][1]) | |
2984 self.assertEqual('/instances/%s/file' % k, o['Dicom'][0]) | |
2985 self.assertEqual('/instances/%s/frames/0' % i, o['Slices'][2]) | |
2986 self.assertEqual('/instances/%s/frames/0' % j, o['Slices'][1]) | |
2987 self.assertEqual('/instances/%s/frames/0' % k, o['Slices'][0]) | |
2988 | |
68 | 2989 self.assertEqual(3, len(o['SlicesShort'])) |
2990 self.assertEqual(k, o['SlicesShort'][0][0]) | |
2991 self.assertEqual(0, o['SlicesShort'][0][1]) | |
2992 self.assertEqual(1, o['SlicesShort'][0][2]) | |
2993 self.assertEqual(j, o['SlicesShort'][1][0]) | |
2994 self.assertEqual(0, o['SlicesShort'][1][1]) | |
2995 self.assertEqual(1, o['SlicesShort'][1][2]) | |
2996 self.assertEqual(i, o['SlicesShort'][2][0]) | |
2997 self.assertEqual(0, o['SlicesShort'][2][1]) | |
2998 self.assertEqual(1, o['SlicesShort'][2][2]) | |
2999 | |
53 | 3000 i = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID'] |
3001 j = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0002.dcm')['ID'] | |
3002 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'] | |
3003 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s) | |
3004 | |
3005 self.assertEqual('Sequence', o['Type']) | |
3006 self.assertEqual(2, len(o['Dicom'])) | |
3007 self.assertEqual(2, len(o['Slices'])) | |
3008 self.assertEqual('/instances/%s/file' % i, o['Dicom'][0]) | |
3009 self.assertEqual('/instances/%s/file' % j, o['Dicom'][1]) | |
3010 self.assertEqual('/instances/%s/frames/0' % i, o['Slices'][0]) | |
3011 self.assertEqual('/instances/%s/frames/0' % j, o['Slices'][1]) | |
54
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3012 |
68 | 3013 self.assertEqual(2, len(o['SlicesShort'])) |
3014 self.assertEqual(i, o['SlicesShort'][0][0]) | |
3015 self.assertEqual(0, o['SlicesShort'][0][1]) | |
3016 self.assertEqual(1, o['SlicesShort'][0][2]) | |
3017 self.assertEqual(j, o['SlicesShort'][1][0]) | |
3018 self.assertEqual(0, o['SlicesShort'][1][1]) | |
3019 self.assertEqual(1, o['SlicesShort'][1][2]) | |
3020 | |
3021 | |
54
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3022 |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3023 def test_incoming_movescu_accession(self): |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3024 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3025 |
137
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
3026 # No matching patient, so no job is created |
54
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3027 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3028 CallMoveScu([ '--study', '-k', '0008,0052=STUDY', '-k', 'AccessionNumber=nope' ]) |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3029 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3030 CallMoveScu([ '--study', '-k', '0008,0052=PATIENT', '-k', 'AccessionNumber=A10003245599' ]) |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3031 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) |
137
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
3032 |
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
3033 # 1 Matching patient, track the job |
138 | 3034 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ |
3035 '--study', | |
3036 '-k', '0008,0052=STUDY', | |
3037 '-k', 'AccessionNumber=A10003245599' | |
3038 ]))) | |
137
412d5f70447e
testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
3039 |
54
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3040 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) |
c5f8a6b0d85e
test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
53
diff
changeset
|
3041 |
55 | 3042 |
3043 def test_dicom_to_json(self): | |
3044 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] | |
60
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3045 j = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID'] |
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3046 |
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3047 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) |
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3048 with open(GetDatabasePath('PrivateMDNTagsSimplify.json'), 'r') as f: |
80
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
3049 self.assertTrue(CompareTags(t, json.loads(f.read()), [ |
123 | 3050 # Tags for compatibility with DCMTK 3.6.0 |
3051 'RETIRED_OtherPatientIDs', | |
3052 'OtherPatientIDs', | |
3053 'ACR_NEMA_2C_VariablePixelDataGroupLength', | |
80
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
3054 ])) |
55 | 3055 |
3056 t = DoGet(_REMOTE, '/instances/%s/tags' % i) | |
3057 with open(GetDatabasePath('PrivateMDNTagsFull.json'), 'r') as f: | |
87
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3058 self.assertTrue(CompareTags(t, json.loads(f.read()), [ |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3059 ])) |
55 | 3060 |
60
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3061 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % j) |
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3062 with open(GetDatabasePath('PrivateTagsSimplify.json'), 'r') as f: |
80
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
3063 self.assertTrue(CompareTags(t, json.loads(f.read()), [ |
8466dbfcb22b
fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
79
diff
changeset
|
3064 ])) |
60
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3065 |
372
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3066 |
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3067 # NB: To get the actual value of the "tags" JSON file, use the |
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3068 # following command: |
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3069 # $ curl http://alice:orthanctest@localhost:8042/instances/d29ead49-43e8601d-72f1e922-7de676ee-ea77c2b4/tags |
60
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3070 t = DoGet(_REMOTE, '/instances/%s/tags' % j) |
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3071 with open(GetDatabasePath('PrivateTagsFull.json'), 'r') as f: |
cd3c7f70f139
test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
59
diff
changeset
|
3072 a = json.loads(f.read()) |
378
a4b8450a1158
fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
3073 |
a4b8450a1158
fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
3074 # Starting with Orthanc 1.9.1, the DICOM-as-JSON |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3075 # reports are truncated starting with PixelData |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3076 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3077 self.assertFalse('7fe1,0010' in t) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3078 self.assertFalse('7fe1,1001' in t) |
378
a4b8450a1158
fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
3079 del a['7fe1,0010'] |
a4b8450a1158
fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
3080 del a['7fe1,1001'] |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3081 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3082 self.assertTrue('7fe1,0010' in t) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3083 self.assertTrue('7fe1,1001' in t) |
378
a4b8450a1158
fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
3084 |
65
09fc27e0899a
patch for testing windows builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
64
diff
changeset
|
3085 aa = json.dumps(a).replace('2e+022', '2e+22') |
372
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3086 tt = (json.dumps(t) |
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3087 .replace('2e+022', '2e+22') |
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3088 # The "IllegalPrivatePixelSequence" tag was introduced in DCMTK 3.6.6 dictionary |
e9b03d8f3b78
fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
369
diff
changeset
|
3089 .replace('IllegalPrivatePixelSequence', 'Unknown Tag & Data')) |
65
09fc27e0899a
patch for testing windows builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
64
diff
changeset
|
3090 self.assertEqual(aa, tt) |
57 | 3091 |
3092 | |
3093 def test_batch_archive(self): | |
3094 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
3095 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm') | |
3096 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
3097 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0002.dcm') | |
3098 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm') | |
3099 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm') | |
3100 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
3101 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0002.dcm') | |
3102 | |
3103 s = DoPost(_REMOTE, '/tools/create-archive', [ ]) | |
3104 z = zipfile.ZipFile(StringIO(s), "r") | |
3105 self.assertEqual(0, len(z.namelist())) | |
3106 | |
3107 # One patient | |
3108 s = DoPost(_REMOTE, '/tools/create-archive', [ 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' ]) | |
3109 z = zipfile.ZipFile(StringIO(s), "r") | |
3110 self.assertEqual(4, len(z.namelist())) | |
3111 | |
3112 # One patient + twice its study + one series from other patient | |
3113 s = DoPost(_REMOTE, '/tools/create-archive', [ | |
3114 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17', | |
3115 '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918', | |
3116 '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0' | |
3117 ]) | |
3118 z = zipfile.ZipFile(StringIO(s), "r") | |
3119 self.assertEqual(6, len(z.namelist())) | |
3120 | |
3121 # One patient + one series + one instance | |
3122 s = DoPost(_REMOTE, '/tools/create-archive', [ | |
3123 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17', | |
3124 '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0', | |
3125 '1d429ccb-bdcc78a1-7d129d6a-ba4966ed-fe4dbd87' | |
3126 ]) | |
3127 z = zipfile.ZipFile(StringIO(s), "r") | |
3128 self.assertEqual(7, len(z.namelist())) | |
59
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3129 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3130 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3131 def test_decode_brainix_as_jpeg(self): |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3132 i = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3133 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3134 j = GetImage(_REMOTE, '/instances/%s/preview' % i) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3135 self.assertEqual('PNG', j.format) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3136 self.assertEqual(j.size[0], 256) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3137 self.assertEqual(j.size[1], 256) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3138 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3139 j = GetImage(_REMOTE, '/instances/%s/preview' % i, headers = { 'Accept' : '*/*' }) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3140 self.assertEqual('PNG', j.format) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3141 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3142 j = GetImage(_REMOTE, '/instances/%s/preview' % i, headers = { 'Accept' : 'image/*' }) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3143 self.assertEqual('PNG', j.format) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3144 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3145 j = GetImage(_REMOTE, '/instances/%s/preview' % i, headers = { 'Accept' : 'image/png' }) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3146 self.assertEqual('PNG', j.format) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3147 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3148 j = GetImage(_REMOTE, '/instances/%s/preview' % i, headers = { 'Accept' : 'image/jpeg' }) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3149 self.assertEqual('JPEG', j.format) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3150 self.assertEqual(j.size[0], 256) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3151 self.assertEqual(j.size[1], 256) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3152 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3153 a = len(DoGet(_REMOTE, '/instances/%s/preview?quality=50' % i, headers = { 'Accept' : 'image/jpeg' })) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3154 b = len(DoGet(_REMOTE, '/instances/%s/preview' % i, headers = { 'Accept' : 'image/jpeg' })) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3155 self.assertLess(a, b) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3156 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3157 j = GetImage(_REMOTE, '/instances/%s/image-uint8' % i, headers = { 'Accept' : 'image/jpeg' }) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3158 self.assertEqual('JPEG', j.format) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3159 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3160 # 16bit encoding is not supported with JPEG |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3161 self.assertRaises(Exception, lambda: GetImage(_REMOTE, '/instances/%s/image-uint16' % i, headers = { 'Accept' : 'image/jpeg' })) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3162 self.assertRaises(Exception, lambda: GetImage(_REMOTE, '/instances/%s/image-int16' % i, headers = { 'Accept' : 'image/jpeg' })) |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3163 |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3164 # No matching content type |
84378ada15ab
test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
58
diff
changeset
|
3165 self.assertRaises(Exception, lambda: GetImage(_REMOTE, '/instances/%s/preview' % i, headers = { 'Accept' : 'application/pdf' })) |
69
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3166 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3167 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3168 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3169 def test_media_encodings(self): |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3170 ascii = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID'] |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3171 latin1 = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3172 latin2 = UploadInstance(_REMOTE, 'MarekLatin2.dcm')['ID'] |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3173 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3174 tmp = DoPost(_REMOTE, '/tools/create-media', [ascii,latin1,latin2]) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3175 z = zipfile.ZipFile(StringIO(tmp), "r") |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3176 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3177 self.assertEqual(4, len(z.namelist())) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3178 self.assertTrue('IMAGES/IM0' in z.namelist()) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3179 self.assertTrue('IMAGES/IM1' in z.namelist()) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3180 self.assertTrue('IMAGES/IM2' in z.namelist()) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3181 self.assertTrue('DICOMDIR' in z.namelist()) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3182 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3183 try: |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3184 os.remove('/tmp/DICOMDIR') |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3185 except: |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3186 # The file does not exist |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3187 pass |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3188 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3189 z.extract('DICOMDIR', '/tmp') |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3190 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ], |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3191 stderr = subprocess.STDOUT).split('\n') |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3192 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3193 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ], |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3194 stderr = subprocess.STDOUT).split('\n') |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3195 self.assertEqual(1, len(a)) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3196 self.assertEqual('', a[0]) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3197 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3198 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ]) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3199 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081908590448738', a) != None) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3200 self.assertTrue(re.search('1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114333648576', a) != None) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3201 self.assertTrue(re.search('1.2.826.0.1.3680043.2.1569.1.4.323026757.1700.1399452091.57', a) != None) |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3202 |
83fd88230097
test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
68
diff
changeset
|
3203 os.remove('/tmp/DICOMDIR') |
71
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3204 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3205 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3206 def test_findscu_counters(self): |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3207 UploadInstance(_REMOTE, 'Comunix/Ct/IM-0001-0001.dcm') |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3208 UploadInstance(_REMOTE, 'Comunix/Pet/IM-0001-0001.dcm') |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3209 UploadInstance(_REMOTE, 'Comunix/Pet/IM-0001-0002.dcm') |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3210 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3211 i = CallFindScu([ '-k', '0008,0052=PATIENT', '-k', 'NumberOfPatientRelatedStudies' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3212 s = re.findall('\(0020,1200\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3213 self.assertEqual(1, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3214 self.assertTrue('1 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3215 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3216 i = CallFindScu([ '-k', '0008,0052=PATIENT', '-k', 'NumberOfPatientRelatedSeries' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3217 s = re.findall('\(0020,1202\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3218 self.assertEqual(1, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3219 self.assertTrue('2 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3220 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3221 i = CallFindScu([ '-k', '0008,0052=PATIENT', '-k', 'NumberOfPatientRelatedInstances' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3222 s = re.findall('\(0020,1204\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3223 self.assertEqual(1, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3224 self.assertTrue('3 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3225 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3226 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'NumberOfStudyRelatedSeries' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3227 s = re.findall('\(0020,1206\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3228 self.assertEqual(1, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3229 self.assertTrue('2 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3230 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3231 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'NumberOfStudyRelatedInstances' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3232 s = re.findall('\(0020,1208\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3233 self.assertEqual(1, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3234 self.assertTrue('3 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3235 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3236 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'NumberOfSeriesRelatedInstances' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3237 s = re.findall('\(0020,1209\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3238 self.assertEqual(2, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3239 self.assertTrue('1 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3240 self.assertTrue('2 ' in s) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3241 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3242 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'ModalitiesInStudy' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3243 s = re.findall('\(0008,0061\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3244 self.assertEqual(1, len(s)) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3245 t = map(lambda x: x.strip(), s[0].split('\\')) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3246 self.assertTrue('PT' in t) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3247 self.assertTrue('CT' in t) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3248 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3249 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'SOPClassesInStudy' ]) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3250 s = re.findall('\(0008,0062\).*?\[(.*?)\]', i) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3251 self.assertEqual(1, len(s)) |
176
48cc188ffb09
strip trailing 0 char that appears with some findscu versions
am@osimis.io
parents:
175
diff
changeset
|
3252 t = map(lambda x: x.strip('\x00'), s[0].split('\\')) |
71
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3253 self.assertTrue('1.2.840.10008.5.1.4.1.1.2' in t) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3254 self.assertTrue('1.2.840.10008.5.1.4.1.1.128' in t) |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3255 |
48740070cbf1
TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
3256 |
78
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3257 def test_decode_transfer_syntax(self): |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3258 def Check(t, md5): |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3259 i = UploadInstance(_REMOTE, 'TransferSyntaxes/%s.dcm' % t)['ID'] |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3260 |
89
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
3261 if t != '1.2.840.10008.1.2': # This file has no meta header |
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
3262 transferSyntax = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i) |
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
3263 self.assertEqual(t, transferSyntax) |
74b7b9aed5f8
test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
87
diff
changeset
|
3264 |
78
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3265 if md5 == None: |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3266 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/preview' % i)) |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3267 else: |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3268 m = ComputeMD5(DoGet(_REMOTE, '/instances/%s/preview' % i)) |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3269 self.assertEqual(m, md5) |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3270 |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3271 Check('1.2.840.10008.1.2.1', 'fae08d5415c4c0cd2cdbae4522408631') |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3272 Check('1.2.840.10008.1.2.2', 'f3d9784768b8feb54d6a50b6d5c37682') |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3273 Check('1.2.840.10008.1.2.4.51', 'ccbe75909fe5c9f7361b48416a53fc41') |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3274 Check('1.2.840.10008.1.2.4.57', '7bbefe11d976b1be4e568915c6a82fc3') |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3275 Check('1.2.840.10008.1.2.4.70', '7132cfbc457305b04b59787030c785d2') |
384 | 3276 Check('1.2.840.10008.1.2.5', '6ff51ae525d362e0d04f550a64075a0e') # RLE, supported since Orthanc 1.0.1 |
3277 Check('1.2.840.10008.1.2', 'd54aed9f67a100984b42942cc2e9939b') | |
3278 | |
3279 # The 3 checks below don't work on big-endian | |
3280 Check('1.2.840.10008.1.2.4.50', '496326046974eea718dbc16b997c646b') # TODO - Doesn't work with GDCM 3.0.7 alone | |
78
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3281 Check('1.2.840.10008.1.2.4.80', '6ff51ae525d362e0d04f550a64075a0e') |
b89af51797ff
test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
3282 Check('1.2.840.10008.1.2.4.81', '801579ae7cbf28e604ea74f2c99fa2ca') |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
3283 |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
3284 # JPEG2k image, not supported without GDCM plugin |
304 | 3285 if not HasGdcmPlugin(_REMOTE): |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
3286 Check('1.2.840.10008.1.2.4.90', None) |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
3287 Check('1.2.840.10008.1.2.4.91', None) |
79 | 3288 |
3289 | |
3290 def test_raw_frame(self): | |
3291 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID'] | |
3292 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s))) | |
3293 a = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s) | |
3294 self.assertEqual(512 * 512 * 2, len(a)) | |
3295 self.assertEqual(512 * 512 * 2, len(DoGet(_REMOTE, '/instances/%s/frames/23/raw' % s))) | |
3296 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/24/raw' % s)) | |
3297 self.assertEqual('1914287dc4d958eca21fdaacfb3482fa', ComputeMD5(a)) | |
3298 | |
3299 s = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID'] | |
3300 self.assertEqual(76, len(DoGet(_REMOTE, '/instances/%s/frames' % s))) | |
3301 self.assertEqual(186274, len(DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s))) | |
3302 self.assertEqual(189424, len(DoGet(_REMOTE, '/instances/%s/frames/75/raw' % s))) | |
3303 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/76/raw' % s)) | |
3304 im = GetImage(_REMOTE, '/instances/%s/frames/0/raw' % s) | |
3305 self.assertEqual("L", im.mode) | |
3306 self.assertEqual(512, im.size[0]) | |
3307 self.assertEqual(512, im.size[1]) | |
3308 | |
3309 # Test an image with 2 JPEG frames spread over multiple fragments | |
3310 s = UploadInstance(_REMOTE, 'LenaTwiceWithFragments.dcm')['ID'] | |
3311 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/frames' % s))) | |
3312 a = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s) | |
3313 b = DoGet(_REMOTE, '/instances/%s/frames/1/raw' % s) | |
3314 self.assertEqual(69214, len(a)) | |
3315 self.assertEqual(ComputeMD5(a), ComputeMD5(b)) | |
3316 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/2/raw' % s)) | |
3317 im = GetImage(_REMOTE, '/instances/%s/frames/0/raw' % s) | |
3318 self.assertEqual("RGB", im.mode) | |
3319 self.assertEqual(512, im.size[0]) | |
3320 self.assertEqual(512, im.size[1]) | |
323 | 3321 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % s) # TODO - Doesn't work with GDCM 3.0.7 alone |
79 | 3322 self.assertEqual("RGB", im.mode) |
3323 self.assertEqual(512, im.size[0]) | |
3324 self.assertEqual(512, im.size[1]) | |
81 | 3325 |
3326 | |
3327 | |
3328 def test_rest_movescu(self): | |
3329 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
3330 | |
3331 # Upload 4 instances | |
3332 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') | |
3333 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0002.dcm') | |
3334 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm') | |
3335 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
3336 | |
3337 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
3338 for p in DoGet(_REMOTE, '/patients'): | |
3339 DoPost(_REMOTE, '/modalities/orthanctest/store', p) | |
3340 DoDelete(_REMOTE, '/patients/%s' % p) | |
3341 | |
3342 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
3343 | |
3344 # Upload instance Brainix/Flair/IM-0001-0001.dcm | |
3345 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Instance', | |
3346 'Resources' : [ | |
3347 { | |
3348 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775', | |
3349 'SeriesInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114285654497', | |
3350 'SOPInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314079549', | |
3351 } | |
3352 ]}) | |
3353 | |
3354 # Upload series Brainix/Flair/* | |
3355 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
3356 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
3357 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
3358 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
3359 | |
3360 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Series', | |
3361 'Resources' : [ | |
3362 { | |
3363 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775', | |
3364 'SeriesInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114285654497', | |
3365 } | |
3366 ]}) | |
3367 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
3368 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
3369 self.assertEqual(1, len(DoGet(_REMOTE, '/series'))) | |
3370 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) | |
3371 | |
3372 # Upload series Brainix/Epi/* | |
3373 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Series', | |
3374 'Resources' : [ | |
3375 { | |
3376 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775', | |
3377 'SeriesInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314125550', | |
3378 } | |
3379 ]}) | |
3380 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
3381 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) | |
3382 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) | |
3383 self.assertEqual(3, len(DoGet(_REMOTE, '/instances'))) | |
3384 | |
3385 # Upload study Knee/* | |
3386 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Study', | |
3387 'Resources' : [ | |
3388 { | |
3389 'StudyInstanceUID' : '2.16.840.1.113669.632.20.121711.10000160881', | |
3390 } | |
3391 ]}) | |
3392 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
3393 self.assertEqual(2, len(DoGet(_REMOTE, '/studies'))) | |
3394 self.assertEqual(3, len(DoGet(_REMOTE, '/series'))) | |
3395 self.assertEqual(4, len(DoGet(_REMOTE, '/instances'))) | |
3396 | |
3397 # Reset | |
3398 for p in DoGet(_REMOTE, '/patients'): | |
3399 DoDelete(_REMOTE, '/patients/%s' % p) | |
3400 | |
3401 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) | |
3402 | |
3403 | |
3404 # Upload all at once | |
3405 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Study', | |
3406 'Resources' : [ | |
3407 { | |
3408 'StudyInstanceUID' : '2.16.840.1.113669.632.20.121711.10000160881', | |
3409 }, | |
3410 { | |
3411 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775', | |
3412 } | |
3413 ]}) | |
3414 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) | |
3415 self.assertEqual(2, len(DoGet(_REMOTE, '/studies'))) | |
3416 self.assertEqual(3, len(DoGet(_REMOTE, '/series'))) | |
3417 self.assertEqual(4, len(DoGet(_REMOTE, '/instances'))) | |
3418 | |
86
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3419 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3420 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3421 def test_reconstruct_json(self): |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3422 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3423 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3424 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3425 first = DoGet(_REMOTE, '/instances/%s/tags' % instance) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3426 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3427 self.assertEqual('TWINOW', first['0008,1010']['Value']) |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3428 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3429 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3430 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3431 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3432 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
86
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3433 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3434 # Cannot delete the "DICOM" attachment |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3435 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/instances/%s/attachments/dicom' % instance)) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3436 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3437 # Can delete the "DICOM as JSON" attachment |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3438 r = DoDelete(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3439 self.assertTrue(type(r) is dict and len(r) == 0) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3440 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3441 # Only the "DICOM" attachment subsists |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3442 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3443 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3444 # Cannot manually reconstruct the "DICOM as JSON" attachment |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3445 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/dicom-as-json' % patient, 'hello')) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3446 |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3447 # Transparently reconstruct the "DICOM as JSON" attachment |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3448 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance)) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3449 second = DoGet(_REMOTE, '/instances/%s/tags' % instance) |
0401ef51f5c1
test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
83
diff
changeset
|
3450 self.assertEqual(str(first), str(second)) |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3451 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3452 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3453 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3454 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3455 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3456 third = DoGet(_REMOTE, '/instances/%s/attachments/dicom-as-json/data' % instance) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3457 self.assertEqual(str(first), str(third)) |
87
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3458 |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3459 |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3460 def test_reconstruct_json2(self): |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3461 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3462 |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3463 a = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3464 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')['ID'] |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3465 |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3466 self.assertEqual('BRAINIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)['PatientName']) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3467 self.assertEqual('KNEE', DoGet(_REMOTE, '/instances/%s/tags?simplify' % b)['PatientName']) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3468 |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3469 aa = DoGet(_REMOTE, '/instances/%s/attachments' % a) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3470 bb = DoGet(_REMOTE, '/instances/%s/attachments' % b) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3471 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3472 if not IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3473 self.assertEqual(2, len(aa)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3474 self.assertEqual(aa, bb) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3475 self.assertTrue('dicom' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3476 self.assertTrue('dicom-as-json' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3477 elif IsDicomUntilPixelDataStored(_REMOTE): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3478 self.assertEqual(2, len(aa)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3479 self.assertEqual(aa, bb) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3480 self.assertTrue('dicom' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3481 self.assertTrue('dicom-until-pixel-data' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3482 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3483 self.assertEqual(1, len(aa)) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3484 self.assertEqual(aa, bb) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3485 self.assertTrue('dicom' in aa) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3486 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3487 # In Orthanc <= 1.9.0, this call deletes "dicom-as-json" |
87
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3488 DoPost(_REMOTE, '/tools/invalidate-tags', '', 'text/plain') |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3489 |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3490 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1) and IsDicomUntilPixelDataStored(_REMOTE): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3491 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3492 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3493 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3494 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3495 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3496 |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3497 # In Orthanc <= 1.9.0, this call reconstructs "dicom-as-json" |
87
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3498 self.assertEqual('BRAINIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % a)['PatientName']) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3499 self.assertEqual('KNEE', DoGet(_REMOTE, '/instances/%s/tags?simplify' % b)['PatientName']) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3500 |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3501 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1) and not IsDicomUntilPixelDataStored(_REMOTE): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3502 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3503 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3504 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3505 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % a))) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
3506 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/attachments' % b))) |
87
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3507 |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3508 |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3509 def test_private_tags(self): |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3510 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3511 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3512 self.assertEqual('1.2.840.113704.1.111.6320.1342451261.21', t['PET-CT Multi Modality Name']) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3513 self.assertEqual('p37s0_na_ctac.img', t['Original Image Filename']) |
4b24faec842b
test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
3514 |
92
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3515 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3516 def test_findscu_encoding(self): |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3517 # Check out ../Database/Encodings/Generate.sh |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3518 TEST = u'Test-éüäöòДΘĝדصķћ๛ネİ' |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3519 ENCODINGS = { |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3520 'Arabic' : [ 'ISO_IR 127' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3521 'Ascii' : [ 'ISO_IR 6' ], # More accurately, ISO 646 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3522 'Cyrillic' : [ 'ISO_IR 144' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3523 'Greek' : [ 'ISO_IR 126' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3524 'Hebrew' : [ 'ISO_IR 138' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3525 'Japanese' : [ 'ISO_IR 13', 'shift-jis' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3526 'Latin1' : [ 'ISO_IR 100' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3527 'Latin2' : [ 'ISO_IR 101' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3528 'Latin3' : [ 'ISO_IR 109' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3529 'Latin4' : [ 'ISO_IR 110' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3530 'Latin5' : [ 'ISO_IR 148' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3531 'Thai' : [ 'ISO_IR 166', 'tis-620' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3532 'Utf8' : [ 'ISO_IR 192' ], |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3533 } |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3534 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3535 for name in ENCODINGS.iterkeys(): |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3536 if len(ENCODINGS[name]) == 1: |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3537 ENCODINGS[name].append(name.lower()) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3538 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3539 UploadInstance(_REMOTE, 'Encodings/Lena-utf8.dcm') |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3540 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3541 for name in ENCODINGS.iterkeys(): |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3542 self.assertEqual(name, DoPut(_REMOTE, '/tools/default-encoding', name)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3543 self.assertEqual(name, DoGet(_REMOTE, '/tools/default-encoding')) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3544 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3545 i = CallFindScu([ '-k', '0008,0052=STUDY', |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3546 '-k', 'SpecificCharacterSet', |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3547 '-k', 'PatientName' ]) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3548 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3549 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3550 self.assertEqual(1, len(characterSet)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3551 self.assertEqual(ENCODINGS[name][0], characterSet[0].strip()) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3552 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3553 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3554 self.assertEqual(1, len(patientName)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3555 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3556 expected = TEST.encode(ENCODINGS[name][1], 'ignore') |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3557 self.assertEqual(expected, patientName[0].strip()) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3558 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3559 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3560 #for master in ENCODINGS: |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3561 for master in [ 'Latin1', 'Utf8', 'Cyrillic' ]: # Shortcut to speedup tests |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3562 self.assertEqual(master, DoPut(_REMOTE, '/tools/default-encoding', master)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3563 self.assertEqual(master, DoGet(_REMOTE, '/tools/default-encoding')) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3564 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3565 for name in ENCODINGS: |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3566 DropOrthanc(_REMOTE) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3567 UploadInstance(_REMOTE, 'Encodings/Lena-%s.dcm' % ENCODINGS[name][1]) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3568 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3569 i = CallFindScu([ '-k', '0008,0052=STUDY', |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3570 '-k', 'PatientID', |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3571 '-k', 'SpecificCharacterSet', |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3572 '-k', 'PatientName' ]) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3573 i = i.decode(ENCODINGS[master][1]) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3574 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3575 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3576 self.assertEqual(1, len(characterSet)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3577 self.assertEqual(ENCODINGS[master][0], characterSet[0].strip()) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3578 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3579 patientId = re.findall('\(0010,0020\).*?\[(.*?)\]', i) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3580 self.assertEqual(1, len(patientId)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3581 self.assertEqual(ENCODINGS[name][1], patientId[0].strip()) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3582 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3583 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3584 self.assertEqual(1, len(patientName)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3585 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3586 tmp = ENCODINGS[name][1] |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3587 expected = TEST.encode(tmp, 'ignore').decode(tmp) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3588 tmp = ENCODINGS[master][1] |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3589 expected = expected.encode(tmp, 'ignore').decode(tmp) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3590 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3591 self.assertEqual(expected, patientName[0].strip()) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3592 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3593 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3594 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True, |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3595 'Level' : 'Study', |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3596 'Query' : { }}) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3597 self.assertEqual(1, len(a)) |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3598 |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3599 tmp = ENCODINGS[name][1] |
dbcbffb889da
test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
89
diff
changeset
|
3600 self.assertEqual(TEST.encode(tmp, 'ignore').decode(tmp), a[0]["PatientMainDicomTags"]["PatientName"]) |
96
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3601 |
314 | 3602 # Back to UTF-8 |
3603 self.assertEqual('Utf8', DoPut(_REMOTE, '/tools/default-encoding', 'Utf8')) | |
3604 | |
96
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3605 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3606 def test_reconstruct(self): |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3607 def CompareMainDicomTag(expected, instance, level, tag): |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3608 self.assertEqual(expected, DoGet(_REMOTE, '/instances/%s/%s' % (instance, level))['MainDicomTags'][tag].strip()) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3609 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3610 a = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3611 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3612 studies = DoGet(_REMOTE, '/studies/') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3613 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/'))) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3614 self.assertEqual(1, len(studies)) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3615 self.assertEqual(1, len(DoGet(_REMOTE, '/series/'))) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3616 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/'))) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3617 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3618 modified = DoPost(_REMOTE, '/studies/%s/modify' % studies[0], { |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3619 "Replace" : { |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3620 "StudyDescription" : "hello", |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3621 "SeriesDescription" : "world", |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3622 "SOPClassUID" : "test", |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3623 "SOPInstanceUID" : "myid", |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3624 }, |
119 | 3625 "Keep" : [ "StudyInstanceUID", "SeriesInstanceUID" ], |
3626 "Force" : True | |
96
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3627 }) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3628 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3629 instances = DoGet(_REMOTE, '/instances/') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3630 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/'))) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3631 self.assertEqual(1, len(DoGet(_REMOTE, '/studies/'))) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3632 self.assertEqual(1, len(DoGet(_REMOTE, '/series/'))) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3633 self.assertEqual(2, len(instances)) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3634 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3635 b = instances[0] if instances[1] == a else instances[1] |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3636 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3637 CompareMainDicomTag('Knee (R)', a, 'study', 'StudyDescription') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3638 CompareMainDicomTag('AX. FSE PD', a, 'series', 'SeriesDescription') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3639 CompareMainDicomTag('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', a, '', 'SOPInstanceUID') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3640 CompareMainDicomTag('myid', b, '', 'SOPInstanceUID') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3641 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % a).strip()) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3642 self.assertEqual('test', DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % b).strip()) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3643 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3644 DoPost(_REMOTE, '/instances/%s/reconstruct' % b, {}) |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3645 |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3646 CompareMainDicomTag('hello', a, 'study', 'StudyDescription') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3647 CompareMainDicomTag('world', a, 'series', 'SeriesDescription') |
272d1229cb49
test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
95
diff
changeset
|
3648 CompareMainDicomTag('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', a, '', 'SOPInstanceUID') |
102 | 3649 |
104 | 3650 def test_httpClient_lua(self): |
3651 with open(GetDatabasePath('Lua/HttpClient.lua'), 'r') as f: | |
102 | 3652 result = DoPost(_REMOTE, '/tools/execute-script', f.read(), 'application/lua') |
3653 | |
3654 self.assertIn('OK', result) | |
107
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3655 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3656 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3657 def test_bitbucket_issue_44(self): |
319 | 3658 # https://bugs.orthanc-server.com/show_bug.cgi?id=44 |
107
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3659 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm') |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3660 UploadInstance(_REMOTE, 'Issue44/Monochrome2.dcm') |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3661 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3662 # dcmcjpeg +ua +eb Monochrome1.dcm Monochrome1-Jpeg.dcm |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3663 UploadInstance(_REMOTE, 'Issue44/Monochrome1-Jpeg.dcm') |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3664 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3665 # dcmcjpeg +ua Monochrome1.dcm Monochrome1-JpegLS.dcm |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3666 UploadInstance(_REMOTE, 'Issue44/Monochrome1-JpegLS.dcm') |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3667 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3668 monochrome1 = 'bcdd600a-a6a9c522-5f0a6e84-8657c9f3-b76e59b7' |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3669 monochrome1_jpeg = '9df82121-208a2da8-0038674a-3d7a773b-b7008cd2' |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3670 monochrome1_jpegls = '0486d1a2-9165573f-b1976b20-e927b016-6b8d67ab' |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3671 monochrome2 = 'f00947b7-f61f7164-c93414d1-c6fbda6a-9e92ed20' |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3672 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3673 for i in [ monochrome1, monochrome1_jpeg, monochrome1_jpegls ]: |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3674 im = GetImage(_REMOTE, '/instances/%s/preview' % i) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3675 self.assertEqual("L", im.mode) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3676 self.assertEqual(2010, im.size[0]) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3677 self.assertEqual(2446, im.size[1]) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3678 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3679 # This is the chest image, with MONOCHROME1. Raw background is |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3680 # white (255), should be rendered as black (0) => invert |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3681 if i == monochrome1_jpeg: |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3682 # Add some tolerance because of JPEG destructive compression |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3683 self.assertGreater(10, im.getpixel((0,0))) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3684 else: |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3685 self.assertEqual(0, im.getpixel((0,0))) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3686 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3687 im = GetImage(_REMOTE, '/instances/%s/preview' % monochrome2) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3688 self.assertEqual("L", im.mode) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3689 self.assertEqual(1572, im.size[0]) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3690 self.assertEqual(2010, im.size[1]) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3691 |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3692 # This is the key image, with MONOCHROME2. Raw background is |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3693 # white (255), should be rendered as white (255) |
fddb35f7289d
test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
104
diff
changeset
|
3694 self.assertEqual(255, im.getpixel((0,0))) |
111
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3695 |
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3696 |
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3697 def test_bitbucket_issue_42(self): |
319 | 3698 # https://bugs.orthanc-server.com/show_bug.cgi?id=42 |
123 | 3699 # This test fails on DCMTK 3.6.0, but succeeds in DCMTK 3.6.1 snapshots and DCMTK 3.6.2 |
111
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3700 UploadInstance(_REMOTE, 'Issue42.dcm')['ID'] |
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3701 modified = DoPost(_REMOTE, |
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3702 '/patients/da128605-e040d0c4-310615d2-3475da63-df2d1ef4/modify', |
119 | 3703 '{"Replace":{"PatientID":"Hello","PatientName":"Sample patient name"},"Force":true}', |
111
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3704 'application/json') |
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3705 self.assertTrue('PatientID' in modified) |
113
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3706 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3707 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3708 def test_rest_find_limit(self): |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3709 # Check the "Since" and "Limit" parameters in URI "/tools/find" |
319 | 3710 # Related to issue 53: https://bugs.orthanc-server.com/show_bug.cgi?id=53 |
111
7005cdeeb704
test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
107
diff
changeset
|
3711 |
113
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3712 # Upload 6 instances |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3713 brainix = [] |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3714 knee = [] |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3715 for i in range(2): |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3716 brainix.append(UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1)) ['ID']) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3717 brainix.append(UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1)) ['ID']) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3718 knee.append(UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1)) ['ID']) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3719 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3720 # Check using BRAINIX |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3721 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3722 'Query' : { 'PatientName' : 'B*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3723 'Limit' : 10 }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3724 self.assertEqual(4, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3725 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3726 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3727 'Query' : { 'PatientName' : 'B*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3728 'Limit' : 4 }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3729 self.assertEqual(4, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3730 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3731 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3732 'Query' : { 'PatientName' : 'B*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3733 'Since' : 2, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3734 'Limit' : 4 }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3735 self.assertEqual(2, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3736 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3737 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3738 'Query' : { 'PatientName' : 'B*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3739 'Limit' : 3 }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3740 self.assertEqual(3, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3741 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3742 b = [] |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3743 for i in range(4): |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3744 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3745 'Query' : { 'PatientName' : 'B*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3746 'Limit' : 1, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3747 'Since' : i }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3748 self.assertEqual(1, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3749 b.append(a[0]) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3750 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3751 # Check whether the two sets are equal through symmetric difference |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3752 self.assertEqual(0, len(set(b) ^ set(brainix))) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3753 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3754 # Check using KNEE |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3755 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3756 'Query' : { 'PatientName' : 'K*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3757 'Limit' : 10 }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3758 self.assertEqual(2, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3759 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3760 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3761 'Query' : { 'PatientName' : 'K*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3762 'Limit' : 2 }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3763 self.assertEqual(2, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3764 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3765 b = [] |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3766 for i in range(2): |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3767 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3768 'Query' : { 'PatientName' : 'K*' }, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3769 'Limit' : 1, |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3770 'Since' : i }) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3771 self.assertEqual(1, len(a)) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3772 b.append(a[0]) |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3773 |
3e5934363e76
test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
112
diff
changeset
|
3774 self.assertEqual(0, len(set(b) ^ set(knee))) |
115
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3775 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3776 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3777 def test_bitbucket_issue_46(self): |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3778 # "PHI remaining after anonymization" |
319 | 3779 # https://bugs.orthanc-server.com/show_bug.cgi?id=46 |
115
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3780 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3781 def GetAnonymizedTags(study, version): |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3782 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3783 { 'DicomVersion' : version }, |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3784 'application/json') ['ID'] |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3785 a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3786 self.assertEqual(1, len(a)) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3787 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3788 instance = a[0]['ID'] |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3789 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3790 return (instance, DoGet(_REMOTE, '/instances/%s/tags' % instance)) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3791 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3792 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm') |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3793 origStudy = '6068a14b-d4df27af-9ec22145-538772d8-74f228ff' |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3794 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3795 # Add the 0032,1033 (Requesting Service) and the 0010,1060 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3796 # (Patient's Mother's Birth Name) tags |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3797 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy, |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3798 '{"Replace":{"0010,1060":"OSIMIS","0032,1033":"MOTHER"}}', |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3799 'application/json')['ID'] |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3800 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3801 # Use Table E.1-1 from PS 3.15-2008 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3802 # https://raw.githubusercontent.com/jodogne/dicom-specification/master/2008/08_15pu.pdf |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3803 (instance, tags) = GetAnonymizedTags(newStudy, "2008") |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3804 self.assertTrue('0032,1033' in tags) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3805 self.assertTrue('0010,1060' in tags) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3806 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3807 # Use Table E.1-1 from PS 3.15-2011 (only if Orthanc >= 1.2.1) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3808 # https://raw.githubusercontent.com/jodogne/dicom-specification/master/2008/08_15pu.pdf |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3809 (instance, tags) = GetAnonymizedTags(newStudy, "2017c") |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3810 self.assertFalse('0032,1033' in tags) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3811 self.assertFalse('0010,1060' in tags) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3812 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3813 t = {} |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3814 for (key, value) in tags.iteritems(): |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3815 t[value['Name']] = value['Value'] |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3816 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3817 self.assertEqual('', t['StudyDate']) # Type 1 tag => cleared |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3818 self.assertEqual('', t['StudyTime']) # Type 1 tag => cleared |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3819 self.assertEqual('', t['PatientSex']) # Type 1 tag => cleared |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3820 self.assertFalse('SeriesDate' in t) # Type 3 tag => null |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3821 self.assertFalse('SeriesTime' in t) # Type 3 tag => null |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3822 |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3823 with tempfile.NamedTemporaryFile(delete = True) as f: |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3824 # Run "dciodvfy" on the anonymized file to be sure it is still valid |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3825 f.write(DoGet(_REMOTE, '/instances/%s/file' % instance)) |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3826 f.flush() |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3827 subprocess.check_output([ FindExecutable('dciodvfy'), f.name ], |
45ebfab035b7
test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
113
diff
changeset
|
3828 stderr = subprocess.STDOUT).split('\n') |
118
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3829 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3830 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3831 def test_bitbucket_issue_55(self): |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3832 def Run(modify, query): |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3833 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3834 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3835 operation = 'modify' if modify else 'anonymize' |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3836 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3837 self.assertRaises(Exception, lambda: DoPost( |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3838 _REMOTE, '/studies/%s/%s' % (study, operation), query)) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3839 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3840 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3841 query["Force"] = True |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3842 a = DoPost(_REMOTE, '/studies/%s/%s' % (study, operation), query)['Path'] |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3843 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3844 DoDelete(_REMOTE, a) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3845 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3846 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3847 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3848 UploadInstance(_REMOTE, 'DummyCT.dcm') |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3849 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0' |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3850 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3851 Run(True, { "Replace" : { "StudyInstanceUID" : "world" } }) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3852 Run(True, { "Replace" : { "SeriesInstanceUID" : "world" } }) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3853 Run(True, { "Replace" : { "SOPInstanceUID" : "world" } }) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3854 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3855 Run(False, { "Keep" : [ "StudyInstanceUID" ]}) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3856 Run(False, { "Keep" : [ "SeriesInstanceUID" ]}) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3857 Run(False, { "Keep" : [ "SOPInstanceUID" ]}) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3858 |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3859 Run(False, { "Replace" : { "StudyInstanceUID" : "world" } }) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3860 Run(False, { "Replace" : { "SeriesInstanceUID" : "world" } }) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3861 Run(False, { "Replace" : { "SOPInstanceUID" : "world" } }) |
a954c535fef6
test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
3862 |
120
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3863 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3864 def test_bitbucket_issue_56(self): |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3865 # Case-insensitive matching over accents. This test assumes |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3866 # that the "CaseSensitivePN" configuration option of Orthanc |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3867 # is set to "false" (default value). |
319 | 3868 # https://bugs.orthanc-server.com/show_bug.cgi?id=56 |
120
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3869 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3870 def Check(name, expected, expectedSensitive): |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3871 a = CallFindScu([ '-k', '0008,0005=ISO_IR 192', # Use UTF-8 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3872 '-k', '0008,0052=PATIENT', |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3873 '-k', 'PatientName=%s' % name ]) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3874 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', a) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3875 self.assertEqual(expected, len(patientNames)) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3876 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3877 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3878 'CaseSensitive' : False, |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3879 'Query' : { 'PatientName' : name }}) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3880 self.assertEqual(expected, len(a)) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3881 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3882 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3883 'CaseSensitive' : True, |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3884 'Query' : { 'PatientName' : name }}) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3885 self.assertEqual(expectedSensitive, len(a)) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3886 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3887 UploadInstance(_REMOTE, 'Encodings/Lena-latin1.dcm') |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3888 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3889 # WildcardConstraint |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3890 Check('TeSt*', 1, 0) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3891 Check('TeSt-a*', 0, 0) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3892 Check('TeSt-É*', 1, 0) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3893 Check('TeSt-é*', 1, 0) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3894 Check('Test-é*', 1, 1) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3895 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3896 # ListConstraint |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3897 Check('Test-éüäöò\\nope', 1, 1) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3898 Check('Test-ÉÜÄÖÒ\\nope', 1, 0) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3899 |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3900 # ValueConstraint |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3901 Check('Test-éüäöò', 1, 1) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3902 Check('Test-ÉÜÄÖÒ', 1, 0) |
fce08afe6b2d
test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
119
diff
changeset
|
3903 |
125 | 3904 |
3905 def test_gbk_alias(self): | |
3906 # https://groups.google.com/d/msg/orthanc-users/WMM8LMbjpUc/02-1f_yFCgAJ | |
3907 # This test fails on Orthanc <= 1.3.0 | |
3908 i = UploadInstance(_REMOTE, '2017-09-19-GBK-Tumashu.dcm')['ID'] | |
3909 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) | |
3910 self.assertEqual(tags['PatientName'], u'徐浩凯') | |
3911 self.assertEqual(tags['InstitutionName'], u'灌云县疾病预防控制中心') | |
126 | 3912 |
3913 | |
3914 def test_long_tag(self): | |
3915 i = UploadInstance(_REMOTE, 'DummyCTWithLongTag.dcm')['ID'] | |
3916 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe' | |
3917 | |
3918 tags = DoGet(_REMOTE, '/instances/%s/tags' % i) | |
3919 self.assertTrue('0018,1020' in tags) | |
3920 self.assertEqual('SoftwareVersions', tags['0018,1020']['Name']) | |
3921 self.assertEqual('TooLong', tags['0018,1020']['Type']) | |
3922 self.assertEqual(None, tags['0018,1020']['Value']) | |
3923 | |
3924 tags = DoGet(_REMOTE, '/instances/%s/tags?ignore-length=0018-1020' % i) | |
3925 self.assertTrue('0018,1020' in tags) | |
3926 self.assertEqual('SoftwareVersions', tags['0018,1020']['Name']) | |
3927 self.assertEqual('String', tags['0018,1020']['Type']) | |
3928 self.assertTrue(tags['0018,1020']['Value'].startswith('Lorem ipsum dolor sit amet')) | |
3929 | |
3930 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) | |
3931 self.assertTrue('SoftwareVersions' in tags) | |
3932 self.assertEqual(None, tags['SoftwareVersions']) | |
3933 self.assertTrue('HeartRate' in tags) | |
3934 self.assertEqual(474, int(tags['HeartRate'])) | |
3935 | |
3936 tags = DoGet(_REMOTE, '/instances/%s/simplified-tags' % i) | |
3937 self.assertTrue('SoftwareVersions' in tags) | |
3938 self.assertEqual(None, tags['SoftwareVersions']) | |
3939 | |
3940 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify&ignore-length=0018-1020' % i) | |
3941 self.assertTrue('SoftwareVersions' in tags) | |
3942 self.assertTrue(tags['SoftwareVersions'].startswith('Lorem ipsum dolor sit amet')) | |
3943 | |
3944 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify&ignore-length=SoftwareVersions' % i) | |
3945 self.assertTrue('SoftwareVersions' in tags) | |
3946 self.assertTrue(tags['SoftwareVersions'].startswith('Lorem ipsum dolor sit amet')) | |
3947 | |
3948 tags = DoGet(_REMOTE, '/series/%s/instances-tags' % series) | |
3949 self.assertEqual(1, len(tags)) | |
3950 self.assertTrue(i in tags.keys()) | |
3951 self.assertTrue('0018,1020' in tags[i]) | |
3952 self.assertEqual('TooLong', tags[i]['0018,1020']['Type']) | |
3953 | |
3954 tags = DoGet(_REMOTE, '/series/%s/instances-tags?ignore-length=SoftwareVersions' % series) | |
3955 self.assertEqual(1, len(tags)) | |
3956 self.assertTrue(i in tags.keys()) | |
3957 self.assertTrue('0018,1020' in tags[i]) | |
3958 self.assertEqual('String', tags[i]['0018,1020']['Type']) | |
3959 self.assertTrue(tags[i]['0018,1020']['Value'].startswith('Lorem ipsum dolor sit amet')) | |
3960 | |
127
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3961 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3962 def test_extended_media(self): |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3963 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3964 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3965 z = GetArchive(_REMOTE, '/patients/%s/media?extended' % DoGet(_REMOTE, '/patients')[0]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3966 self.assertEqual(2, len(z.namelist())) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3967 self.assertTrue('IMAGES/IM0' in z.namelist()) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3968 self.assertTrue('DICOMDIR' in z.namelist()) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3969 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3970 try: |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3971 os.remove('/tmp/DICOMDIR') |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3972 except: |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3973 # The file does not exist |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3974 pass |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3975 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3976 z.extract('DICOMDIR', '/tmp') |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3977 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ], |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3978 stderr = subprocess.STDOUT).split('\n') |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3979 self.assertEqual(5, len(a)) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3980 self.assertTrue(a[0].startswith('Warning')) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3981 self.assertEqual('BasicDirectory', a[1]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3982 self.assertTrue('not present in standard DICOM IOD' in a[2]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3983 self.assertTrue('not present in standard DICOM IOD' in a[3]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3984 self.assertEqual('', a[4]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3985 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3986 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ], |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3987 stderr = subprocess.STDOUT).split('\n') |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3988 self.assertEqual(1, len(a)) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3989 self.assertEqual('', a[0]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3990 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3991 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ]) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3992 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081908590448738', a) != None) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3993 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3994 # Check the presence of the series description (extended tag) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3995 self.assertTrue(re.search('T1W_aTSE', a) != None) |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3996 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3997 os.remove('/tmp/DICOMDIR') |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3998 |
1eea4d3a1ba9
test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
126
diff
changeset
|
3999 |
132
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4000 def test_anonymize_relationships_1(self): |
133
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4001 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4002 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm') |
132
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4003 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4004 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4005 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4006 '{}', |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4007 'application/json')['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4008 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4009 a = DoGet(_REMOTE, '/studies/%s/instances' % study) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4010 self.assertEqual(2, len(a)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4011 a1 = a[0]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4012 a2 = a[1]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4013 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4014 b = DoGet(_REMOTE, '/studies/%s/instances' % anonymized) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4015 self.assertEqual(2, len(b)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4016 b1 = b[0]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4017 b2 = b[1]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4018 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4019 SEQUENCE = '/instances/%s/content/ReferencedImageSequence' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4020 SOP = '/instances/%s/content/ReferencedImageSequence/%d/ReferencedSOPInstanceUID' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4021 CLASS = '/instances/%s/content/ReferencedImageSequence/%d/ReferencedSOPClassUID' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4022 FRAME = '/instances/%s/content/FrameOfReferenceUID' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4023 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4024 self.assertEqual(DoGet(_REMOTE, FRAME % a1), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4025 DoGet(_REMOTE, FRAME % a2)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4026 self.assertEqual(DoGet(_REMOTE, FRAME % b1), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4027 DoGet(_REMOTE, FRAME % b2)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4028 self.assertNotEqual(DoGet(_REMOTE, FRAME % a1), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4029 DoGet(_REMOTE, FRAME % b1)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4030 self.assertNotEqual(DoGet(_REMOTE, FRAME % a2), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4031 DoGet(_REMOTE, FRAME % b2)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4032 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4033 self.assertEqual(3, len(DoGet(_REMOTE, SEQUENCE % a1))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4034 self.assertEqual(3, len(DoGet(_REMOTE, SEQUENCE % a2))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4035 self.assertEqual(3, len(DoGet(_REMOTE, SEQUENCE % b1))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4036 self.assertEqual(3, len(DoGet(_REMOTE, SEQUENCE % b2))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4037 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4038 for i in range(3): |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4039 self.assertEqual(DoGet(_REMOTE, SOP % (a1, i)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4040 DoGet(_REMOTE, SOP % (a2, i))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4041 self.assertEqual(DoGet(_REMOTE, SOP % (b1, i)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4042 DoGet(_REMOTE, SOP % (b2, i))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4043 self.assertNotEqual(DoGet(_REMOTE, SOP % (a1, i)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4044 DoGet(_REMOTE, SOP % (b1, i))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4045 self.assertNotEqual(DoGet(_REMOTE, SOP % (a2, i)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4046 DoGet(_REMOTE, SOP % (b2, i))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4047 self.assertEqual(DoGet(_REMOTE, CLASS % (a1, i)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4048 DoGet(_REMOTE, CLASS % (b1, i))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4049 self.assertEqual(DoGet(_REMOTE, CLASS % (a2, i)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4050 DoGet(_REMOTE, CLASS % (b2, i))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4051 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4052 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4053 def test_anonymize_relationships_2(self): |
133
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4054 UploadInstance(_REMOTE, 'Comunix/Ct/IM-0001-0001.dcm') |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4055 UploadInstance(_REMOTE, 'Comunix/Ct/IM-0001-0002.dcm') |
132
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4056 study = '6c65289b-db2fcb71-7eaf73f4-8e12470c-a4d6d7cf' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4057 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4058 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4059 '{}', |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4060 'application/json')['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4061 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4062 a = DoGet(_REMOTE, '/studies/%s/instances' % study) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4063 self.assertEqual(2, len(a)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4064 a1 = a[0]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4065 a2 = a[1]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4066 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4067 b = DoGet(_REMOTE, '/studies/%s/instances' % anonymized) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4068 self.assertEqual(2, len(b)) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4069 b1 = b[0]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4070 b2 = b[1]['ID'] |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4071 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4072 SEQUENCE = '/instances/%s/content/SourceImageSequence' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4073 SOP = '/instances/%s/content/SourceImageSequence/%d/ReferencedSOPInstanceUID' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4074 CLASS = '/instances/%s/content/SourceImageSequence/%d/ReferencedSOPClassUID' |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4075 |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4076 self.assertEqual(1, len(DoGet(_REMOTE, SEQUENCE % a1))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4077 self.assertEqual(1, len(DoGet(_REMOTE, SEQUENCE % a2))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4078 self.assertEqual(1, len(DoGet(_REMOTE, SEQUENCE % b1))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4079 self.assertEqual(1, len(DoGet(_REMOTE, SEQUENCE % b2))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4080 self.assertEqual(DoGet(_REMOTE, SOP % (a1, 0)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4081 DoGet(_REMOTE, SOP % (a2, 0))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4082 self.assertEqual(DoGet(_REMOTE, SOP % (b1, 0)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4083 DoGet(_REMOTE, SOP % (b2, 0))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4084 self.assertNotEqual(DoGet(_REMOTE, SOP % (a1, 0)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4085 DoGet(_REMOTE, SOP % (b1, 0))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4086 self.assertNotEqual(DoGet(_REMOTE, SOP % (a2, 0)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4087 DoGet(_REMOTE, SOP % (b2, 0))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4088 self.assertEqual(DoGet(_REMOTE, CLASS % (a1, 0)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4089 DoGet(_REMOTE, CLASS % (b1, 0))) |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4090 self.assertEqual(DoGet(_REMOTE, CLASS % (a2, 0)), |
149144d854bb
Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
130
diff
changeset
|
4091 DoGet(_REMOTE, CLASS % (b2, 0))) |
133
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4092 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4093 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4094 def test_anonymize_relationships_3(self): |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4095 sr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/StructuredReports/IM0')['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4096 mr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/StructuredReports/IM631')['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4097 study = 'ef351eb2-c1147229-062736b8-35a151e3-e32d526b' |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4098 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4099 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4100 { "Keep" : [ "ContentSequence" ] }) ['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4101 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4102 a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4103 self.assertEqual(2, len(a)) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4104 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4105 if DoGet(_REMOTE, '/instances/%s/content/Modality' % a[0]['ID']) == 'SR': |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4106 sr2 = a[0]['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4107 mr2 = a[1]['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4108 else: |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4109 sr2 = a[1]['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4110 mr2 = a[0]['ID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4111 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4112 self.assertEqual(DoGet(_REMOTE, '/instances/%s/content/Modality' % sr1), |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4113 DoGet(_REMOTE, '/instances/%s/content/Modality' % sr2)) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4114 self.assertEqual(DoGet(_REMOTE, '/instances/%s/content/Modality' % mr1), |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4115 DoGet(_REMOTE, '/instances/%s/content/Modality' % mr2)) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4116 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4117 mrUid1 = DoGet(_REMOTE, '/instances/%s' % mr1)['MainDicomTags']['SOPInstanceUID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4118 mrUid2 = DoGet(_REMOTE, '/instances/%s' % mr2)['MainDicomTags']['SOPInstanceUID'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4119 mrSeries1 = DoGet(_REMOTE, '/instances/%s/content/SeriesInstanceUID' % mr1).strip('\x00') |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4120 mrSeries2 = DoGet(_REMOTE, '/instances/%s/content/SeriesInstanceUID' % mr2).strip('\x00') |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4121 mrStudy1 = DoGet(_REMOTE, '/instances/%s/content/StudyInstanceUID' % mr1).strip('\x00') |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4122 mrStudy2 = DoGet(_REMOTE, '/instances/%s/content/StudyInstanceUID' % mr2).strip('\x00') |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4123 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4124 PATH1 = '/instances/%s/content/CurrentRequestedProcedureEvidenceSequence' |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4125 PATH2 = PATH1 + '/0/ReferencedSeriesSequence' |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4126 PATH3 = PATH2 + '/0/ReferencedSOPSequence' |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4127 PATH4 = PATH3 + '/0/ReferencedSOPInstanceUID' |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4128 PATH5 = PATH3 + '/0/ReferencedSOPClassUID' |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4129 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4130 self.assertEqual(1, len(DoGet(_REMOTE, PATH1 % sr1))) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4131 self.assertEqual(1, len(DoGet(_REMOTE, PATH2 % sr1))) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4132 self.assertEqual(1, len(DoGet(_REMOTE, PATH3 % sr1))) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4133 self.assertEqual(DoGet(_REMOTE, PATH4 % sr1), mrUid1) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4134 self.assertEqual(mrSeries1, DoGet(_REMOTE, (PATH2 + '/0/SeriesInstanceUID') % sr1).strip('\x00')) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4135 self.assertEqual(mrStudy1, DoGet(_REMOTE, (PATH1 + '/0/StudyInstanceUID') % sr1).strip('\x00')) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4136 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4137 self.assertEqual(1, len(DoGet(_REMOTE, PATH1 % sr2))) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4138 self.assertEqual(1, len(DoGet(_REMOTE, PATH2 % sr2))) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4139 self.assertEqual(1, len(DoGet(_REMOTE, PATH3 % sr2))) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4140 self.assertEqual(DoGet(_REMOTE, PATH5 % sr1), DoGet(_REMOTE, PATH5 % sr2)) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4141 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4142 self.assertEqual(mrUid2, DoGet(_REMOTE, PATH4 % sr2).strip('\x00')) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4143 self.assertEqual(mrSeries2, DoGet(_REMOTE, (PATH2 + '/0/SeriesInstanceUID') % sr2).strip('\x00')) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4144 self.assertEqual(mrStudy2, DoGet(_REMOTE, (PATH1 + '/0/StudyInstanceUID') % sr2).strip('\x00')) |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4145 |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4146 content1 = DoGet(_REMOTE, '/instances/%s/tags?simplify' % sr1) ['ContentSequence'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4147 content2 = DoGet(_REMOTE, '/instances/%s/tags?simplify' % sr2) ['ContentSequence'] |
f0d4c4707e64
test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
132
diff
changeset
|
4148 self.assertEqual(str(content1), str(content2)) |
141
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4149 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4150 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4151 def test_bitbucket_issue_94(self): |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4152 # "a simple instance modification should not modify FrameOfReferenceUID + ..." |
319 | 4153 # https://bugs.orthanc-server.com/show_bug.cgi?id=94 |
141
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4154 i = UploadInstance(_REMOTE, 'Issue94.dcm')['ID'] |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4155 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4156 source = DoGet(_REMOTE, '/instances/%s/attachments/dicom/data' % i) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4157 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4158 modified = DoPost(_REMOTE, '/instances/%s/modify' % i, |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4159 { "Replace" : {"PatientID" : "toto"}, "Force": True}) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4160 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4161 anonymized = DoPost(_REMOTE, '/instances/%s/anonymize' % i) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4162 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4163 a = ExtractDicomTags(source, [ 'FrameOfReferenceUID' ]) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4164 self.assertEqual(1, len(a)) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4165 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4166 b = ExtractDicomTags(modified, [ 'FrameOfReferenceUID' ]) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4167 self.assertEqual(1, len(b)) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4168 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4169 c = ExtractDicomTags(anonymized, [ 'FrameOfReferenceUID' ]) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4170 self.assertEqual(1, len(c)) |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4171 |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4172 self.assertEqual(a, b) # Modified DICOM |
5de178abe4d8
test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
138
diff
changeset
|
4173 self.assertNotEqual(a, c) # Anonymized DICOM |
143
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4174 |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4175 |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4176 def test_metadata_origin(self): |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4177 # Upload using the REST API |
144
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4178 i = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID'] |
143
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4179 self.assertEqual('RestApi', DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4180 self.assertEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4181 self.assertNotEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteIP' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4182 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata/CalledAET' % i)) |
315 | 4183 |
4184 # "HttpUsername" is empty iff "AuthenticationEnabled" is "false" | |
4185 self.assertTrue(DoGet(_REMOTE, '/instances/%s/metadata/HttpUsername' % i) in [ '', 'alice' ]) | |
4186 | |
144
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4187 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % i) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4188 self.assertEqual('RestApi', m['Origin']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4189 self.assertEqual('', m['RemoteAET']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4190 self.assertNotEqual('', m['RemoteIP']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4191 self.assertFalse('CalledAET' in m) |
315 | 4192 self.assertTrue('HttpUsername' in m) |
4193 self.assertTrue(m['HttpUsername'] in [ '', 'alice' ]) | |
144
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4194 |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4195 self.assertEqual('1.2.840.10008.1.2.4.91', m['TransferSyntax']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4196 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', m['SopClassUid']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4197 self.assertEqual('1', m['IndexInSeries']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4198 self.assertTrue('ReceptionDate' in m) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4199 |
143
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4200 DoDelete(_REMOTE, '/instances/%s' % i) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4201 |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4202 # Upload using the DICOM protocol |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4203 subprocess.check_call([ FindExecutable('storescu'), |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4204 _REMOTE['Server'], str(_REMOTE['DicomPort']), |
144
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4205 GetDatabasePath('Knee/T1/IM-0001-0001.dcm'), |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4206 '-xw' ]) # Propose JPEG2000 |
143
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4207 self.assertEqual('DicomProtocol', DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4208 self.assertEqual('STORESCU', DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4209 self.assertNotEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteIP' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4210 self.assertEqual('ANY-SCP', DoGet(_REMOTE, '/instances/%s/metadata/CalledAET' % i)) |
28d50ffac07d
test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
142
diff
changeset
|
4211 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata/HttpUsername' % i)) |
144
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4212 |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4213 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % i) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4214 self.assertEqual('DicomProtocol', m['Origin']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4215 self.assertEqual('STORESCU', m['RemoteAET']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4216 self.assertNotEqual('', m['RemoteIP']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4217 self.assertEqual('ANY-SCP', m['CalledAET']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4218 self.assertFalse('HttpUsername' in m) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4219 |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4220 self.assertEqual('1.2.840.10008.1.2.4.91', m['TransferSyntax']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4221 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', m['SopClassUid']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4222 self.assertEqual('1', m['IndexInSeries']) |
7809fdf8056f
testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
4223 self.assertTrue('ReceptionDate' in m) |
147 | 4224 |
4225 | |
4226 def test_lua_deadlock(self): | |
4227 # Rana Asim Wajid (2018-07-14): "It does seem that the issue | |
4228 # is with the lua script I'm using for conversion of images to | |
4229 # JPEG2000. When the script is used with 1.4.0 the first | |
4230 # instance appears to be stored and then everything just | |
4231 # halts, ie Orthanc wont respond to anything after that." | |
4232 # https://groups.google.com/d/msg/orthanc-users/Rc-Beb42xc8/JUgdzrmCAgAJ | |
174 | 4233 InstallLuaScriptFromPath(_REMOTE, 'Lua/Jpeg2000Conversion.lua') |
147 | 4234 |
4235 subprocess.check_call([ FindExecutable('storescu'), | |
4236 _REMOTE['Server'], str(_REMOTE['DicomPort']), | |
4237 GetDatabasePath('Brainix/Flair/IM-0001-0001.dcm'), | |
4238 GetDatabasePath('Brainix/Flair/IM-0001-0002.dcm'), | |
4239 ]) | |
4240 | |
4241 instances = DoGet(_REMOTE, '/instances') | |
4242 self.assertEqual(2, len(instances)) | |
4243 | |
4244 t1 = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % instances[0]) | |
4245 t2 = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % instances[1]) | |
175 | 4246 self.assertEqual('1.2.840.10008.1.2.4.90', t1) # this will fail if libgdcm-tools is not installed |
147 | 4247 self.assertEqual(t1, t2); |
154
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4248 |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4249 |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4250 def test_find_group_length(self): |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4251 # Orthanc <= 1.4.1 fails to answer C-FIND queries that contain |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4252 # one of the Generic Group Length tags (*, 0x0000) |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4253 a = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4254 result = CallFindScu([ '-k', '0008,0052=STUDY', '-k', '0008,0000=80' ]) |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4255 self.assertFalse('UnableToProcess' in result) |
4a533d003080
test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
147
diff
changeset
|
4256 self.assertFalse('E:' in result) |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4257 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4258 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4259 def test_split(self): |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4260 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4261 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') |
254
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4262 knee1Sop = '1.3.46.670589.11.17521.5.0.3124.2008081908590448738' |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4263 knee2Sop = '1.3.46.670589.11.17521.5.0.3124.2008081909113806560' |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4264 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4265 t1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4266 t2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4267 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4268 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4269 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4270 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4271 info = DoGet(_REMOTE, '/studies/%s' % study) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4272 self.assertTrue('ReferringPhysicianName' in info['MainDicomTags']) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4273 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4274 job = MonitorJob2(_REMOTE, lambda: DoPost |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4275 (_REMOTE, '/studies/%s/split' % study, { |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4276 'Series' : [ t2 ], |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4277 'Replace' : { 'PatientName' : 'Hello' }, |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4278 'Remove' : [ 'ReferringPhysicianName' ], |
181 | 4279 'KeepSource' : False, |
4280 'Asynchronous' : True | |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4281 })) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4282 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4283 self.assertNotEqual(None, job) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4284 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4285 studies = set(DoGet(_REMOTE, '/studies')) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4286 self.assertEqual(2, len(studies)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4287 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4288 series = set(DoGet(_REMOTE, '/series')) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4289 self.assertEqual(2, len(series)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4290 self.assertTrue(t1 in series) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4291 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4292 study2 = DoGet(_REMOTE, '/jobs/%s' % job)['Content']['TargetStudy'] |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4293 self.assertTrue(study in studies) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4294 self.assertTrue(study2 in studies) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4295 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4296 info = DoGet(_REMOTE, '/studies/%s' % study2) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4297 self.assertTrue('Hello', info['PatientMainDicomTags']['PatientName']) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4298 self.assertFalse('ReferringPhysicianName' in info['MainDicomTags']) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4299 |
254
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4300 sopInstanceUids = set() |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4301 for i in DoGet(_REMOTE, '/instances?expand'): |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4302 sopInstanceUids.add(i['MainDicomTags']['SOPInstanceUID']) |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4303 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4304 self.assertTrue(knee1Sop in sopInstanceUids) |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4305 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4306 # Fails if Orthanc <= 1.5.7 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4307 self.assertFalse(knee2Sop in sopInstanceUids) # Because "KeepSource" is False |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4308 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4309 # One original instance is kept, another one is added because of the split |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4310 self.assertEqual(2, len(sopInstanceUids)) |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4311 |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4312 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4313 def test_merge(self): |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4314 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
254
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4315 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4316 kneeSop = '1.3.46.670589.11.17521.5.0.3124.2008081908590448738' |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4317 brainixSop = '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314079549' |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4318 knee = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4319 t1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4320 brainix = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4321 flair = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0' |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4322 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4323 self.assertEqual(2, len(DoGet(_REMOTE, '/studies'))) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4324 self.assertEqual(2, len(DoGet(_REMOTE, '/series'))) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4325 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4326 job = MonitorJob2(_REMOTE, lambda: DoPost |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4327 (_REMOTE, '/studies/%s/merge' % knee, { |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4328 'Resources' : [ brainix ], |
181 | 4329 'KeepSource' : True, |
4330 'Synchronous' : False | |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4331 })) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4332 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4333 self.assertNotEqual(None, job) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4334 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4335 studies = set(DoGet(_REMOTE, '/studies')) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4336 self.assertEqual(2, len(studies)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4337 self.assertTrue(knee in studies) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4338 self.assertTrue(brainix in studies) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4339 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4340 series = set(DoGet(_REMOTE, '/studies/%s' % knee)['Series']) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4341 self.assertTrue(t1 in series) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4342 series.remove(t1) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4343 self.assertEqual(1, len(series)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4344 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4345 instances = DoGet(_REMOTE, '/series/%s' % list(series)[0])['Instances'] |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4346 self.assertEqual(1, len(instances)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4347 merged = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0]) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4348 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4349 instances = DoGet(_REMOTE, '/series/%s' % t1)['Instances'] |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4350 self.assertEqual(1, len(instances)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4351 a = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0]) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4352 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4353 instances = DoGet(_REMOTE, '/series/%s' % flair)['Instances'] |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4354 self.assertEqual(1, len(instances)) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4355 b = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0]) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4356 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4357 tags = DoGet(_REMOTE, '/studies/%s' % knee) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4358 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4359 for key in tags['PatientMainDicomTags']: |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4360 self.assertEqual(a[key], merged[key]) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4361 if (key in b and key != 'PatientSex'): |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4362 self.assertNotEqual(a[key], b[key]) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4363 |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4364 for key in tags['MainDicomTags']: |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4365 # Not in the patient/study module |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4366 if (not key in [ 'InstitutionName', |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4367 'RequestingPhysician', |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4368 'RequestedProcedureDescription', ]): |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4369 self.assertEqual(a[key], merged[key]) |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4370 if (key in b): |
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4371 self.assertNotEqual(a[key], b[key]) |
254
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4372 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4373 sopInstanceUids = set() |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4374 for i in DoGet(_REMOTE, '/instances?expand'): |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4375 sopInstanceUids.add(i['MainDicomTags']['SOPInstanceUID']) |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4376 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4377 self.assertTrue(kneeSop in sopInstanceUids) |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4378 self.assertTrue(brainixSop in sopInstanceUids) |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4379 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4380 # Fails if Orthanc <= 1.5.7 |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4381 # The 2 original instances are kept, another one is added because of the merge |
05b77ade5e1d
test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
247
diff
changeset
|
4382 self.assertEqual(3, len(sopInstanceUids)) |
179
8a2dd77d4035
testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
177
diff
changeset
|
4383 |
187 | 4384 |
4385 def test_async_archive(self): | |
4386 # Testing the asynchronous generation of archives/medias (new | |
4387 # in Orthanc 1.4.3) | |
4388 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
4389 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
4390 | |
4391 kneeT1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285' | |
4392 kneeT2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59' | |
4393 | |
4394 job = MonitorJob2(_REMOTE, lambda: DoPost | |
4395 (_REMOTE, '/studies/%s/archive' % kneeT1, { | |
4396 'Synchronous' : False | |
4397 })) | |
4398 | |
4399 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job) | |
4400 self.assertEqual(1, len(z.namelist())) | |
4401 self.assertFalse('DICOMDIR' in z.namelist()) | |
4402 | |
354
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4403 info = DoGet(_REMOTE, '/jobs/%s' % job) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4404 self.assertEqual(0, info['Content']['ArchiveSizeMB']) # New in Orthanc 1.8.1 |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4405 self.assertEqual(1, info['Content']['InstancesCount']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4406 self.assertEqual(0, info['Content']['UncompressedSizeMB']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4407 |
187 | 4408 job2 = MonitorJob2(_REMOTE, lambda: DoPost |
4409 (_REMOTE, '/studies/%s/media' % kneeT1, { | |
4410 'Synchronous' : False | |
4411 })) | |
4412 | |
4413 # The archive from the first job has been replaced by the | |
4414 # archive from second job (as MediaArchiveSize == 1) | |
4415 self.assertRaises(Exception, lambda: GetArchive(_REMOTE, '/jobs/%s/archive' % job)) | |
4416 | |
4417 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job2) | |
4418 self.assertEqual(2, len(z.namelist())) | |
4419 self.assertTrue('DICOMDIR' in z.namelist()) | |
4420 | |
354
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4421 info = DoGet(_REMOTE, '/jobs/%s' % job2) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4422 self.assertEqual(0, info['Content']['ArchiveSizeMB']) # New in Orthanc 1.8.1 |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4423 self.assertEqual(1, info['Content']['InstancesCount']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4424 self.assertEqual(0, info['Content']['UncompressedSizeMB']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4425 |
187 | 4426 job = MonitorJob2(_REMOTE, lambda: DoPost |
4427 (_REMOTE, '/tools/create-archive', { | |
4428 'Synchronous' : False, | |
4429 'Resources' : [ kneeT1, kneeT2 ], | |
4430 })) | |
4431 | |
4432 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job) | |
4433 self.assertEqual(2, len(z.namelist())) | |
4434 self.assertFalse('DICOMDIR' in z.namelist()) | |
4435 | |
354
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4436 info = DoGet(_REMOTE, '/jobs/%s' % job) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4437 self.assertEqual(0, info['Content']['ArchiveSizeMB']) # New in Orthanc 1.8.1 |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4438 self.assertEqual(2, info['Content']['InstancesCount']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4439 self.assertEqual(0, info['Content']['UncompressedSizeMB']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4440 |
187 | 4441 job = MonitorJob2(_REMOTE, lambda: DoPost |
4442 (_REMOTE, '/tools/create-media', { | |
4443 'Synchronous' : False, | |
4444 'Resources' : [ kneeT1, kneeT2 ], | |
4445 })) | |
4446 | |
4447 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job) | |
4448 self.assertEqual(3, len(z.namelist())) | |
4449 self.assertTrue('DICOMDIR' in z.namelist()) | |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4450 |
354
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4451 self.assertEqual(0, info['Content']['ArchiveSizeMB']) # New in Orthanc 1.8.1 |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4452 self.assertEqual(2, info['Content']['InstancesCount']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4453 self.assertEqual(0, info['Content']['UncompressedSizeMB']) |
88f076b906ca
test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
4454 |
187 | 4455 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4456 def test_queries_hierarchy(self): |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4457 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4458 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4459 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4460 tags = { |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4461 'NumberOfPatientRelatedInstances' : '', |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4462 'NumberOfPatientRelatedSeries' : '', |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4463 'NumberOfPatientRelatedStudies' : '', |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4464 'NumberOfStudyRelatedInstances' : '', |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4465 'NumberOfStudyRelatedSeries' : '', |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4466 'NumberOfSeriesRelatedInstances' : '', |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4467 } |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4468 |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4469 tags2 = copy.copy(tags) |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4470 tags2['PatientID'] = '887' # Only consider the "Knee" patient |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4471 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4472 patient = DoPost(_REMOTE, '/modalities/self/query', { |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4473 'Level' : 'Patient', |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4474 'Query' : tags2 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4475 }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4476 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4477 study = DoPost(_REMOTE, '/modalities/self/query', { |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4478 'Level' : 'Study', |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4479 'Query' : tags2 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4480 }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4481 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4482 series = DoPost(_REMOTE, '/modalities/self/query', { |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4483 'Level' : 'Series', |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4484 'Query' : tags2 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4485 }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4486 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4487 instance = DoPost(_REMOTE, '/modalities/self/query', { |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4488 'Level' : 'Instance', |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4489 'Query' : tags2 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4490 }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4491 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4492 p = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % patient) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4493 self.assertEqual(1, len(p)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4494 self.assertEqual('887', p[0]['PatientID']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4495 self.assertEqual('1', p[0]['NumberOfPatientRelatedInstances']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4496 self.assertEqual('1', p[0]['NumberOfPatientRelatedSeries']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4497 self.assertEqual('1', p[0]['NumberOfPatientRelatedStudies']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4498 self.assertFalse('NumberOfStudyRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4499 self.assertFalse('NumberOfStudyRelatedSeries' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4500 self.assertFalse('NumberOfSeriesRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4501 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4502 p = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % study) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4503 self.assertEqual(1, len(p)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4504 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', p[0]['StudyInstanceUID']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4505 self.assertEqual('1', p[0]['NumberOfStudyRelatedInstances']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4506 self.assertEqual('1', p[0]['NumberOfStudyRelatedSeries']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4507 self.assertFalse('NumberOfPatientRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4508 self.assertFalse('NumberOfPatientRelatedSeries' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4509 self.assertFalse('NumberOfPatientRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4510 self.assertFalse('NumberOfSeriesRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4511 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4512 p = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4513 self.assertEqual(1, len(p)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4514 self.assertEqual('1.3.46.670589.11.17521.5.0.3124.2008081908564160709', p[0]['SeriesInstanceUID']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4515 self.assertEqual('1', p[0]['NumberOfSeriesRelatedInstances']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4516 self.assertFalse('NumberOfPatientRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4517 self.assertFalse('NumberOfPatientRelatedSeries' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4518 self.assertFalse('NumberOfPatientRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4519 self.assertFalse('NumberOfStudyRelatedInstances' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4520 self.assertFalse('NumberOfStudyRelatedSeries' in p[0]) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4521 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4522 p = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4523 self.assertEqual(1, len(p)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4524 self.assertEqual('1.3.46.670589.11.17521.5.0.3124.2008081908590448738', p[0]['SOPInstanceUID']) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4525 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4526 j = DoPost(_REMOTE, '/queries/%s/answers/0/query-studies' % patient, |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4527 { 'Query' : tags }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4528 self.assertEqual(DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % j), |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4529 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % study)) |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4530 |
188
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4531 j = DoPost(_REMOTE, '/queries/%s/answers/0/query-series' % patient, |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4532 { 'Query' : tags }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4533 self.assertEqual(DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % j), |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4534 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4535 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4536 j = DoPost(_REMOTE, '/queries/%s/answers/0/query-instances' % patient, |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4537 { 'Query' : tags }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4538 self.assertEqual(DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % j), |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4539 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4540 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4541 j = DoPost(_REMOTE, '/queries/%s/answers/0/query-series' % study, |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4542 { 'Query' : tags }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4543 self.assertEqual(DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % j), |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4544 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4545 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4546 j = DoPost(_REMOTE, '/queries/%s/answers/0/query-instances' % study, |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4547 { 'Query' : tags }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4548 self.assertEqual(DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % j), |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4549 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4550 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4551 j = DoPost(_REMOTE, '/queries/%s/answers/0/query-instances' % series, |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4552 { 'Query' : tags }) ['ID'] |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4553 self.assertEqual(DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % j), |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4554 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance)) |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4555 |
7d585263808b
new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
4556 |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4557 def test_dicom_disk_size(self): |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4558 dicomSize = 0 |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4559 |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4560 a = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID'] |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4561 isCompressed = (DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % a) != 0) |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4562 |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4563 for i in range(2): |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4564 p = 'Knee/T%d/IM-0001-0001.dcm' % (i + 1) |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4565 UploadInstance(_REMOTE, p) |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4566 dicomSize += os.path.getsize(GetDatabasePath(p)) |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4567 |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4568 s = DoGet(_REMOTE, '/patients/ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17/statistics') # Consider Knee patient |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4569 self.assertEqual(2, s['CountInstances']) |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4570 self.assertEqual(2, s['CountSeries']) |
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4571 self.assertEqual(1, s['CountStudies']) |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4572 |
189
11719f19bd62
test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
4573 self.assertEqual(dicomSize, int(s['DicomUncompressedSize'])) |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4574 |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4575 if isCompressed: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4576 self.assertGreater(dicomSize, int(s['DicomDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4577 self.assertGreater(s['UncompressedSize'], s['DiskSize']) |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4578 self.assertLess(dicomSize, int(s['UncompressedSize'])) |
379
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4579 else: |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4580 self.assertEqual(dicomSize, int(s['DicomDiskSize'])) |
097329b67509
fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
4581 self.assertEqual(s['UncompressedSize'], s['DiskSize']) |
380
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4582 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4583 if IsDicomUntilPixelDataStored(_REMOTE): |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4584 self.assertLess(dicomSize, int(s['UncompressedSize'])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4585 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4586 self.assertEqual(dicomSize, int(s['UncompressedSize'])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4587 else: |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4588 # In Orthanc <= 1.9.0, there is the "dicom-as-json" |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4589 # attachment in addition to the DICOM file |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4590 self.assertLess(dicomSize, int(s['UncompressedSize'])) |
b9adc7d06347
update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
4591 |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4592 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4593 def test_changes_2(self): |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4594 # More consistent behavior since Orthanc 1.5.2 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4595 # https://groups.google.com/d/msg/orthanc-users/QhzB6vxYeZ0/YxabgqpfBAAJ |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4596 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4597 # Make sure that this is not the first change |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4598 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4599 a = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4600 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4601 DoDelete(_REMOTE, '/instances/%s' % a) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4602 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4603 # No more instance, but there were previous changes |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4604 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4605 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4606 c = DoGet(_REMOTE, '/changes') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4607 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4608 self.assertTrue(c['Done']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4609 seq = c['Last'] |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4610 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4611 c = DoGet(_REMOTE, '/changes?last') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4612 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4613 self.assertTrue(c['Done']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4614 self.assertEqual(seq, c['Last']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4615 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4616 c = DoGet(_REMOTE, '/changes?since=%d' % (seq + 1000)) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4617 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4618 self.assertTrue(c['Done']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4619 self.assertEqual(seq, c['Last']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4620 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4621 # Add one instance |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4622 UploadInstance(_REMOTE, 'DummyCT.dcm') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4623 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4624 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4625 c = DoGet(_REMOTE, '/changes') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4626 self.assertEqual(4, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4627 self.assertTrue(c['Done']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4628 self.assertEqual(seq + 4, c['Last']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4629 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4630 c = DoGet(_REMOTE, '/changes?last') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4631 self.assertEqual(1, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4632 self.assertTrue(c['Done']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4633 self.assertEqual(seq + 4, c['Last']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4634 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4635 c = DoGet(_REMOTE, '/changes?since=%d' % (seq + 1000)) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4636 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4637 self.assertTrue(c['Done']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4638 self.assertEqual(seq + 4, c['Last']) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4639 |
389
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4640 # Add, then delete, one user-defined metadata: This triggers 2 |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4641 # changes of type "UpdatedMetadata" |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4642 i = DoGet(_REMOTE, '/instances') [0] |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4643 DoPut(_REMOTE, '/instances/%s/metadata/4000' % i, 'hello', 'text/plain') |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4644 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/metadata/4000' % i)) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4645 |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4646 c = DoGet(_REMOTE, '/changes?last') |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4647 self.assertEqual(1, len(c['Changes'])) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4648 self.assertTrue(c['Done']) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4649 self.assertEqual(seq + 5, c['Last']) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4650 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType']) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4651 |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4652 DoDelete(_REMOTE, '/instances/%s/metadata/4000' % i) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4653 c = DoGet(_REMOTE, '/changes?last') |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4654 self.assertEqual(1, len(c['Changes'])) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4655 self.assertTrue(c['Done']) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4656 self.assertEqual(seq + 6, c['Last']) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4657 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType']) |
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4658 |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4659 # Remove the uploaded instance |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4660 DoDelete(_REMOTE, '/instances/%s' % a) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4661 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4662 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4663 c = DoGet(_REMOTE, '/changes') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4664 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4665 self.assertTrue(c['Done']) |
389
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4666 self.assertEqual(seq + 6, c['Last']) |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4667 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4668 c = DoGet(_REMOTE, '/changes?last') |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4669 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4670 self.assertTrue(c['Done']) |
389
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4671 self.assertEqual(seq + 6, c['Last']) |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4672 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4673 c = DoGet(_REMOTE, '/changes?since=%d' % (seq + 1000)) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4674 self.assertEqual(0, len(c['Changes'])) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4675 self.assertTrue(c['Done']) |
389
27e0a2fcdc85
test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
4676 self.assertEqual(seq + 6, c['Last']) |
202
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4677 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4678 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4679 def test_bitbucket_issue_124(self): |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4680 a = UploadInstance(_REMOTE, 'Issue124.dcm')['ID'] |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4681 |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4682 z = GetArchive(_REMOTE, '/patients/%s/media' % a) |
f26f9ae9c599
test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
195
diff
changeset
|
4683 self.assertEqual(2, len(z.namelist())) |
207
a515eec74078
test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
202
diff
changeset
|
4684 |
a515eec74078
test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
202
diff
changeset
|
4685 |
a515eec74078
test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
202
diff
changeset
|
4686 def test_invalid_findscp(self): |
a515eec74078
test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
202
diff
changeset
|
4687 UploadInstance(_REMOTE, 'DummyCT.dcm') |
a515eec74078
test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
202
diff
changeset
|
4688 findscu = CallFindScu([ '-S', '-k', '8,52=IMAGE', '-k', '8,16', '-k', '2,2' ]) |
a515eec74078
test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
202
diff
changeset
|
4689 self.assertEqual(0, len(re.findall('\(0002,0002\)', findscu))) |
208
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4690 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4691 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4692 def test_bitbucket_issue_90(self): |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4693 def CountDicomResults(sex): |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4694 a = CallFindScu([ '-S', '-k', '8,52=STUDY', '-k', sex ]) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4695 return len(re.findall('\(0010,0040\)', a)) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4696 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4697 def CountRestResults(sex): |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4698 a = DoPost(_REMOTE, '/tools/find', |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4699 { 'Level' : 'Study', 'Query' : { 'PatientSex' : sex } }) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4700 return len(a) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4701 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4702 # Just like the "CR000000.dcm" of the issue, the test image |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4703 # "DummyCT.dcm" has the tag PatientSex (0010,0040) unset |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4704 UploadInstance(_REMOTE, 'DummyCT.dcm') |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4705 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4706 # Test that the behavior of DICOM vs. REST API is consistent on missing tags |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4707 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4708 # In wildcard constraints, the patient sex must be set for a match to occur |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4709 self.assertEqual(0, CountDicomResults('PatientSex=*')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4710 self.assertEqual(0, CountRestResults('*')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4711 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4712 # In single-valued constraints, the patient sex must be set |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4713 self.assertEqual(0, CountDicomResults('PatientSex=F')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4714 self.assertEqual(0, CountDicomResults('PatientSex=M')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4715 self.assertEqual(0, CountRestResults('F')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4716 self.assertEqual(0, CountRestResults('M')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4717 |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4718 # Empty constraints are only used to ask the actual value of |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4719 # the tag to be added to the *answer*. The tag should not used |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4720 # as a filter in such a situation. |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4721 self.assertEqual(1, CountDicomResults('PatientSex')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4722 self.assertEqual(1, CountDicomResults('PatientSex=')) |
2444c9a7c422
test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
207
diff
changeset
|
4723 self.assertEqual(1, CountRestResults('')) # This check fails on Orthanc <= 1.5.2 (issue 90) |
210
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4724 |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4725 |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4726 def test_rest_modalities_in_study(self): |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4727 # Tests a regression that is present in Orthanc 1.5.2 and 1.5.3 |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4728 # https://groups.google.com/d/msg/orthanc-users/7lZyG3wpx-M/uOXzAzVCFwAJ |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4729 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm') |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4730 |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4731 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4732 'Query' : { 'ModalitiesInStudy' : 'US' }}) |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4733 self.assertEqual(0, len(a)) |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4734 |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4735 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4736 'Query' : { 'ModalitiesInStudy' : 'US\\CT' }}) |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4737 self.assertEqual(1, len(a)) |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4738 |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4739 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4740 'Query' : { 'ModalitiesInStudy' : 'CT' }}) |
2c50c8f340c2
test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
208
diff
changeset
|
4741 self.assertEqual(1, len(a)) |
211 | 4742 |
4743 | |
4744 def test_series_status(self): | |
4745 def HasCompletedInChanges(): | |
4746 for c in DoGet(_REMOTE, '/changes?limit=1000&since=0')['Changes']: | |
4747 if c['ChangeType'] == 'CompletedSeries': | |
4748 return True; | |
4749 | |
4750 return False | |
4751 | |
4752 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm') | |
4753 series = '8ea120d7-5057d919-837dfbcc-ccd04e0f-7f3a94aa' | |
4754 self.assertEqual('Unknown', DoGet(_REMOTE, '/series/%s' % series)['Status']) | |
4755 self.assertFalse(HasCompletedInChanges()) | |
4756 | |
4757 series = 'ce25ecb6-ed79d004-5ae43ca7-3fc89bc5-67511614' | |
4758 | |
4759 for i in range(3): | |
4760 UploadInstance(_REMOTE, 'Series/Lena-%d.dcm' % (i + 1)) | |
4761 self.assertEqual('Missing', DoGet(_REMOTE, '/series/%s' % series)['Status']) | |
4762 self.assertFalse(HasCompletedInChanges()) | |
4763 | |
4764 UploadInstance(_REMOTE, 'Series/Lena-4.dcm') | |
4765 self.assertEqual('Complete', DoGet(_REMOTE, '/series/%s' % series)['Status']) | |
4766 self.assertTrue(HasCompletedInChanges()) | |
4767 | |
4768 DoDelete(_REMOTE, '/changes') | |
4769 self.assertFalse(HasCompletedInChanges()) | |
4770 | |
4771 UploadInstance(_REMOTE, 'Series/Lena-5.dcm') | |
4772 self.assertEqual('Inconsistent', DoGet(_REMOTE, '/series/%s' % series)['Status']) | |
4773 self.assertFalse(HasCompletedInChanges()) | |
4774 | |
215 | 4775 |
4776 def test_dicomweb(self): | |
4777 def Compare(dicom, reference): | |
4778 a = UploadInstance(_REMOTE, dicom) ['ID'] | |
4779 b = DoGet(_REMOTE, '/instances/%s/file' % a, | |
4780 headers = { 'Accept' : 'application/dicom+json' }) | |
4781 with open(GetDatabasePath(reference), 'rb') as c: | |
4782 d = json.load(c) | |
220 | 4783 AssertAlmostEqualRecursive(self, d, b) |
215 | 4784 |
4785 Compare('DummyCT.dcm', 'DummyCT.json') | |
4786 Compare('MarekLatin2.dcm', 'MarekLatin2.json') | |
4787 Compare('HierarchicalAnonymization/StructuredReports/IM0', | |
4788 'HierarchicalAnonymization/StructuredReports/IM0.json') | |
217 | 4789 |
4790 | |
4791 def test_issue_95_encodings(self): | |
319 | 4792 # https://bugs.orthanc-server.com/show_bug.cgi?id=95 |
217 | 4793 # Check out image: "../Database/Encodings/DavidClunie/charsettests.screenshot.png" |
4794 | |
4795 # Very useful tool: "file2" from package "file-kanji" | |
4796 | |
4797 def GetPatientName(dicom): | |
4798 i = UploadInstance(_REMOTE, dicom) ['ID'] | |
4799 j = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) | |
4800 return j['PatientName'] | |
4801 | |
4802 def ComparePatientName(name, dicom): | |
4803 self.assertEqual(name, GetPatientName(dicom)) | |
4804 | |
4805 # gdcmraw -t 10,10 -i SCSFREN -o /tmp/tag && uconv -f ISO-IR-100 -t UTF-8 /tmp/tag && echo | |
4806 ComparePatientName(u'Buc^Jérôme', 'Encodings/DavidClunie/SCSFREN') | |
4807 | |
4808 # gdcmraw -t 10,10 -i SCSI2 -o /tmp/tag && uconv -f KOREAN -t UTF-8 /tmp/tag && echo | |
4809 ComparePatientName(u'Hong^Gildong=洪^吉洞=홍^길동', 'Encodings/DavidClunie/SCSI2') # Since Orthanc 1.5.5 | |
4810 | |
4811 # gdcmraw -t 10,10 -i SCSX2 -o /tmp/tag && uconv -f GB18030 -t UTF-8 /tmp/tag && echo | |
4812 ComparePatientName(u'Wang^XiaoDong=王^小东=', 'Encodings/DavidClunie/SCSX2') | |
4813 | |
4814 # gdcmraw -t 10,10 -i SCSX1 -o /tmp/tag && cat /tmp/tag && echo | |
4815 ComparePatientName(u'Wang^XiaoDong=王^小東=', 'Encodings/DavidClunie/SCSX1') | |
4816 | |
4817 # gdcmraw -t 10,10 -i SCSH31 -o /tmp/tag && uconv -f JIS -t UTF-8 /tmp/tag && echo | |
4818 ComparePatientName(u'Yamada^Tarou=山田^太郎=やまだ^たろう', 'Encodings/DavidClunie/SCSH31') | |
4819 | |
4820 # gdcmraw -t 10,10 -i SCSGERM -o /tmp/tag && uconv -f ISO-IR-100 -t UTF-8 /tmp/tag && echo | |
4821 ComparePatientName(u'Äneas^Rüdiger', 'Encodings/DavidClunie/SCSGERM') | |
4822 | |
4823 # gdcmraw -t 10,10 -i SCSGREEK -o /tmp/tag && uconv -f ISO-IR-126 -t UTF-8 /tmp/tag && echo | |
4824 ComparePatientName(u'Διονυσιος', 'Encodings/DavidClunie/SCSGREEK') | |
4825 | |
4826 # gdcmraw -t 10,10 -i SCSRUSS -o /tmp/tag && uconv -f ISO-IR-144 -t UTF-8 /tmp/tag && echo | |
4827 ComparePatientName(u'Люкceмбypг', 'Encodings/DavidClunie/SCSRUSS') | |
4828 | |
4829 # gdcmraw -t 10,10 -i SCSHBRW -o /tmp/tag && uconv -f ISO-IR-138 -t UTF-8 /tmp/tag && echo | |
4830 # NB: Hebrew is a right-to-left encoding, copying/pasting from | |
4831 # Linux console into Emacs automatically reverse the string | |
4832 ComparePatientName(u'שרון^דבורה', 'Encodings/DavidClunie/SCSHBRW') | |
4833 | |
4834 # gdcmraw -t 10,10 -i SCSARAB -o /tmp/tag && uconv -f ISO-IR-127 -t UTF-8 /tmp/tag && echo | |
4835 # NB: Right-to-left as for Hebrew (SCSHBRW), and the Ubuntu console can't display such | |
4836 # characters by default, but copy/paste works with Emacs | |
4837 ComparePatientName(u'قباني^لنزار', 'Encodings/DavidClunie/SCSARAB') | |
4838 | |
4839 # SCSH32: This SpecificCharacterSet is composed of 2 | |
4840 # codepages: "ISO 2022 IR 13" (i.e. "SHIFT_JIS") until the | |
4841 # first equal, then "ISO 2022 IR 87" (i.e. "JIS") for the | |
4842 # remainer. Orthanc only takes into consideration the first | |
4843 # codepage: This is a limitation. | |
4844 # gdcmraw -t 10,10 -i SCSH32 -o /tmp/tag && cut -d '=' -f 1 /tmp/tag | uconv -f SHIFT_JIS -t UTF-8 | |
4845 self.assertTrue(GetPatientName('Encodings/DavidClunie/SCSH32').startswith(u'ヤマダ^タロウ=')) | |
218
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4846 |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4847 |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4848 def test_findscu_missing_tags(self): |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4849 # dcmodify -e Rows DummyCTInvalidRows.dcm -gst -gse -gin |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4850 UploadInstance(_REMOTE, 'DummyCT.dcm') |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4851 UploadInstance(_REMOTE, 'DummyCTInvalidRows.dcm') |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4852 |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4853 i = CallFindScu([ '-k', '0008,0052=IMAGES', '-k', 'Rows', '-k', 'PatientName' ]) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4854 |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4855 # We have 2 instances... |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4856 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4857 self.assertEqual(2, len(patientNames)) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4858 self.assertEqual('KNIX', patientNames[0]) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4859 self.assertEqual('KNIX', patientNames[1]) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4860 |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4861 # ...but only 1 value for the "Rows" tag |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4862 rows = re.findall('\(0028,0010\) US ([0-9]+)', i) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4863 self.assertEqual(1, len(rows)) |
70fba41776be
test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
217
diff
changeset
|
4864 self.assertEqual('512', rows[0]) |
219
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4865 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4866 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4867 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4868 def test_bitbucket_issue_131(self): |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4869 # "Orthanc PACS silently fails to C-MOVE due to duplicate |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4870 # StudyInstanceUID in it's database." |
319 | 4871 # https://bugs.orthanc-server.com/show_bug.cgi?id=131 |
219
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4872 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4873 # Insert 2 instances, with the same StudyInstanceUID, but with |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4874 # different patient IDs. Orthanc will create 2 distincts |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4875 # patients, and the hierarchy of resources above the two |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4876 # instances will be fully disjoint. |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4877 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-a.dcm') |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4878 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-b.dcm') |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4879 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4880 self.assertEqual(2, len(DoGet(_REMOTE, '/patients'))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4881 self.assertEqual(2, len(DoGet(_REMOTE, '/studies'))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4882 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4883 a = DoPost(_REMOTE, '/modalities/self/query', { |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4884 'Level' : 'Study', |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4885 'Query' : {"PatientID": "A" }})['ID'] |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4886 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4887 # 1 study is matched |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4888 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4889 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4890 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
220 | 4891 WaitAllNewJobsDone(_REMOTE, lambda: DoPost |
4892 (_REMOTE, '/queries/%s/retrieve' % a, | |
4893 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')) | |
219
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4894 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4895 # The two studies are matched, as we made the request at the |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4896 # Study level, thus the shared StudyInstanceUID is used as the key |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4897 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4898 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4899 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4900 # Match the 2 studies |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4901 a = DoPost(_REMOTE, '/modalities/self/query', { |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4902 'Level' : 'Study', |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4903 'Query' : {"StudyInstanceUID": "2.25.123" }})['ID'] |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4904 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4905 DropOrthanc(_LOCAL) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4906 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
220 | 4907 WaitAllNewJobsDone(_REMOTE, lambda: DoPost |
4908 (_REMOTE, '/queries/%s/retrieve' % a, | |
4909 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')) | |
219
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4910 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4911 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4912 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4913 # Same test, at the patient level => only 1 instance is transfered |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4914 a = DoPost(_REMOTE, '/modalities/self/query', { |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4915 'Level' : 'Patient', |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4916 'Query' : {"PatientID": "A" }})['ID'] |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4917 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4918 DropOrthanc(_LOCAL) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4919 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
220 | 4920 WaitAllNewJobsDone(_REMOTE, lambda: DoPost |
4921 (_REMOTE, '/queries/%s/retrieve' % a, | |
4922 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')) | |
219
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4923 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4924 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4925 |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4926 # Same test, at the series level => only 1 instance is transfered |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4927 a = DoPost(_REMOTE, '/modalities/self/query', { |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4928 'Level' : 'Series', |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4929 'Query' : {"PatientID": "A" }})['ID'] |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4930 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4931 DropOrthanc(_LOCAL) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4932 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
220 | 4933 WaitAllNewJobsDone(_REMOTE, lambda: DoPost |
4934 (_REMOTE, '/queries/%s/retrieve' % a, | |
4935 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')) | |
219
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4936 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
00e5aeea33dd
test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4937 |
233
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4938 |
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4939 def test_bitbucket_issue_136(self): |
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4940 UploadInstance(_REMOTE, 'Issue137.dcm') |
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4941 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', '0010,0010', '-k', '0028,0010', '-k', '0040,0275' ]) |
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4942 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i) |
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4943 self.assertEqual(1, len(patientNames)) |
ce0b19a2c807
test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
4944 self.assertEqual('John Doe', patientNames[0]) |
234
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4945 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4946 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4947 def test_anonymize_relationships_4(self): |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4948 # https://groups.google.com/d/msg/orthanc-users/UkcsqyTpszE/bXUpzU0vAAAJ |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4949 sr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/2019-03-28/CR000000.dcm')['ID'] |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4950 mr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/2019-03-28/PR000000.dcm')['ID'] |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4951 study = '0c923249-d52121a9-2b7167f7-6b85534f-0943697e' |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4952 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4953 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, '{}', |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4954 'application/json')['ID'] |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4955 series = DoGet(_REMOTE, '/studies/%s/series' % anonymized) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4956 self.assertEqual(2, len(series)) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4957 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4958 cr = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CR', series)) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4959 pr = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'PR', series)) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4960 self.assertEqual(1, len(cr)) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4961 self.assertEqual(1, len(pr)) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4962 self.assertEqual(1, len(cr[0]['Instances'])) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4963 self.assertEqual(1, len(pr[0]['Instances'])) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4964 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4965 crinstance = DoGet(_REMOTE, '/instances/%s' % cr[0]['Instances'][0]) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4966 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % pr[0]['Instances'][0]) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4967 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4968 self.assertEqual(tags['0008,1115'][0]['0008,1140'][0]['0008,1155'], |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4969 crinstance['MainDicomTags']['SOPInstanceUID']) |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4970 self.assertEqual(tags['0008,1115'][0]['0008,1140'][0]['0008,1150'], |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4971 '1.2.840.10008.5.1.4.1.1.1') # SOP class for CR Image Storage |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4972 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4973 # This fails on Orthanc <= 1.5.6 |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4974 self.assertEqual(tags['0008,1115'][0]['0020,000e'], |
93cd4fdd4a67
test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
4975 cr[0]['MainDicomTags']['SeriesInstanceUID']) |
235
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
4976 |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
4977 |
255
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4978 def test_anonymize_relationships_5(self): |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4979 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm') |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4980 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm') |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4981 oStudyId = ct1['ParentStudy'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4982 oCtInstanceId = ct1['ID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4983 oRtInstanceId = rt1['ID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4984 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4985 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4986 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4987 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4988 # first validate the relationships in the source data |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4989 oStudyUID = oCtTags['StudyInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4990 oRtSeriesUID = oRtTags['SeriesInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4991 oRtInstanceUID = oRtTags['SOPInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4992 oRtFrameOfReferenceUID = oRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4993 oCtSeriesUID = oCtTags['SeriesInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4994 oCtInstanceUID = oCtTags['SOPInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4995 oCtFrameOfReferenceUID = oCtTags['FrameOfReferenceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4996 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4997 oContourSequenceCount = len(oRtTags['ROIContourSequence'][0]['ContourSequence']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4998 self.assertEqual(oCtFrameOfReferenceUID, oRtFrameOfReferenceUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
4999 self.assertEqual(oStudyUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5000 self.assertEqual(oCtSeriesUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['SeriesInstanceUID']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5001 self.assertEqual(oCtInstanceUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['ContourImageSequence'][0]['ReferencedSOPInstanceUID']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5002 self.assertEqual(oCtInstanceUID, oRtTags['ROIContourSequence'][0]['ContourSequence'][oContourSequenceCount-1]['ContourImageSequence'][0]['ReferencedSOPInstanceUID']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5003 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5004 ### anonymize |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5005 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5006 aStudyId = DoPost(_REMOTE, '/studies/%s/anonymize' % oStudyId, '{}', |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5007 'application/json')['ID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5008 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5009 ### validate |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5010 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5011 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5012 self.assertEqual(2, len(aSeries)) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5013 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5014 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries)) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5015 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries)) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5016 aCtInstanceId = aCt[0]['Instances'][0] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5017 aRtInstanceId = aRt[0]['Instances'][0] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5018 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5019 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5020 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5021 # now validate the relationships in the anonymized data |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5022 aStudyUID = aCtTags['StudyInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5023 aRtSeriesUID = aRtTags['SeriesInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5024 aRtInstanceUID = aRtTags['SOPInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5025 aRtFrameOfReferenceUID = aRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5026 aCtSeriesUID = aCtTags['SeriesInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5027 aCtInstanceUID = aCtTags['SOPInstanceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5028 aCtFrameOfReferenceUID = aCtTags['FrameOfReferenceUID'] |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5029 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5030 aContourSequenceCount = len(aRtTags['ROIContourSequence'][0]['ContourSequence']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5031 # make sure all UIDs have been updated |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5032 self.assertNotEqual(oStudyUID, aStudyUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5033 self.assertNotEqual(oRtSeriesUID, aRtSeriesUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5034 self.assertNotEqual(oRtInstanceUID, aRtInstanceUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5035 self.assertNotEqual(oRtFrameOfReferenceUID, aRtFrameOfReferenceUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5036 self.assertNotEqual(oCtSeriesUID, aCtSeriesUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5037 self.assertNotEqual(oCtInstanceUID, aCtInstanceUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5038 self.assertNotEqual(oCtFrameOfReferenceUID, aCtFrameOfReferenceUID) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5039 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5040 # validate the relationships |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5041 self.assertEqual(oContourSequenceCount, aContourSequenceCount) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5042 self.assertEqual(aCtFrameOfReferenceUID, aRtFrameOfReferenceUID) |
256 | 5043 self.assertEqual(aStudyUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID']) |
5044 self.assertEqual(aCtSeriesUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['SeriesInstanceUID']) | |
255
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5045 self.assertEqual(aCtInstanceUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['ContourImageSequence'][0]['ReferencedSOPInstanceUID']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5046 self.assertEqual(aCtInstanceUID, aRtTags['ROIContourSequence'][0]['ContourSequence'][aContourSequenceCount-1]['ContourImageSequence'][0]['ReferencedSOPInstanceUID']) |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5047 |
256 | 5048 def test_anonymize_relationships_5b(self): |
5049 # same test as previous one but, this time, we force the StudyInstanceUID | |
5050 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm') | |
5051 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm') | |
5052 oStudyId = ct1['ParentStudy'] | |
5053 oCtInstanceId = ct1['ID'] | |
5054 oRtInstanceId = rt1['ID'] | |
5055 | |
5056 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId) | |
5057 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId) | |
5058 | |
5059 ### anonymize while forcing the StudyInstanceUID | |
5060 | |
5061 aStudyId = DoPost(_REMOTE, '/studies/%s/anonymize' % oStudyId, '{ "Replace" : { "StudyInstanceUID" : "1.2.3.4"}, "Force": true}', | |
5062 'application/json')['ID'] | |
5063 | |
5064 ### validate | |
5065 | |
5066 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId) | |
5067 self.assertEqual(2, len(aSeries)) | |
5068 | |
5069 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries)) | |
5070 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries)) | |
5071 aCtInstanceId = aCt[0]['Instances'][0] | |
5072 aRtInstanceId = aRt[0]['Instances'][0] | |
5073 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId) | |
5074 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId) | |
5075 | |
5076 self.assertEqual("1.2.3.4", aCtTags['StudyInstanceUID']) | |
5077 self.assertEqual("1.2.3.4", aRtTags['StudyInstanceUID']) | |
5078 self.assertEqual("1.2.3.4", aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID']) | |
255
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5079 |
02c3d91b155c
added anonymization test for RTH data (currently failing)
amazy
parents:
254
diff
changeset
|
5080 |
235
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5081 def test_bitbucket_issue_140(self): |
266 | 5082 # "Modifying private tags with REST API changes VR from LO to |
267 | 5083 # UN." This test fails if DCMTK <= 3.6.1 (e.g. fails on Ubuntu 16.04). |
319 | 5084 # https://bugs.orthanc-server.com/show_bug.cgi?id=140 |
235
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5085 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID'] |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5086 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries'] |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5087 |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5088 target = DoPost(_REMOTE, '/series/%s/modify' % series, { |
266 | 5089 'Replace' : { 'RadioButton3' : 'aaabbbccc' }, |
5090 'PrivateCreator' : 'RadioLogic', # <= the trick is here | |
235
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5091 }, 'application/json') ['ID'] |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5092 |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5093 instances = DoGet(_REMOTE, '/series/%s/instances' % target) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5094 self.assertEqual(1, len(instances)) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5095 |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5096 tags = DoGet(_REMOTE, '/instances/%s/tags' % source) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5097 t = tags['4321,1012'] |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5098 self.assertEqual('String', t['Type']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5099 self.assertEqual('RadioButton3', t['Name']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5100 self.assertEqual('RadioLogic', t['PrivateCreator']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5101 self.assertEqual('jklmopq', t['Value']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5102 |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5103 tags = DoGet(_REMOTE, '/instances/%s/tags' % instances[0]['ID']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5104 t = tags['4321,1012'] |
327 | 5105 self.assertEqual('String', t['Type']) # This fails if DCMTK <= 3.6.1 |
235
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5106 self.assertEqual('RadioButton3', t['Name']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5107 self.assertEqual('RadioLogic', t['PrivateCreator']) |
9929e4af2b7a
test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
5108 self.assertEqual('aaabbbccc', t['Value']) |
236
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5109 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5110 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5111 def test_find_normalize(self): |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5112 # https://groups.google.com/d/msg/orthanc-users/AIwooGjsh94/YL28MNY4AgAJ |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5113 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5114 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5115 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5116 a = DoPost(_REMOTE, '/modalities/self/query', { |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5117 'Level' : 'Instance', |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5118 'Query' : { 'Rows' : '42' } |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5119 }) ['ID'] |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5120 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5121 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5122 self.assertEqual(1, len(b)) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5123 self.assertFalse('Rows' in b[0]) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5124 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5125 a = DoPost(_REMOTE, '/modalities/self/query', { |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5126 'Level' : 'Instance', |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5127 'Query' : { 'Rows' : '42' }, |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5128 'Normalize' : False |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5129 }) ['ID'] |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5130 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5131 b = DoGet(_REMOTE, '/queries/%s/answers' % a) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5132 self.assertEqual(0, len(b)) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5133 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5134 a = DoPost(_REMOTE, '/modalities/self/query', { |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5135 'Level' : 'Instance', |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5136 'Query' : { 'Rows' : '512' }, |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5137 'Normalize' : False |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5138 }) ['ID'] |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5139 |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5140 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5141 self.assertEqual(1, len(b)) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5142 self.assertTrue('Rows' in b[0]) |
2de1aec255ae
test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
5143 self.assertEqual('512', b[0]['Rows']) |
237 | 5144 |
5145 a = DoPost(_REMOTE, '/modalities/self/query', { | |
5146 'Level' : 'Instance', | |
5147 'Query' : { 'Rows' : '' }, | |
5148 'Normalize' : False | |
5149 }) ['ID'] | |
5150 | |
5151 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) | |
5152 self.assertEqual(1, len(b)) | |
5153 self.assertTrue('Rows' in b[0]) | |
5154 self.assertEqual('512', b[0]['Rows']) | |
5155 | |
5156 self.assertRaises(Exception, lambda: DoPost( | |
5157 _REMOTE, '/modalities/self/query', { | |
5158 'Level' : 'Instance', | |
5159 'Query' : { 'Rows' : '*' }, # Out-of-range value | |
5160 'Normalize' : False | |
5161 })) | |
243
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5162 |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5163 |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5164 def test_bitbucket_issue_141(self): |
319 | 5165 # https://bugs.orthanc-server.com/show_bug.cgi?id=141 |
243
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5166 a = UploadInstance(_REMOTE, 'Issue141.dcm') ['ID'] |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5167 study = '494c8037-b237f263-d8f15075-c8cb2280-daf39bd1' |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5168 |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5169 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f: |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5170 pdf = f.read() |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5171 |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5172 b = DoPost(_REMOTE, '/tools/create-dicom', { |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5173 'Parent' : study, |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5174 'Tags' : {}, |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5175 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf) |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5176 }) ['ID'] |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5177 |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5178 tagsA = DoGet(_REMOTE, '/instances/%s/tags?short' % a) |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5179 tagsB = DoGet(_REMOTE, '/instances/%s/tags?short' % b) |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5180 self.assertEqual(tagsA['0008,0005'], tagsB['0008,0005']) |
cccf697a4e13
test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
5181 self.assertEqual(tagsA['0008,1030'], tagsB['0008,1030']) |
247
1abdab0ba0e6
test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
243
diff
changeset
|
5182 |
1abdab0ba0e6
test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
243
diff
changeset
|
5183 |
1abdab0ba0e6
test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
243
diff
changeset
|
5184 def test_modifying_missing_patientid(self): |
1abdab0ba0e6
test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
243
diff
changeset
|
5185 # https://groups.google.com/d/msg/orthanc-users/aphG_h1AHVg/rfOTtTPTAgAJ |
1abdab0ba0e6
test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
243
diff
changeset
|
5186 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm') |
1abdab0ba0e6
test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
243
diff
changeset
|
5187 DoPost(_REMOTE, '/studies/0c4aca1d-c107a241-6659d6aa-594c674a-a468b94a/modify', {}) |
262 | 5188 |
5189 | |
5190 def test_log_level(self): | |
319 | 5191 # https://bugs.orthanc-server.com/show_bug.cgi?id=65 |
262 | 5192 original = DoGet(_REMOTE, '/tools/log-level') |
5193 | |
5194 DoPut(_REMOTE, '/tools/log-level', 'default') | |
5195 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level')) | |
5196 DoGet(_REMOTE, '/system') | |
5197 | |
5198 DoPut(_REMOTE, '/tools/log-level', 'verbose') | |
5199 self.assertEqual('verbose', DoGet(_REMOTE, '/tools/log-level')) | |
5200 DoGet(_REMOTE, '/system') | |
5201 | |
5202 DoPut(_REMOTE, '/tools/log-level', 'trace') | |
5203 self.assertEqual('trace', DoGet(_REMOTE, '/tools/log-level')) | |
5204 DoGet(_REMOTE, '/system') | |
5205 | |
5206 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/log-level', 'nope')) | |
5207 | |
5208 # Switch back to the original log level | |
5209 DoPut(_REMOTE, '/tools/log-level', original) | |
264
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5210 |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5211 |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5212 def test_upload_compressed(self): |
265 | 5213 # New in Orthanc 1.6.0 |
264
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5214 with open(GetDatabasePath('DummyCT.dcm.gz'), 'rb') as f: |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5215 d = f.read() |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5216 |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5217 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/instances', d, 'application/dicom')) |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5218 |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5219 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/instances', d, 'application/dicom', |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5220 headers = { 'Content-Encoding' : 'nope' })) |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5221 |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5222 a = DoPost(_REMOTE, '/instances', d, 'application/dicom', |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5223 headers = { 'Content-Encoding' : 'gzip' }) |
445f498bc1d4
test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
263
diff
changeset
|
5224 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', a['ID']) |
262 | 5225 |
5226 | |
263
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5227 def test_study_series_find_inconsistency(self): |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5228 # https://groups.google.com/forum/#!topic/orthanc-users/bLv6Z11COy0 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5229 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5230 def CountAnswers(query): |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5231 a = DoPost(_REMOTE, 'modalities/self/query', query) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5232 return len(DoGet(_REMOTE, '%s/answers' % a['Path'])) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5233 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5234 # This instance has "SeriesDescription" (0008,103e) tag, but no |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5235 # "ProtocolName" (0018,1030). Both of those tags are part of |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5236 # the "main DICOM tags" of Orthanc. |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5237 UploadInstance(_REMOTE, 'Issue137.dcm') |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5238 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5239 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5240 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5241 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5242 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5243 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5244 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5245 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5246 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5247 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5248 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5249 ## |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5250 ## "SeriesDescription" is present, and has VR "CS" => wildcard is allowed |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5251 ## http://dicom.nema.org/medical/dicom/2019e/output/chtml/part04/sect_C.2.2.2.4.html |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5252 ## |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5253 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5254 # At the study level, the "SeriesDescription" tag is not allowed, but |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5255 # is wiped out by the normalization |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5256 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5257 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5258 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5259 'SeriesDescription' : 'NOPE' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5260 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5261 'Normalize' : False |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5262 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5263 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5264 # This test fails on Orthanc <= 1.5.8 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5265 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5266 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5267 'SeriesDescription' : '*' # Wildcard matching => no match, as the tag is absent |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5268 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5269 'Normalize' : False |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5270 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5271 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5272 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5273 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5274 'SeriesDescription' : 'THIS^VALUE^IS^WIPED^OUT' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5275 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5276 'Normalize' : True |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5277 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5278 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5279 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5280 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5281 'SeriesDescription' : '*' # Matches, as wiped out by the normalization |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5282 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5283 'Normalize' : True |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5284 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5285 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5286 for normalize in [ True, False ]: |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5287 # At the series level, the "SeriesDescription" tag is allowed, and |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5288 # normalization has no effect |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5289 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5290 # "Universal matching" will match all entities, including |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5291 # those with the missing tag |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5292 # http://dicom.nema.org/medical/dicom/2019e/output/chtml/part04/sect_C.2.2.2.3.html |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5293 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5294 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5295 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5296 'SeriesDescription' : '' # Universal matching |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5297 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5298 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5299 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5300 # "Universal matching" will match all entities, including |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5301 # those with the missing tag |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5302 # http://dicom.nema.org/medical/dicom/2019e/output/chtml/part04/sect_C.2.2.2.3.html |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5303 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5304 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5305 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5306 'SeriesDescription' : '*' # Wildcard matching |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5307 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5308 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5309 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5310 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5311 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5312 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5313 'SeriesDescription' : '*model*' # The actual value is "STL model: intraop Report" |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5314 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5315 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5316 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5317 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5318 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5319 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5320 'SeriesDescription' : '*MISMATCHED^VALUE*' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5321 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5322 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5323 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5324 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5325 # Universal matching matches any instance, even if the |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5326 # query is at the study-level, and thus if "SeriesDescription" |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5327 # makes no sense |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5328 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5329 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5330 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5331 'SeriesDescription' : '' # Universal matching |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5332 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5333 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5334 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5335 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5336 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5337 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5338 ## |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5339 ## "ProtocolName" is absent, and has VR "CS" => wildcard is allowed |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5340 ## |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5341 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5342 # At the study level, the "ProtocolName" tag is not allowed, but |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5343 # is wiped out by the normalization |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5344 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5345 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5346 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5347 'ProtocolName' : 'NOPE' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5348 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5349 'Normalize' : False |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5350 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5351 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5352 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5353 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5354 'ProtocolName' : '*' # Wildcard matching => no match, as the tag is absent |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5355 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5356 'Normalize' : False |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5357 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5358 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5359 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5360 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5361 'ProtocolName' : 'THIS^VALUE^IS^WIPED^OUT' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5362 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5363 'Normalize' : True |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5364 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5365 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5366 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5367 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5368 'ProtocolName' : '*' # Matches, as wiped out by the normalization |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5369 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5370 'Normalize' : True |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5371 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5372 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5373 for normalize in [ True, False ]: |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5374 # At the series level, the "ProtocolName" tag is allowed, and |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5375 # normalization has no effect |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5376 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5377 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5378 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5379 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5380 'ProtocolName' : '' # Universal matching |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5381 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5382 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5383 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5384 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5385 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5386 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5387 'ProtocolName' : '*' # Wildcard matching => no match, as the tag is absent |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5388 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5389 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5390 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5391 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5392 'Level' : 'Series', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5393 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5394 'ProtocolName' : '*MISMATCHED^VALUE*' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5395 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5396 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5397 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5398 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5399 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5400 'Level' : 'Study', |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5401 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5402 'ProtocolName' : '' # Universal matching |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5403 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5404 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5405 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5406 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5407 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5408 ## |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5409 ## "StudyInstanceUID" is present, and has VR "UI" => wildcard is not allowed |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5410 ## |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5411 |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5412 for level in [ 'Study', 'Series' ] : |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5413 for normalize in [ True, False ]: |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5414 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5415 'Level' : level, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5416 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5417 'StudyInstanceUID' : '' # Universal matching |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5418 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5419 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5420 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5421 self.assertEqual(0, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5422 'Level' : level, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5423 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5424 'StudyInstanceUID' : 'MISMATCHED^VALUE' |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5425 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5426 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5427 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5428 self.assertEqual(1, CountAnswers({ |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5429 'Level' : level, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5430 'Query' : { |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5431 'StudyInstanceUID' : '4.5.6' # This is the actual value |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5432 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5433 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5434 })) |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5435 |
269 | 5436 # Wildcard matching is not allowed for this VR |
263
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5437 # This test fails on Orthanc <= 1.5.8 |
269 | 5438 self.assertRaises(Exception, lambda: CountAnswers({ |
263
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5439 'Level' : level, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5440 'Query' : { |
269 | 5441 'StudyInstanceUID' : '*' |
263
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5442 }, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5443 'Normalize' : normalize, |
a2719263fd04
test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
5444 })) |
265 | 5445 |
5446 | |
5447 def test_rendered(self): | |
5448 # New in Orthanc 1.6.0 | |
5449 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID'] | |
5450 im = GetImage(_REMOTE, '/instances/%s/rendered' % i) | |
5451 self.assertEqual("RGB", im.mode) | |
5452 self.assertEqual(41, im.size[0]) | |
5453 self.assertEqual(41, im.size[1]) | |
5454 | |
5455 # http://effbot.org/zone/pil-comparing-images.htm | |
5456 truth = Image.open(GetDatabasePath('ColorTestMalaterre.png')) | |
5457 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None) | |
5458 | |
5459 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10' % i) | |
5460 self.assertEqual("RGB", im.mode) | |
5461 self.assertEqual(10, im.size[0]) | |
5462 self.assertEqual(10, im.size[1]) | |
5463 | |
5464 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10' % i) | |
5465 self.assertEqual("RGB", im.mode) | |
5466 self.assertEqual(10, im.size[0]) | |
5467 self.assertEqual(10, im.size[1]) | |
5468 | |
5469 im = GetImage(_REMOTE, '/instances/%s/rendered?height=128' % i) | |
5470 self.assertEqual("RGB", im.mode) | |
5471 self.assertEqual(128, im.size[0]) | |
5472 self.assertEqual(128, im.size[1]) | |
5473 | |
5474 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10&smooth=0' % i) | |
5475 self.assertEqual("RGB", im.mode) | |
5476 self.assertEqual(10, im.size[0]) | |
5477 self.assertEqual(10, im.size[1]) | |
5478 | |
5479 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10&smooth=1' % i) | |
5480 self.assertEqual("RGB", im.mode) | |
5481 self.assertEqual(10, im.size[0]) | |
5482 self.assertEqual(10, im.size[1]) | |
5483 | |
5484 im = GetImage(_REMOTE, '/instances/%s/rendered?height=5&width=10' % i) | |
5485 self.assertEqual("RGB", im.mode) | |
5486 self.assertEqual(5, im.size[0]) | |
5487 self.assertEqual(5, im.size[1]) | |
5488 | |
5489 | |
5490 # Grayscale image | |
5491 i = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] | |
5492 im = GetImage(_REMOTE, '/instances/%s/rendered' % i) | |
5493 self.assertEqual("L", im.mode) | |
5494 self.assertEqual(288, im.size[0]) | |
5495 self.assertEqual(288, im.size[1]) | |
5496 self.assertEqual(0, im.getpixel((0, 0))) | |
5497 | |
5498 # Those are the original windowing parameters that are written | |
5499 # inside the DICOM file | |
5500 im2 = GetImage(_REMOTE, '/instances/%s/rendered?window-center=248.009544468547&window-width=431.351843817788' % i) | |
5501 self.assertEqual("L", im2.mode) | |
5502 self.assertEqual(288, im2.size[0]) | |
5503 self.assertEqual(288, im2.size[1]) | |
5504 self.assertTrue(ImageChops.difference(im, im2).getbbox() is None) | |
5505 | |
5506 im = GetImage(_REMOTE, '/instances/%s/rendered?width=512&smooth=0' % i) | |
5507 self.assertEqual("L", im.mode) | |
5508 self.assertEqual(512, im.size[0]) | |
5509 self.assertEqual(512, im.size[1]) | |
5510 | |
5511 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&smooth=0' % i) | |
5512 self.assertEqual("L", im.mode) | |
5513 self.assertEqual(10, im.size[0]) | |
5514 self.assertEqual(10, im.size[1]) | |
5515 | |
5516 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&smooth=1' % i) | |
5517 self.assertEqual("L", im.mode) | |
5518 self.assertEqual(10, im.size[0]) | |
5519 self.assertEqual(10, im.size[1]) | |
5520 | |
5521 im = GetImage(_REMOTE, '/instances/%s/rendered?width=1&window-center=-1000' % i) | |
5522 self.assertEqual("L", im.mode) | |
5523 self.assertEqual(1, im.size[0]) | |
5524 self.assertEqual(1, im.size[1]) | |
5525 self.assertEqual(255, im.getpixel((0, 0))) | |
5526 | |
5527 im = GetImage(_REMOTE, '/instances/%s/rendered?width=1&window-center=1000' % i) | |
5528 self.assertEqual("L", im.mode) | |
5529 self.assertEqual(1, im.size[0]) | |
5530 self.assertEqual(1, im.size[1]) | |
5531 self.assertEqual(0, im.getpixel((0, 0))) | |
5532 | |
5533 | |
5534 # Test monochrome 1 | |
5535 i = UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')['ID'] | |
5536 im = GetImage(_REMOTE, '/instances/%s/rendered' % i) | |
5537 self.assertEqual("L", im.mode) | |
5538 self.assertEqual(2010, im.size[0]) | |
5539 self.assertEqual(2446, im.size[1]) | |
5540 self.assertEqual(0, im.getpixel((0, 0))) | |
5541 im = GetImage(_REMOTE, '/instances/%s/rendered?width=20' % i) | |
5542 self.assertEqual("L", im.mode) | |
5543 self.assertEqual(20, im.size[0]) | |
5544 self.assertEqual(24, im.size[1]) | |
5545 im = GetImage(_REMOTE, '/instances/%s/rendered?height=24' % i) | |
5546 self.assertEqual("L", im.mode) | |
5547 self.assertEqual(20, im.size[0]) | |
5548 self.assertEqual(24, im.size[1]) | |
5549 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&height=24' % i) | |
5550 self.assertEqual("L", im.mode) | |
5551 self.assertEqual(10, im.size[0]) | |
5552 self.assertEqual(12, im.size[1]) | |
5553 im = GetImage(_REMOTE, '/instances/%s/rendered?width=40&height=24' % i) | |
5554 self.assertEqual("L", im.mode) | |
5555 self.assertEqual(20, im.size[0]) | |
5556 self.assertEqual(24, im.size[1]) | |
268
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5557 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5558 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5559 def test_bitbucket_issue_154(self): |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5560 # "Matching against list of UID-s by C-MOVE" |
319 | 5561 # https://bugs.orthanc-server.com/show_bug.cgi?id=154 |
268
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5562 a = UploadInstance(_REMOTE, 'Issue154-d1.dcm') ['ID'] |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5563 b = UploadInstance(_REMOTE, 'Issue154-d2.dcm') ['ID'] |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5564 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5565 study = '1.2.826.0.1.3680043.8.498.35214236271657363033644818354280454731' |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5566 series1 = '1.2.826.0.1.3680043.8.498.12243321927795467590791662266352305113' |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5567 series2 = '1.2.826.0.1.3680043.8.498.43769499931624584079690260699536473555' |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5568 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5569 # C-FIND is working on list of UIDs |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5570 i = CallFindScu([ '-k', 'QueryRetrieveLevel=SERIES', |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5571 '-k', 'StudyInstanceUID=%s' % study, |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5572 '-k', 'SeriesInstanceUID=%s\\%s' % (series1, series2) ]) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5573 series = re.findall('\(0020,000e\).*?\[(.*?)\]', i) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5574 self.assertEqual(2, len(series)) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5575 self.assertTrue(series1 in series) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5576 self.assertTrue(series2 in series) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5577 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5578 # Individual retrieval is working in Orthanc < 1.6.0 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5579 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5580 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5581 '--study', '-k', 'QueryRetrieveLevel=SERIES', |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5582 '-k', 'StudyInstanceUID=%s' % study, |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5583 '-k', 'SeriesInstanceUID=%s' % series1, |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5584 ]))) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5585 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5586 '--study', '-k', 'QueryRetrieveLevel=SERIES', |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5587 '-k', 'StudyInstanceUID=%s' % study, |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5588 '-k', 'SeriesInstanceUID=%s' % series2, |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5589 ]))) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5590 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5591 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5592 DropOrthanc(_LOCAL) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5593 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5594 # But list matching is working only in Orthanc >= 1.6.0 |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5595 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5596 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5597 '--study', '-k', 'QueryRetrieveLevel=SERIES', |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5598 '-k', 'StudyInstanceUID=%s' % study, |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5599 '-k', 'SeriesInstanceUID=%s\\%s' % (series1, series2), |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5600 ]))) |
c8d79d8258cd
test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
267
diff
changeset
|
5601 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5602 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5603 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5604 def test_storage_commitment_api(self): |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5605 # Storage commitment is available since Orthanc 1.6.0 |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5606 |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5607 def WaitTransaction(uid): |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5608 while True: |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5609 s = DoGet(_REMOTE, '/storage-commitment/%s' % uid) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5610 if s['Status'] != 'Pending': |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5611 return s |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5612 else: |
342
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
5613 time.sleep(0.01) |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5614 |
281 | 5615 instance = UploadInstance(_REMOTE, 'DummyCT.dcm') |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5616 sopClassUid = '1.2.840.10008.5.1.4.1.1.4' |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5617 sopInstanceUid = '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5618 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5619 # Against self |
281 | 5620 transaction = DoPost(_REMOTE, '/modalities/self/storage-commitment', { |
5621 "DicomInstances" : [ [ sopClassUid, sopInstanceUid ] ], | |
5622 }) ['ID'] | |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5623 self.assertTrue(transaction.startswith('2.25.')) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5624 |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5625 result = WaitTransaction(transaction) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5626 self.assertEqual('ORTHANC', result['RemoteAET']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5627 self.assertEqual('Success', result['Status']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5628 self.assertEqual(1, len(result['Success'])) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5629 self.assertEqual(0, len(result['Failures'])) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5630 self.assertEqual(sopClassUid, result['Success'][0]['SOPClassUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5631 self.assertEqual(sopInstanceUid, result['Success'][0]['SOPInstanceUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5632 |
281 | 5633 tmp = DoPost(_REMOTE, '/modalities/self/storage-commitment', { |
5634 "DicomInstances" : [ | |
5635 { 'SOPClassUID' : sopClassUid, | |
5636 'SOPInstanceUID' : sopInstanceUid }, | |
5637 ], | |
5638 }) | |
5639 self.assertEqual(tmp['Path'], '/storage-commitment/%s' % tmp['ID']) | |
5640 self.assertEqual(result, WaitTransaction(transaction)) | |
5641 | |
5642 tmp = DoPost(_REMOTE, '/modalities/self/storage-commitment', { | |
5643 "Resources" : [ | |
5644 instance['ID'], | |
5645 instance['ParentSeries'], | |
5646 instance['ParentStudy'], | |
5647 instance['ParentPatient'], | |
5648 ] | |
5649 }) | |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5650 self.assertEqual(tmp['Path'], '/storage-commitment/%s' % tmp['ID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5651 self.assertEqual(result, WaitTransaction(transaction)) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5652 |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5653 |
281 | 5654 transaction = DoPost(_REMOTE, '/modalities/self/storage-commitment', { |
5655 "DicomInstances" : [ | |
5656 [ 'nope', 'nope2' ], | |
5657 [ sopClassUid, sopInstanceUid ], | |
5658 ], | |
5659 }) ['ID'] | |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5660 self.assertTrue(transaction.startswith('2.25.')) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5661 |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5662 result = WaitTransaction(transaction) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5663 self.assertEqual('ORTHANC', result['RemoteAET']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5664 self.assertEqual('Failure', result['Status']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5665 self.assertEqual(1, len(result['Success'])) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5666 self.assertEqual(1, len(result['Failures'])) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5667 self.assertEqual(sopClassUid, result['Success'][0]['SOPClassUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5668 self.assertEqual(sopInstanceUid, result['Success'][0]['SOPInstanceUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5669 self.assertEqual('nope', result['Failures'][0]['SOPClassUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5670 self.assertEqual('nope2', result['Failures'][0]['SOPInstanceUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5671 self.assertEqual(274, result['Failures'][0]['FailureReason']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5672 |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5673 # Cannot remove items from a failed storage commitment transaction |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5674 self.assertRaises(Exception, lambda: |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5675 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction)) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5676 |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5677 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5678 # Against Orthanc 0.8.6, that does not support storage commitment |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5679 self.assertRaises(Exception, lambda: |
281 | 5680 DoPost(_REMOTE, '/modalities/orthanctest/storage-commitment', { |
5681 "DicomInstances" : [ | |
5682 [ sopClassUid, sopInstanceUid ], | |
5683 ] | |
5684 })) | |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5685 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5686 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5687 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5688 def test_storage_commitment_store(self): |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5689 # Storage commitment is available since Orthanc 1.6.0 |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5690 |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5691 def WaitTransaction(uid): |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5692 while True: |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5693 s = DoGet(_REMOTE, '/storage-commitment/%s' % uid) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5694 if s['Status'] != 'Pending': |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5695 return s |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5696 else: |
342
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
5697 time.sleep(0.01) |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5698 |
279
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5699 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5700 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5701 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5702 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5703 # The Orthanc 0.8.6 from "_LOCAL" does not support storage commitment |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5704 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/orthanctest/store', { |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5705 'Resources' : [ i ], |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5706 'StorageCommitment' : True, |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5707 })) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5708 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5709 j = DoPost(_REMOTE, '/modalities/orthanctest/store', { |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5710 'Resources' : [ i ], |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5711 'StorageCommitment' : False, |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5712 }) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5713 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5714 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5715 j = DoPost(_REMOTE, '/modalities/self/store', { |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5716 'Resources' : [ i ], |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5717 'StorageCommitment' : True, |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5718 }) |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5719 |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5720 transaction = j['StorageCommitmentTransactionUID'] |
31e1e49df380
starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
5721 self.assertTrue(transaction.startswith('2.25.')) |
280
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5722 |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5723 result = WaitTransaction(transaction) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5724 self.assertEqual('ORTHANC', result['RemoteAET']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5725 self.assertEqual('Success', result['Status']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5726 self.assertEqual(1, len(result['Success'])) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5727 self.assertEqual(0, len(result['Failures'])) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5728 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', result['Success'][0]['SOPClassUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5729 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5730 result['Success'][0]['SOPInstanceUID']) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5731 |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5732 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5733 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction) |
5daa3896981c
testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
279
diff
changeset
|
5734 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
285
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5735 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5736 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5737 def test_store_straight(self): # New in Orthanc 1.6.1 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5738 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5739 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5740 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5741 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5742 dicom = f.read() |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5743 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5744 self.assertRaises(Exception, lambda: DoPost( |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5745 _REMOTE, '/modalities/orthanctest/store-straight', 'nope', 'nope')) |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5746 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5747 answer = DoPost(_REMOTE, '/modalities/orthanctest/store-straight', dicom, 'nope') |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5748 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5749 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5750 answer['SOPClassUID']) |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5751 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5752 answer['SOPInstanceUID']) |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5753 |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5754 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
281a32ecc5c1
test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
281
diff
changeset
|
5755 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
289
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5756 |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5757 |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5758 def test_storescu_transcoding(self): # New in Orthanc 1.7.0 |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5759 # Add a RLE-encoded DICOM file |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5760 i = UploadInstance(_REMOTE, 'TransferSyntaxes/1.2.840.10008.1.2.5.dcm')['ID'] |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5761 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5762 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5763 rleSize = len(DoGet(_REMOTE, '/instances/%s/file' % i)) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5764 |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5765 # Export the instance, with transcoding: "_REMOTE" is the |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5766 # Orthanc server being tested |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5767 try: |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5768 DoDelete(_REMOTE, '/modalities/toto') |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5769 except: |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5770 pass |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5771 |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5772 params = DoGet(_REMOTE, '/modalities?expand') ['orthanctest'] |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5773 DoPut(_REMOTE, '/modalities/toto', params) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5774 DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain') |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5775 j = DoGet(_LOCAL, '/instances') |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5776 self.assertEqual(1, len(j)) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5777 uncompressedSize = len(DoGet(_LOCAL, '/instances/%s/file' % j[0])) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5778 self.assertTrue(uncompressedSize > rleSize / 2) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5779 |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5780 # Export, with transcoding disabled => this fails |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5781 params['AllowTranscoding'] = False |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5782 DoPut(_REMOTE, '/modalities/toto', params) |
4a70411ac9ad
test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
5783 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain')) |
378
a4b8450a1158
fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
5784 DoDelete(_REMOTE, '/modalities/toto') |
290
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5785 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5786 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5787 def test_bitbucket_issue_169(self): |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5788 with open(GetDatabasePath('Issue169.dcm.bz2'), 'rb') as f: |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5789 dicom = bz2.decompress(f.read()) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5790 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5791 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(dicom)) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5792 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5793 self.assertEqual(44350560, len(dicom)) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5794 i = DoPost(_REMOTE, '/instances', dicom, 'application/dicom') ['ID'] |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5795 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5796 tags = DoGet(_REMOTE, '/instances/%s/tags' % i) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5797 self.assertEqual('NORMAL', tags['1337,1001']['Value']) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5798 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5799 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5800 DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5801 j = DoGet(_LOCAL, '/instances') |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5802 self.assertEqual(1, len(j)) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5803 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5804 # In Orthanc <= 1.6.1, transfer syntax changed from "Explicit |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5805 # VR Little Endian" (1.2.840.10008.1.2.1) to "Implicit VR |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5806 # Little Endian" (1.2.840.10008.1.2) |
291
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5807 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax( |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5808 DoGet(_LOCAL, '/instances/%s/file' % j[0]))) |
290
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5809 |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5810 # In Orthanc <= 1.6.1, the value of the private tags was lost |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5811 # because of this transcoding |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5812 tags = DoGet(_LOCAL, '/instances/%s/tags' % j[0]) |
b5333f87065b
test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
289
diff
changeset
|
5813 self.assertEqual('NORMAL', tags['1337,1001']['Value']) |
291
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5814 |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5815 |
302
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5816 def test_modify_transcode_instance(self): |
291
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5817 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID'] |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5818 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax( |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5819 DoGet(_REMOTE, '/instances/%s/file' % i))) |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5820 |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5821 a = ExtractDicomTags(DoGet(_REMOTE, '/instances/%s/file' % i), [ 'SOPInstanceUID' ]) [0] |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5822 self.assertTrue(len(a) > 20) |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5823 |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5824 SYNTAXES = [ |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5825 '1.2.840.10008.1.2', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5826 '1.2.840.10008.1.2.1', |
300
d6c2eb5a2603
disabling test on Deflated Explicit VR Little Endian
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
299
diff
changeset
|
5827 #'1.2.840.10008.1.2.1.99', # Deflated Explicit VR Little Endian (cannot be decoded in debug mode if Orthanc is statically linked against DCMTK 3.6.5) |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5828 '1.2.840.10008.1.2.2', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5829 '1.2.840.10008.1.2.4.50', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5830 '1.2.840.10008.1.2.4.51', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5831 '1.2.840.10008.1.2.4.57', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5832 '1.2.840.10008.1.2.4.70', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5833 ] |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5834 |
304 | 5835 if HasGdcmPlugin(_REMOTE): |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5836 SYNTAXES = SYNTAXES + [ |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5837 '1.2.840.10008.1.2.4.80', # This makes DCMTK 3.6.2 crash |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5838 '1.2.840.10008.1.2.4.81', # This makes DCMTK 3.6.2 crash |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5839 '1.2.840.10008.1.2.4.90', # JPEG2k, unavailable without GDCM |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5840 '1.2.840.10008.1.2.4.91', # JPEG2k, unavailable without GDCM |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5841 ] |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5842 |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5843 for syntax in SYNTAXES: |
291
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5844 transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, { |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5845 'Transcode' : syntax, |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5846 'Keep' : [ 'SOPInstanceUID' ], |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5847 'Force' : True, |
291
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5848 }) |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5849 |
cfa785074c64
test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
290
diff
changeset
|
5850 self.assertEqual(syntax, GetTransferSyntax(transcoded)) |
292
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5851 |
299
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5852 b = ExtractDicomTags(transcoded, [ 'SOPInstanceUID' ]) [0] |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5853 self.assertTrue(len(b) > 20) |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5854 if syntax in [ '1.2.840.10008.1.2.4.50', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5855 '1.2.840.10008.1.2.4.51', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5856 '1.2.840.10008.1.2.4.81', |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5857 '1.2.840.10008.1.2.4.91' ]: |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5858 # Lossy transcoding: The SOP instance UID must have changed |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5859 self.assertNotEqual(a, b) |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5860 else: |
c2144cf4bd83
HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
293
diff
changeset
|
5861 self.assertEqual(a, b) |
292
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5862 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5863 def test_archive_transcode(self): |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5864 info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm') |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5865 |
293
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5866 # GET on "/media" |
292
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5867 z = GetArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5868 self.assertEqual(2, len(z.namelist())) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5869 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(z.read('IMAGES/IM0'))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5870 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5871 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients/%s/media?transcode=nope' % info['ParentPatient'])) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5872 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5873 z = GetArchive(_REMOTE, '/patients/%s/media?transcode=1.2.840.10008.1.2.4.50' % info['ParentPatient']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5874 self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read('IMAGES/IM0'))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5875 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5876 z = GetArchive(_REMOTE, '/studies/%s/media?transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5877 self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0'))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5878 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5879 z = GetArchive(_REMOTE, '/series/%s/media?transcode=1.2.840.10008.1.2.4.57' % info['ParentSeries']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5880 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5881 |
293
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5882 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5883 # POST on "/media" |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5884 self.assertRaises(Exception, lambda: PostArchive( |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5885 _REMOTE, '/patients/%s/media' % info['ParentPatient'], { 'Transcode' : 'nope' })) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5886 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5887 z = PostArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'], { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5888 'Transcode' : '1.2.840.10008.1.2.4.50', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5889 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5890 self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read('IMAGES/IM0'))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5891 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5892 z = PostArchive(_REMOTE, '/studies/%s/media' % info['ParentStudy'], { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5893 'Transcode' : '1.2.840.10008.1.2.4.51', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5894 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5895 self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0'))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5896 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5897 z = PostArchive(_REMOTE, '/series/%s/media' % info['ParentSeries'], { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5898 'Transcode' : '1.2.840.10008.1.2.4.57', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5899 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5900 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5901 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5902 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5903 # GET on "/archive" |
292
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5904 z = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5905 self.assertEqual(1, len(z.namelist())) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5906 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(z.read(z.namelist()[0]))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5907 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5908 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients/%s/archive?transcode=nope' % info['ParentPatient'])) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5909 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5910 z = GetArchive(_REMOTE, '/patients/%s/archive?transcode=1.2.840.10008.1.2' % info['ParentPatient']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5911 self.assertEqual('1.2.840.10008.1.2', GetTransferSyntax(z.read(z.namelist()[0]))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5912 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5913 z = GetArchive(_REMOTE, '/studies/%s/archive?transcode=1.2.840.10008.1.2.2' % info['ParentStudy']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5914 self.assertEqual('1.2.840.10008.1.2.2', GetTransferSyntax(z.read(z.namelist()[0]))) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5915 |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5916 z = GetArchive(_REMOTE, '/series/%s/archive?transcode=1.2.840.10008.1.2.4.70' % info['ParentSeries']) |
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5917 self.assertEqual('1.2.840.10008.1.2.4.70', GetTransferSyntax(z.read(z.namelist()[0]))) |
293
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5918 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5919 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5920 # POST on "/archive" |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5921 self.assertRaises(Exception, lambda: PostArchive( |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5922 _REMOTE, '/patients/%s/archive' % info['ParentPatient'], { 'Transcode' : 'nope' })) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5923 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5924 z = PostArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'], { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5925 'Transcode' : '1.2.840.10008.1.2.4.50', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5926 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5927 self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read(z.namelist()[0]))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5928 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5929 z = PostArchive(_REMOTE, '/studies/%s/archive' % info['ParentStudy'], { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5930 'Transcode' : '1.2.840.10008.1.2.4.51', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5931 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5932 self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read(z.namelist()[0]))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5933 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5934 z = PostArchive(_REMOTE, '/series/%s/archive' % info['ParentSeries'], { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5935 'Transcode' : '1.2.840.10008.1.2.4.57', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5936 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5937 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read(z.namelist()[0]))) |
292
e1827a4f5d3b
test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
291
diff
changeset
|
5938 |
293
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5939 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5940 # "/tools/create-*" |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5941 z = PostArchive(_REMOTE, '/tools/create-archive', { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5942 'Resources' : [ info['ParentStudy'] ], |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5943 'Transcode' : '1.2.840.10008.1.2.4.50', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5944 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5945 self.assertEqual(1, len(z.namelist())) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5946 self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read(z.namelist()[0]))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5947 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5948 z = PostArchive(_REMOTE, '/tools/create-media', { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5949 'Resources' : [ info['ParentStudy'] ], |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5950 'Transcode' : '1.2.840.10008.1.2.4.51', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5951 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5952 self.assertEqual(2, len(z.namelist())) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5953 self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0'))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5954 |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5955 z = PostArchive(_REMOTE, '/tools/create-media-extended', { |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5956 'Resources' : [ info['ParentStudy'] ], |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5957 'Transcode' : '1.2.840.10008.1.2.4.57', |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5958 }) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5959 self.assertEqual(2, len(z.namelist())) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5960 self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0'))) |
032722c3e919
extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
292
diff
changeset
|
5961 |
308 | 5962 |
301
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5963 def test_modify_keep_source(self): |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5964 # https://groups.google.com/d/msg/orthanc-users/CgU-Wg8vDio/BY5ZWcDEAgAJ |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5965 i = UploadInstance(_REMOTE, 'DummyCT.dcm') |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5966 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5967 |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5968 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], { |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5969 'Replace' : { |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5970 'StationName' : 'TEST', |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5971 }, |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5972 'KeepSource' : True, |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5973 }) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5974 |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5975 s = DoGet(_REMOTE, '/studies') |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5976 self.assertEqual(2, len(s)) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5977 self.assertTrue(i['ParentStudy'] in s) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5978 self.assertTrue(j['ID'] in s) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5979 |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5980 DoDelete(_REMOTE, '/studies/%s' % j['ID']) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5981 self.assertEqual(1, len(DoGet(_REMOTE, '/studies'))) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5982 |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5983 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], { |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5984 'Replace' : { |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5985 'StationName' : 'TEST', |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5986 }, |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5987 'KeepSource' : False, |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5988 }) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5989 |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5990 s = DoGet(_REMOTE, '/studies') |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5991 self.assertEqual(1, len(s)) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5992 self.assertFalse(i['ParentStudy'] in s) |
6652d5720a45
test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
300
diff
changeset
|
5993 self.assertTrue(j['ID'] in s) |
302
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5994 |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5995 |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5996 def test_modify_transcode_study(self): |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5997 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm') |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5998 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax( |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
5999 DoGet(_REMOTE, '/instances/%s/file' % i['ID']))) |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6000 |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6001 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6002 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], { |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6003 'Transcode' : '1.2.840.10008.1.2.4.50', |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6004 'KeepSource' : False |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6005 }) |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6006 |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6007 k = DoGet(_REMOTE, '/instances') |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6008 self.assertEqual(1, len(k)) |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6009 self.assertEqual(i['ID'], DoGet(_REMOTE, '/instances/%s/metadata?expand' % k[0]) ['ModifiedFrom']) |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6010 self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax( |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6011 DoGet(_REMOTE, '/instances/%s/file' % k[0]))) |
22b6dd0f8c84
test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
6012 |
305
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6013 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6014 def test_store_peer_transcoding(self): |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6015 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID'] |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6016 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6017 SYNTAXES = [ |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6018 '1.2.840.10008.1.2', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6019 '1.2.840.10008.1.2.1', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6020 #'1.2.840.10008.1.2.1.99', # Deflated Explicit VR Little Endian (cannot be decoded in debug mode if Orthanc is statically linked against DCMTK 3.6.5) |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6021 '1.2.840.10008.1.2.2', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6022 '1.2.840.10008.1.2.4.50', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6023 '1.2.840.10008.1.2.4.51', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6024 '1.2.840.10008.1.2.4.57', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6025 '1.2.840.10008.1.2.4.70', |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6026 ] |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6027 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6028 if HasGdcmPlugin(_REMOTE): |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6029 SYNTAXES = SYNTAXES + [ |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6030 '1.2.840.10008.1.2.4.80', # This makes DCMTK 3.6.2 crash |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6031 '1.2.840.10008.1.2.4.81', # This makes DCMTK 3.6.2 crash |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6032 '1.2.840.10008.1.2.4.90', # JPEG2k, unavailable without GDCM |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6033 '1.2.840.10008.1.2.4.91', # JPEG2k, unavailable without GDCM |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6034 ] |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6035 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6036 for syntax in SYNTAXES: |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6037 body = { |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6038 'Resources' : [ i ], |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6039 } |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6040 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6041 if syntax != '1.2.840.10008.1.2.1': |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6042 body['Transcode'] = syntax |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6043 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6044 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6045 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6046 DoPost(_REMOTE, '/peers/peer/store', body, 'text/plain') |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6047 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6048 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6049 self.assertEqual(syntax, GetTransferSyntax( |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6050 DoGet(_LOCAL, '/instances/%s/file' % DoGet(_LOCAL, '/instances') [0]))) |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6051 |
ed20ead1a8b6
test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
6052 DropOrthanc(_LOCAL) |
308 | 6053 |
6054 | |
295 | 6055 def test_getscu(self): |
307 | 6056 def CleanTarget(): |
6057 if os.path.isdir('/tmp/GETSCU'): | |
6058 shutil.rmtree('/tmp/GETSCU') | |
6059 os.makedirs('/tmp/GETSCU') | |
6060 | |
306
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6061 env = {} |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6062 if _DOCKER: |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6063 # This is "getscu" from DCMTK 3.6.5 compiled using LSB, |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6064 # and running in a GNU/Linux distribution running DCMTK |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6065 # 3.6.0. Tell "getscu" where it can find the DICOM dictionary. |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6066 env['DCMDICTPATH'] = '/usr/share/libdcmtk2/dicom.dic' |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6067 |
295 | 6068 # no transcoding required |
307 | 6069 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] |
6070 | |
6071 CleanTarget() | |
295 | 6072 |
306
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6073 subprocess.check_call([ |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6074 FindExecutable('getscu'), |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6075 _REMOTE['Server'], |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6076 str(_REMOTE['DicomPort']), |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6077 '-aec', 'ORTHANC', |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6078 '-aet', 'ORTHANCTEST', # pretend to be the other orthanc |
307 | 6079 '-k', '0020,000d=2.16.840.1.113669.632.20.1211.10000357775', |
306
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6080 '-k', '0008,0052=STUDY', |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6081 '--output-directory', '/tmp/GETSCU/' |
da2be3ff2db5
fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
296
diff
changeset
|
6082 ], env = env) |
295 | 6083 |
311 | 6084 f1 = '/tmp/GETSCU/MR.1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314079549' |
6085 self.assertTrue(os.path.isfile(f1)) | |
6086 with open(f1, 'rb') as f: | |
6087 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read())) | |
6088 | |
307 | 6089 CleanTarget() |
295 | 6090 |
6091 # transcoding required | |
311 | 6092 UploadInstance(_REMOTE, 'TransferSyntaxes/1.2.840.10008.1.2.4.50.dcm') |
307 | 6093 |
6094 subprocess.check_call([ | |
6095 FindExecutable('getscu'), | |
6096 _REMOTE['Server'], | |
6097 str(_REMOTE['DicomPort']), | |
6098 '-aec', 'ORTHANC', | |
6099 '-aet', 'ORTHANCTEST', # pretend to be the other orthanc | |
311 | 6100 '-k', '0020,000d=2.16.840.1.113669.632.20.1211.10000357775\\1.2.840.113663.1298.6234813.1.298.20000329.1115122', |
307 | 6101 '-k', '0008,0052=STUDY', |
6102 '--output-directory', '/tmp/GETSCU/' | |
6103 ], env = env) | |
6104 | |
311 | 6105 self.assertTrue(os.path.isfile(f1)) |
6106 with open(f1, 'rb') as f: | |
6107 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read())) | |
6108 | |
6109 # This file is transcoded from "1.2.840.10008.1.2.4.50" to "1.2.840.10008.1.2.1" | |
6110 # (LittleEndianExplicit is proposed by default by "getscu") | |
6111 f2 = '/tmp/GETSCU/US.1.2.840.113663.1298.1.3.715.20000329.1115326' | |
6112 self.assertTrue(os.path.isfile(f2)) | |
6113 with open(f2, 'rb') as f: | |
6114 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read())) | |
324
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6115 |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6116 |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6117 def test_findscu_truncation(self): |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6118 # https://groups.google.com/forum/#!msg/orthanc-users/FkckWAHvso8/UbRBAhQ5CwAJ |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6119 # Fixed by: https://hg.orthanc-server.com/orthanc/rev/2724977419fb |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6120 UploadInstance(_REMOTE, 'Multiframe.dcm') |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6121 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm') |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6122 |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6123 study = '1.3.46.670589.7.5.8.80001255161.20000323.151537.1' |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6124 |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6125 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyInstanceUID' ]) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6126 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6127 self.assertEqual(2, len(result)) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6128 |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6129 # The "StudyInstanceUID" is set as a list of 5 times the same |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6130 # study, leading to a string of 249 characters |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6131 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6132 'StudyInstanceUID=%s\\%s\\%s\\%s\\%s' % (( study, ) * 5) ]) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6133 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6134 self.assertEqual(1, len(result)) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6135 |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6136 # The "StudyInstanceUID" is set as a list of 6 times the same |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6137 # study, leading to a string of 299 characters. In Orthanc <= |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6138 # 1.7.2, this is above the value of ORTHANC_MAXIMUM_TAG_LENGTH |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6139 # == 256, and is thus wiped out by C-FIND SCP. As a |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6140 # consequence, Orthanc <= 1.7.2 doesn't apply the filter on |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6141 # "StudyInstanceUID" and returns all the available |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6142 # studies (i.e. 2). This issue was fixed in Orthanc 1.7.3. |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6143 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6144 'StudyInstanceUID=%s\\%s\\%s\\%s\\%s\\%s' % (( study, ) * 6) ]) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6145 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i) |
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6146 self.assertEqual(1, len(result)) |
328
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6147 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6148 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6149 def test_store_compressed(self): |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6150 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6151 dicom = f.read() |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6152 i = DoPost(_REMOTE, '/instances', dicom) ['ID'] |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6153 sourceSize = len(dicom) |
324
6164d39399ad
test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
323
diff
changeset
|
6154 |
328
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6155 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6156 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6157 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6158 # Sending to the local Orthanc 0.8.6 server, without compression: OK |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6159 jobId = MonitorJob2(_REMOTE, lambda: DoPost( |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6160 _REMOTE, '/peers/peer/store', { |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6161 'Resources' : [ i ], |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6162 'Synchronous' : False, |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6163 })) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6164 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6165 job = DoGet(_REMOTE, '/jobs/%s' % jobId) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6166 self.assertFalse(job['Content']['Compress']) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6167 self.assertEqual('', job['Content']['Peer'][2]) # Password must not be reported |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6168 self.assertEqual(str(sourceSize), job['Content']['Size']) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6169 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6170 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6171 DropOrthanc(_LOCAL) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6172 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6173 # Sending to the local Orthanc 0.8.6 server, with compression: |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6174 # Not supported by Orthanc 0.8.6 => failure |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6175 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/peers/peer/store', { |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6176 'Resources' : [ i ], |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6177 'Compress' : True, |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6178 })) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6179 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6180 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6181 # Sending to the tested remote server, with compression: OK |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6182 jobId = MonitorJob2(_REMOTE, lambda: DoPost( |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6183 _REMOTE, '/peers/self/store', { |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6184 'Resources' : [ i ], |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6185 'Compress' : True, |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6186 'Synchronous' : False, |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6187 })) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6188 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6189 job = DoGet(_REMOTE, '/jobs/%s' % jobId) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6190 self.assertTrue(job['Content']['Compress']) |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6191 |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6192 # Compression must have divided the size of the sent data at least twice |
8a462f9c5a97
test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
327
diff
changeset
|
6193 self.assertLess(int(job['Content']['Size']), sourceSize / 2) |
332 | 6194 |
6195 | |
6196 def test_move_ambra(self): | |
6197 # "Orthanc + Ambra: Query/Retrieve" (2020-08-25) | |
6198 # https://groups.google.com/g/orthanc-users/c/yIUnZ9v9-Zs/m/GQPXiAOiCQAJ | |
6199 | |
6200 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm') | |
6201 | |
6202 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([ | |
6203 '--study', | |
6204 '-k', 'StudyInstanceUID=' | |
6205 ]))) | |
6206 | |
6207 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([ | |
6208 '--study', | |
6209 '-k', 'AccessionNumber=', | |
6210 ]))) | |
6211 | |
6212 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([ | |
6213 '--study', | |
6214 '-k', 'AccessionNumber=', | |
6215 '-k', 'StudyInstanceUID=' | |
6216 ]))) | |
6217 | |
6218 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
6219 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ | |
6220 '--study', | |
6221 '-k', 'AccessionNumber=CT16000988', | |
6222 '-k', 'StudyInstanceUID=', | |
6223 ]))) | |
6224 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
6225 DropOrthanc(_LOCAL) | |
6226 | |
6227 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
6228 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ | |
6229 '--study', | |
6230 '-k', 'AccessionNumber=CT16000988', | |
6231 '-k', 'StudyInstanceUID=1.2.840.113619.2.278.3.4194965761.659.1468842739.39', | |
6232 ]))) | |
6233 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
6234 DropOrthanc(_LOCAL) | |
6235 | |
6236 # This fails on Orthanc <= 1.7.3 | |
6237 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
6238 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([ | |
6239 '--study', | |
6240 '-k', 'AccessionNumber=', | |
6241 '-k', 'StudyInstanceUID=1.2.840.113619.2.278.3.4194965761.659.1468842739.39' | |
6242 ]))) | |
6243 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
6244 DropOrthanc(_LOCAL) | |
333
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6245 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6246 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6247 def test_decode_elscint(self): |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6248 # https://groups.google.com/g/orthanc-users/c/d9anAx6lSis/m/qEzm1x3PAAAJ |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6249 a = UploadInstance(_REMOTE, '2020-09-12-ELSCINT1-PMSCT_RLE1.dcm')['ID'] |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6250 b = UploadInstance(_REMOTE, '2020-09-11-Christopher-ELSCINT1-Raw.dcm')['ID'] |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6251 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6252 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % a) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6253 self.assertEqual("L", im.mode) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6254 self.assertEqual(512, im.size[0]) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6255 self.assertEqual(512, im.size[1]) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6256 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6257 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % b) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6258 self.assertEqual("L", im.mode) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6259 self.assertEqual(512, im.size[0]) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6260 self.assertEqual(512, im.size[1]) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6261 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6262 # The two tests below fail on Orthanc <= 1.7.3 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6263 raw = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % a) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6264 self.assertEqual(512 * 512 * 2, len(raw)) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6265 |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6266 raw = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % b) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6267 self.assertEqual(512 * 512 * 2, len(raw)) |
695be643b0f4
test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
332
diff
changeset
|
6268 |
334
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6269 |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6270 def test_rest_modalities_in_study_2(self): |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6271 # Problem reported by Alain Mazy on 2020-09-15 |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6272 UploadInstance(_REMOTE, 'Comunix/Ct/IM-0001-0001.dcm') |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6273 UploadInstance(_REMOTE, 'Comunix/Pet/IM-0001-0001.dcm') |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6274 |
335
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6275 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', '0020,000d=', '-k', '0008,0061=' ]) |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6276 modalitiesInStudy = re.findall('\(0008,0061\).*?\[(.*?)\]', i) |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6277 self.assertEqual(1, len(modalitiesInStudy)) |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6278 self.assertEqual('CT\\PT ', modalitiesInStudy[0]) |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6279 |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6280 for i in [ '', 'CT', 'PT', 'UX', 'UX\\MR', 'CT\\PT', 'UX\\PT', 'CT\\PT', 'UX\\CT\\PT' ]: |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6281 # The empty string '' corresponds to universal matching. |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6282 # The case where "i == 'CT'" failed in Orthanc <= 1.7.3. |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6283 |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6284 if i in [ 'UX', 'UX\\MR' ]: |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6285 expected = 0 |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6286 else: |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6287 expected = 1 |
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6288 |
334
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6289 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6290 'Query' : { 'ModalitiesInStudy' : i }}) |
335
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6291 self.assertEqual(expected, len(a)) |
334
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6292 |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6293 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', '0020,000d=', '-k', '0008,0061=%s' % i ]) |
971ff285302b
test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
333
diff
changeset
|
6294 studyInstanceUid = re.findall('\(0020,000d\).*?\[(.*?)\]', i) |
335
96718de2f29c
simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
334
diff
changeset
|
6295 self.assertEqual(expected, len(studyInstanceUid)) |
337
ec13ace43bde
trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
335
diff
changeset
|
6296 |
ec13ace43bde
trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
335
diff
changeset
|
6297 |
ec13ace43bde
trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
335
diff
changeset
|
6298 def test_webdav(self): |
ec13ace43bde
trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
335
diff
changeset
|
6299 self.assertRaises(Exception, lambda: DoPropFind(_REMOTE, '/webdav/', 2)) |
ec13ace43bde
trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
335
diff
changeset
|
6300 |
342
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6301 for suffix in [ '', '/' ]: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6302 f = DoPropFind(_REMOTE, '/webdav' + suffix, 0) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6303 self.assertEqual(1, len(f)) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6304 self.assertTrue('/webdav/' in f.keys()) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6305 self.assertTrue(f['/webdav/']['folder']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6306 self.assertEqual('webdav', f['/webdav/']['displayname']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6307 |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6308 f = DoPropFind(_REMOTE, '/webdav' + suffix, 1) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6309 self.assertEqual(6, len(f)) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6310 self.assertTrue(f['/webdav/']['folder']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6311 self.assertEqual('webdav', f['/webdav/']['displayname']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6312 |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6313 for i in [ 'by-dates', 'by-patients', 'by-studies', 'by-uids', 'uploads' ]: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6314 self.assertTrue(f['/webdav/%s' % i]['folder']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6315 self.assertEqual(i, f['/webdav/%s' % i]['displayname']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6316 |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6317 for depth in [ 0, 1 ]: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6318 for suffix2 in [ '', '/' ]: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6319 g = DoPropFind(_REMOTE, '/webdav/%s%s' % (i, suffix2), depth) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6320 |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6321 if i == 'uploads': |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6322 # Empty folders might still exist in "/uploads/" |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6323 self.assertTrue('/webdav/uploads/' in g) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6324 self.assertEqual('uploads', g['/webdav/uploads/']['displayname']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6325 for j in g.items(): |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6326 self.assertTrue(g.items()[0][1]['folder']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6327 else: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6328 self.assertEqual(1, len(g)) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6329 self.assertEqual('/webdav/%s/' % i, g.items()[0][0]) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6330 self.assertTrue(g.items()[0][1]['folder']) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6331 self.assertEqual(i, g.items()[0][1]['displayname']) |
341
66a36befb208
extending Toolbox.DoPropFind()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
337
diff
changeset
|
6332 |
342
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6333 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6334 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6335 DoPut(_REMOTE, '/webdav/uploads/dummy', f.read(), 'text/plain') |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6336 |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6337 while len(DoGet(_REMOTE, '/patients')) == 0: |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6338 time.sleep(0.01) |
bf8369ea3ff1
more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
341
diff
changeset
|
6339 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) |
337
ec13ace43bde
trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
335
diff
changeset
|
6340 |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6341 |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6342 def test_log_categories(self): |
350 | 6343 original = DoGet(_REMOTE, '/tools/log-level-http') |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6344 |
350 | 6345 DoPut(_REMOTE, '/tools/log-level-http', 'default') |
6346 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level-http')) | |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6347 DoGet(_REMOTE, '/system') |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6348 |
350 | 6349 DoPut(_REMOTE, '/tools/log-level-http', 'verbose') |
6350 self.assertEqual('verbose', DoGet(_REMOTE, '/tools/log-level-http')) | |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6351 DoGet(_REMOTE, '/system') |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6352 |
350 | 6353 DoPut(_REMOTE, '/tools/log-level-http', 'trace') |
6354 self.assertEqual('trace', DoGet(_REMOTE, '/tools/log-level-http')) | |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6355 DoGet(_REMOTE, '/system') |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6356 |
350 | 6357 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/log-level-http', 'nope')) |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6358 |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6359 # Switch back to the original log level |
350 | 6360 DoPut(_REMOTE, '/tools/log-level-http', original) |
6361 | |
6362 for c in [ 'generic', 'http', 'dicom', 'plugins', 'sqlite', 'lua', 'jobs' ]: | |
349
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6363 DoPut(_REMOTE, '/tools/log-level-%s' % c, DoGet(_REMOTE, '/tools/log-level-%s' % c)) |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6364 |
698898a93a10
test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
348
diff
changeset
|
6365 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/log-level-nope', 'default')) |
357 | 6366 |
6367 | |
6368 def test_upload_zip(self): | |
6369 f = StringIO() | |
6370 with zipfile.ZipFile(f, 'w') as z: | |
6371 z.writestr('hello/world/invalid.txt', 'Hello world') | |
6372 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as g: | |
6373 c = g.read() | |
6374 z.writestr('hello/world/dicom1.dcm', c) | |
6375 z.writestr('hello/world/dicom2.dcm', c) | |
6376 | |
6377 f.seek(0) | |
6378 i = DoPost(_REMOTE, '/instances', f.read()) | |
6379 | |
6380 self.assertEqual(2, len(i)) | |
6381 self.assertEqual(i[0], i[1]) | |
6382 self.assertEqual(6, len(i[0])) | |
6383 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', i[0]['ID']) | |
6384 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', i[0]['ParentSeries']) | |
6385 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', i[0]['ParentStudy']) | |
6386 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', i[0]['ParentPatient']) | |
6387 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', i[0]['Path']) | |
6388 | |
6389 # Both are "Success" (instead of one "AlreadyStored"), because "OverwriteInstance" is true | |
6390 self.assertEqual('Success', i[0]['Status']) | |
361
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6391 |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6392 |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6393 def test_transfer_syntax_no_metaheader(self): |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6394 a = UploadInstance(_REMOTE, 'TransferSyntaxes/1.2.840.10008.1.2.dcm')['ID'] |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6395 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % a) |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6396 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', m['SopClassUid']) |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6397 |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6398 # This fails on Orthanc <= 1.8.1 |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6399 self.assertTrue('TransferSyntax' in m) |
6cf5cc4d0a99
test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
6400 self.assertEqual('1.2.840.10008.1.2', m['TransferSyntax']) |
368
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6401 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6402 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6403 def test_upload_multipart_1(self): |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6404 # This tests the "Upload" button in Orthanc Explorer |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6405 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6406 def EncodeChunk(data, boundary, filename): |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6407 return (('--%s\r\n' + |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6408 'Content-Disposition : form-data ; name ="files[]" ; filename = "%s" \r\n' + |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6409 '\r\n%s\r\n') % (boundary, filename, data)) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6410 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6411 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6412 dcm1 = f.read() |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6413 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6414 with open(GetDatabasePath('ColorTestMalaterre.dcm'), 'rb') as f: |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6415 dcm2 = f.read() |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6416 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6417 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6418 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6419 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ' |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6420 m = DoPost(_REMOTE, '/instances', (EncodeChunk(dcm1, boundary, 'DummyCT.dcm') + |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6421 EncodeChunk(dcm2, boundary, 'ColorTestMalaterre.dcm') + |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6422 '--' + boundary + '--'), headers = { |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6423 'Content-Type' : 'multipart/form-data ; boundary = %s ' % boundary, |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6424 'X-Requested-With' : 'XMLHttpRequest', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6425 }) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6426 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6427 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6428 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6429 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6430 def test_upload_multipart_2(self): |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6431 # This tests the "maxChunkSize" option of "jQuery File Upload |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6432 # 5.12", whose source code can be found in: |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6433 # "OrthancServer/OrthancExplorer/libs/jquery-file-upload/" |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6434 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6435 def EncodeBody(data, boundary, filename): |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6436 return (('--%s\r\n' + |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6437 'Content-Disposition: form-data; name="files[]"; filename="%s"\r\n' + |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6438 '\r\n%s\r\n--%s') % (boundary, filename, data, boundary)) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6439 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6440 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6441 dcm = f.read() |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6442 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6443 with open(GetDatabasePath('ColorTestMalaterre.dcm'), 'rb') as f: |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6444 dcm2 = f.read() |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6445 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6446 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ' |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6447 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6448 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6449 m = DoPost(_REMOTE, '/instances', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6450 EncodeBody(dcm[0:1000], boundary, 'DummyCT.dcm'), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6451 headers = { |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6452 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary, |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6453 'X-Requested-With' : 'XMLHttpRequest', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6454 'X-File-Name' : 'DummyCT.dcm', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6455 'X-File-Size' : str(len(dcm)), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6456 }) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6457 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6458 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6459 m = DoPost(_REMOTE, '/instances', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6460 EncodeBody(dcm[1000:2000], boundary, 'DummyCT.dcm'), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6461 headers = { |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6462 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary, |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6463 'X-Requested-With' : 'XMLHttpRequest', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6464 'X-File-Name' : 'DummyCT.dcm', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6465 'X-File-Size' : str(len(dcm)), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6466 }) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6467 self.assertEqual(0, len(DoGet(_REMOTE, '/instances'))) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6468 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6469 m = DoPost(_REMOTE, '/instances', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6470 EncodeBody(dcm2, boundary, 'ColorTestMalaterre.dcm'), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6471 headers = { |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6472 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary, |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6473 'X-Requested-With' : 'XMLHttpRequest', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6474 'X-File-Name' : 'ColorTestMalaterre.dcm', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6475 'X-File-Size' : str(len(dcm2)), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6476 }) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6477 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6478 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6479 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6480 # Upload the last chunk => the file is now entirely available |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6481 m = DoPost(_REMOTE, '/instances', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6482 EncodeBody(dcm[2000:len(dcm)], boundary, 'DummyCT.dcm'), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6483 headers = { |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6484 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary, |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6485 'X-Requested-With' : 'XMLHttpRequest', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6486 'X-File-Name' : 'DummyCT.dcm', |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6487 'X-File-Size' : str(len(dcm)), |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6488 }) |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6489 |
2cc40121c3a8
test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
6490 self.assertEqual(2, len(DoGet(_REMOTE, '/instances'))) |
377
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6491 |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6492 |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6493 def test_pixel_data_offset(self): |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6494 # New in Orthanc 1.9.1 |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6495 def Check(path, offset): |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6496 i = UploadInstance(_REMOTE, path) ['ID'] |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6497 metadata = DoGetRaw(_REMOTE, '/instances/%s/metadata/PixelDataOffset' % i) [1] |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6498 self.assertEqual(offset, metadata) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6499 |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6500 Check('ColorTestMalaterre.dcm', str(0x03a0)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6501 Check('TransferSyntaxes/1.2.840.10008.1.2.1.dcm', str(0x037c)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6502 Check('TransferSyntaxes/1.2.840.10008.1.2.2.dcm', str(0x03e8)) # Big endian |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6503 Check('TransferSyntaxes/1.2.840.10008.1.2.4.50.dcm', str(0x04ac)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6504 Check('TransferSyntaxes/1.2.840.10008.1.2.4.51.dcm', str(0x072c)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6505 Check('TransferSyntaxes/1.2.840.10008.1.2.4.57.dcm', str(0x0620)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6506 Check('TransferSyntaxes/1.2.840.10008.1.2.4.70.dcm', str(0x065a)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6507 Check('TransferSyntaxes/1.2.840.10008.1.2.4.80.dcm', str(0x0b46)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6508 Check('TransferSyntaxes/1.2.840.10008.1.2.4.81.dcm', str(0x073e)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6509 Check('TransferSyntaxes/1.2.840.10008.1.2.4.90.dcm', str(0x0b66)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6510 Check('TransferSyntaxes/1.2.840.10008.1.2.4.91.dcm', str(0x19b8)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6511 Check('TransferSyntaxes/1.2.840.10008.1.2.5.dcm', str(0x0b0a)) |
cc79fa4945da
test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
374
diff
changeset
|
6512 Check('TransferSyntaxes/1.2.840.10008.1.2.dcm', '') # No valid DICOM preamble |
382
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6513 |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6514 |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6515 def test_peer_store_straight(self): |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6516 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports'])) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6517 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6518 |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6519 peer = DoGet(_REMOTE, '/peers/peer/system') |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6520 self.assertEqual(3, len(peer)) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6521 self.assertEqual(5, peer['DatabaseVersion']) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6522 self.assertEqual('MyOrthanc', peer['Name']) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6523 self.assertEqual('0.8.6', peer['Version']) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6524 |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6525 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f: |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6526 j = DoPost(_REMOTE, '/peers/peer/store-straight', f.read(), 'application/dicom') |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6527 |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6528 # Remote server is Orthanc 0.8.6, thus "ParentPatient", |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6529 # "ParentStudy", "ParentSeries" are not reported |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6530 self.assertEqual(3, len(j)) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6531 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', j['ID']) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6532 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', j['Path']) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6533 self.assertEqual('Success', j['Status']) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6534 |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6535 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) |
a8dd562943a7
added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
6536 self.assertEqual(0, len(DoGet(_REMOTE, '/patients'))) |
383 | 6537 |
6538 | |
6539 def test_cp246(self): | |
6540 # This fails on Orthanc <= 1.9.0 | |
6541 a = UploadInstance(_REMOTE, '2021-02-19-MalaterreCP246.dcm')['ID'] | |
6542 self.assertEqual(1, len(DoGet(_REMOTE, '/instances'))) | |
6543 | |
6544 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % a) | |
6545 self.assertEqual('1.2.840.10008.5.1.4.1.1.128', tags['0008,0016']) | |
6546 self.assertEqual('1.3.12.2.1107.5.1.4.36085.2.0.517715415141633', tags['0008,0018']) | |
6547 self.assertEqual('1.2.840.113745.101000.1008000.38179.6792.6324567', tags['0020,000d']) | |
6548 self.assertEqual('1.3.12.2.1107.5.1.4.36085.2.0.517714246252254', tags['0020,000e']) | |
6549 | |
6550 study = DoGet(_REMOTE, '/instances/%s/study' % a) | |
6551 self.assertEqual(tags['0020,000d'], study['MainDicomTags']['StudyInstanceUID']) | |
6552 | |
6553 series = DoGet(_REMOTE, '/instances/%s/series' % a) | |
6554 self.assertEqual(tags['0020,000e'], series['MainDicomTags']['SeriesInstanceUID']) | |
6555 | |
6556 instance = DoGet(_REMOTE, '/instances/%s' % a) | |
6557 self.assertEqual(tags['0008,0018'], instance['MainDicomTags']['SOPInstanceUID']) | |
6558 |