annotate Tests/Tests.py @ 382:a8dd562943a7

added test_peer_store_straight
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 23 Feb 2021 15:13:56 +0100
parents b9adc7d06347
children 05d0d0c2623c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
1 #!/usr/bin/env python
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2 # -*- coding: utf-8 -*-
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
4
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 # Orthanc - A Lightweight, RESTful DICOM Store
73
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
6 # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 #
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 # This program is free software: you can redistribute it and/or
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 # modify it under the terms of the GNU General Public License as
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 # published by the Free Software Foundation, either version 3 of the
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 # License, or (at your option) any later version.
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 #
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 # This program is distributed in the hope that it will be useful, but
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 # WITHOUT ANY WARRANTY; without even the implied warranty of
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 # General Public License for more details.
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 #
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 # You should have received a copy of the GNU General Public License
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
28 import tempfile
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 import unittest
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
30 import shutil
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
32 from PIL import ImageChops
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 from Toolbox import *
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
34 from xml.dom import minidom
312
e12c8434aa1e print date
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 311
diff changeset
35 from datetime import datetime
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 _LOCAL = None
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 _LOCAL = local
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
49 def ExtractDicomTags(rawDicom, tags):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
50 with tempfile.NamedTemporaryFile(delete = True) as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
51 f.write(rawDicom)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
52 f.flush()
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
53 data = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ])
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
54
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
55 result = []
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
56 for tag in tags:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
57 match = re.search('<element[^>]+name="%s">([^>]*)</element>' % tag, data)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
58 if match == None:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
59 result.append('')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
60 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
61 result.append(match.group(1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
62
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
63 return result
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
64
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
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
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
85 if a.keys() == b.keys():
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
86 return True
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
87 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
88 print('Mismatch in tags: %s' % str(set(a.keys()) ^ set(b.keys())))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
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
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
100 def GetMoveScuCommand():
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
101 return [
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
102 FindExecutable('movescu'),
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
103 '--move', _LOCAL['DicomAet'], # Target AET (i.e. storescp)
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
104 '--call', _REMOTE['DicomAet'], # Called AET (i.e. Orthanc)
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
105 '--aetitle', _LOCAL['DicomAet'], # Calling AET (i.e. storescp)
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
106 _REMOTE['Server'],
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
107 str(_REMOTE['DicomPort'])
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
108 ]
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 class Orthanc(unittest.TestCase):
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 def setUp(self):
83
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
174 if (sys.version_info >= (3, 0)):
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
175 # Remove annoying warnings about unclosed socket in Python 3
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
176 import warnings
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
177 warnings.simplefilter("ignore", ResourceWarning)
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
178
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 DropOrthanc(_LOCAL)
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 DropOrthanc(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
181 UninstallLuaCallbacks(_REMOTE)
312
e12c8434aa1e print date
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 311
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189 def test_system(self):
177
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
190 self.assertTrue('Version' in DoGet(_REMOTE, '/system'))
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
191 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize'])
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
192 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
193
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
194 systemInfo = DoGet(_REMOTE, '/system')
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
195 if systemInfo["Version"] == "mainline":
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
196 print "Skipping version checks since you're currently in mainline"
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
197 return
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
198
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
199 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 8, 6))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
200 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 8, 7))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
201 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 7, 6))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
202 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 9, 6))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
203 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 1, 8, 6))
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 def test_upload(self):
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
206 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
207 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
208
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
209 sizeDummyCT = 2472
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
210 sizeOverwrite = 2476
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
211 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d'
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
216 self.assertEqual(instance, u['ID'])
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 self.assertEqual('Success', u['Status'])
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
218
183
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
219 if True:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
220 # New test for Orthanc 1.4.3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
221 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', u['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
222 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', u['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
223 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', u['ParentPatient'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
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
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
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
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
241
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
242 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
243 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
244 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
245 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
254
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
255 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance)
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
256 self.assertEqual('20070101', i['StudyDate'])
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
257 self.assertEqual('KNIX', i['PatientName'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
258
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
259 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2):
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
260 # Overwriting
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
261 self.assertEqual('Success', u['Status'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
262 else:
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
263 self.assertEqual('AlreadyStored', u['Status'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
264
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
265 u = UploadInstance(_REMOTE, 'DummyCT-overwrite.dcm')
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
266 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
267 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
268 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
269 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
270
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
271 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2):
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
272 # Overwriting
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
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
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
279 s2 = sizeOverwrite + j2
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
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
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
287 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance)
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
288 self.assertEqual('ANOTHER', i['PatientName'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
289 else:
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293
5
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
294 def test_upload_2(self):
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 instance = DoGet(_REMOTE, '/instances/%s' % i)
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297 self.assertEqual(i, instance['ID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299 instance['MainDicomTags']['SOPInstanceUID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 series = DoGet(_REMOTE, '/series/%s' % instance['ParentSeries'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 series['MainDicomTags']['SeriesInstanceUID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 study = DoGet(_REMOTE, '/studies/%s' % series['ParentStudy'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307 study['MainDicomTags']['StudyInstanceUID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 patient = DoGet(_REMOTE, '/patients/%s' % study['ParentPatient'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310 self.assertEqual('ozp00SjY2xG',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 patient['MainDicomTags']['PatientID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 dicom = DoGet(_REMOTE, '/instances/%s/file' % instance['ID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314 self.assertEqual(2472, len(dicom))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 self.assertEqual('3e29b869978b6db4886355a2b1132124', ComputeMD5(dicom))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/frames' % i)))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/simplified-tags' % i)['StationName'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322
5
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
323 def test_images(self):
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
324 i = UploadInstance(_REMOTE, 'Phenix/IM-0001-0001.dcm')['ID']
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
325 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/frames' % i)))
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326
5
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
327 im = GetImage(_REMOTE, '/instances/%s/preview' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
328 self.assertEqual("L", im.mode)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
329 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
330 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
331
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
332 im = GetImage(_REMOTE, '/instances/%s/image-uint8' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
333 self.assertEqual("L", im.mode)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
334 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
335 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
336
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
337 im = GetImage(_REMOTE, '/instances/%s/image-uint16' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
338 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
339 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
340
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
341 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
342 self.assertEqual("L", im.mode)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
343 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
344 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
345
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
346 im = GetImage(_REMOTE, '/instances/%s/frames/0/image-uint8' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
347 self.assertEqual("L", im.mode)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
348 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
349 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
350
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
351 im = GetImage(_REMOTE, '/instances/%s/frames/0/image-uint16' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
352 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
353 self.assertEqual(358, im.size[1])
64
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
354
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
355 # This is Little Endian Explicit
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
356 self.assertEqual('1.2.840.10008.1.2.1', DoGet(_REMOTE, '/instances/%s/header?simplify' % i)['TransferSyntaxUID'])
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
357
6
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
358
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
359 def test_hierarchy(self):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
360 UploadFolder(_REMOTE, 'Brainix/Epi')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
361 UploadFolder(_REMOTE, 'Brainix/Flair')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
362 UploadFolder(_REMOTE, 'Knee/T1')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
363 UploadFolder(_REMOTE, 'Knee/T2')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
364
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
365 p = DoGet(_REMOTE, '/patients')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
366 s = DoGet(_REMOTE, '/studies')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
367 t = DoGet(_REMOTE, '/series')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
368 self.assertEqual(2, len(p))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
369 self.assertEqual(2, len(s))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
370 self.assertEqual(4, len(t))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
371 self.assertEqual(94, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
372
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
373 brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
374 brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
375 brainixEpi = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
376 brainixFlair = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
377
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
378 kneePatient = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
379 kneeStudy = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
380 kneeT1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
381 kneeT2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
382
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
383 self.assertTrue(brainixPatient in p)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
384 self.assertTrue(kneePatient in p)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
385 self.assertTrue(brainixStudy in s)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
386 self.assertTrue(kneeStudy in s)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
387 self.assertTrue(brainixEpi in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
388 self.assertTrue(brainixFlair in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
389 self.assertTrue(kneeT1 in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
390 self.assertTrue(kneeT2 in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
391
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
392 self.assertEqual(44, len(DoGet(_REMOTE, '/patients/%s/instances' % brainixPatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
393 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/series' % brainixPatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
394 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/studies' % brainixPatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
395
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
396 self.assertEqual(50, len(DoGet(_REMOTE, '/patients/%s/instances' % kneePatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
397 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/series' % kneePatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
398 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/studies' % kneePatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
399
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
400 self.assertEqual(2, len(DoGet(_REMOTE, '/studies/%s/series' % brainixStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
401 self.assertEqual(44, len(DoGet(_REMOTE, '/studies/%s/instances' % brainixStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
402
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
403 self.assertEqual(2, len(DoGet(_REMOTE, '/studies/%s/series' % kneeStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
404 self.assertEqual(50, len(DoGet(_REMOTE, '/studies/%s/instances' % kneeStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
405
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
406 self.assertEqual(22, len(DoGet(_REMOTE, '/series/%s/instances' % brainixEpi)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
407 self.assertEqual(22, len(DoGet(_REMOTE, '/series/%s/instances' % brainixFlair)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
408 self.assertEqual(24, len(DoGet(_REMOTE, '/series/%s/instances' % kneeT1)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
409 self.assertEqual(26, len(DoGet(_REMOTE, '/series/%s/instances' % kneeT2)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
410
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
411 for patient in p:
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
412 for study in DoGet(_REMOTE, '/patients/%s/studies' % patient):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
413 self.assertEqual(patient, study['ParentPatient'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
414 for series in DoGet(_REMOTE, '/studies/%s/series' % study['ID']):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
415 self.assertEqual(study['ID'], series['ParentStudy'])
211
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
416 self.assertEqual('Unknown', series['Status'])
6
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
417 for instance in DoGet(_REMOTE, '/series/%s/instances' % series['ID']):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
418 self.assertEqual(series['ID'], instance['ParentSeries'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
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
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
424
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
425
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
426 r = DoDelete(_REMOTE, "/studies/%s" % brainixStudy)['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
427 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
428 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
429 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
430 self.assertEqual(50, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
431 self.assertEqual(None, r)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
432
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
433 r = DoDelete(_REMOTE, "/series/%s" % kneeT2)['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
434 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
435 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
436 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
437 self.assertEqual(24, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
438 self.assertEqual('Study', r['Type'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
439 self.assertEqual(kneeStudy, r['ID'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
440
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
441 r = DoDelete(_REMOTE, "/instances/%s" % DoGet(_REMOTE, '/instances')[0])['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
442 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
443 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
444 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
445 self.assertEqual(23, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
446 self.assertEqual('Series', r['Type'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
447 self.assertEqual(kneeT1, r['ID'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
448
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
449 r = DoDelete(_REMOTE, "/patients/%s" % kneePatient)['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
450 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
451 self.assertEqual(0, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
452 self.assertEqual(0, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
453 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
454 self.assertEqual(None, r)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
455
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
456 DropOrthanc(_REMOTE)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
457 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
458 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])
7
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
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
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
477
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
478 def test_multiframe(self):
7
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
479 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
480 self.assertEqual(76, len(DoGet(_REMOTE, '/instances/%s/frames' % i)))
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
481
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
482 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
483 self.assertEqual("L", im.mode)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
484 self.assertEqual(512, im.size[0])
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
485 self.assertEqual(512, im.size[1])
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
486
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
487 DoGet(_REMOTE, '/instances/%s/frames/0/image-uint8' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
488 DoGet(_REMOTE, '/instances/%s/frames/0/image-uint16' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
489 DoGet(_REMOTE, '/instances/%s/frames/75/preview' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
490 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/aaa/preview' % i))
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
491 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/76/preview' % i))
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
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
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
513 c = DoGet(_REMOTE, '/changes?last')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
514 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
515 self.assertEqual(begin, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
516 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
517 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
518 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
519 self.assertEqual(begin, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
520 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
521 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
522 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
523 self.assertEqual(begin - 1, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
524 self.assertFalse(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
525 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
526 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
527 self.assertEqual(begin - 2, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
528 self.assertFalse(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
529
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
530 UploadFolder(_REMOTE, 'Knee/T1')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
531 UploadFolder(_REMOTE, 'Knee/T2')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
532 since = begin
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
533 countPatients = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
534 countStudies = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
535 countSeries = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
536 countInstances = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
537 completed = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
538 while True:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
539 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
540 since = c['Last']
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
541 for i in c['Changes']:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
542 if i['ResourceType'] == 'Instance':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
543 countInstances += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
544 if i['ResourceType'] == 'Patient':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
545 countPatients += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
546 if i['ResourceType'] == 'Study':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
547 countStudies += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
548 if i['ResourceType'] == 'Series':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
549 countSeries += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
550 if i['ChangeType'] == 'NewInstance':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
551 countInstances += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
552 if i['ChangeType'] == 'NewPatient':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
553 countPatients += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
554 if i['ChangeType'] == 'NewStudy':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
555 countStudies += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
556 if i['ChangeType'] == 'NewSeries':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
557 countSeries += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
558 if i['ChangeType'] == 'CompletedSeries':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
559 completed += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
560 self.assertTrue('ID' in i)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
561 self.assertTrue('Path' in i)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
562 self.assertTrue('Seq' in i)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
563 if c['Done']:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
564 break
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
565
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
566 self.assertEqual(2 * 50, countInstances)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
567 self.assertEqual(2 * 1, countPatients)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
568 self.assertEqual(2 * 1, countStudies)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
569 self.assertEqual(2 * 2, countSeries)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
570 self.assertEqual(0, completed)
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
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
573 def test_archive(self):
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
574 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
575 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
576 knee = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
577
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
578 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
579 self.assertEqual(2, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
580
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
581 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
582 self.assertEqual(2, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
583
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
584 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
585 self.assertEqual(1, 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 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
588 brainix = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
589
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
590 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
591 self.assertEqual(2, len(z.namelist()))
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
592
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
593 z = PostArchive(_REMOTE, '/tools/create-archive', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
594 'Resources' : [ brainix, knee ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
595 })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
596 self.assertEqual(3, len(z.namelist()))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
597
8
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
598
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
599 def test_media_archive(self):
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
600 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
601 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
602
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
603 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
604 self.assertEqual(3, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
605 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
606 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
607 self.assertTrue('DICOMDIR' in z.namelist())
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 try:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
610 os.remove('/tmp/DICOMDIR')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
611 except:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
612 # The file does not exist
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
613 pass
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 z.extract('DICOMDIR', '/tmp')
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
616 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
617 stderr = subprocess.STDOUT).split('\n')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
618 self.assertEqual(3, len(a))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
619 self.assertTrue(a[0].startswith('Warning'))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
620 self.assertEqual('BasicDirectory', a[1])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
621 self.assertEqual('', a[2])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
622
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
623 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
624 stderr = subprocess.STDOUT).split('\n')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
625 self.assertEqual(1, len(a))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
626 self.assertEqual('', a[0])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
627
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
628 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
629 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
630 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
631
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
632 os.remove('/tmp/DICOMDIR')
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
633
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
634
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
635 def test_protection(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
636 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
637 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
638 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
639 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
640 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
641 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
642 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
643 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
644 DoPut(_REMOTE, '/patients/%s/protected' % a, '1', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
645 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
646 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
647 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
648
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
649
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
650 def test_raw_tags(self):
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
651 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
652
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
653 dicom = DoGet(_REMOTE, '/instances/%s/file' % i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
654 self.assertEqual('1a7c56cb02d6e742cc9c856a8ac182e3', ComputeMD5(dicom))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
655
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
656 s = '/instances/%s/content/' % i
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
657
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
658 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, s + '0008-1010').strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
659 self.assertRaises(Exception, lambda: DoGet(_REMOTE, s + '0008-1011'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
660
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
661 self.assertEqual('Abdomen', DoGet(_REMOTE, s + '7fe1-1001/0/7fe1-1008/0/7fe1-1057').strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
662 self.assertEqual('cla_3c', DoGet(_REMOTE, s + '7fe1-1001/0/7fe1-1008/8/7fe1-1057').strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
663
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
664 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
665 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
666 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
667 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
668
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
669 for i in DoGet(_REMOTE, '/instances'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
670 aid = DoGet(_REMOTE, '/instances/%s' % i)['MainDicomTags']['SOPInstanceUID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
671 self.assertEqual(aid, DoGet(_REMOTE, '/instances/%s/content/0008-0018' % i).replace(chr(0), ''))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
672
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
673
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
674 def test_raw_tags_mdn(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
675 # Bug reported by Cyril Paulus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
676 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
677 self.assertAlmostEqual(0.000027, DoGet(_REMOTE, '/instances/%s/content/7053-1000' % i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
678
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
679
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
680 def test_modify_instance(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
681 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
682 modified = DoPost(_REMOTE, '/instances/%s/modify' % i,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
683 json.dumps({
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
684 "Replace" : {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
685 "PatientName" : "hello",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
686 #"PatientID" : "world"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
687 },
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
688 "Remove" : [ "StationName" ],
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
689 "RemovePrivateTags" : True
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
690 }),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
691 'application/json')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
692 j = DoPost(_REMOTE, '/instances', modified, 'application/dicom')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
694 self.assertNotEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
695 #self.assertNotEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % i).strip())
83
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
696 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i).strip())
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
697 DoGet(_REMOTE, '/instances/%s/content/6003-1010' % i) # Some private tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
698
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
699 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
700 #self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
701 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
702 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/6003-1010' % j))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
703
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
704
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
705 def test_modify_series(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
706 # Upload 4 images from the same series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
707 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
708 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
709
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
710 origSeries = DoGet(_REMOTE, '/series')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
711 newSeries = DoPost(_REMOTE, '/series/%s/modify' % origSeries,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
712 '{"Replace":{"PatientName":"Jodogne"}}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
713 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
714
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
715 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['ModifiedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
716 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
717 self.assertEqual(4, len(instances))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
718 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
719 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
720 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
721 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
722
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
723 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
724 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
725
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
726
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
727 def test_modify_study(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
728 # Upload 4 images from the 2 series of the same study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
729 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
730 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
731 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
732
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
733 origStudy = DoGet(_REMOTE, '/studies')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
734 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
735 '{"Replace":{"PatientName":"Jodogne"}}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
736 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
737
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
738 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['ModifiedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
739 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
740 self.assertEqual(2, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
741 for s in series:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
742 ss = DoGet(_REMOTE, '/series/%s' % s)['ModifiedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
743 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
744 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
745
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
746 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
747 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
748 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
749 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
750 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
751
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
752 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
753 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
754
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
755
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
756 def test_anonymize_series(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
757 # Upload 4 images from the same series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
758 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
759 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
760
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
761 origSeries = DoGet(_REMOTE, '/series')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
762 newSeries = DoPost(_REMOTE, '/series/%s/anonymize' % origSeries,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
763 '{}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
764 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
765
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
766 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['AnonymizedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
767 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
768 self.assertEqual(4, len(instances))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
769 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
770 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
771 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
772 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
773
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
774 DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
775 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
776
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
777
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
778 def test_anonymize_study(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
779 # Upload 4 images from the 2 series of the same study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
780 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
781 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
782 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
783
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
784 origStudy = DoGet(_REMOTE, '/studies')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
785 newStudy = DoPost(_REMOTE,'/studies/%s/anonymize' % origStudy,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
786 '{"Replace":{"PatientName":"Jodogne"}}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
787 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
788
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
789 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['AnonymizedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
790 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
791 self.assertEqual(2, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
792 for s in series:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
793 ss = DoGet(_REMOTE, '/series/%s' % s)['AnonymizedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
794 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
795 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
796
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
797 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
798 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
799 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
800 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
801 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
802
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
803 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
804 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
805
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
806
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
807
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
808 def test_storescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
809 # Check emptiness
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
810 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
811 self.assertEqual(0, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
812 self.assertEqual(0, e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
813 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
814 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
815 self.assertEqual(0, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
816 self.assertEqual(0, e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
817 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
818
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
819 # Add 1 instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
820 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
821 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
822
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
823 # Export the instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
824 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') # instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
825 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
826 self.assertEqual(1, len(DoGet(_LOCAL, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
827 self.assertEqual(1, len(DoGet(_LOCAL, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
828 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
829
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
830 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
831 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
832 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
833 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
834 e = DoGet(_REMOTE, '/exports?limit=1')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
835 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
836 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
837 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
838 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
839 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
840 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
841 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
842 seqInstance = e['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
843
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
844 # Export the series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
845 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
846
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
847 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
848 self.assertEqual(2, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
849 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
850 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
851 seqSeries = e['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
852 self.assertNotEqual(seqInstance, seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
853 e = DoGet(_REMOTE, '/exports?limit=1&since=0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
854 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
855 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
856 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
857 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
858 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
859 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
860 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
861 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
862 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
863 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
864 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
865
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
866 # Export the study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
867 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
868 seqStudy = DoGet(_REMOTE, '/exports')['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
869
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
870 # Export the patient
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
871 j = DoPost(_REMOTE, '/modalities/orthanctest/store', '6816cb19-844d5aee-85245eba-28e841e6-2414fae2', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
872 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
873 self.assertEqual(1, len(DoGet(_LOCAL, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
874 self.assertEqual(1, len(DoGet(_LOCAL, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
875 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
876
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
877 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
878 self.assertEqual(4, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
879 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
880 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
881 seqPatient = e['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
882 self.assertNotEqual(seqInstance, seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
883 self.assertNotEqual(seqSeries, seqStudy)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
884 self.assertNotEqual(seqStudy, seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
885 self.assertTrue(seqInstance < seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
886 self.assertTrue(seqSeries < seqStudy)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
887 self.assertTrue(seqStudy < seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
888 e = DoGet(_REMOTE, '/exports?limit=1&since=0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
889 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
890 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
891 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
892 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
893 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
894 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
895 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
896 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqSeries))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
897 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
898 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
899 self.assertEqual(e['Exports'][-1]['Seq'], seqStudy)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
900 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqStudy))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
901 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
902 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
903 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
904 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
905 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
906 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
907 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
908
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
909
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
910 # Check the content of the logged information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
911 e = DoGet(_REMOTE, '/exports')['Exports']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
912
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
913 if 'PatientID' in e[0]:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
914 # Since Orthanc 0.8.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
915 patient = 'PatientID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
916 study = 'StudyInstanceUID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
917 series = 'SeriesInstanceUID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
918 instance = 'SOPInstanceUID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
919 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
920 # Up to Orthanc 0.8.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
921 patient = 'PatientId'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
922 study = 'StudyInstanceUid'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
923 series = 'SeriesInstanceUid'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
924 instance = 'SopInstanceUid'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
925
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
926 for k in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
927 self.assertTrue('Date' in e[k])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
928 self.assertTrue('Seq' in e[k])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
929 self.assertEqual('orthanctest', e[k]['RemoteModality'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
930
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
931 self.assertEqual(10, len(e[0]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
932 self.assertEqual('Instance', e[0]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
933 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
934 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
935 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', e[0][instance])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
936 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', e[0][series])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
937 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[0][study])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
938 self.assertEqual('ozp00SjY2xG', e[0][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
939
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
940 self.assertEqual(9, len(e[1]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
941 self.assertEqual('Series', e[1]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
942 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
943 self.assertEqual('/series/f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
944 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', e[1][series])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
945 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[1][study])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
946 self.assertEqual('ozp00SjY2xG', e[1][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
947
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
948 self.assertEqual(8, len(e[2]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
949 self.assertEqual('Study', e[2]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
950 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
951 self.assertEqual('/studies/b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
952 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[2][study])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
953 self.assertEqual('ozp00SjY2xG', e[2][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
954
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
955 self.assertEqual(7, len(e[3]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
956 self.assertEqual('Patient', e[3]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
957 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
958 self.assertEqual('/patients/6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
959 self.assertEqual('ozp00SjY2xG', e[3][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
960
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
961 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
962 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
963
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
964
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
965 def test_store_peer(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
966 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
967 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
968
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
969 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
970 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
971 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
972
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
973 j = DoPost(_REMOTE, '/peers/peer/store', str(i), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
974 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
975 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
976
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
977 self.assertEqual(1, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
978
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
979 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
980 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
981
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
982
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
983 def test_bulk_storescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
984 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
985
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
986 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
987 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
988
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
989 j = DoPost(_REMOTE, '/modalities/orthanctest/store', [ a['ID'], b['ID'] ], 'application/json')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
990 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
991
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
992 DropOrthanc(_LOCAL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
993
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
994 # Send using patient's UUID
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
995 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
996 j = DoPost(_REMOTE, '/modalities/orthanctest/store',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
997 [ 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' ], 'application/json')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
998 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
999
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1000
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1001 def test_color(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1002 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1003 im = GetImage(_REMOTE, '/instances/%s/preview' % i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1004 self.assertEqual("RGB", im.mode)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1005 self.assertEqual(41, im.size[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1006 self.assertEqual(41, im.size[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1007
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1008 # http://effbot.org/zone/pil-comparing-images.htm
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1009 truth = Image.open(GetDatabasePath('ColorTestMalaterre.png'))
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1010 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1011
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1012
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1013 def test_faking_ruby_put(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1014 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1015 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1016 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1017 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1018 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1019 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1020 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1021 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1022 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '1')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1023 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1024 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1025 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1026
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1027
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1028 def test_faking_ruby_delete(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1029 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1030 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1031 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1032 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1033 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1034 DoGet(_REMOTE, '/patients/%s' % a, data = { '_method' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1035 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1036 DoGet(_REMOTE, '/patients/%s' % b, data = { '_method' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1037 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1038
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1039
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1040 def test_faking_google_put(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1041 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1042 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1043 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1044 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1045 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1046 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1047 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1048 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1049 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '1')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1050 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1051 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1052 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1053
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1054
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1055 def test_faking_google_delete(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1056 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1057 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1058 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1059 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1060 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1061 DoPost(_REMOTE, '/patients/%s' % a, headers = { 'X-HTTP-Method-Override' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1062 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1063 DoPost(_REMOTE, '/patients/%s' % b, headers = { 'X-HTTP-Method-Override' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1064 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1065
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1066
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1067 def test_lua(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1068 self.assertEqual(42, DoPost(_REMOTE, '/tools/execute-script', 'print(42)'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1069 self.assertTrue(IsDefinedInLua(_REMOTE, 'PrintRecursive'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1070 self.assertFalse(IsDefinedInLua(_REMOTE, 'HelloWorld'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1071
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1072
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1073 def test_metadata(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1074 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1075 p = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1076 i = DoGet(_REMOTE, '/instances')[0]
369
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1077 series = DoGet(_REMOTE, '/series')[0]
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1078
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1079 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1080 self.assertEqual(1, len(m))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1081 self.assertEqual('LastUpdate', m[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1082
369
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1083 # 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
1084 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
1085 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
1086 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
1087
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1088 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
1089 self.assertEqual(1, len(m))
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1090 self.assertEqual('LastUpdate', m[0])
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1091
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1092 m = DoGet(_REMOTE, '/series/%s/metadata' % series)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1093 self.assertEqual(2, len(m))
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1094 self.assertTrue('LastUpdate' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1095
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1096 # New in Orthanc 1.9.0
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1097 self.assertTrue('RemoteAET' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1098 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
1099
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1100 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
1101 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1102 self.assertEqual(9, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1103 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
1104 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
1105 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1106 self.assertEqual(8, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1107
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1108 self.assertTrue('IndexInSeries' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1109 self.assertTrue('ReceptionDate' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1110 self.assertTrue('RemoteAET' in m)
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1111 self.assertTrue('Origin' in m)
89
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
1112 self.assertTrue('TransferSyntax' in m)
95
a807a4699eb4 testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 92
diff changeset
1113 self.assertTrue('SopClassUid' in m)
145
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1114 self.assertTrue('RemoteIP' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1115 self.assertTrue('HttpUsername' in m)
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1116 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
1117 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
1118 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
1119 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
1120 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i), '1.2.840.10008.5.1.4.1.1.4')
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1121
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1122 # Play with custom metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1123 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1124 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1125 self.assertEqual(2, len(m))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1126 self.assertTrue('LastUpdate' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1127 self.assertTrue('5555' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1128 self.assertEqual('coucou', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1129 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'hello')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1130 self.assertEqual('hello', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1131 DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1132 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1133 self.assertEqual(1, len(m))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1134 self.assertTrue('LastUpdate' in m)
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1135
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1137 def test_statistics(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1138 # Upload 16 instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1139 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1140 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1141 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1142 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1143 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1144
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1145 s = DoGet(_REMOTE, '/statistics')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1146 self.assertEqual(16, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1147 self.assertEqual(2, s['CountPatients'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1148 self.assertEqual(2, s['CountStudies'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1149 self.assertEqual(4, s['CountSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1150 d = int(s['TotalUncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1151
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1152 e = 0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1153 for patient in DoGet(_REMOTE, '/patients'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1154 s = DoGet(_REMOTE, '/patients/%s/statistics' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1155 self.assertEqual(8, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1156 self.assertEqual(1, s['CountStudies'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1157 self.assertEqual(2, s['CountSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1158 e += int(s['UncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1159
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1160 for study in DoGet(_REMOTE, '/studies'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1161 s = DoGet(_REMOTE, '/studies/%s/statistics' % study)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1162 self.assertEqual(8, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1163 self.assertEqual(2, s['CountSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1164 e += int(s['UncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1165
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1166 for series in DoGet(_REMOTE, '/series'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1167 s = DoGet(_REMOTE, '/series/%s/statistics' % series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1168 self.assertEqual(4, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1169 e += int(s['UncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1170
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1171 self.assertEqual(3 * d, e)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1172
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1173
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1174 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
1175 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
1176
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1177 patient = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1178 instance = DoGet(_REMOTE, '/instances')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1179 size = int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1180 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1181
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1182 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1183 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
1184
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1185 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
1186 if IsDicomUntilPixelDataStored(_REMOTE):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1187 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
1188 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
1189 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1190 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
1191 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1192 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
1193 self.assertTrue('dicom-as-json' in DoGet(_REMOTE, '/instances/%s/attachments' % instance))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1194
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1195 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/22' % patient, 'hello'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1196 hello = 'hellohellohellohellohellohellohellohellohello'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1197 DoPut(_REMOTE, '/patients/%s/attachments/1025' % patient, hello)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1198 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1199 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1200 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1201 size + int(DoGet(_REMOTE, '/patients/%s/attachments/1025/compressed-size' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1202
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1203 DoPut(_REMOTE, '/patients/%s/attachments/1026' % patient, 'world')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1204 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1205 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1206 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1207 size +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1208 int(DoGet(_REMOTE, '/patients/%s/attachments/1025/compressed-size' % patient)) +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1209 int(DoGet(_REMOTE, '/patients/%s/attachments/1026/compressed-size' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1210
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1211 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1212 self.assertEqual(hello, DoGet(_REMOTE, '/patients/%s/attachments/1025/data' % patient))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1213 self.assertEqual('world', DoGet(_REMOTE, '/patients/%s/attachments/1026/data' % patient))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1214 DoPost(_REMOTE, '/patients/%s/attachments/1025/verify-md5' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1215 DoPost(_REMOTE, '/patients/%s/attachments/1026/verify-md5' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1216 DoPut(_REMOTE, '/patients/%s/attachments/1026' % patient, 'world2')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1217 self.assertEqual('world2', DoGet(_REMOTE, '/patients/%s/attachments/1026/data' % patient))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1219 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/instances/%s/attachments/dicom' % instance))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1220 DoDelete(_REMOTE, '/patients/%s/attachments/1025' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1221 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1222 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1223 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1224 size + int(DoGet(_REMOTE, '/patients/%s/attachments/1026/compressed-size' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1225
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1226 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1227 DoDelete(_REMOTE, '/patients/%s/attachments/1026' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1228 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1229
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1230 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), size)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1231 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1232
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1233
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1234 def test_incoming_storescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1235 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
1236 subprocess.check_call([ FindExecutable('storescu'),
44
ffa542cce638 Toolbox.FindExecutable()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1237 _REMOTE['Server'], str(_REMOTE['DicomPort']),
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1238 GetDatabasePath('ColorTestImageJ.dcm') ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1239 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1240
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1241 i = DoGet(_REMOTE, '/instances')
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1242 self.assertEqual(1, len(i))
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1243 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
1244
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1245 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1246 self.assertEqual(9, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1247 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
1248 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1249 self.assertEqual(8, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1250
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1251 self.assertTrue('IndexInSeries' in m)
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1252 self.assertTrue('ReceptionDate' in m)
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1253 self.assertTrue('RemoteAET' in m)
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1254 self.assertTrue('Origin' in m)
89
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
1255 self.assertTrue('TransferSyntax' in m)
95
a807a4699eb4 testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 92
diff changeset
1256 self.assertTrue('SopClassUid' in m)
145
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1257 self.assertTrue('RemoteIP' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1258 self.assertTrue('CalledAET' in m)
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1259 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
1260 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
1261 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
1262 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
1263 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
1264
369
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1265 series = DoGet(_REMOTE, '/series')[0]
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1266 m = DoGet(_REMOTE, '/series/%s/metadata' % series)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1267 self.assertEqual(2, len(m))
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1268 self.assertTrue('LastUpdate' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1269 self.assertTrue('RemoteAET' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1270 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
1271 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
1272 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
1273
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1274
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1275 def test_incoming_findscu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1276 UploadInstance(_REMOTE, 'Multiframe.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1277 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1278
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1279 i = CallFindScu([ '-k', '0008,0052=PATIENT', '-k', '0010,0010' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1280 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1281 self.assertEqual(2, len(patientNames))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1282 self.assertTrue('Test Patient BG ' in patientNames)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1283 self.assertTrue('Anonymized' in patientNames)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1284
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1285 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0008,0021' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1286 series = re.findall('\(0008,0021\).*?\[\s*(.*?)\s*\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1287 self.assertEqual(2, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1288 self.assertTrue('20070208' in series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1289 self.assertTrue('19980312' in series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1290
335
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
1291 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
1292 series = re.findall('\(0008,0021\).*?\[\s*(.*?)\s*\]', i)
1059b8de42de ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 55
diff changeset
1293 self.assertEqual(1, len(series))
1059b8de42de ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 55
diff changeset
1294 self.assertTrue('19980312' in series)
1059b8de42de ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 55
diff changeset
1295
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1296 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'PatientName=Anonymized' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1297 series = re.findall('\(0010,0010\).*?\[\s*(.*?)\s*\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1298 self.assertEqual(1, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1299
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1300 # Test the "CaseSentitivePN" flag (false by default)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1301 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'PatientName=anonymized' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1302 series = re.findall('\(0010,0010\).*?\[\s*(.*?)\s*\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1303 self.assertEqual(1, len(series))
66
821d9eb73c45 Test returning sequence values
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 64
diff changeset
1304
70
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1305 # Test range search (buggy if Orthanc <= 0.9.6)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1306 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=19980312-' ])
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1307 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1308 self.assertEqual(2, len(studies))
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1309 self.assertTrue('20070208' in studies)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1310 self.assertTrue('19980312' in studies)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1311 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=19980312-19980312' ])
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1312 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1313 self.assertEqual(1, len(studies))
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1314 self.assertTrue('19980312' in studies)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1315 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=-19980312' ])
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1316 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1317 self.assertEqual(1, len(studies))
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1318 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
1319
05f48c19c60d Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 324
diff changeset
1320 # 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
1321 # 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
1322 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
1323 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
1324 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
1325 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
1326 self.assertEqual('ORTHANC', instances[1].strip())
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1327
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1328
191
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1329 def test_incoming_findscu_2(self):
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1330 # This test fails if "LookupMode_DatabaseOnly" is used
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1331 # (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
1332 # DICOM tags are returned)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1333 UploadInstance(_REMOTE, 'Multiframe.dcm')
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1334 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1335
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1336 # 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
1337 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
1338 sequences = re.findall('\(0008,2112\)', i)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1339 self.assertEqual(1, len(sequences))
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1340
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1341 # Test returning a non-main DICOM tag,
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1342 # "SecondaryCaptureDeviceID" (0018,1010), whose value is
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1343 # "MEDPC" in "ColorTestImageJ.dcm"
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1344 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0018,1010' ])
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1345 tags = re.findall('\(0018,1010\).*MEDPC', i)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1346 self.assertEqual(1, len(tags))
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1347
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1348
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1349 def test_incoming_findscu_3(self):
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1350 # This test fails if "LookupMode_DatabaseOnly" or
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1351 # "LookupMode_DiskOnAnswer" is used, as
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1352 # "SecondaryCaptureDeviceID" (0018,1010) is not a main DICOM
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1353 # 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
1354 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1355
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1356 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
1357 sequences = re.findall('\(0018,1010\)', i)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1358 self.assertEqual(1, len(sequences))
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1359
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1360
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1361 def test_incoming_movescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1362 UploadInstance(_REMOTE, 'Multiframe.dcm')
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1363
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1364 # No matching patient, so no job is created
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1365 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1366 CallMoveScu([ '--patient', '-k', '0008,0052=PATIENT', '-k', 'PatientID=none' ])
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1367 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1368
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1369 # 1 Matching patient, track the job
138
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1370 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1371 '--patient',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1372 '-k', '0008,0052=PATIENT',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1373 '-k', 'PatientID=12345678'
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1374 ])))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1375 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1377
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1378 def test_findscu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1379 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1380 j = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1381 k = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1382 DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1383
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1384 # Test the "find-patient" level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1385 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1386 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1387 self.assertEqual('ozp00SjY2xG', p[0]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1388
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1389 # Test wildcards constraints. The "LO" value representation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1390 # for PatientID is always case-sensitive, but the "PN" for
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1391 # PatientName might depend on the implementation:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1392 # "GenerateConfigurationForTests.py" will force it to be case
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1393 # insensitive (which was the default until Orthanc 0.8.6).
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1394 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'K*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1395 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1396
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1397 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'k*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1398 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1399
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1400 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : 'ozp*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1401 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1402
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1403 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : 'o?p*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1404 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1405
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1406 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : '0?q*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1407 self.assertEqual(0, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1408
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1409 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'B*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1410 self.assertEqual(0, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1411
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1412 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'b*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1413 self.assertEqual(0, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1414
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1415 DoPost(_REMOTE, '/modalities/orthanctest/store', str(j), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1416 DoPost(_REMOTE, '/modalities/orthanctest/store', str(k), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1417 DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1418 self.assertEqual(3, len(DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { })))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1419
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1420 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'A*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1421 self.assertEqual(2, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1422
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1423 # Test the "find-study" level. This is the instance "ColorTestImageJ.dcm"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1424 s = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1425 self.assertEqual(1, len(s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1426 self.assertEqual('20070208', s[0]['StudyDate'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1427
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1428 # Test range searches
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1429 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1430 'StudyDate' : '-20070101' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1431 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1432
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1433 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1434 'StudyDate' : '20090101-' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1435 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1436
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1437 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1438 'StudyDate' : '20070101-' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1439 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1440
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1441 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1442 'StudyDate' : '-20090101' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1443 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1444
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1445 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1446 'StudyDate' : '20070207-20070207' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1447 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1448
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1449 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1450 'StudyDate' : '20070208-20070208' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1451 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1452
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1453 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1454 'StudyDate' : '20070209-20070209' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1455 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1456
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1457 # Test the ModalitiesInStudy tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1458 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1459 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1460 'ModalitiesInStudy' : 'US' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1461 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1462
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1463 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1464 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1465 'ModalitiesInStudy' : 'CT' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1466 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1467
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1468 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1469 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1470 'ModalitiesInStudy' : 'US\\CT' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1471 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1472
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1473 # Test the "find-series" level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1474 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1475 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1476 'StudyInstanceUID' : s[0]['StudyInstanceUID'] })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1477 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1478
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1479 # Test "\" separator
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1480 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1481 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1482 'StudyInstanceUID' : s[0]['StudyInstanceUID'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1483 'Modality' : 'MR\\CT\\US' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1484 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1485
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1486 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1487 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1488 'StudyInstanceUID' : s[0]['StudyInstanceUID'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1489 'Modality' : 'MR\\US' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1490 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1491
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1492
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1493 def test_update_modalities(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1494 try:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1495 DoDelete(_REMOTE, '/modalities/toto')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1496 except:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1497 pass
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1498 try:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1499 DoDelete(_REMOTE, '/modalities/tata')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1500 except:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1501 pass
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1502 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
1503 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/modalities/toto'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1504 DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000 ])
116
4a196ebc7a4f updated tests for issue #31
amazy
parents: 112
diff changeset
1505 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'MedInria' ]) # check backward compatiblity with obsolete manufacturer
4a196ebc7a4f updated tests for issue #31
amazy
parents: 112
diff changeset
1506 DoDelete(_REMOTE, '/modalities/tata')
124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
1507 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'GenericNoUniversalWildcard' ])
121
1a19f953f53c also test GenericNoWildcardInDates
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 120
diff changeset
1508 DoDelete(_REMOTE, '/modalities/tata')
1a19f953f53c also test GenericNoWildcardInDates
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 120
diff changeset
1509 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'GenericNoWildcardInDates' ])
128
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1510 modalitiesReadback = DoGet(_REMOTE, '/modalities?expand')
182
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1511 self.assertEqual('STORESCP', modalitiesReadback['tata']['AET'])
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1512 self.assertEqual('localhost', modalitiesReadback['tata']['Host'])
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1513 self.assertEqual(2000, modalitiesReadback['tata']['Port'])
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1514 self.assertEqual('GenericNoWildcardInDates', modalitiesReadback['tata']['Manufacturer'])
116
4a196ebc7a4f updated tests for issue #31
amazy
parents: 112
diff changeset
1515 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000, 'InvalidManufacturerName' ]))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1516 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1517 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
1518
429cc9d03610 test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 350
diff changeset
1519 # 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
1520 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
1521 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
1522
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1523 DoDelete(_REMOTE, '/modalities/toto')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1524 DoDelete(_REMOTE, '/modalities/tata')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1525 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1526 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/tata'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1527
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1528
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1529 def test_update_peers(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1530 # curl -X PUT http://localhost:8042/peers/toto -d '["http://localhost:8042/"]' -v
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1531 try:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1532 DoDelete(_REMOTE, '/peers/toto')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1533 except:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1534 pass
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1535 try:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1536 DoDelete(_REMOTE, '/peers/tata')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1537 except:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1538 pass
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1539 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
1540 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/peers/toto'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1541 DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/' ])
214
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1542 DoPut(_REMOTE, '/peers/tata', { 'Url': 'http://localhost:8042/',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1543 'Username': 'user',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1544 'Password' : 'pass',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1545 'RemoteSelf' : 'self' })
128
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1546 self.assertTrue('tata' in DoGet(_REMOTE, '/peers'))
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1547 peersReadback = DoGet(_REMOTE, '/peers?expand')
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1548 self.assertEqual('http://localhost:8042/', peersReadback['tata']['Url'])
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1549 self.assertEqual('user', peersReadback['tata']['Username'])
214
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1550
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1551 if IsOrthancVersionAbove(_REMOTE, 1, 5, 4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1552 self.assertEqual(None, peersReadback['tata']['Password']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1553 self.assertFalse(peersReadback['tata']['Pkcs11']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1554 self.assertEqual('self', peersReadback['tata']['RemoteSelf'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1555 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1556 self.assertFalse('Password' in peersReadback['tata']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1557 self.assertFalse('Pkcs11' in peersReadback['tata']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1558 self.assertFalse('RemoteSelf' in peersReadback['tata'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1559
128
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1560 self.assertFalse('CertificateFile' in peersReadback['tata']) # make sure no sensitive data is included
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1561 self.assertFalse('CertificateKeyFile' in peersReadback['tata']) # make sure no sensitive data is included
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1562 self.assertFalse('CertificateKeyPassword' in peersReadback['tata']) # make sure no sensitive data is included
214
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1563
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1564 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/', 'a' ]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1565 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/', 'a', 'b', 'c' ]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1566 self.assertTrue('store' in DoGet(_REMOTE, '/peers/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1567 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
1568
429cc9d03610 test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 350
diff changeset
1569 # 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
1570 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
1571 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
1572
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1573 DoDelete(_REMOTE, '/peers/toto')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1574 DoDelete(_REMOTE, '/peers/tata')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1575 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1576 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/tata'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1577
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1578
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1579 def test_mesterhazy_modification(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1580 # When I modify a series ( eg. curl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1581 # http://localhost:8042/series/uidhere/modify -X POST -d
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1582 # '{"Replace":{"SeriesDate":"19990101"}}' ) the modified
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1583 # series is added to a new Study, instead of the existing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1584 # Study. Fixed in Orthanc 0.7.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1585
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1586 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1587 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1588 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1589
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1590 modified = DoPost(_REMOTE, '/series/%s/modify' % series,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1591 json.dumps({ "Replace" : { "SeriesDate" : "19990101" }}))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1592
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1593 self.assertEqual(study, DoGet(_REMOTE, '/series/%s' % modified['ID']) ['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1594
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1595
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1596 def test_create(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1597 i = DoPost(_REMOTE, '/tools/create-dicom',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1598 json.dumps({
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1599 'PatientName' : 'Jodogne',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1600 'Modality' : 'CT',
58
b5518378e23b fix test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
1601 'SOPClassUID' : '1.2.840.10008.5.1.4.1.1.1',
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1602 'PixelData' : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' # red dot in RGBA
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1603 }))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1604
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1605 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1606 self.assertEqual('CT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i['ID']).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1607
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1608 png = GetImage(_REMOTE, '/instances/%s/preview' % i['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1609 self.assertEqual((5, 5), png.size)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1610
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1611 j = DoGet(_REMOTE, i['Path'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1612 self.assertEqual('Instance', j['Type'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1613 self.assertEqual(j['ID'], i['ID'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1614
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1615
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1616 def test_pilates(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1617 # "SCU failed error when accessing orthanc with osirix" by
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1618 # Pilates Agentur (Mar 10, 2014 at 9:33 PM)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1619 i = UploadInstance(_REMOTE, 'PilatesArgenturGEUltrasoundOsiriX.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1620 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1621 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1622 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1623
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1624
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1625 def test_shared_tags(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1626 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1627 b = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1628 p = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1629
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1630 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1631 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
1632 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
1633
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
1634 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
1635 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
1636 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
1637
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1638 self.assertTrue('0008,1030' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1639 self.assertTrue('StudyDescription' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1640 self.assertTrue('0008,103e' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1641 self.assertTrue('SeriesDescription' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1642 self.assertFalse('0008,0018' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1643 self.assertFalse('SOPInstanceUID' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1644
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1645 self.assertTrue('0008,0018' in DoGet(_REMOTE, '/instances/%s/tags' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1646 self.assertTrue('SOPInstanceUID' in DoGet(_REMOTE, '/instances/%s/tags?simplify' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1647
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1648
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1649 def test_modules(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1650 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1651 p = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1652 s = DoGet(_REMOTE, '/studies')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1653 t = DoGet(_REMOTE, '/series')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1654
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1655 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/module' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1656 self.assertTrue('PatientName' in DoGet(_REMOTE, '/patients/%s/module?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1657 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/studies/%s/module-patient' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1658 self.assertTrue('PatientName' in DoGet(_REMOTE, '/studies/%s/module-patient?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1659 self.assertTrue('0008,1030' in DoGet(_REMOTE, '/studies/%s/module' % s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1660 self.assertTrue('StudyDescription' in DoGet(_REMOTE, '/studies/%s/module?simplify' % s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1661 self.assertTrue('0008,103e' in DoGet(_REMOTE, '/series/%s/module' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1662 self.assertTrue('SeriesDescription' in DoGet(_REMOTE, '/series/%s/module?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1663 self.assertTrue('0008,0018' in DoGet(_REMOTE, '/instances/%s/module' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1664 self.assertTrue('SOPInstanceUID' in DoGet(_REMOTE, '/instances/%s/module?simplify' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1665
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1666
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1667 def test_auto_directory(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1668 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1669 self.assertTrue('now' in DoGet(_REMOTE, '/tools'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1670 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
1671 self.assertTrue('invalidate-tags' in DoGet(_REMOTE, '/tools'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1672 self.assertTrue(len(DoGet(_REMOTE, '/tools/dicom-conformance')) > 1000)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1673 self.assertTrue('orthanctest' in DoGet(_REMOTE, '/modalities'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1674 self.assertTrue('echo' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1675 self.assertTrue('find' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1676 self.assertTrue('find-instance' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1677 self.assertTrue('find-patient' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1678 self.assertTrue('find-series' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1679 self.assertTrue('find-study' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1680 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1681 self.assertTrue('store' in DoGet(_REMOTE, '/peers/peer'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1682 self.assertTrue('matlab' in DoGet(_REMOTE, '/instances/%s/frames/0' % a))
79
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
1683 self.assertTrue('raw' in DoGet(_REMOTE, '/instances/%s/frames/0' % a))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1684 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/tools/nope'))
28
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1685 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/nope'))
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1686 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/nope/nope.html'))
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1687 self.assertEqual(404, DoGetRaw(_REMOTE, '/nope')[0].status)
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1688 self.assertEqual(404, DoGetRaw(_REMOTE, '/nope/nope.html')[0].status)
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1689
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1690
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1691 def test_echo(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1692 DoPost(_REMOTE, '/modalities/orthanctest/echo')
359
8b476a383999 test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 357
diff changeset
1693 DoPost(_REMOTE, '/modalities/orthanctest/echo', '{}')
8b476a383999 test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 357
diff changeset
1694
8b476a383999 test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 357
diff changeset
1695 # 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
1696 DoPost(_REMOTE, '/modalities/orthanctest/echo', '')
352
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1697 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/nope/echo'))
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1698
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1699 # New in Orthanc 1.8.1
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1700 DoPost(_REMOTE, '/tools/dicom-echo', [
355
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 354
diff changeset
1701 _REMOTE['DicomAet'], _REMOTE['Server'], _REMOTE['DicomPort'] ])
352
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1702 DoPost(_REMOTE, '/tools/dicom-echo', DoGet(_REMOTE, '/modalities/orthanctest/configuration'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1703
353
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1704 # Use the 'CheckFind' new option in Orthanc 1.8.1
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1705 DoPost(_REMOTE, '/modalities/self/echo', { 'CheckFind' : True })
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1706 DoPost(_REMOTE, '/tools/dicom-echo', {
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1707 'AET' : _REMOTE['DicomAet'],
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1708 'Host' : _REMOTE['Server'],
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1709 'Port' : _REMOTE['DicomPort'],
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1710 'CheckFind' : True
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1711 })
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1712
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1713
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1714 def test_xml(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1715 json = DoGet(_REMOTE, '/tools', headers = { 'accept' : 'application/json' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1716 xml = minidom.parseString(DoGet(_REMOTE, '/tools', headers = { 'accept' : 'application/xml' }))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1717 items = xml.getElementsByTagName('root')[0].getElementsByTagName('item')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1718 self.assertEqual(len(items), len(json))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1719
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1720 self.assertTrue('dicom-conformance' in json)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1721
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1722 ok = False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1723 for i in items:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1724 if i.childNodes[0].data == 'dicom-conformance':
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1725 ok = True
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1726 self.assertTrue(ok)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1727
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1728
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1729 def test_googlecode_issue_16(self):
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1730 i = UploadInstance(_REMOTE, 'Issue16.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1731 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)['FrameIncrementPointer']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1732 self.assertEqual('0018,1063', t)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1733
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1734
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1735 def test_googlecode_issue_22(self):
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1736 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1737 a = [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1738 "f804691f62197040438f4627c6b994f1", # Frame 0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1739 "c69eee9a51eea3e8611e82e578897254",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1740 "315666be83e2d0111c77bc0996d84901",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1741 "3e27aa959d911172c48a1436443c72b1",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1742 "958642c9e7e9d232d3869faff546058c",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1743 "5e7ea8e3e4230cae707d143481355c59",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1744 "eda37f83558d858a596175aed8b2ad47",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1745 "486713bd2895c4ecbe0e97715ac7f80a",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1746 "091ef729eb169e67da8a0faa9631f9a8",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1747 "5aa2b8c7ffe0a483efaa8e12417686ca",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1748 "e2f39e85896fe58876654b94cd0b5013",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1749 "6fd2129e4950abbe1be053bc814d5da8",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1750 "c3331a8ba7a757f3d423735ab7fa81f9",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1751 "746f808582156734dd6b6fdfd3a0b72c",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1752 "8075ea2b227a70c60ea6b7b75a6bb190",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1753 "806b8b3e300c615099c11a5ec23465aa",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1754 "7c836aa298ba6eef96434579af631a11",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1755 "a0357dc9f4f72d73a885c33d7c287446",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1756 "f25ba3be1cc7d7fad95706adc199ea7d",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1757 "8b114c526b8cbed6cad8a3248b7b480c",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1758 "44e6670f127e612a2b4aa60a0d207698",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1759 "b8945f90fe02facf2ace24ca1ecbe0a5",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1760 "95c796c2fa8f59018b15cf2987b1f79b",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1761 "ce0a51ab30224205b44920221dc27351", # Frame 23
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1762 ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1763
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1764 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1765 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/24/preview' % s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1766
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1767 for i in range(len(a)):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1768 self.assertEqual(a[i], ComputeMD5(DoGet(_REMOTE, '/instances/%s/frames/%d/preview' % (s, i))))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1769
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1770
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1771 def test_googlecode_issue_19(self):
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
1772 # This is an image with "YBR_FULL" photometric interpretation, it is not supported by Orthanc
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1773 # gdcmconv -i /home/jodogne/DICOM/GdcmDatabase/US_DataSet/HDI5000_US/3EAF5E01 -w -o Issue19.dcm
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1774
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1775 a = UploadInstance(_REMOTE, 'Issue19.dcm')['ID']
304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 302
diff changeset
1776 if not HasGdcmPlugin(_REMOTE):
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
1777 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/941ad3c8-05d05b88-560459f9-0eae0e20-6cddd533/preview'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1778
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1779
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1780 def test_googlecode_issue_37(self):
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1781 # Same test for issues 35 and 37. Fixed in Orthanc 0.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1782 u = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1783
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1784 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1785 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1786 'Query' : { 'StationName' : 'SMR4-MP3' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1787 self.assertEqual(1, len(a))
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1788
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1789
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1790 def test_rest_find(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1791 # Upload 8 instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1792 for i in range(2):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1793 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1794 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1795 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1796 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1797
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1798 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1799 'CaseSensitive' : False,
194
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1800 'Query' : { 'PatientName' : 'BRAINIX' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1801 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1802
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1803 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1804 'CaseSensitive' : False,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1805 'Query' : { 'PatientName' : 'BRAINIX\\KNEE\\NOPE' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1806 self.assertEqual(2, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1807
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1808 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1809 'CaseSensitive' : False,
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1810 'Query' : { 'PatientName' : '*n*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1811 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1812
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1813 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1814 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1815 'Query' : { 'PatientName' : '*n*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1816 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1817
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1818 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1819 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1820 'CaseSensitive' : False,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1821 'Query' : { 'PatientName' : '*ne*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1822 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1823 self.assertEqual('20080822', a[0]['MainDicomTags']['PatientBirthDate'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1824
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1825 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1826 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1827 'Query' : { 'PatientName' : '*ne*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1828 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1829
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1830 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1831 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1832 'Query' : { 'PatientName' : '*NE*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1833 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1834
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1835 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1836 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1837 'Query' : { 'PatientName' : '*NE*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1838 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1839
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1840 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1841 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1842 'Query' : { 'PatientName' : '*NE*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1843 self.assertEqual(4, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1844
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1845 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1846 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1847
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1848 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1849 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1850
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1851 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1852 self.assertEqual(4, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1853
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1854 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1855 self.assertEqual(8, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1856
194
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1857 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1858 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1859 'Query' : { 'StudyDate' : '20061201-20061201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1860 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1861 self.assertEqual('BRAINIX', a[0]['PatientMainDicomTags']['PatientName'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1862
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-20091201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1866 self.assertEqual(2, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1867 for i in range(2):
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1868 self.assertTrue(a[i]['PatientMainDicomTags']['PatientName'] in ['BRAINIX', 'KNEE'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1869
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1870 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1871 'Query' : { 'StudyDate' : '20061202-20061202' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1872 self.assertEqual(0, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1873
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1874 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1875 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1876 'Query' : { 'StudyDate' : '-20061201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1877 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1878 self.assertEqual('BRAINIX', a[0]['PatientMainDicomTags']['PatientName'])
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' : '-20051201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1883 self.assertEqual(0, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1884
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1885 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1886 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1887 'Query' : { 'StudyDate' : '20061201-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1888 self.assertEqual(2, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1889 for i in range(2):
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1890 self.assertTrue(a[i]['PatientMainDicomTags']['PatientName'] in ['BRAINIX', 'KNEE'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1891
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1892 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1893 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1894 'Query' : { 'StudyDate' : '20061202-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1895 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1896 self.assertEqual('KNEE', a[0]['PatientMainDicomTags']['PatientName'])
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' : '20080819-' }})
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' : '20080820-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1907 self.assertEqual(0, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1908
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1909
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1910
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1911 def test_rest_query_retrieve(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1912 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1913
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1914 # Upload 8 instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1915 for i in range(2):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1916 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1917 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1918 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1919 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1920
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1921 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1922 for p in DoGet(_REMOTE, '/patients'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1923 DoPost(_REMOTE, '/modalities/orthanctest/store', p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1924 DoDelete(_REMOTE, '/patients/%s' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1925
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1926 for q in DoGet(_REMOTE, '/queries'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1927 DoDelete(_REMOTE, '/queries/%s' % q)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1928
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1929 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1930 self.assertEqual(0, len(DoGet(_REMOTE, '/queries')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1931 a = DoPost(_REMOTE, '/modalities/orthanctest/query', { 'Level' : 'Series',
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1932 'Query' : {
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1933 'PatientName' : '*NE*',
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1934 'StudyDate' : '*',
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1935 }})['ID']
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1936 self.assertEqual(1, len(DoGet(_REMOTE, '/queries')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1937
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1938 b = DoGet(_REMOTE, '/queries/%s' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1939 self.assertTrue('answers' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1940 self.assertTrue('level' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1941 self.assertTrue('modality' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1942 self.assertTrue('query' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1943 self.assertTrue('retrieve' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1944 self.assertEqual('Series', DoGet(_REMOTE, '/queries/%s/level' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1945 self.assertEqual('orthanctest', DoGet(_REMOTE, '/queries/%s/modality' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1946
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1947 q = DoGet(_REMOTE, '/queries/%s/query?simplify' % a)
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1948 self.assertEqual(2, len(q))
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1949 self.assertTrue('PatientName' in q)
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1950 self.assertTrue('StudyDate' in q)
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1951 self.assertEqual('*NE*', q['PatientName'])
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1952 self.assertEqual('*', q['StudyDate'])
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1953
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1954 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1956 s = DoGet(_REMOTE, '/queries/%s/answers/0' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1957 self.assertTrue('content' in s)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1958 self.assertTrue('retrieve' in s)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1959
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1960 s = DoGet(_REMOTE, '/queries/%s/answers/0/content?simplify' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1961 self.assertEqual('887', s['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1962 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s['StudyInstanceUID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1963
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1964 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1965 DoPost(_REMOTE, '/queries/%s/answers/0/retrieve' % a, 'ORTHANC')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1966 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1967 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1968 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1969 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1970
112
9d09f6f21b60 added a test for issue #36
amazy
parents: 111
diff changeset
1971 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
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1972 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1973 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1974 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1975 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1976
186
8feebc2bf9fc test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 183
diff changeset
1977 # 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
1978 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
1979 self.assertEqual(2, len(s))
8feebc2bf9fc test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 183
diff changeset
1980 for i in range(2):
8feebc2bf9fc test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 183
diff changeset
1981 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
1982 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
1983 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
1984
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1985 DoDelete(_REMOTE, '/queries/%s' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1986 self.assertEqual(0, len(DoGet(_REMOTE, '/queries')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1987
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1988
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1989 def test_parent(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1990 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1991 patient = '6816cb19-844d5aee-85245eba-28e841e6-2414fae2'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1992 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1993 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1994 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d'
107
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
1995 self.assertEqual(instance, u)
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1996
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1997 a = DoGet(_REMOTE, '/studies/%s/patient' % study)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1998 self.assertEqual('Patient', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1999 self.assertEqual(patient, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2000
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2001 a = DoGet(_REMOTE, '/series/%s/patient' % series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2002 self.assertEqual('Patient', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2003 self.assertEqual(patient, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2004
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2005 a = DoGet(_REMOTE, '/series/%s/study' % series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2006 self.assertEqual('Study', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2007 self.assertEqual(study, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2008
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2009 a = DoGet(_REMOTE, '/instances/%s/patient' % instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2010 self.assertEqual('Patient', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2011 self.assertEqual(patient, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2012
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2013 a = DoGet(_REMOTE, '/instances/%s/study' % instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2014 self.assertEqual('Study', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2015 self.assertEqual(study, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2016
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2017 a = DoGet(_REMOTE, '/instances/%s/series' % instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2018 self.assertEqual('Series', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2019 self.assertEqual(series, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2022 def test_shanon(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2023 def Anonymize(instance, replacements = {}):
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2024 return DoPost(_REMOTE, '/instances/%s/anonymize' % instance, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2025 'Replace' : replacements,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2026 'Force' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2027 }, 'application/json')
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2028
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2029 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2030 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2031 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2032
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2033 tags = [ 'PatientID', 'StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID', 'DeidentificationMethod' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2034 ids = [ 'ozp00SjY2xG',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2035 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2036 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2037 '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2038
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2039 a = ExtractDicomTags(Anonymize(u), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2040 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2041 self.assertNotEqual(ids[i], a[i])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2042 self.assertTrue(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2043
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2044 a = ExtractDicomTags(Anonymize(u, { 'PatientName' : 'toto' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2045 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2046 self.assertNotEqual(ids[i], a[i])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2047 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2048
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2049 a = ExtractDicomTags(Anonymize(u, { 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2050 self.assertEqual('instance', a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2051 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2052
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2053 a = ExtractDicomTags(Anonymize(u, { 'SeriesInstanceUID' : 'series' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2054 self.assertEqual('series', a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2055 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2056
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2057 a = ExtractDicomTags(Anonymize(u, { 'StudyInstanceUID' : 'study' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2058 self.assertEqual('study', a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2059 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2060
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2061 a = ExtractDicomTags(Anonymize(u, { 'PatientID' : 'patient' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2062 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2063 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2064
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2065 a = ExtractDicomTags(Anonymize(u, { 'PatientID' : 'patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2066 'StudyInstanceUID' : 'study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2067 'SeriesInstanceUID' : 'series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2068 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2069 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2070 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2071
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2072 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2073
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2074
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2075 def test_shanon_2(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2076 def Modify(instance, replacements = {}):
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2077 return DoPost(_REMOTE, '/instances/%s/modify' % instance, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2078 'Replace' : replacements,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2079 'Force': True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2080 }, 'application/json')
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2081
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2082 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2083 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2084 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2085
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2086 tags = [ 'PatientID', 'StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID', 'DeidentificationMethod' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2087 ids = [ 'ozp00SjY2xG',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2088 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2089 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2090 '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2091
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2092 a = ExtractDicomTags(Modify(u), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2093 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2094 self.assertEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2095 self.assertEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2096 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2097 self.assertEqual(0, len(a[4]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2098
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2099 a = ExtractDicomTags(Modify(u, { 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2100 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2101 self.assertEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2102 self.assertEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2103 self.assertEqual('instance', a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2104
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2105 a = ExtractDicomTags(Modify(u, { 'SeriesInstanceUID' : 'series' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2106 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2107 self.assertEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2108 self.assertEqual('series', a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2109 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2110
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2111 a = ExtractDicomTags(Modify(u, { 'StudyInstanceUID' : 'study' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2112 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2113 self.assertEqual('study', a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2114 self.assertNotEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2115 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2117 a = ExtractDicomTags(Modify(u, { 'PatientID' : 'patient' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2118 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2119 self.assertNotEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2120 self.assertNotEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2121 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2122
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2123 a = ExtractDicomTags(Modify(u, { 'PatientID' : 'patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2124 'StudyInstanceUID' : 'study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2125 'SeriesInstanceUID' : 'series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2126 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2127 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2128 self.assertEqual('study', a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2129 self.assertEqual('series', a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2130 self.assertEqual('instance', a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2132 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2134
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2135 def test_instances_tags(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2136 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2137 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2138 #a = UploadInstance(_REMOTE, 'Cardiac/MR.X.1.2.276.0.7230010.3.1.4.2831157719.2256.1336386937.676343')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2139 #b = UploadInstance(_REMOTE, 'Cardiac/MR.X.1.2.276.0.7230010.3.1.4.2831157719.2256.1336386925.676329')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2141 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/patients')[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2142 self.assertEqual(2, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2143 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2144 self.assertEqual('887', i[i.keys()[1]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2145
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2146 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/studies')[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2147 self.assertEqual(2, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2148 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2149 self.assertEqual('887', i[i.keys()[1]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2150
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2151 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2152 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/series')[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2153 self.assertEqual(1, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2154 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2155
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2156 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/series')[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2157 self.assertEqual(1, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2158 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2159
136
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2160 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
2161 self.assertEqual(1, len(i))
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2162 self.assertEqual('887', i[i.keys()[0]]['0010,0020'])
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2163
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2164
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2165 def test_lookup(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2166 a = DoPost(_REMOTE, '/tools/lookup', 'ozp00SjY2xG')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2167 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2168
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2169 UploadInstance(_REMOTE, 'DummyCT.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2170
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2171 a = DoPost(_REMOTE, '/tools/lookup', 'ozp00SjY2xG')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2172 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2173 self.assertEqual('Patient', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2174 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2175 self.assertEqual('/patients/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2176
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2177 a = DoPost(_REMOTE, '/tools/lookup', '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2178 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2179 self.assertEqual('Study', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2180 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2181 self.assertEqual('/studies/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2182
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2183 a = DoPost(_REMOTE, '/tools/lookup', '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2184 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2185 self.assertEqual('Series', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2186 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2187 self.assertEqual('/series/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2188
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2189 a = DoPost(_REMOTE, '/tools/lookup', '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2190 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2191 self.assertEqual('Instance', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2192 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2193 self.assertEqual('/instances/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2194
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2195 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2196 a = DoPost(_REMOTE, '/tools/lookup', '3113719P')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2197 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2198
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2199
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2200 def test_autorouting(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2201 knee1 = 'Knee/T1/IM-0001-0001.dcm'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2202 knee2 = 'Knee/T2/IM-0001-0002.dcm'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2203 other = 'Brainix/Flair/IM-0001-0001.dcm'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2204
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2205 # Check that this version is >= 0.8.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2206 self.assertTrue(IsDefinedInLua(_REMOTE, '_InitializeJob'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2207 self.assertTrue('orthanctest' in DoGet(_REMOTE, '/modalities'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2208
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2209 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2210 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2211
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2212 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2213 DropOrthanc(_LOCAL)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2214 InstallLuaScriptFromPath(_REMOTE, 'Lua/Autorouting.lua')
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2215 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2216 UploadInstance(_REMOTE, knee2)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2217 UploadInstance(_REMOTE, other)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2218 WaitEmpty(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2219 UninstallLuaCallbacks(_REMOTE)
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2220 self.assertEqual(3, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2221
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2222 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2223 DropOrthanc(_LOCAL)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2224 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingConditional.lua')
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2225 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2226 UploadInstance(_REMOTE, knee2)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2227 UploadInstance(_REMOTE, other)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2228 WaitEmpty(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2229 UninstallLuaCallbacks(_REMOTE)
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2230 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2231
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2232 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2233 DropOrthanc(_LOCAL)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2234 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingModification.lua')
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2235 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2236 WaitEmpty(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2237 UninstallLuaCallbacks(_REMOTE)
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2238 i = DoGet(_LOCAL, '/instances')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2239 self.assertEqual(1, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2240
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2241 with tempfile.NamedTemporaryFile(delete = True) as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2242 f.write(DoGet(_LOCAL, '/instances/%s/file' % i[0]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2243 f.flush()
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
2244 routed = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ])
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2245 self.assertEqual('My Medical Device', re.search('"StationName">(.*?)<', routed).group(1).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2246 self.assertEqual(None, re.search('"MilitaryRank"', routed))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2247 self.assertEqual(None, re.search('"0051,0010"', routed)) # A private tag
17
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2248
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2249
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2250 def test_storescu_rf(self):
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2251 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2252 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2253 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2254 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
18
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2255
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2257 def test_anonymize_instance(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2258 def AnonymizeAndUpload(instanceId, parameters):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2259 return DoPost(_REMOTE, '/instances', DoPost(_REMOTE, '/instances/%s/anonymize' % instanceId, parameters,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2260 'application/json'), 'application/dicom')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2261
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2262 def ModifyAndUpload(instanceId, parameters):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2263 return DoPost(_REMOTE, '/instances', DoPost(_REMOTE, '/instances/%s/modify' % instanceId, parameters,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2264 'application/json'), 'application/dicom')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2265
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2266 a = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2267 s1 = DoGet(_REMOTE, '/instances/%s/content/PatientName' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2268 s2 = DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % a) # Some private tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2269 s3 = DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2270 s4 = DoGet(_REMOTE, '/instances/%s/content/SeriesDescription' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2271 s5 = DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2272
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2273 b = AnonymizeAndUpload(a, '{}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2274 self.assertNotEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2275 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2276
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2277 # Keep private tag (only OK since Orthanc 0.8.0)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2278 b = AnonymizeAndUpload(a, '{"Keep":["00e1-10c2"]}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2279 self.assertNotEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2280 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2282 b = AnonymizeAndUpload(a, '{"Keep":["00e1,10c2","PatientName"]}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2283 self.assertEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2284 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2285
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2286 b = AnonymizeAndUpload(a, '{"Keep":["PatientName"],"Replace":{"00e1,10c2":"Hello"}}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2287 self.assertEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2288 self.assertTrue(DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b).startswith('Hello'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2289
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2290 # Examples from the Wiki
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
2291 b = AnonymizeAndUpload(a, '{"Replace":{"PatientName":"hello","0010-0020":"world"},"Keep":["StudyDescription", "SeriesDescription"],"KeepPrivateTags": true,"Force":true}')
18
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2292 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2293 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2294 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2295 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008,103e' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2296 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008-103E' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2297 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2298 DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2299 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2300
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
2301 b = ModifyAndUpload(a, '{"Replace":{"PatientName":"hello","PatientID":"world"},"Remove":["InstitutionName"],"RemovePrivateTags": true,"Force":true}')
18
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2302 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2303 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2304 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2305 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008,103e' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2306 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2307 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2308
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
2309 b = ModifyAndUpload(a, '{"Replace":{"PatientName":"hello","PatientID":"world"},"Force":true}')
18
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2310 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2311 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2312 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1,10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2313 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2314 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008-103E' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2315 self.assertEqual(s5, DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2316
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2317
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2318 # Test modify non-existing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2319 i = DoPost(_REMOTE, '/tools/create-dicom',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2320 json.dumps({
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2321 'PatientName' : 'Jodogne',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2322 'Modality' : 'CT',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2323 }))['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2324
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2325 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2326 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2327 self.assertEqual('CT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2328
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2329 b = ModifyAndUpload(i, '{"Replace":{"StudyDescription":"hello","Modality":"world"}}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2330 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2331 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2332 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/Modality' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2333
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2334
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2335 def test_incoming_jpeg(self):
61
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2336 def storescu(image, acceptUnknownSopClassUid):
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2337 if acceptUnknownSopClassUid:
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2338 tmp = [ '-xf', GetDatabasePath('UnknownSopClassUid.cfg'), 'Default' ]
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2339 else:
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2340 tmp = [ '-xs' ]
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2341
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2342 with open(os.devnull, 'w') as FNULL:
61
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2343 subprocess.check_call([ FindExecutable('storescu') ] + tmp +
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2344 [ _REMOTE['Server'], str(_REMOTE['DicomPort']),
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2345 GetDatabasePath(image) ],
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2346 stderr = FNULL)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2347
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2348 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
2349
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2350 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
2351 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
2352 '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
2353 ])
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2354 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
2355 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
2356 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
2357 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
2358 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
2359 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
2360 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
2361 else:
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2362 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
2363
61
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2364 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
2365 self.assertRaises(Exception, lambda: storescu('UnknownSopClassUid.dcm', True))
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2366 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
2367
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2368 if IsOrthancVersionAbove(_REMOTE, 1, 9, 0):
374
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
2369 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
2370 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
2371 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
2372 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
2373 else:
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2374 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
2375
62
f9c4ce95756f removal of useless information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 61
diff changeset
2376 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
2377 storescu('Knix/Loc/IM-0001-0001.dcm', False)
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2378 storescu('UnknownSopClassUid.dcm', True)
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2379 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2380
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2381
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2382 def test_storescu_jpeg(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2383 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2384
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2385 knixStudy = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
64
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2386 i = UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm')['ID']
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2387
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2388 # This is JPEG lossless
136
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2389 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header' % i)['0002,0010']['Value'])
64
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2390 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
2391 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header?short' % i)['0002,0010'])
64
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2392
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2393 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0002.dcm')
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2394 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0003.dcm')
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2395
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2396 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
2397 b = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2398 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2399 DoPost(_REMOTE, '/modalities/orthanctest/store', [ knixStudy, a, b ])
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2400 self.assertEqual(5, len(DoGet(_LOCAL, '/instances')))
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 self.assertEqual(3, len(DoGet(_REMOTE, '/exports')['Exports']))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2403
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2404 DropOrthanc(_REMOTE)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2405 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2406
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 def test_pixel_data(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2409 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
2410 color = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2411 phenix = UploadInstance(_REMOTE, 'Phenix/IM-0001-0001.dcm')['ID']
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 phenixSize = 358 * 512 * 2
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2414 colorSize = 1000 * 1000 * 3
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2415 jpegSize = 51918
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2416
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2417 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
2418 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
2419 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
2420
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2421 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
2422 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
2423
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2424 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
2425 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
2426
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2427
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2428 def test_decode_brainix(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2429 brainix = [
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2430 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'], # (*)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2431 UploadInstance(_REMOTE, 'Formats/JpegLossless.dcm')['ID'], # JPEG-LS, same as (*) (since Orthanc 0.7.6)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2432 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
2433 ]
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2434 h = '6fb11b932d535c2be04beabd99793ff8'
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2435 maxValue = 426.0
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2436
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2437 truth = Image.open(GetDatabasePath('Formats/Brainix.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2438 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2439 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2440 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2441
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2442 truth2 = map(lambda x: min(255, x), truth.getdata())
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2443 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2444 self.AssertSameImages(truth2, '/instances/%s/image-uint8' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2445
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2446 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
2447 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2448 self.AssertSameImages(truth2, '/instances/%s/preview' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2449
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2450 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2451 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
2452
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2453
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2454 def test_decode_color(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2455 imagej = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2456 color = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2457
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2458 for i in [ imagej, color ]:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2459 for j in [ 'image-uint8', 'image-uint16', 'image-int16' ]:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2460 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
2461
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2462 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
2463 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
2464
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2465 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
2466 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
2467
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2468
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2469 def test_decode_rf(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2470 rf = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2471 truth = Image.open(GetDatabasePath('Formats/KarstenHilbertRF.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2472
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2473 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint8' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2474 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2475 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2476 self.AssertSameImages(truth.getdata(), '/instances/%s/preview' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2477
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2478 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
2479
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2480
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2481 def test_decode_multiframe(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2482 mf = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
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 # Test the first frame
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2485 truth = Image.open(GetDatabasePath('Formats/Multiframe0.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2486 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint8' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2487 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2488 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2489 self.AssertSameImages(truth.getdata(), '/instances/%s/preview' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2490 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
2491
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2492 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
2493
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2494 # Test the last frame
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2495 truth = Image.open(GetDatabasePath('Formats/Multiframe75.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2496 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
2497
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2498
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2499 def test_decode_signed(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2500 signed = UploadInstance(_REMOTE, 'SignedCT.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2501 minValue = -2000
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2502 maxValue = 4042
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 truth = Image.open(GetDatabasePath('Formats/SignedCT.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2505 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % signed)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2506
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2507 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
2508 self.AssertSameImages(truth2, '/instances/%s/image-uint16' % signed)
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 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
2511 self.AssertSameImages(truth3, '/instances/%s/image-uint8' % 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 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
2514 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
2515 self.AssertSameImages(tmp, '/instances/%s/preview' % signed)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2516
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2517 self.assertEqual('b57e6c872a3da50877c7da689b03a444', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % signed)))
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2518
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2519
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
2520 def test_googlecode_issue_32(self):
92
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2521 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/default-encoding', 'nope'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2522 self.assertEqual('Windows1251', DoPut(_REMOTE, '/tools/default-encoding', 'Windows1251'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2523 self.assertEqual('Windows1251', DoGet(_REMOTE, '/tools/default-encoding'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2524
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2525 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2526 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2527 self.assertEqual(u'Рентгенография', tags['SeriesDescription'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2528 self.assertEqual(u'Таз', tags['BodyPartExamined'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2529 self.assertEqual(u'Прямая', tags['ViewPosition'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2530
92
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2531 # 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
2532 self.assertEqual('Latin1', DoPut(_REMOTE, '/tools/default-encoding', 'Latin1'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2533
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2534 DoDelete(_REMOTE, '/instances/%s' % f)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2535 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID']
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2536 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2537 self.assertNotEqual(u'Рентгенография', tags['SeriesDescription'])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2538
314
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 312
diff changeset
2539 # Back to UTF-8
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 312
diff changeset
2540 self.assertEqual('Utf8', DoPut(_REMOTE, '/tools/default-encoding', 'Utf8'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 312
diff changeset
2541
92
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2542
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2543 def test_encodings(self):
23
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2544 # Latin-1 (ISO_IR 100)
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2545 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2546 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2547 self.assertEqual(u'IRM cérébrale, neuro-crâne', tags['StudyDescription'])
23
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2548
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2549 # Latin-2 (ISO_IR 101)
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2550 a = UploadInstance(_REMOTE, 'MarekLatin2.dcm')['ID']
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2551 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % a)
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2552 # dcm2xml MarekLatin2.dcm | iconv -f latin2 -t utf-8 | xmllint --format -
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2553 self.assertEqual('Imię i Nazwisko osoby opisującej',
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2554 i['ContentSequence'][4]['ConceptNameCodeSequence'][0]['CodeMeaning'].encode('utf-8'))
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2555
26
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2556
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2557 def test_storescu_custom_aet(self):
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2558 # 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
2559 # 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
2560 # in the REST API)."
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2561 # 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
2562
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2563 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2564
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2565 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2566 b = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2567 c = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0003.dcm')
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 j = DoPost(_REMOTE, '/modalities/orthanctest/store', {
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2570 'LocalAet' : 'YOP',
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2571 'Resources' : [ a['ID'], b['ID'] ]
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2572 })
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2573
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2574 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2575 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
2576
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2577 DropOrthanc(_LOCAL)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2578 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
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 j = DoPost(_REMOTE, '/modalities/orthanctest/store', {
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2581 'Resources' : [ c['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
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2584 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2585 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
2586
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2587 DropOrthanc(_REMOTE)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2588 DropOrthanc(_LOCAL)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2589
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2590 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingChangeAet.lua')
26
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2591 DoPost(_REMOTE, '/tools/execute-script', 'aet = "HELLO"', 'application/lua')
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 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2594 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2595 WaitEmpty(_REMOTE)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2596 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2597 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
2598
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2599 DoPost(_REMOTE, '/tools/execute-script', 'aet = nill', 'application/lua')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2600 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.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(2, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2603 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
2604
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2605 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
2606 # 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
2607 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
2608 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
2609 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
2610 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
2611 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
2612
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 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
2614 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
2615 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
2616 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
2617
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 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
2619 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
2620
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(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
2622 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
2623 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
2624 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
2625 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
2626 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
2627 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
2628 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
2629 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
2630 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
2631 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
2632 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
2633 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
2634 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
2635 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
2636
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 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
2638 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
2639 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
2640 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
2641 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
2642 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
2643 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
2644
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 += 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
2646 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
2647 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
2648
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 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
2650 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
2651 self.assertTrue(instance in s)
36
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2652
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2653
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2654 def test_create_pdf(self):
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2655 # Upload 4 instances
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2656 brainixInstance = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2657 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2658 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2659 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2660
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2661 brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2662 brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2663 brainixEpi = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8'
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2664
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2665 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f:
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2666 pdf = f.read()
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2667
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2668 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2669 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2670 'Tags' : {
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2671 'PatientName' : 'Jodogne',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2672 'Modality' : 'CT',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2673 },
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2674 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2675 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2676
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2677 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip())
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2678 self.assertEqual('OT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i['ID']).strip())
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2679
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2680 b = DoGet(_REMOTE, '/instances/%s/content/0042-0011' % i['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2681 self.assertEqual(len(b), len(pdf) + 1)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2682 self.assertEqual(ComputeMD5(b), ComputeMD5(pdf + '\0'))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2683
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2684 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2685 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2686 'Parent' : brainixPatient,
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2687 'Tags' : {
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2688 'PatientName' : 'Jodogne',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2689 }
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2690 })))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2691
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2692 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2693 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2694 'Parent' : brainixPatient,
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2695 'Tags' : { 'StudyDescription' : 'PDF^Patient' },
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2696 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2697 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2698
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2699 self.assertEqual(brainixPatient, DoGet(_REMOTE, '/instances/%s/patient' % i['ID'])['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2700
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2701 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2702 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2703 'Parent' : brainixStudy,
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2704 'Tags' : { 'SeriesDescription' : 'PDF^Study' },
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2705 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2706 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2707
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2708 self.assertEqual(brainixStudy, DoGet(_REMOTE, '/instances/%s/study' % i['ID'])['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2709
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2710 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2711 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2712 'Parent' : brainixEpi,
37
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 36
diff changeset
2713 'Tags' : { 'SpecificCharacterSet' : 'ISO_IR 13' },
36
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2714 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2715 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2716
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2717 self.assertEqual(brainixEpi, DoGet(_REMOTE, '/instances/%s/series' % i['ID'])['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2718
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2719 b = DoGet(_REMOTE, '/instances/%s/pdf' % i['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2720 self.assertEqual(len(b), len(pdf))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2721 self.assertEqual(ComputeMD5(b), ComputeMD5(pdf))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2722
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2723 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/pdf' % brainixInstance))
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2724
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2725
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2726 def test_create_series(self):
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2727 i = DoPost(_REMOTE, '/tools/create-dicom',
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2728 json.dumps({
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2729 'Tags' : {
40
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2730 'SpecificCharacterSet' : 'ISO_IR 100',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2731 'PatientName' : 'Sébastien Jodogne',
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2732 'Modality' : 'CT',
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2733 },
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2734 'Content' : [
40
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2735 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2736 'Content': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', # red dot in RGBA
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2737 'Tags' : { 'ImageComments' : 'Tutu' }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2738 },
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2739 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVQ4jZ2SWw3EIBREjwUsYAELa2EtoAULFUCyXAtroRZqoRbox254BdLC/DZnZjoXWJFgCDg8egW2CBEhEnDzyRk+Ecxz2KP/0AL8S99T+jQccAVs22qKwAuPuq0uyNg9cPLh3am+pe/dkHLZtqJHj6vXJrZ7nvzvxxgemXgUwnGfXqpee09mUwp8m022OYP6bLF7mVuVe0y/umxinsAXRd9z0k1ubWsAAAAASUVORK5CYII=',
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2740 ]
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2741 }))
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2742
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2743 s = DoGet(_REMOTE, i['Path'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2744 self.assertEqual('Series', s['Type'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2745 self.assertEqual(s['ID'], i['ID'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2746 self.assertEqual(2, len(s['Instances']))
39
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 38
diff changeset
2747 self.assertEqual(2, s['ExpectedNumberOfInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 38
diff changeset
2748 self.assertEqual('Complete', s['Status'])
40
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2749
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2750 a = DoGet(_REMOTE, '/instances/%s/tags?simplify' % s['Instances'][0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2751 b = DoGet(_REMOTE, '/instances/%s/tags?simplify' % s['Instances'][1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2752 self.assertTrue('ImageComments' in a or 'ImageComments' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2753 if 'ImageComments' in a:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2754 self.assertEqual('Tutu', a['ImageComments'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2755 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2756 self.assertEqual('Tutu', b['ImageComments'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2757
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2758 patient = DoGet(_REMOTE, '/instances/%s/patient' % s['Instances'][0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2759 self.assertEqual(patient['MainDicomTags']['PatientName'].encode('utf-8'),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2760 'Sébastien Jodogne')
47
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2761
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2762
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2763 def test_create_binary(self):
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2764 binary = ''.join(map(chr, range(256)))
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2765 encoded = 'data:application/octet-stream;base64,' + base64.b64encode(binary)
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2766 tags = {
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2767 'PatientName' : 'Jodogne',
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2768 '8899-8899' : encoded
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2769 }
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2770
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2771 i = DoPost(_REMOTE, '/tools/create-dicom',
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2772 json.dumps({
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2773 'Tags' : tags,
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2774 'PrivateCreator' : 'TestBinary',
47
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2775 }))
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2776
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2777 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip())
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2778 self.assertEqual(binary, DoGet(_REMOTE, '/instances/%s/content/8899-8899' % i['ID']).strip())
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2779
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2780 i = DoPost(_REMOTE, '/tools/create-dicom',
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2781 json.dumps({
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2782 'InterpretBinaryTags' : False,
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2783 'Tags' : tags,
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2784 'PrivateCreator' : 'TestBinary',
47
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2785 }))
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2786
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2787 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip())
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2788 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
2789
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2790
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2791 def test_patient_ids_collision(self):
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2792 # 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
2793 # same PatientID
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2794 for i in range(3):
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2795 UploadInstance(_REMOTE, 'PatientIdsCollision/Image%d.dcm' % (i + 1))
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 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2798 'Query' : { 'PatientName' : '*' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2799 self.assertEqual(1, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2800 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
2801
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2802 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2803 'CaseSensitive' : True,
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2804 'Query' : { 'PatientName' : 'FOO\\HELLO' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2805 self.assertEqual(2, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2806
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2807 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2808 'CaseSensitive' : False,
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2809 'Query' : { 'PatientName' : 'Foo' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2810 self.assertEqual(1, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2811 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
2812 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
2813 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
2814
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2815 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2816 'Query' : { 'PatientName' : '*' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2817 self.assertEqual(3, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2818 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
2819 self.assertTrue('FOO^SERIES' in d)
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2820 self.assertTrue('HELLO^SERIES' in d)
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2821 self.assertTrue('WORLD^SERIES' in d)
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2822
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2823 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
2824 self.assertEqual(1, len(set(d)))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2825 self.assertEqual('COMMON', d[0])
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2826
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2827 for i in a:
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2828 d = DoGet(_REMOTE, '/studies/%s' % i) ['MainDicomTags']['StudyDescription']
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2829 p = DoGet(_REMOTE, '/studies/%s' % i) ['PatientMainDicomTags']['PatientName']
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2830 self.assertEqual('%s^SERIES' % p, d)
49
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2831
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2832
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2833 def test_bitbucket_issue_4(self):
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2834 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2835 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2836 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0003.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2837 UploadInstance(_REMOTE, 'Formats/Jpeg.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2838 UploadInstance(_REMOTE, 'Formats/JpegLossless.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2839 UploadInstance(_REMOTE, 'Formats/Rle.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2840
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2841 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2842 self.assertEqual(6, len(DoGet(_REMOTE, '/instances')))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2843
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2844 p = DoGet(_REMOTE, '/patients')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2845 self.assertEqual(2, len(p))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2846 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
2847 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
2848 self.assertEqual(3, len(i1))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2849 self.assertEqual(3, len(i2))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2850
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2851 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
2852
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2853 self.assertEqual(6, len(DoGet(_LOCAL, '/instances')))
50
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2854
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2855
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2856 def test_create_sequence(self):
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2857 i = DoPost(_REMOTE, '/tools/create-dicom',
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2858 json.dumps({
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2859 'Tags' : {
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2860 'SpecificCharacterSet': 'ISO_IR 100', # Encode using Latin1
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2861 'PatientName': 'Jodogne^',
51
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2862 'ReferencedStudySequence': GenerateTestSequence(),
50
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2863 }
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2864 }))['ID']
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2865
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2866 self.assertEqual('Jodogne^', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i))
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2867 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
2868 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
2869 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
2870 self.assertEqual(u'Sébastien^'.encode('latin-1'),
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2871 DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence/1/StudyDescription' % i))
51
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2872
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2873
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2874 def test_modify_sequence(self):
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2875 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2876 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
2877
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2878 j = DoPost(_REMOTE, '/instances/%s/modify' % i,
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2879 json.dumps({
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2880 "Replace" : {
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2881 "PatientName" : "hello",
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2882 'ReferencedStudySequence': GenerateTestSequence(),
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 }),
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2885 'application/json')
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2886 j = DoPost(_REMOTE, '/instances', j, 'application/dicom')['ID']
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2887 DoDelete(_REMOTE, '/instances/%s' % i)
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2888
52
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2889 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence' % j)))
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2890
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2891
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2892 def test_compression(self):
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2893 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2894
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2895 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
2896 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
2897 # 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
2898 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
2899 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
2900 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2901 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
2902 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
2903 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
2904
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2905 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
2906
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2907 # 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
2908 # 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
2909 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
2910 DoPost(_REMOTE, '/instances/%s/attachments/dicom/uncompress' % i)
52
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2911
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2912 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
2913 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
2914 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
2915 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
2916 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
2917 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
2918 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
2919
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2920 ops = DoGet(_REMOTE, '/instances/%s/attachments/dicom' % i)
52
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2921 self.assertTrue('compress' in ops)
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2922 self.assertTrue('uncompress' in ops)
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2923 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
2924 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
2925 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
2926
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2927 # Re-compress the attachment
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2928 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
2929 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
2930 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
2931 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
2932 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
2933 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
2934 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
2935 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
2936 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
2937 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
2938
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2939 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
2940 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
2941 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
2942 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
2943 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
2944 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
2945 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
2946 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
2947 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
2948 self.assertEqual(us, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
53
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2949
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2950
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2951 def test_ordered_slices(self):
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2952 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2953 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2954 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s)
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2955 self.assertEqual('Sequence', o['Type'])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2956 self.assertEqual(1, len(o['Dicom']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2957 self.assertEqual('/instances/9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02/file', o['Dicom'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2958 self.assertEqual(76, len(o['Slices']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2959 for j in range(76):
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2960 self.assertEqual('/instances/9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02/frames/%d' % j, o['Slices'][j])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2961
68
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2962 self.assertEqual(1, len(o['SlicesShort']))
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2963 self.assertEqual('9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02', o['SlicesShort'][0][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2964 self.assertEqual(0, o['SlicesShort'][0][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2965 self.assertEqual(76, o['SlicesShort'][0][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2966
53
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2967 i = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2968 j = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2969 k = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0003.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2970 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2971 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s)
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2972
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2973 self.assertEqual('Volume', o['Type'])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2974 self.assertEqual(3, len(o['Dicom']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2975 self.assertEqual(3, len(o['Slices']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2976 self.assertEqual('/instances/%s/file' % i, o['Dicom'][2])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2977 self.assertEqual('/instances/%s/file' % j, o['Dicom'][1])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2978 self.assertEqual('/instances/%s/file' % k, o['Dicom'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2979 self.assertEqual('/instances/%s/frames/0' % i, o['Slices'][2])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2980 self.assertEqual('/instances/%s/frames/0' % j, o['Slices'][1])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2981 self.assertEqual('/instances/%s/frames/0' % k, o['Slices'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2982
68
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2983 self.assertEqual(3, len(o['SlicesShort']))
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2984 self.assertEqual(k, o['SlicesShort'][0][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2985 self.assertEqual(0, o['SlicesShort'][0][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2986 self.assertEqual(1, o['SlicesShort'][0][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2987 self.assertEqual(j, o['SlicesShort'][1][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2988 self.assertEqual(0, o['SlicesShort'][1][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2989 self.assertEqual(1, o['SlicesShort'][1][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2990 self.assertEqual(i, o['SlicesShort'][2][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2991 self.assertEqual(0, o['SlicesShort'][2][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2992 self.assertEqual(1, o['SlicesShort'][2][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
2993
53
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2994 i = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2995 j = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0002.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2996 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2997 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s)
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2998
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2999 self.assertEqual('Sequence', o['Type'])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3000 self.assertEqual(2, len(o['Dicom']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3001 self.assertEqual(2, len(o['Slices']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3002 self.assertEqual('/instances/%s/file' % i, o['Dicom'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3003 self.assertEqual('/instances/%s/file' % j, o['Dicom'][1])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3004 self.assertEqual('/instances/%s/frames/0' % i, o['Slices'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3005 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
3006
68
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3007 self.assertEqual(2, len(o['SlicesShort']))
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3008 self.assertEqual(i, o['SlicesShort'][0][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3009 self.assertEqual(0, o['SlicesShort'][0][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3010 self.assertEqual(1, o['SlicesShort'][0][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3011 self.assertEqual(j, o['SlicesShort'][1][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3012 self.assertEqual(0, o['SlicesShort'][1][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3013 self.assertEqual(1, o['SlicesShort'][1][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3014
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3015
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3016
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3017 def test_incoming_movescu_accession(self):
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3018 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3019
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3020 # No matching patient, so no job is created
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3021 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3022 CallMoveScu([ '--study', '-k', '0008,0052=STUDY', '-k', 'AccessionNumber=nope' ])
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3023 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3024 CallMoveScu([ '--study', '-k', '0008,0052=PATIENT', '-k', 'AccessionNumber=A10003245599' ])
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3025 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3026
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3027 # 1 Matching patient, track the job
138
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3028 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3029 '--study',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3030 '-k', '0008,0052=STUDY',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3031 '-k', 'AccessionNumber=A10003245599'
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3032 ])))
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3033
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3034 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3035
55
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3036
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3037 def test_dicom_to_json(self):
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3038 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
3039 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
3040
cd3c7f70f139 test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
3041 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
3042 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
3043 self.assertTrue(CompareTags(t, json.loads(f.read()), [
123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3044 # Tags for compatibility with DCMTK 3.6.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3045 'RETIRED_OtherPatientIDs',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3046 'OtherPatientIDs',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3047 'ACR_NEMA_2C_VariablePixelDataGroupLength',
80
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
3048 ]))
55
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3049
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3050 t = DoGet(_REMOTE, '/instances/%s/tags' % i)
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3051 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
3052 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
3053 ]))
55
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3054
60
cd3c7f70f139 test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
3055 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
3056 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
3057 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
3058 ]))
60
cd3c7f70f139 test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
3059
372
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3060
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3061 # 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
3062 # following command:
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3063 # $ 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
3064 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
3065 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
3066 a = json.loads(f.read())
378
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3067
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3068 # 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
3069 # 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
3070 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
3071 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
3072 self.assertFalse('7fe1,1001' in t)
378
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3073 del a['7fe1,0010']
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3074 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
3075 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3076 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
3077 self.assertTrue('7fe1,1001' in t)
378
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3078
65
09fc27e0899a patch for testing windows builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 64
diff changeset
3079 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
3080 tt = (json.dumps(t)
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3081 .replace('2e+022', '2e+22')
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3082 # 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
3083 .replace('IllegalPrivatePixelSequence', 'Unknown Tag & Data'))
65
09fc27e0899a patch for testing windows builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 64
diff changeset
3084 self.assertEqual(aa, tt)
57
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3085
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3086
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3087 def test_batch_archive(self):
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3088 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3089 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3090 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3091 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3092 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3093 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3094 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3095 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3096
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3097 s = DoPost(_REMOTE, '/tools/create-archive', [ ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3098 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3099 self.assertEqual(0, len(z.namelist()))
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3100
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3101 # One patient
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3102 s = DoPost(_REMOTE, '/tools/create-archive', [ 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3103 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3104 self.assertEqual(4, len(z.namelist()))
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3105
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3106 # One patient + twice its study + one series from other patient
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3107 s = DoPost(_REMOTE, '/tools/create-archive', [
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3108 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3109 '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3110 '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3111 ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3112 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3113 self.assertEqual(6, len(z.namelist()))
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3114
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3115 # One patient + one series + one instance
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3116 s = DoPost(_REMOTE, '/tools/create-archive', [
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3117 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3118 '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3119 '1d429ccb-bdcc78a1-7d129d6a-ba4966ed-fe4dbd87'
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3120 ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3121 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3122 self.assertEqual(7, len(z.namelist()))
59
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3123
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3124
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3125 def test_decode_brainix_as_jpeg(self):
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3126 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
3127
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3128 j = GetImage(_REMOTE, '/instances/%s/preview' % i)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3129 self.assertEqual('PNG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3130 self.assertEqual(j.size[0], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3131 self.assertEqual(j.size[1], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3132
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3133 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
3134 self.assertEqual('PNG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3135
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3136 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
3137 self.assertEqual('PNG', j.format)
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' : 'image/png' })
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/jpeg' })
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3143 self.assertEqual('JPEG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3144 self.assertEqual(j.size[0], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3145 self.assertEqual(j.size[1], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3146
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3147 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
3148 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
3149 self.assertLess(a, b)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3150
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3151 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
3152 self.assertEqual('JPEG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3153
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3154 # 16bit encoding is not supported with JPEG
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3155 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
3156 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
3157
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3158 # No matching content type
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3159 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
3160
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3161
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3162
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3163 def test_media_encodings(self):
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3164 ascii = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3165 latin1 = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3166 latin2 = UploadInstance(_REMOTE, 'MarekLatin2.dcm')['ID']
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 tmp = DoPost(_REMOTE, '/tools/create-media', [ascii,latin1,latin2])
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3169 z = zipfile.ZipFile(StringIO(tmp), "r")
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3170
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3171 self.assertEqual(4, len(z.namelist()))
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3172 self.assertTrue('IMAGES/IM0' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3173 self.assertTrue('IMAGES/IM1' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3174 self.assertTrue('IMAGES/IM2' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3175 self.assertTrue('DICOMDIR' in z.namelist())
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 try:
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3178 os.remove('/tmp/DICOMDIR')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3179 except:
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3180 # The file does not exist
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3181 pass
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 z.extract('DICOMDIR', '/tmp')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3184 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ],
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3185 stderr = subprocess.STDOUT).split('\n')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3186
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3187 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ],
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3188 stderr = subprocess.STDOUT).split('\n')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3189 self.assertEqual(1, len(a))
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3190 self.assertEqual('', a[0])
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3191
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3192 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ])
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3193 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
3194 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
3195 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
3196
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3197 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
3198
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3199
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3200 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
3201 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
3202 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
3203 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
3204
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3205 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
3206 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
3207 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
3208 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
3209
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3210 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
3211 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
3212 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
3213 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
3214
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3215 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
3216 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
3217 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
3218 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
3219
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3220 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
3221 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
3222 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
3223 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
3224
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3225 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
3226 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
3227 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
3228 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
3229
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3230 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
3231 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
3232 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
3233 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
3234 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
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=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
3237 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
3238 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
3239 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
3240 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
3241 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
3242
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3243 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
3244 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
3245 self.assertEqual(1, len(s))
176
48cc188ffb09 strip trailing 0 char that appears with some findscu versions
am@osimis.io
parents: 175
diff changeset
3246 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
3247 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
3248 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
3249
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3250
78
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3251 def test_decode_transfer_syntax(self):
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3252 def Check(t, md5):
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3253 i = UploadInstance(_REMOTE, 'TransferSyntaxes/%s.dcm' % t)['ID']
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3254
89
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
3255 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
3256 transferSyntax = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i)
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
3257 self.assertEqual(t, transferSyntax)
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
3258
78
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3259 if md5 == None:
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3260 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
3261 else:
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3262 m = ComputeMD5(DoGet(_REMOTE, '/instances/%s/preview' % i))
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3263 self.assertEqual(m, md5)
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3264
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3265 Check('1.2.840.10008.1.2.1', 'fae08d5415c4c0cd2cdbae4522408631')
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3266 Check('1.2.840.10008.1.2.2', 'f3d9784768b8feb54d6a50b6d5c37682')
323
fbf5bdebbba7 comment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 322
diff changeset
3267 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
3268 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
3269 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
3270 Check('1.2.840.10008.1.2.4.70', '7132cfbc457305b04b59787030c785d2')
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3271 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
3272 Check('1.2.840.10008.1.2.4.81', '801579ae7cbf28e604ea74f2c99fa2ca')
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3273 Check('1.2.840.10008.1.2.5', '6ff51ae525d362e0d04f550a64075a0e') # RLE, supported since Orthanc 1.0.1
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3274 Check('1.2.840.10008.1.2', 'd54aed9f67a100984b42942cc2e9939b')
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3275
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3276 # JPEG2k image, not supported without GDCM plugin
304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 302
diff changeset
3277 if not HasGdcmPlugin(_REMOTE):
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3278 Check('1.2.840.10008.1.2.4.90', None)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3279 Check('1.2.840.10008.1.2.4.91', None)
79
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3280
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3281
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3282 def test_raw_frame(self):
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3283 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3284 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3285 a = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3286 self.assertEqual(512 * 512 * 2, len(a))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3287 self.assertEqual(512 * 512 * 2, len(DoGet(_REMOTE, '/instances/%s/frames/23/raw' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3288 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/24/raw' % s))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3289 self.assertEqual('1914287dc4d958eca21fdaacfb3482fa', ComputeMD5(a))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3290
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3291 s = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3292 self.assertEqual(76, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3293 self.assertEqual(186274, len(DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3294 self.assertEqual(189424, len(DoGet(_REMOTE, '/instances/%s/frames/75/raw' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3295 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/76/raw' % s))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3296 im = GetImage(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3297 self.assertEqual("L", im.mode)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3298 self.assertEqual(512, im.size[0])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3299 self.assertEqual(512, im.size[1])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3300
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3301 # Test an image with 2 JPEG frames spread over multiple fragments
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3302 s = UploadInstance(_REMOTE, 'LenaTwiceWithFragments.dcm')['ID']
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3303 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3304 a = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3305 b = DoGet(_REMOTE, '/instances/%s/frames/1/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3306 self.assertEqual(69214, len(a))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3307 self.assertEqual(ComputeMD5(a), ComputeMD5(b))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3308 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/2/raw' % s))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3309 im = GetImage(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3310 self.assertEqual("RGB", im.mode)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3311 self.assertEqual(512, im.size[0])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3312 self.assertEqual(512, im.size[1])
323
fbf5bdebbba7 comment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 322
diff changeset
3313 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % s) # TODO - Doesn't work with GDCM 3.0.7 alone
79
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3314 self.assertEqual("RGB", im.mode)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3315 self.assertEqual(512, im.size[0])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3316 self.assertEqual(512, im.size[1])
81
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3317
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3318
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3319
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3320 def test_rest_movescu(self):
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3321 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3322
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3323 # Upload 4 instances
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3324 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3325 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0002.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3326 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3327 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3328
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3329 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3330 for p in DoGet(_REMOTE, '/patients'):
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3331 DoPost(_REMOTE, '/modalities/orthanctest/store', p)
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3332 DoDelete(_REMOTE, '/patients/%s' % p)
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3333
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3334 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3335
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3336 # Upload instance Brainix/Flair/IM-0001-0001.dcm
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3337 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Instance',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3338 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3339 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3340 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3341 'SeriesInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114285654497',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3342 'SOPInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314079549',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3343 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3344 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3345
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3346 # Upload series Brainix/Flair/*
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3347 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3348 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3349 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3350 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3351
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3352 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Series',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3353 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3354 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3355 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3356 'SeriesInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114285654497',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3357 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3358 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3359 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3360 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3361 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3362 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3363
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3364 # Upload series Brainix/Epi/*
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3365 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Series',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3366 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3367 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3368 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3369 'SeriesInstanceUID' : '1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314125550',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3370 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3371 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3372 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3373 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3374 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3375 self.assertEqual(3, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3376
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3377 # Upload study Knee/*
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3378 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Study',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3379 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3380 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3381 'StudyInstanceUID' : '2.16.840.1.113669.632.20.121711.10000160881',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3382 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3383 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3384 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3385 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3386 self.assertEqual(3, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3387 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3388
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3389 # Reset
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3390 for p in DoGet(_REMOTE, '/patients'):
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3391 DoDelete(_REMOTE, '/patients/%s' % p)
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3392
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3393 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3394
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3395
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3396 # Upload all at once
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3397 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Study',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3398 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3399 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3400 'StudyInstanceUID' : '2.16.840.1.113669.632.20.121711.10000160881',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3401 },
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3402 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3403 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3404 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3405 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3406 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3407 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3408 self.assertEqual(3, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3409 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3410
86
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3411
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3412
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3413 def test_reconstruct_json(self):
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3414 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3415
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3416 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3417 first = DoGet(_REMOTE, '/instances/%s/tags' % instance)
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3418
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3419 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
3420
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3421 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
3422 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
3423 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3424 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
3425
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3426 # Cannot delete the "DICOM" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3427 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
3428
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3429 # Can delete the "DICOM as JSON" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3430 r = DoDelete(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance)
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3431 self.assertTrue(type(r) is dict and len(r) == 0)
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3432
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3433 # Only the "DICOM" attachment subsists
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3434 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance)))
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3435
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3436 # Cannot manually reconstruct the "DICOM as JSON" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3437 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
3438
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3439 # Transparently reconstruct the "DICOM as JSON" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3440 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
3441 second = DoGet(_REMOTE, '/instances/%s/tags' % instance)
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3442 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
3443
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3444 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
3445 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
3446 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3447 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
3448 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
3449 self.assertEqual(str(first), str(third))
87
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3450
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3451
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3452 def test_reconstruct_json2(self):
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3453 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3454
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3455 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
3456 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
3457
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3458 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
3459 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
3460
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3461 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
3462 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
3463
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3464 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
3465 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
3466 self.assertEqual(aa, bb)
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3467 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
3468 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
3469 elif IsDicomUntilPixelDataStored(_REMOTE):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3470 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
3471 self.assertEqual(aa, bb)
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3472 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
3473 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
3474 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3475 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
3476 self.assertEqual(aa, bb)
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3477 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
3478
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3479 # 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
3480 DoPost(_REMOTE, '/tools/invalidate-tags', '', 'text/plain')
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3481
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3482 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
3483 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
3484 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
3485 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3486 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
3487 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
3488
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3489 # 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
3490 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
3491 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
3492
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3493 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
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 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3497 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
3498 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
3499
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3500
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3501 def test_private_tags(self):
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3502 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3503 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
3504 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
3505 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
3506
92
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3507
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3508 def test_findscu_encoding(self):
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3509 # Check out ../Database/Encodings/Generate.sh
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3510 TEST = u'Test-éüäöòДΘĝדصķћ๛ネİ'
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3511 ENCODINGS = {
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3512 'Arabic' : [ 'ISO_IR 127' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3513 'Ascii' : [ 'ISO_IR 6' ], # More accurately, ISO 646
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3514 'Cyrillic' : [ 'ISO_IR 144' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3515 'Greek' : [ 'ISO_IR 126' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3516 'Hebrew' : [ 'ISO_IR 138' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3517 'Japanese' : [ 'ISO_IR 13', 'shift-jis' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3518 'Latin1' : [ 'ISO_IR 100' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3519 'Latin2' : [ 'ISO_IR 101' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3520 'Latin3' : [ 'ISO_IR 109' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3521 'Latin4' : [ 'ISO_IR 110' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3522 'Latin5' : [ 'ISO_IR 148' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3523 'Thai' : [ 'ISO_IR 166', 'tis-620' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3524 'Utf8' : [ 'ISO_IR 192' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3525 }
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3526
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3527 for name in ENCODINGS.iterkeys():
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3528 if len(ENCODINGS[name]) == 1:
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3529 ENCODINGS[name].append(name.lower())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3530
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3531 UploadInstance(_REMOTE, 'Encodings/Lena-utf8.dcm')
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3532
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3533 for name in ENCODINGS.iterkeys():
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3534 self.assertEqual(name, DoPut(_REMOTE, '/tools/default-encoding', name))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3535 self.assertEqual(name, DoGet(_REMOTE, '/tools/default-encoding'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3536
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3537 i = CallFindScu([ '-k', '0008,0052=STUDY',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3538 '-k', 'SpecificCharacterSet',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3539 '-k', 'PatientName' ])
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 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3542 self.assertEqual(1, len(characterSet))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3543 self.assertEqual(ENCODINGS[name][0], characterSet[0].strip())
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 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3546 self.assertEqual(1, len(patientName))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3547
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3548 expected = TEST.encode(ENCODINGS[name][1], 'ignore')
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3549 self.assertEqual(expected, patientName[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3550
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3551
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3552 #for master in ENCODINGS:
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3553 for master in [ 'Latin1', 'Utf8', 'Cyrillic' ]: # Shortcut to speedup tests
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3554 self.assertEqual(master, DoPut(_REMOTE, '/tools/default-encoding', master))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3555 self.assertEqual(master, DoGet(_REMOTE, '/tools/default-encoding'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3556
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3557 for name in ENCODINGS:
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3558 DropOrthanc(_REMOTE)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3559 UploadInstance(_REMOTE, 'Encodings/Lena-%s.dcm' % ENCODINGS[name][1])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3560
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3561 i = CallFindScu([ '-k', '0008,0052=STUDY',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3562 '-k', 'PatientID',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3563 '-k', 'SpecificCharacterSet',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3564 '-k', 'PatientName' ])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3565 i = i.decode(ENCODINGS[master][1])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3566
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3567 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3568 self.assertEqual(1, len(characterSet))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3569 self.assertEqual(ENCODINGS[master][0], characterSet[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3570
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3571 patientId = re.findall('\(0010,0020\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3572 self.assertEqual(1, len(patientId))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3573 self.assertEqual(ENCODINGS[name][1], patientId[0].strip())
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 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3576 self.assertEqual(1, len(patientName))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3577
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3578 tmp = ENCODINGS[name][1]
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3579 expected = TEST.encode(tmp, 'ignore').decode(tmp)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3580 tmp = ENCODINGS[master][1]
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3581 expected = expected.encode(tmp, 'ignore').decode(tmp)
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 self.assertEqual(expected, patientName[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3584
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 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True,
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3587 'Level' : 'Study',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3588 'Query' : { }})
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3589 self.assertEqual(1, len(a))
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 tmp = ENCODINGS[name][1]
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3592 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
3593
314
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 312
diff changeset
3594 # Back to UTF-8
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 312
diff changeset
3595 self.assertEqual('Utf8', DoPut(_REMOTE, '/tools/default-encoding', 'Utf8'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 312
diff changeset
3596
96
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3597
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3598 def test_reconstruct(self):
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3599 def CompareMainDicomTag(expected, instance, level, tag):
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3600 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
3601
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3602 a = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3603
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3604 studies = DoGet(_REMOTE, '/studies/')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3605 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3606 self.assertEqual(1, len(studies))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3607 self.assertEqual(1, len(DoGet(_REMOTE, '/series/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3608 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/')))
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 modified = DoPost(_REMOTE, '/studies/%s/modify' % studies[0], {
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3611 "Replace" : {
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3612 "StudyDescription" : "hello",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3613 "SeriesDescription" : "world",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3614 "SOPClassUID" : "test",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3615 "SOPInstanceUID" : "myid",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3616 },
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
3617 "Keep" : [ "StudyInstanceUID", "SeriesInstanceUID" ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
3618 "Force" : True
96
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3619 })
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3620
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3621 instances = DoGet(_REMOTE, '/instances/')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3622 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3623 self.assertEqual(1, len(DoGet(_REMOTE, '/studies/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3624 self.assertEqual(1, len(DoGet(_REMOTE, '/series/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3625 self.assertEqual(2, len(instances))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3626
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3627 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
3628
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3629 CompareMainDicomTag('Knee (R)', a, 'study', 'StudyDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3630 CompareMainDicomTag('AX. FSE PD', a, 'series', 'SeriesDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3631 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
3632 CompareMainDicomTag('myid', b, '', 'SOPInstanceUID')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3633 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
3634 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
3635
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3636 DoPost(_REMOTE, '/instances/%s/reconstruct' % b, {})
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3637
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3638 CompareMainDicomTag('hello', a, 'study', 'StudyDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3639 CompareMainDicomTag('world', a, 'series', 'SeriesDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3640 CompareMainDicomTag('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', a, '', 'SOPInstanceUID')
102
9671578fd4d3 added tests for Lua HttpPost/Put/Get/Delete methods
amazy
parents: 100
diff changeset
3641
104
7530eb50c3c4 renamed HttpPost.lua into HttpClient.lua + fix tests
amazy
parents: 102
diff changeset
3642 def test_httpClient_lua(self):
7530eb50c3c4 renamed HttpPost.lua into HttpClient.lua + fix tests
amazy
parents: 102
diff changeset
3643 with open(GetDatabasePath('Lua/HttpClient.lua'), 'r') as f:
102
9671578fd4d3 added tests for Lua HttpPost/Put/Get/Delete methods
amazy
parents: 100
diff changeset
3644 result = DoPost(_REMOTE, '/tools/execute-script', f.read(), 'application/lua')
9671578fd4d3 added tests for Lua HttpPost/Put/Get/Delete methods
amazy
parents: 100
diff changeset
3645
9671578fd4d3 added tests for Lua HttpPost/Put/Get/Delete methods
amazy
parents: 100
diff changeset
3646 self.assertIn('OK', result)
107
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3647
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3648
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3649 def test_bitbucket_issue_44(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3650 # 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
3651 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3652 UploadInstance(_REMOTE, 'Issue44/Monochrome2.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3653
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3654 # dcmcjpeg +ua +eb Monochrome1.dcm Monochrome1-Jpeg.dcm
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3655 UploadInstance(_REMOTE, 'Issue44/Monochrome1-Jpeg.dcm')
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 # dcmcjpeg +ua Monochrome1.dcm Monochrome1-JpegLS.dcm
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3658 UploadInstance(_REMOTE, 'Issue44/Monochrome1-JpegLS.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3659
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3660 monochrome1 = 'bcdd600a-a6a9c522-5f0a6e84-8657c9f3-b76e59b7'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3661 monochrome1_jpeg = '9df82121-208a2da8-0038674a-3d7a773b-b7008cd2'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3662 monochrome1_jpegls = '0486d1a2-9165573f-b1976b20-e927b016-6b8d67ab'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3663 monochrome2 = 'f00947b7-f61f7164-c93414d1-c6fbda6a-9e92ed20'
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 for i in [ monochrome1, monochrome1_jpeg, monochrome1_jpegls ]:
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3666 im = GetImage(_REMOTE, '/instances/%s/preview' % i)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3667 self.assertEqual("L", im.mode)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3668 self.assertEqual(2010, im.size[0])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3669 self.assertEqual(2446, im.size[1])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3670
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3671 # 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
3672 # white (255), should be rendered as black (0) => invert
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3673 if i == monochrome1_jpeg:
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3674 # Add some tolerance because of JPEG destructive compression
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3675 self.assertGreater(10, im.getpixel((0,0)))
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3676 else:
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3677 self.assertEqual(0, im.getpixel((0,0)))
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 im = GetImage(_REMOTE, '/instances/%s/preview' % monochrome2)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3680 self.assertEqual("L", im.mode)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3681 self.assertEqual(1572, im.size[0])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3682 self.assertEqual(2010, im.size[1])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3683
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3684 # 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
3685 # white (255), should be rendered as white (255)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3686 self.assertEqual(255, im.getpixel((0,0)))
111
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3687
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3688
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3689 def test_bitbucket_issue_42(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3690 # https://bugs.orthanc-server.com/show_bug.cgi?id=42
123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3691 # 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
3692 UploadInstance(_REMOTE, 'Issue42.dcm')['ID']
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3693 modified = DoPost(_REMOTE,
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3694 '/patients/da128605-e040d0c4-310615d2-3475da63-df2d1ef4/modify',
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
3695 '{"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
3696 'application/json')
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3697 self.assertTrue('PatientID' in modified)
113
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3698
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3699
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3700 def test_rest_find_limit(self):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3701 # Check the "Since" and "Limit" parameters in URI "/tools/find"
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3702 # 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
3703
113
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3704 # Upload 6 instances
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3705 brainix = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3706 knee = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3707 for i in range(2):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3708 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
3709 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
3710 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
3711
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3712 # Check using BRAINIX
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3713 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3714 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3715 'Limit' : 10 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3716 self.assertEqual(4, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3717
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3718 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3719 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3720 'Limit' : 4 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3721 self.assertEqual(4, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3722
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3723 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3724 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3725 'Since' : 2,
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3726 'Limit' : 4 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3727 self.assertEqual(2, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3728
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3729 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3730 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3731 'Limit' : 3 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3732 self.assertEqual(3, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3733
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3734 b = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3735 for i in range(4):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3736 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3737 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3738 'Limit' : 1,
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3739 'Since' : i })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3740 self.assertEqual(1, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3741 b.append(a[0])
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3742
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3743 # 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
3744 self.assertEqual(0, len(set(b) ^ set(brainix)))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3745
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3746 # Check using KNEE
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3747 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3748 'Query' : { 'PatientName' : 'K*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3749 'Limit' : 10 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3750 self.assertEqual(2, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3751
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3752 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3753 'Query' : { 'PatientName' : 'K*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3754 'Limit' : 2 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3755 self.assertEqual(2, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3756
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3757 b = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3758 for i in range(2):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3759 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3760 'Query' : { 'PatientName' : 'K*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3761 'Limit' : 1,
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3762 'Since' : i })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3763 self.assertEqual(1, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3764 b.append(a[0])
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3765
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3766 self.assertEqual(0, len(set(b) ^ set(knee)))
115
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3767
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3768
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3769 def test_bitbucket_issue_46(self):
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3770 # "PHI remaining after anonymization"
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3771 # 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
3772
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3773 def GetAnonymizedTags(study, version):
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3774 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3775 { 'DicomVersion' : version },
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3776 'application/json') ['ID']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3777 a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3778 self.assertEqual(1, len(a))
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3779
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3780 instance = a[0]['ID']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3781
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3782 return (instance, DoGet(_REMOTE, '/instances/%s/tags' % instance))
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3783
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3784 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3785 origStudy = '6068a14b-d4df27af-9ec22145-538772d8-74f228ff'
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3786
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3787 # 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
3788 # (Patient's Mother's Birth Name) tags
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3789 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy,
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3790 '{"Replace":{"0010,1060":"OSIMIS","0032,1033":"MOTHER"}}',
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3791 'application/json')['ID']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3792
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3793 # 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
3794 # 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
3795 (instance, tags) = GetAnonymizedTags(newStudy, "2008")
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3796 self.assertTrue('0032,1033' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3797 self.assertTrue('0010,1060' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3798
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3799 # 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
3800 # 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
3801 (instance, tags) = GetAnonymizedTags(newStudy, "2017c")
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3802 self.assertFalse('0032,1033' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3803 self.assertFalse('0010,1060' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3804
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3805 t = {}
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3806 for (key, value) in tags.iteritems():
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3807 t[value['Name']] = value['Value']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3808
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3809 self.assertEqual('', t['StudyDate']) # Type 1 tag => cleared
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3810 self.assertEqual('', t['StudyTime']) # Type 1 tag => cleared
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3811 self.assertEqual('', t['PatientSex']) # Type 1 tag => cleared
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3812 self.assertFalse('SeriesDate' in t) # Type 3 tag => null
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3813 self.assertFalse('SeriesTime' in t) # Type 3 tag => null
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3814
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3815 with tempfile.NamedTemporaryFile(delete = True) as f:
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3816 # 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
3817 f.write(DoGet(_REMOTE, '/instances/%s/file' % instance))
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3818 f.flush()
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3819 subprocess.check_output([ FindExecutable('dciodvfy'), f.name ],
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3820 stderr = subprocess.STDOUT).split('\n')
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3821
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3822
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3823 def test_bitbucket_issue_55(self):
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3824 def Run(modify, query):
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3825 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3826
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3827 operation = 'modify' if modify else 'anonymize'
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3828
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3829 self.assertRaises(Exception, lambda: DoPost(
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3830 _REMOTE, '/studies/%s/%s' % (study, operation), query))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3831 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3832
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3833 query["Force"] = True
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3834 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
3835 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3836 DoDelete(_REMOTE, a)
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3837
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3838 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3839
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3840 UploadInstance(_REMOTE, 'DummyCT.dcm')
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3841 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3842
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3843 Run(True, { "Replace" : { "StudyInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3844 Run(True, { "Replace" : { "SeriesInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3845 Run(True, { "Replace" : { "SOPInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3846
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3847 Run(False, { "Keep" : [ "StudyInstanceUID" ]})
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3848 Run(False, { "Keep" : [ "SeriesInstanceUID" ]})
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3849 Run(False, { "Keep" : [ "SOPInstanceUID" ]})
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(False, { "Replace" : { "StudyInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3852 Run(False, { "Replace" : { "SeriesInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3853 Run(False, { "Replace" : { "SOPInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3854
120
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3855
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3856 def test_bitbucket_issue_56(self):
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3857 # Case-insensitive matching over accents. This test assumes
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3858 # that the "CaseSensitivePN" configuration option of Orthanc
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3859 # is set to "false" (default value).
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3860 # 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
3861
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3862 def Check(name, expected, expectedSensitive):
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3863 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
3864 '-k', '0008,0052=PATIENT',
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3865 '-k', 'PatientName=%s' % name ])
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3866 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', a)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3867 self.assertEqual(expected, len(patientNames))
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3868
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3869 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3870 'CaseSensitive' : False,
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3871 'Query' : { 'PatientName' : name }})
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3872 self.assertEqual(expected, len(a))
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3873
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3874 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3875 'CaseSensitive' : True,
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3876 'Query' : { 'PatientName' : name }})
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3877 self.assertEqual(expectedSensitive, len(a))
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3878
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3879 UploadInstance(_REMOTE, 'Encodings/Lena-latin1.dcm')
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3880
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3881 # WildcardConstraint
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3882 Check('TeSt*', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3883 Check('TeSt-a*', 0, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3884 Check('TeSt-É*', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3885 Check('TeSt-é*', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3886 Check('Test-é*', 1, 1)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3887
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3888 # ListConstraint
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3889 Check('Test-éüäöò\\nope', 1, 1)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3890 Check('Test-ÉÜÄÖÒ\\nope', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3891
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3892 # ValueConstraint
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3893 Check('Test-éüäöò', 1, 1)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3894 Check('Test-ÉÜÄÖÒ', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3895
125
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3896
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3897 def test_gbk_alias(self):
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3898 # https://groups.google.com/d/msg/orthanc-users/WMM8LMbjpUc/02-1f_yFCgAJ
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3899 # This test fails on Orthanc <= 1.3.0
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3900 i = UploadInstance(_REMOTE, '2017-09-19-GBK-Tumashu.dcm')['ID']
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3901 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3902 self.assertEqual(tags['PatientName'], u'徐浩凯')
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3903 self.assertEqual(tags['InstitutionName'], u'灌云县疾病预防控制中心')
126
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3904
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3905
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3906 def test_long_tag(self):
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3907 i = UploadInstance(_REMOTE, 'DummyCTWithLongTag.dcm')['ID']
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3908 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe'
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3909
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3910 tags = DoGet(_REMOTE, '/instances/%s/tags' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3911 self.assertTrue('0018,1020' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3912 self.assertEqual('SoftwareVersions', tags['0018,1020']['Name'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3913 self.assertEqual('TooLong', tags['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3914 self.assertEqual(None, tags['0018,1020']['Value'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3915
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3916 tags = DoGet(_REMOTE, '/instances/%s/tags?ignore-length=0018-1020' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3917 self.assertTrue('0018,1020' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3918 self.assertEqual('SoftwareVersions', tags['0018,1020']['Name'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3919 self.assertEqual('String', tags['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3920 self.assertTrue(tags['0018,1020']['Value'].startswith('Lorem ipsum dolor sit amet'))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3921
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3922 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3923 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3924 self.assertEqual(None, tags['SoftwareVersions'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3925 self.assertTrue('HeartRate' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3926 self.assertEqual(474, int(tags['HeartRate']))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3927
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3928 tags = DoGet(_REMOTE, '/instances/%s/simplified-tags' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3929 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3930 self.assertEqual(None, tags['SoftwareVersions'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3931
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3932 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify&ignore-length=0018-1020' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3933 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3934 self.assertTrue(tags['SoftwareVersions'].startswith('Lorem ipsum dolor sit amet'))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3935
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3936 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify&ignore-length=SoftwareVersions' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3937 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3938 self.assertTrue(tags['SoftwareVersions'].startswith('Lorem ipsum dolor sit amet'))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3939
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3940 tags = DoGet(_REMOTE, '/series/%s/instances-tags' % series)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3941 self.assertEqual(1, len(tags))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3942 self.assertTrue(i in tags.keys())
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3943 self.assertTrue('0018,1020' in tags[i])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3944 self.assertEqual('TooLong', tags[i]['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3945
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3946 tags = DoGet(_REMOTE, '/series/%s/instances-tags?ignore-length=SoftwareVersions' % series)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3947 self.assertEqual(1, len(tags))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3948 self.assertTrue(i in tags.keys())
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3949 self.assertTrue('0018,1020' in tags[i])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3950 self.assertEqual('String', tags[i]['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3951 self.assertTrue(tags[i]['0018,1020']['Value'].startswith('Lorem ipsum dolor sit amet'))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3952
127
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3953
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3954 def test_extended_media(self):
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3955 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3956
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3957 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
3958 self.assertEqual(2, len(z.namelist()))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3959 self.assertTrue('IMAGES/IM0' in z.namelist())
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3960 self.assertTrue('DICOMDIR' in z.namelist())
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 try:
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3963 os.remove('/tmp/DICOMDIR')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3964 except:
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3965 # The file does not exist
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3966 pass
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3967
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3968 z.extract('DICOMDIR', '/tmp')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3969 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ],
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3970 stderr = subprocess.STDOUT).split('\n')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3971 self.assertEqual(5, len(a))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3972 self.assertTrue(a[0].startswith('Warning'))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3973 self.assertEqual('BasicDirectory', a[1])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3974 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
3975 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
3976 self.assertEqual('', a[4])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3977
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3978 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ],
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3979 stderr = subprocess.STDOUT).split('\n')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3980 self.assertEqual(1, len(a))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3981 self.assertEqual('', a[0])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3982
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3983 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3984 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
3985
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3986 # Check the presence of the series description (extended tag)
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3987 self.assertTrue(re.search('T1W_aTSE', a) != None)
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3988
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3989 os.remove('/tmp/DICOMDIR')
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
132
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
3992 def test_anonymize_relationships_1(self):
133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
3993 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
3994 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
3995 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
3996
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
3997 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
3998 '{}',
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
3999 'application/json')['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4000
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4001 a = DoGet(_REMOTE, '/studies/%s/instances' % study)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4002 self.assertEqual(2, len(a))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4003 a1 = a[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4004 a2 = a[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4005
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4006 b = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4007 self.assertEqual(2, len(b))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4008 b1 = b[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4009 b2 = b[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4010
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4011 SEQUENCE = '/instances/%s/content/ReferencedImageSequence'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4012 SOP = '/instances/%s/content/ReferencedImageSequence/%d/ReferencedSOPInstanceUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4013 CLASS = '/instances/%s/content/ReferencedImageSequence/%d/ReferencedSOPClassUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4014 FRAME = '/instances/%s/content/FrameOfReferenceUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4015
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4016 self.assertEqual(DoGet(_REMOTE, FRAME % a1),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4017 DoGet(_REMOTE, FRAME % a2))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4018 self.assertEqual(DoGet(_REMOTE, FRAME % b1),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4019 DoGet(_REMOTE, FRAME % b2))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4020 self.assertNotEqual(DoGet(_REMOTE, FRAME % a1),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4021 DoGet(_REMOTE, FRAME % b1))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4022 self.assertNotEqual(DoGet(_REMOTE, FRAME % a2),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4023 DoGet(_REMOTE, FRAME % b2))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4024
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4025 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
4026 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
4027 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
4028 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
4029
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4030 for i in range(3):
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4031 self.assertEqual(DoGet(_REMOTE, SOP % (a1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4032 DoGet(_REMOTE, SOP % (a2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4033 self.assertEqual(DoGet(_REMOTE, SOP % (b1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4034 DoGet(_REMOTE, SOP % (b2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4035 self.assertNotEqual(DoGet(_REMOTE, SOP % (a1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4036 DoGet(_REMOTE, SOP % (b1, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4037 self.assertNotEqual(DoGet(_REMOTE, SOP % (a2, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4038 DoGet(_REMOTE, SOP % (b2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4039 self.assertEqual(DoGet(_REMOTE, CLASS % (a1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4040 DoGet(_REMOTE, CLASS % (b1, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4041 self.assertEqual(DoGet(_REMOTE, CLASS % (a2, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4042 DoGet(_REMOTE, CLASS % (b2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4043
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4044
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4045 def test_anonymize_relationships_2(self):
133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4046 UploadInstance(_REMOTE, 'Comunix/Ct/IM-0001-0001.dcm')
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4047 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
4048 study = '6c65289b-db2fcb71-7eaf73f4-8e12470c-a4d6d7cf'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4049
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4050 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
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 'application/json')['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4053
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4054 a = DoGet(_REMOTE, '/studies/%s/instances' % study)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4055 self.assertEqual(2, len(a))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4056 a1 = a[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4057 a2 = a[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4058
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4059 b = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4060 self.assertEqual(2, len(b))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4061 b1 = b[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4062 b2 = b[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4063
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4064 SEQUENCE = '/instances/%s/content/SourceImageSequence'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4065 SOP = '/instances/%s/content/SourceImageSequence/%d/ReferencedSOPInstanceUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4066 CLASS = '/instances/%s/content/SourceImageSequence/%d/ReferencedSOPClassUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4067
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4068 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
4069 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
4070 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
4071 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
4072 self.assertEqual(DoGet(_REMOTE, SOP % (a1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4073 DoGet(_REMOTE, SOP % (a2, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4074 self.assertEqual(DoGet(_REMOTE, SOP % (b1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4075 DoGet(_REMOTE, SOP % (b2, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4076 self.assertNotEqual(DoGet(_REMOTE, SOP % (a1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4077 DoGet(_REMOTE, SOP % (b1, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4078 self.assertNotEqual(DoGet(_REMOTE, SOP % (a2, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4079 DoGet(_REMOTE, SOP % (b2, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4080 self.assertEqual(DoGet(_REMOTE, CLASS % (a1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4081 DoGet(_REMOTE, CLASS % (b1, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4082 self.assertEqual(DoGet(_REMOTE, CLASS % (a2, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4083 DoGet(_REMOTE, CLASS % (b2, 0)))
133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4084
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4085
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4086 def test_anonymize_relationships_3(self):
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4087 sr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/StructuredReports/IM0')['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4088 mr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/StructuredReports/IM631')['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4089 study = 'ef351eb2-c1147229-062736b8-35a151e3-e32d526b'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4090
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4091 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4092 { "Keep" : [ "ContentSequence" ] }) ['ID']
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 a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4095 self.assertEqual(2, len(a))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4096
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4097 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
4098 sr2 = a[0]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4099 mr2 = a[1]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4100 else:
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4101 sr2 = a[1]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4102 mr2 = a[0]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4103
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4104 self.assertEqual(DoGet(_REMOTE, '/instances/%s/content/Modality' % sr1),
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4105 DoGet(_REMOTE, '/instances/%s/content/Modality' % sr2))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4106 self.assertEqual(DoGet(_REMOTE, '/instances/%s/content/Modality' % mr1),
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4107 DoGet(_REMOTE, '/instances/%s/content/Modality' % mr2))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4108
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4109 mrUid1 = DoGet(_REMOTE, '/instances/%s' % mr1)['MainDicomTags']['SOPInstanceUID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4110 mrUid2 = DoGet(_REMOTE, '/instances/%s' % mr2)['MainDicomTags']['SOPInstanceUID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4111 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
4112 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
4113 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
4114 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
4115
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4116 PATH1 = '/instances/%s/content/CurrentRequestedProcedureEvidenceSequence'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4117 PATH2 = PATH1 + '/0/ReferencedSeriesSequence'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4118 PATH3 = PATH2 + '/0/ReferencedSOPSequence'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4119 PATH4 = PATH3 + '/0/ReferencedSOPInstanceUID'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4120 PATH5 = PATH3 + '/0/ReferencedSOPClassUID'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4121
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4122 self.assertEqual(1, len(DoGet(_REMOTE, PATH1 % sr1)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4123 self.assertEqual(1, len(DoGet(_REMOTE, PATH2 % sr1)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4124 self.assertEqual(1, len(DoGet(_REMOTE, PATH3 % sr1)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4125 self.assertEqual(DoGet(_REMOTE, PATH4 % sr1), mrUid1)
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4126 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
4127 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
4128
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4129 self.assertEqual(1, len(DoGet(_REMOTE, PATH1 % sr2)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4130 self.assertEqual(1, len(DoGet(_REMOTE, PATH2 % sr2)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4131 self.assertEqual(1, len(DoGet(_REMOTE, PATH3 % sr2)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4132 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
4133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4134 self.assertEqual(mrUid2, DoGet(_REMOTE, PATH4 % sr2).strip('\x00'))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4135 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
4136 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
4137
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4138 content1 = DoGet(_REMOTE, '/instances/%s/tags?simplify' % sr1) ['ContentSequence']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4139 content2 = DoGet(_REMOTE, '/instances/%s/tags?simplify' % sr2) ['ContentSequence']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4140 self.assertEqual(str(content1), str(content2))
141
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4141
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4142
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4143 def test_bitbucket_issue_94(self):
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4144 # "a simple instance modification should not modify FrameOfReferenceUID + ..."
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
4145 # 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
4146 i = UploadInstance(_REMOTE, 'Issue94.dcm')['ID']
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4147
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4148 source = DoGet(_REMOTE, '/instances/%s/attachments/dicom/data' % i)
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 modified = DoPost(_REMOTE, '/instances/%s/modify' % i,
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4151 { "Replace" : {"PatientID" : "toto"}, "Force": True})
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4152
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4153 anonymized = DoPost(_REMOTE, '/instances/%s/anonymize' % i)
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4154
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4155 a = ExtractDicomTags(source, [ 'FrameOfReferenceUID' ])
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4156 self.assertEqual(1, len(a))
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 b = ExtractDicomTags(modified, [ 'FrameOfReferenceUID' ])
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4159 self.assertEqual(1, len(b))
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 c = ExtractDicomTags(anonymized, [ 'FrameOfReferenceUID' ])
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4162 self.assertEqual(1, len(c))
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4163
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4164 self.assertEqual(a, b) # Modified DICOM
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4165 self.assertNotEqual(a, c) # Anonymized DICOM
143
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4166
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4167
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4168 def test_metadata_origin(self):
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4169 # Upload using the REST API
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4170 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
4171 self.assertEqual('RestApi', DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4172 self.assertEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4173 self.assertNotEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteIP' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4174 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata/CalledAET' % i))
315
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4175
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4176 # "HttpUsername" is empty iff "AuthenticationEnabled" is "false"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4177 self.assertTrue(DoGet(_REMOTE, '/instances/%s/metadata/HttpUsername' % i) in [ '', 'alice' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4178
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4179 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % i)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4180 self.assertEqual('RestApi', m['Origin'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4181 self.assertEqual('', m['RemoteAET'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4182 self.assertNotEqual('', m['RemoteIP'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4183 self.assertFalse('CalledAET' in m)
315
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4184 self.assertTrue('HttpUsername' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4185 self.assertTrue(m['HttpUsername'] in [ '', 'alice' ])
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4186
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4187 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
4188 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
4189 self.assertEqual('1', m['IndexInSeries'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4190 self.assertTrue('ReceptionDate' in m)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4191
143
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4192 DoDelete(_REMOTE, '/instances/%s' % i)
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4193
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4194 # Upload using the DICOM protocol
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4195 subprocess.check_call([ FindExecutable('storescu'),
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4196 _REMOTE['Server'], str(_REMOTE['DicomPort']),
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4197 GetDatabasePath('Knee/T1/IM-0001-0001.dcm'),
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4198 '-xw' ]) # Propose JPEG2000
143
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4199 self.assertEqual('DicomProtocol', DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4200 self.assertEqual('STORESCU', DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4201 self.assertNotEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteIP' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4202 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
4203 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
4204
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4205 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % i)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4206 self.assertEqual('DicomProtocol', m['Origin'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4207 self.assertEqual('STORESCU', m['RemoteAET'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4208 self.assertNotEqual('', m['RemoteIP'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4209 self.assertEqual('ANY-SCP', m['CalledAET'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4210 self.assertFalse('HttpUsername' in m)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4211
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4212 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
4213 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
4214 self.assertEqual('1', m['IndexInSeries'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4215 self.assertTrue('ReceptionDate' in m)
147
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4216
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4217
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4218 def test_lua_deadlock(self):
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4219 # Rana Asim Wajid (2018-07-14): "It does seem that the issue
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4220 # is with the lua script I'm using for conversion of images to
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4221 # JPEG2000. When the script is used with 1.4.0 the first
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4222 # instance appears to be stored and then everything just
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4223 # halts, ie Orthanc wont respond to anything after that."
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4224 # https://groups.google.com/d/msg/orthanc-users/Rc-Beb42xc8/JUgdzrmCAgAJ
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
4225 InstallLuaScriptFromPath(_REMOTE, 'Lua/Jpeg2000Conversion.lua')
147
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4226
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4227 subprocess.check_call([ FindExecutable('storescu'),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4228 _REMOTE['Server'], str(_REMOTE['DicomPort']),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4229 GetDatabasePath('Brainix/Flair/IM-0001-0001.dcm'),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4230 GetDatabasePath('Brainix/Flair/IM-0001-0002.dcm'),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4231 ])
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4232
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4233 instances = DoGet(_REMOTE, '/instances')
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4234 self.assertEqual(2, len(instances))
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4235
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4236 t1 = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % instances[0])
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4237 t2 = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % instances[1])
175
am@osimis.io
parents: 174
diff changeset
4238 self.assertEqual('1.2.840.10008.1.2.4.90', t1) # this will fail if libgdcm-tools is not installed
147
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4239 self.assertEqual(t1, t2);
154
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4240
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4241
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4242 def test_find_group_length(self):
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4243 # 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
4244 # one of the Generic Group Length tags (*, 0x0000)
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4245 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
4246 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
4247 self.assertFalse('UnableToProcess' in result)
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4248 self.assertFalse('E:' in result)
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4249
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4250
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4251 def test_split(self):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4252 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4253 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
4254 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
4255 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
4256 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4257 t1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4258 t2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4259
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4260 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4261 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4262
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4263 info = DoGet(_REMOTE, '/studies/%s' % study)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4264 self.assertTrue('ReferringPhysicianName' in info['MainDicomTags'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4265
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4266 job = MonitorJob2(_REMOTE, lambda: DoPost
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4267 (_REMOTE, '/studies/%s/split' % study, {
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4268 'Series' : [ t2 ],
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4269 'Replace' : { 'PatientName' : 'Hello' },
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4270 'Remove' : [ 'ReferringPhysicianName' ],
181
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4271 'KeepSource' : False,
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4272 'Asynchronous' : True
179
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
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4275 self.assertNotEqual(None, job)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4276
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4277 studies = set(DoGet(_REMOTE, '/studies'))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4278 self.assertEqual(2, len(studies))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4279
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4280 series = set(DoGet(_REMOTE, '/series'))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4281 self.assertEqual(2, len(series))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4282 self.assertTrue(t1 in series)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4283
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4284 study2 = DoGet(_REMOTE, '/jobs/%s' % job)['Content']['TargetStudy']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4285 self.assertTrue(study in studies)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4286 self.assertTrue(study2 in 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 info = DoGet(_REMOTE, '/studies/%s' % study2)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4289 self.assertTrue('Hello', info['PatientMainDicomTags']['PatientName'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4290 self.assertFalse('ReferringPhysicianName' in info['MainDicomTags'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4291
254
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4292 sopInstanceUids = set()
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4293 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
4294 sopInstanceUids.add(i['MainDicomTags']['SOPInstanceUID'])
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4295
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4296 self.assertTrue(knee1Sop in sopInstanceUids)
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4297
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4298 # Fails if Orthanc <= 1.5.7
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4299 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
4300
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4301 # 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
4302 self.assertEqual(2, len(sopInstanceUids))
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4303
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4304
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4305 def test_merge(self):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4306 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
4307 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
4308 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
4309 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
4310 knee = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4311 t1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4312 brainix = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4313 flair = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4314
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4315 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4316 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4317
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4318 job = MonitorJob2(_REMOTE, lambda: DoPost
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4319 (_REMOTE, '/studies/%s/merge' % knee, {
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4320 'Resources' : [ brainix ],
181
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4321 'KeepSource' : True,
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4322 'Synchronous' : False
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4323 }))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4324
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4325 self.assertNotEqual(None, job)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4326
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4327 studies = set(DoGet(_REMOTE, '/studies'))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4328 self.assertEqual(2, len(studies))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4329 self.assertTrue(knee in studies)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4330 self.assertTrue(brainix in studies)
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 series = set(DoGet(_REMOTE, '/studies/%s' % knee)['Series'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4333 self.assertTrue(t1 in series)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4334 series.remove(t1)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4335 self.assertEqual(1, len(series))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4336
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4337 instances = DoGet(_REMOTE, '/series/%s' % list(series)[0])['Instances']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4338 self.assertEqual(1, len(instances))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4339 merged = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4340
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4341 instances = DoGet(_REMOTE, '/series/%s' % t1)['Instances']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4342 self.assertEqual(1, len(instances))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4343 a = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0])
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' % flair)['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 b = 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 tags = DoGet(_REMOTE, '/studies/%s' % knee)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4350
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4351 for key in tags['PatientMainDicomTags']:
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4352 self.assertEqual(a[key], merged[key])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4353 if (key in b and key != 'PatientSex'):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4354 self.assertNotEqual(a[key], b[key])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4355
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4356 for key in tags['MainDicomTags']:
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4357 # Not in the patient/study module
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4358 if (not key in [ 'InstitutionName',
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4359 'RequestingPhysician',
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4360 'RequestedProcedureDescription', ]):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4361 self.assertEqual(a[key], merged[key])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4362 if (key in b):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4363 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
4364
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4365 sopInstanceUids = set()
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4366 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
4367 sopInstanceUids.add(i['MainDicomTags']['SOPInstanceUID'])
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4368
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4369 self.assertTrue(kneeSop in sopInstanceUids)
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4370 self.assertTrue(brainixSop in sopInstanceUids)
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4371
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4372 # Fails if Orthanc <= 1.5.7
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4373 # 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
4374 self.assertEqual(3, len(sopInstanceUids))
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4375
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4376
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4377 def test_async_archive(self):
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4378 # Testing the asynchronous generation of archives/medias (new
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4379 # in Orthanc 1.4.3)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4380 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4381 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4382
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4383 kneeT1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4384 kneeT2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4385
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4386 job = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4387 (_REMOTE, '/studies/%s/archive' % kneeT1, {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4388 'Synchronous' : False
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4389 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4390
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4391 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4392 self.assertEqual(1, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4393 self.assertFalse('DICOMDIR' in z.namelist())
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4394
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4395 info = DoGet(_REMOTE, '/jobs/%s' % job)
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4396 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
4397 self.assertEqual(1, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4398 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4399
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4400 job2 = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4401 (_REMOTE, '/studies/%s/media' % kneeT1, {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4402 'Synchronous' : False
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4403 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4404
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4405 # The archive from the first job has been replaced by the
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4406 # archive from second job (as MediaArchiveSize == 1)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4407 self.assertRaises(Exception, lambda: GetArchive(_REMOTE, '/jobs/%s/archive' % job))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4408
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4409 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job2)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4410 self.assertEqual(2, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4411 self.assertTrue('DICOMDIR' in z.namelist())
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4412
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4413 info = DoGet(_REMOTE, '/jobs/%s' % job2)
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4414 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
4415 self.assertEqual(1, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4416 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4417
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4418 job = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4419 (_REMOTE, '/tools/create-archive', {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4420 'Synchronous' : False,
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4421 'Resources' : [ kneeT1, kneeT2 ],
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4422 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4423
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4424 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4425 self.assertEqual(2, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4426 self.assertFalse('DICOMDIR' in z.namelist())
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4427
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4428 info = DoGet(_REMOTE, '/jobs/%s' % job)
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4429 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
4430 self.assertEqual(2, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4431 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4432
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4433 job = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4434 (_REMOTE, '/tools/create-media', {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4435 'Synchronous' : False,
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4436 'Resources' : [ kneeT1, kneeT2 ],
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4437 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4438
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4439 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4440 self.assertEqual(3, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4441 self.assertTrue('DICOMDIR' in z.namelist())
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4442
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4443 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
4444 self.assertEqual(2, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4445 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4446
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4447
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4448 def test_queries_hierarchy(self):
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4449 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4450 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
4451
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4452 tags = {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4453 'NumberOfPatientRelatedInstances' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4454 'NumberOfPatientRelatedSeries' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4455 'NumberOfPatientRelatedStudies' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4456 'NumberOfStudyRelatedInstances' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4457 'NumberOfStudyRelatedSeries' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4458 'NumberOfSeriesRelatedInstances' : '',
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
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4461 tags2 = copy.copy(tags)
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4462 tags2['PatientID'] = '887' # Only consider the "Knee" patient
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4463
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4464 patient = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4465 'Level' : 'Patient',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4466 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4467 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4468
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4469 study = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4470 'Level' : 'Study',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4471 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4472 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4473
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4474 series = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4475 'Level' : 'Series',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4476 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4477 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4478
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4479 instance = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4480 'Level' : 'Instance',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4481 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4482 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4483
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4484 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
4485 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4486 self.assertEqual('887', p[0]['PatientID'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4487 self.assertEqual('1', p[0]['NumberOfPatientRelatedInstances'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4488 self.assertEqual('1', p[0]['NumberOfPatientRelatedSeries'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4489 self.assertEqual('1', p[0]['NumberOfPatientRelatedStudies'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4490 self.assertFalse('NumberOfStudyRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4491 self.assertFalse('NumberOfStudyRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4492 self.assertFalse('NumberOfSeriesRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4493
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4494 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
4495 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4496 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
4497 self.assertEqual('1', p[0]['NumberOfStudyRelatedInstances'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4498 self.assertEqual('1', p[0]['NumberOfStudyRelatedSeries'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4499 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4500 self.assertFalse('NumberOfPatientRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4501 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4502 self.assertFalse('NumberOfSeriesRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4503
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4504 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
4505 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4506 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
4507 self.assertEqual('1', p[0]['NumberOfSeriesRelatedInstances'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4508 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4509 self.assertFalse('NumberOfPatientRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4510 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4511 self.assertFalse('NumberOfStudyRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4512 self.assertFalse('NumberOfStudyRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4513
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4514 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
4515 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4516 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
4517
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4518 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
4519 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4520 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
4521 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % study))
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4522
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4523 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
4524 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4525 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
4526 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4527
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4528 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
4529 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4530 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
4531 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4532
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4533 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
4534 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4535 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
4536 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4537
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4538 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
4539 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4540 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
4541 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4542
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4543 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
4544 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4545 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
4546 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4547
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4548
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4549 def test_dicom_disk_size(self):
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4550 dicomSize = 0
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4551
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4552 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
4553 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
4554
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4555 for i in range(2):
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4556 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
4557 UploadInstance(_REMOTE, p)
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4558 dicomSize += os.path.getsize(GetDatabasePath(p))
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4559
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4560 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
4561 self.assertEqual(2, s['CountInstances'])
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4562 self.assertEqual(2, s['CountSeries'])
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4563 self.assertEqual(1, s['CountStudies'])
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4564
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4565 self.assertEqual(dicomSize, int(s['DicomUncompressedSize']))
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4566
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4567 if isCompressed:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4568 self.assertGreater(dicomSize, int(s['DicomDiskSize']))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4569 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
4570 self.assertLess(dicomSize, int(s['UncompressedSize']))
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4571 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4572 self.assertEqual(dicomSize, int(s['DicomDiskSize']))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4573 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
4574 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
4575 if IsDicomUntilPixelDataStored(_REMOTE):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
4576 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
4577 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
4578 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
4579 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
4580 # 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
4581 # 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
4582 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
4583
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4584
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4585 def test_changes_2(self):
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4586 # 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
4587 # 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
4588
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4589 # 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
4590 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
4591 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
4592 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
4593 DoDelete(_REMOTE, '/instances/%s' % a)
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4594
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4595 # 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
4596 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
4597
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4598 c = DoGet(_REMOTE, '/changes')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4599 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
4600 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4601 seq = c['Last']
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 c = DoGet(_REMOTE, '/changes?last')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4604 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
4605 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4606 self.assertEqual(seq, c['Last'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4607
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4608 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
4609 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
4610 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4611 self.assertEqual(seq, c['Last'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4612
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4613 # Add one instance
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4614 UploadInstance(_REMOTE, 'DummyCT.dcm')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4615 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
4616
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4617 c = DoGet(_REMOTE, '/changes')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4618 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
4619 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4620 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
4621
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4622 c = DoGet(_REMOTE, '/changes?last')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4623 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
4624 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4625 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
4626
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4627 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
4628 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
4629 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4630 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
4631
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4632 # Remove the uploaded instance
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4633 DoDelete(_REMOTE, '/instances/%s' % a)
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4634 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
4635
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4636 c = DoGet(_REMOTE, '/changes')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4637 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
4638 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4639 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
4640
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4641 c = DoGet(_REMOTE, '/changes?last')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4642 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
4643 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4644 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
4645
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4646 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
4647 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
4648 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4649 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
4650
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4651
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4652 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
4653 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
4654
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4655 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
4656 self.assertEqual(2, len(z.namelist()))
207
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4657
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4658
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4659 def test_invalid_findscp(self):
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4660 UploadInstance(_REMOTE, 'DummyCT.dcm')
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4661 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
4662 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
4663
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4664
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4665 def test_bitbucket_issue_90(self):
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4666 def CountDicomResults(sex):
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4667 a = CallFindScu([ '-S', '-k', '8,52=STUDY', '-k', sex ])
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4668 return len(re.findall('\(0010,0040\)', a))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4669
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4670 def CountRestResults(sex):
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4671 a = DoPost(_REMOTE, '/tools/find',
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4672 { 'Level' : 'Study', 'Query' : { 'PatientSex' : sex } })
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4673 return len(a)
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4674
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4675 # 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
4676 # "DummyCT.dcm" has the tag PatientSex (0010,0040) unset
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4677 UploadInstance(_REMOTE, 'DummyCT.dcm')
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4678
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4679 # 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
4680
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4681 # 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
4682 self.assertEqual(0, CountDicomResults('PatientSex=*'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4683 self.assertEqual(0, CountRestResults('*'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4684
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4685 # 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
4686 self.assertEqual(0, CountDicomResults('PatientSex=F'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4687 self.assertEqual(0, CountDicomResults('PatientSex=M'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4688 self.assertEqual(0, CountRestResults('F'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4689 self.assertEqual(0, CountRestResults('M'))
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 # 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
4692 # 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
4693 # as a filter in such a situation.
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4694 self.assertEqual(1, CountDicomResults('PatientSex'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4695 self.assertEqual(1, CountDicomResults('PatientSex='))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4696 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
4697
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4698
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4699 def test_rest_modalities_in_study(self):
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4700 # 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
4701 # 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
4702 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4703
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4704 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4705 'Query' : { 'ModalitiesInStudy' : 'US' }})
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4706 self.assertEqual(0, len(a))
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4707
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4708 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4709 'Query' : { 'ModalitiesInStudy' : 'US\\CT' }})
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4710 self.assertEqual(1, len(a))
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4711
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4712 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4713 'Query' : { 'ModalitiesInStudy' : 'CT' }})
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4714 self.assertEqual(1, len(a))
211
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4715
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4716
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4717 def test_series_status(self):
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4718 def HasCompletedInChanges():
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4719 for c in DoGet(_REMOTE, '/changes?limit=1000&since=0')['Changes']:
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4720 if c['ChangeType'] == 'CompletedSeries':
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4721 return True;
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4722
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4723 return False
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4724
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4725 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4726 series = '8ea120d7-5057d919-837dfbcc-ccd04e0f-7f3a94aa'
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4727 self.assertEqual('Unknown', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4728 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4729
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4730 series = 'ce25ecb6-ed79d004-5ae43ca7-3fc89bc5-67511614'
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4731
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4732 for i in range(3):
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4733 UploadInstance(_REMOTE, 'Series/Lena-%d.dcm' % (i + 1))
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4734 self.assertEqual('Missing', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4735 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4736
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4737 UploadInstance(_REMOTE, 'Series/Lena-4.dcm')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4738 self.assertEqual('Complete', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4739 self.assertTrue(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4740
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4741 DoDelete(_REMOTE, '/changes')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4742 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4743
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4744 UploadInstance(_REMOTE, 'Series/Lena-5.dcm')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4745 self.assertEqual('Inconsistent', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4746 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4747
215
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4748
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4749 def test_dicomweb(self):
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4750 def Compare(dicom, reference):
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4751 a = UploadInstance(_REMOTE, dicom) ['ID']
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4752 b = DoGet(_REMOTE, '/instances/%s/file' % a,
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4753 headers = { 'Accept' : 'application/dicom+json' })
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4754 with open(GetDatabasePath(reference), 'rb') as c:
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4755 d = json.load(c)
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4756 AssertAlmostEqualRecursive(self, d, b)
215
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4757
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4758 Compare('DummyCT.dcm', 'DummyCT.json')
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4759 Compare('MarekLatin2.dcm', 'MarekLatin2.json')
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4760 Compare('HierarchicalAnonymization/StructuredReports/IM0',
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4761 'HierarchicalAnonymization/StructuredReports/IM0.json')
217
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4762
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4763
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4764 def test_issue_95_encodings(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
4765 # https://bugs.orthanc-server.com/show_bug.cgi?id=95
217
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4766 # Check out image: "../Database/Encodings/DavidClunie/charsettests.screenshot.png"
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4767
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4768 # Very useful tool: "file2" from package "file-kanji"
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4769
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4770 def GetPatientName(dicom):
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4771 i = UploadInstance(_REMOTE, dicom) ['ID']
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4772 j = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4773 return j['PatientName']
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4774
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4775 def ComparePatientName(name, dicom):
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4776 self.assertEqual(name, GetPatientName(dicom))
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4777
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4778 # gdcmraw -t 10,10 -i SCSFREN -o /tmp/tag && uconv -f ISO-IR-100 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4779 ComparePatientName(u'Buc^Jérôme', 'Encodings/DavidClunie/SCSFREN')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4780
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4781 # gdcmraw -t 10,10 -i SCSI2 -o /tmp/tag && uconv -f KOREAN -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4782 ComparePatientName(u'Hong^Gildong=洪^吉洞=홍^길동', 'Encodings/DavidClunie/SCSI2') # Since Orthanc 1.5.5
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4783
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4784 # gdcmraw -t 10,10 -i SCSX2 -o /tmp/tag && uconv -f GB18030 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4785 ComparePatientName(u'Wang^XiaoDong=王^小东=', 'Encodings/DavidClunie/SCSX2')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4786
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4787 # gdcmraw -t 10,10 -i SCSX1 -o /tmp/tag && cat /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4788 ComparePatientName(u'Wang^XiaoDong=王^小東=', 'Encodings/DavidClunie/SCSX1')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4789
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4790 # gdcmraw -t 10,10 -i SCSH31 -o /tmp/tag && uconv -f JIS -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4791 ComparePatientName(u'Yamada^Tarou=山田^太郎=やまだ^たろう', 'Encodings/DavidClunie/SCSH31')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4792
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4793 # gdcmraw -t 10,10 -i SCSGERM -o /tmp/tag && uconv -f ISO-IR-100 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4794 ComparePatientName(u'Äneas^Rüdiger', 'Encodings/DavidClunie/SCSGERM')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4795
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4796 # gdcmraw -t 10,10 -i SCSGREEK -o /tmp/tag && uconv -f ISO-IR-126 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4797 ComparePatientName(u'Διονυσιος', 'Encodings/DavidClunie/SCSGREEK')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4798
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4799 # gdcmraw -t 10,10 -i SCSRUSS -o /tmp/tag && uconv -f ISO-IR-144 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4800 ComparePatientName(u'Люкceмбypг', 'Encodings/DavidClunie/SCSRUSS')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4801
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4802 # gdcmraw -t 10,10 -i SCSHBRW -o /tmp/tag && uconv -f ISO-IR-138 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4803 # NB: Hebrew is a right-to-left encoding, copying/pasting from
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4804 # Linux console into Emacs automatically reverse the string
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4805 ComparePatientName(u'שרון^דבורה', 'Encodings/DavidClunie/SCSHBRW')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4806
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4807 # gdcmraw -t 10,10 -i SCSARAB -o /tmp/tag && uconv -f ISO-IR-127 -t UTF-8 /tmp/tag && echo
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4808 # NB: Right-to-left as for Hebrew (SCSHBRW), and the Ubuntu console can't display such
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4809 # characters by default, but copy/paste works with Emacs
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4810 ComparePatientName(u'قباني^لنزار', 'Encodings/DavidClunie/SCSARAB')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4811
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4812 # SCSH32: This SpecificCharacterSet is composed of 2
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4813 # codepages: "ISO 2022 IR 13" (i.e. "SHIFT_JIS") until the
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4814 # first equal, then "ISO 2022 IR 87" (i.e. "JIS") for the
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4815 # remainer. Orthanc only takes into consideration the first
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4816 # codepage: This is a limitation.
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4817 # gdcmraw -t 10,10 -i SCSH32 -o /tmp/tag && cut -d '=' -f 1 /tmp/tag | uconv -f SHIFT_JIS -t UTF-8
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4818 self.assertTrue(GetPatientName('Encodings/DavidClunie/SCSH32').startswith(u'ヤマダ^タロウ='))
218
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4819
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4820
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4821 def test_findscu_missing_tags(self):
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4822 # dcmodify -e Rows DummyCTInvalidRows.dcm -gst -gse -gin
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4823 UploadInstance(_REMOTE, 'DummyCT.dcm')
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4824 UploadInstance(_REMOTE, 'DummyCTInvalidRows.dcm')
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4825
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4826 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
4827
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4828 # We have 2 instances...
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4829 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4830 self.assertEqual(2, len(patientNames))
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4831 self.assertEqual('KNIX', patientNames[0])
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4832 self.assertEqual('KNIX', patientNames[1])
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4833
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4834 # ...but only 1 value for the "Rows" tag
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4835 rows = re.findall('\(0028,0010\) US ([0-9]+)', i)
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4836 self.assertEqual(1, len(rows))
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4837 self.assertEqual('512', rows[0])
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4838
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4839
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4840
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4841 def test_bitbucket_issue_131(self):
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4842 # "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
4843 # StudyInstanceUID in it's database."
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
4844 # 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
4845
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4846 # Insert 2 instances, with the same StudyInstanceUID, but with
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4847 # different patient IDs. Orthanc will create 2 distincts
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4848 # patients, and the hierarchy of resources above the two
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4849 # instances will be fully disjoint.
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4850 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-a.dcm')
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4851 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-b.dcm')
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4852
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4853 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4854 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4855
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4856 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4857 'Level' : 'Study',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4858 'Query' : {"PatientID": "A" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4859
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4860 # 1 study is matched
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4861 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
4862
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4863 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4864 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4865 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4866 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
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 # 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
4869 # 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
4870 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4871
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 # Match the 2 studies
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4874 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4875 'Level' : 'Study',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4876 'Query' : {"StudyInstanceUID": "2.25.123" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4877 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
4878 DropOrthanc(_LOCAL)
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4879 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4880 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4881 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4882 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4883 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4884
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4885
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4886 # 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
4887 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4888 'Level' : 'Patient',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4889 'Query' : {"PatientID": "A" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4890 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
4891 DropOrthanc(_LOCAL)
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4892 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4893 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4894 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4895 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4896 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4897
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 # 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
4900 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4901 'Level' : 'Series',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4902 'Query' : {"PatientID": "A" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4903 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
4904 DropOrthanc(_LOCAL)
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4905 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4906 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4907 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4908 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4909 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4910
233
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4911
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4912 def test_bitbucket_issue_136(self):
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4913 UploadInstance(_REMOTE, 'Issue137.dcm')
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4914 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
4915 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4916 self.assertEqual(1, len(patientNames))
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4917 self.assertEqual('John Doe', patientNames[0])
234
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4918
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4919
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4920 def test_anonymize_relationships_4(self):
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4921 # 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
4922 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
4923 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
4924 study = '0c923249-d52121a9-2b7167f7-6b85534f-0943697e'
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4925
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4926 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, '{}',
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4927 'application/json')['ID']
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4928 series = DoGet(_REMOTE, '/studies/%s/series' % anonymized)
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4929 self.assertEqual(2, len(series))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4930
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4931 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
4932 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
4933 self.assertEqual(1, len(cr))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4934 self.assertEqual(1, len(pr))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4935 self.assertEqual(1, len(cr[0]['Instances']))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4936 self.assertEqual(1, len(pr[0]['Instances']))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4937
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4938 crinstance = DoGet(_REMOTE, '/instances/%s' % cr[0]['Instances'][0])
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4939 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
4940
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4941 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
4942 crinstance['MainDicomTags']['SOPInstanceUID'])
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4943 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
4944 '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
4945
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4946 # This fails on Orthanc <= 1.5.6
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4947 self.assertEqual(tags['0008,1115'][0]['0020,000e'],
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4948 cr[0]['MainDicomTags']['SeriesInstanceUID'])
235
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
4949
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
4950
255
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4951 def test_anonymize_relationships_5(self):
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4952 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm')
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4953 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm')
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4954 oStudyId = ct1['ParentStudy']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4955 oCtInstanceId = ct1['ID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4956 oRtInstanceId = rt1['ID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4957
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4958 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4959 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4960
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4961 # first validate the relationships in the source data
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4962 oStudyUID = oCtTags['StudyInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4963 oRtSeriesUID = oRtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4964 oRtInstanceUID = oRtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4965 oRtFrameOfReferenceUID = oRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4966 oCtSeriesUID = oCtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4967 oCtInstanceUID = oCtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4968 oCtFrameOfReferenceUID = oCtTags['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4969
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4970 oContourSequenceCount = len(oRtTags['ROIContourSequence'][0]['ContourSequence'])
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4971 self.assertEqual(oCtFrameOfReferenceUID, oRtFrameOfReferenceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4972 self.assertEqual(oStudyUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID'])
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4973 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
4974 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
4975 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
4976
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4977 ### anonymize
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4978
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4979 aStudyId = DoPost(_REMOTE, '/studies/%s/anonymize' % oStudyId, '{}',
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4980 'application/json')['ID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4981
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4982 ### validate
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4983
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4984 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4985 self.assertEqual(2, len(aSeries))
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4986
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4987 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries))
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4988 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries))
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4989 aCtInstanceId = aCt[0]['Instances'][0]
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4990 aRtInstanceId = aRt[0]['Instances'][0]
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4991 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4992 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4993
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4994 # now validate the relationships in the anonymized data
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4995 aStudyUID = aCtTags['StudyInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4996 aRtSeriesUID = aRtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4997 aRtInstanceUID = aRtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4998 aRtFrameOfReferenceUID = aRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
4999 aCtSeriesUID = aCtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5000 aCtInstanceUID = aCtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5001 aCtFrameOfReferenceUID = aCtTags['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5002
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5003 aContourSequenceCount = len(aRtTags['ROIContourSequence'][0]['ContourSequence'])
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5004 # make sure all UIDs have been updated
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5005 self.assertNotEqual(oStudyUID, aStudyUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5006 self.assertNotEqual(oRtSeriesUID, aRtSeriesUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5007 self.assertNotEqual(oRtInstanceUID, aRtInstanceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5008 self.assertNotEqual(oRtFrameOfReferenceUID, aRtFrameOfReferenceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5009 self.assertNotEqual(oCtSeriesUID, aCtSeriesUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5010 self.assertNotEqual(oCtInstanceUID, aCtInstanceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5011 self.assertNotEqual(oCtFrameOfReferenceUID, aCtFrameOfReferenceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5012
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5013 # validate the relationships
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5014 self.assertEqual(oContourSequenceCount, aContourSequenceCount)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5015 self.assertEqual(aCtFrameOfReferenceUID, aRtFrameOfReferenceUID)
256
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5016 self.assertEqual(aStudyUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID'])
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5017 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
5018 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
5019 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
5020
256
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5021 def test_anonymize_relationships_5b(self):
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5022 # same test as previous one but, this time, we force the StudyInstanceUID
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5023 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm')
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5024 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm')
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5025 oStudyId = ct1['ParentStudy']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5026 oCtInstanceId = ct1['ID']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5027 oRtInstanceId = rt1['ID']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5028
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5029 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5030 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5031
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5032 ### anonymize while forcing the StudyInstanceUID
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5033
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5034 aStudyId = DoPost(_REMOTE, '/studies/%s/anonymize' % oStudyId, '{ "Replace" : { "StudyInstanceUID" : "1.2.3.4"}, "Force": true}',
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5035 'application/json')['ID']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5036
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5037 ### validate
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5038
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5039 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5040 self.assertEqual(2, len(aSeries))
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5041
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5042 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries))
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5043 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries))
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5044 aCtInstanceId = aCt[0]['Instances'][0]
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5045 aRtInstanceId = aRt[0]['Instances'][0]
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5046 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5047 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5048
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5049 self.assertEqual("1.2.3.4", aCtTags['StudyInstanceUID'])
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5050 self.assertEqual("1.2.3.4", aRtTags['StudyInstanceUID'])
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5051 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
5052
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5053
235
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5054 def test_bitbucket_issue_140(self):
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
5055 # "Modifying private tags with REST API changes VR from LO to
267
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 266
diff changeset
5056 # UN." This test fails if DCMTK <= 3.6.1 (e.g. fails on Ubuntu 16.04).
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5057 # 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
5058 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5059 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5060
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5061 target = DoPost(_REMOTE, '/series/%s/modify' % series, {
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
5062 'Replace' : { 'RadioButton3' : 'aaabbbccc' },
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
5063 'PrivateCreator' : 'RadioLogic', # <= the trick is here
235
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5064 }, 'application/json') ['ID']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5065
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5066 instances = DoGet(_REMOTE, '/series/%s/instances' % target)
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5067 self.assertEqual(1, len(instances))
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5068
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5069 tags = DoGet(_REMOTE, '/instances/%s/tags' % source)
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5070 t = tags['4321,1012']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5071 self.assertEqual('String', t['Type'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5072 self.assertEqual('RadioButton3', t['Name'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5073 self.assertEqual('RadioLogic', t['PrivateCreator'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5074 self.assertEqual('jklmopq', t['Value'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5075
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5076 tags = DoGet(_REMOTE, '/instances/%s/tags' % instances[0]['ID'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5077 t = tags['4321,1012']
327
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 326
diff changeset
5078 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
5079 self.assertEqual('RadioButton3', t['Name'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5080 self.assertEqual('RadioLogic', t['PrivateCreator'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5081 self.assertEqual('aaabbbccc', t['Value'])
236
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5082
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5083
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5084 def test_find_normalize(self):
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5085 # https://groups.google.com/d/msg/orthanc-users/AIwooGjsh94/YL28MNY4AgAJ
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5086
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5087 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5088
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5089 a = DoPost(_REMOTE, '/modalities/self/query', {
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5090 'Level' : 'Instance',
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5091 'Query' : { 'Rows' : '42' }
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5092 }) ['ID']
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5093
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5094 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a)
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5095 self.assertEqual(1, len(b))
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5096 self.assertFalse('Rows' in b[0])
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5097
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5098 a = DoPost(_REMOTE, '/modalities/self/query', {
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5099 'Level' : 'Instance',
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5100 'Query' : { 'Rows' : '42' },
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5101 'Normalize' : False
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5102 }) ['ID']
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5103
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5104 b = DoGet(_REMOTE, '/queries/%s/answers' % a)
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5105 self.assertEqual(0, len(b))
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5106
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5107 a = DoPost(_REMOTE, '/modalities/self/query', {
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5108 'Level' : 'Instance',
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5109 'Query' : { 'Rows' : '512' },
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5110 'Normalize' : False
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5111 }) ['ID']
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5112
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5113 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a)
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5114 self.assertEqual(1, len(b))
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5115 self.assertTrue('Rows' in b[0])
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5116 self.assertEqual('512', b[0]['Rows'])
237
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5117
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5118 a = DoPost(_REMOTE, '/modalities/self/query', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5119 'Level' : 'Instance',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5120 'Query' : { 'Rows' : '' },
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5121 'Normalize' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5122 }) ['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5124 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5125 self.assertEqual(1, len(b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5126 self.assertTrue('Rows' in b[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5127 self.assertEqual('512', b[0]['Rows'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5128
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5129 self.assertRaises(Exception, lambda: DoPost(
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5130 _REMOTE, '/modalities/self/query', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5131 'Level' : 'Instance',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5132 'Query' : { 'Rows' : '*' }, # Out-of-range value
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5133 'Normalize' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5134 }))
243
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5135
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5136
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5137 def test_bitbucket_issue_141(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5138 # 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
5139 a = UploadInstance(_REMOTE, 'Issue141.dcm') ['ID']
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5140 study = '494c8037-b237f263-d8f15075-c8cb2280-daf39bd1'
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5141
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5142 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f:
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5143 pdf = f.read()
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5144
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5145 b = DoPost(_REMOTE, '/tools/create-dicom', {
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5146 'Parent' : study,
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5147 'Tags' : {},
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5148 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5149 }) ['ID']
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5150
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5151 tagsA = DoGet(_REMOTE, '/instances/%s/tags?short' % a)
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5152 tagsB = DoGet(_REMOTE, '/instances/%s/tags?short' % b)
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5153 self.assertEqual(tagsA['0008,0005'], tagsB['0008,0005'])
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5154 self.assertEqual(tagsA['0008,1030'], tagsB['0008,1030'])
247
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5155
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5156
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5157 def test_modifying_missing_patientid(self):
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5158 # 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
5159 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm')
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5160 DoPost(_REMOTE, '/studies/0c4aca1d-c107a241-6659d6aa-594c674a-a468b94a/modify', {})
262
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5161
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5162
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5163 def test_log_level(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5164 # https://bugs.orthanc-server.com/show_bug.cgi?id=65
262
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5165 original = DoGet(_REMOTE, '/tools/log-level')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5166
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5167 DoPut(_REMOTE, '/tools/log-level', 'default')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5168 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5169 DoGet(_REMOTE, '/system')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5170
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5171 DoPut(_REMOTE, '/tools/log-level', 'verbose')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5172 self.assertEqual('verbose', DoGet(_REMOTE, '/tools/log-level'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5173 DoGet(_REMOTE, '/system')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5174
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5175 DoPut(_REMOTE, '/tools/log-level', 'trace')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5176 self.assertEqual('trace', DoGet(_REMOTE, '/tools/log-level'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5177 DoGet(_REMOTE, '/system')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5178
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5179 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/log-level', 'nope'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5180
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5181 # Switch back to the original log level
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5182 DoPut(_REMOTE, '/tools/log-level', original)
264
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5183
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5184
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5185 def test_upload_compressed(self):
265
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5186 # New in Orthanc 1.6.0
264
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5187 with open(GetDatabasePath('DummyCT.dcm.gz'), 'rb') as f:
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5188 d = f.read()
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5189
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5190 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/instances', d, 'application/dicom'))
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5191
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5192 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/instances', d, 'application/dicom',
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5193 headers = { 'Content-Encoding' : 'nope' }))
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5194
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5195 a = DoPost(_REMOTE, '/instances', d, 'application/dicom',
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5196 headers = { 'Content-Encoding' : 'gzip' })
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5197 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', a['ID'])
262
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5198
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5199
263
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5200 def test_study_series_find_inconsistency(self):
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5201 # 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
5202
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5203 def CountAnswers(query):
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5204 a = DoPost(_REMOTE, 'modalities/self/query', query)
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5205 return len(DoGet(_REMOTE, '%s/answers' % a['Path']))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5206
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5207 # 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
5208 # "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
5209 # the "main DICOM tags" of Orthanc.
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5210 UploadInstance(_REMOTE, 'Issue137.dcm')
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5211
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5212
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5213 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5214 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5215 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5216
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5217 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5218 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5219 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5220
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5221
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5222 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5223 ## "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
5224 ## 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
5225 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5226
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5227 # 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
5228 # is wiped out by the normalization
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5229 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5230 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5231 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5232 'SeriesDescription' : 'NOPE'
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 'Normalize' : False
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5235 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5236 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5237 # This test fails on Orthanc <= 1.5.8
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5238 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5239 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5240 '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
5241 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5242 'Normalize' : False
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' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5246 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5247 'SeriesDescription' : 'THIS^VALUE^IS^WIPED^OUT'
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 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5250 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5251 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5252 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5253 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5254 'SeriesDescription' : '*' # Matches, as wiped out by the normalization
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5255 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5256 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5257 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5258
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5259 for normalize in [ True, False ]:
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5260 # 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
5261 # normalization has no effect
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 # "Universal matching" will match all entities, including
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5264 # those with the missing tag
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5265 # 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
5266 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5267 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5268 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5269 'SeriesDescription' : '' # Universal matching
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 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5272 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5273 # "Universal matching" will match all entities, including
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5274 # those with the missing tag
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5275 # 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
5276 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5277 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5278 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5279 'SeriesDescription' : '*' # Wildcard matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5280 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5281 'Normalize' : normalize,
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 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5284 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5285 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5286 '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
5287 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5288 'Normalize' : normalize,
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 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5291 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5292 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5293 'SeriesDescription' : '*MISMATCHED^VALUE*'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5294 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5295 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5296 }))
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 # Universal matching matches any instance, even if the
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5299 # 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
5300 # makes no sense
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5301 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5302 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5303 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5304 'SeriesDescription' : '' # Universal matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5305 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5306 'Normalize' : normalize,
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
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
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5311 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5312 ## "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
5313 ##
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 # 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
5316 # is wiped out by the normalization
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' : 'Study',
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 'ProtocolName' : 'NOPE'
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' : False
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 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5325 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5326 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5327 '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
5328 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5329 'Normalize' : False
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5330 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5331 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5332 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5333 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5334 'ProtocolName' : 'THIS^VALUE^IS^WIPED^OUT'
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 'Normalize' : True
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 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5339 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5340 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5341 'ProtocolName' : '*' # Matches, as wiped out by the normalization
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5342 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5343 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5344 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5345
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5346 for normalize in [ True, False ]:
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5347 # 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
5348 # normalization has no effect
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5349
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5350 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5351 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5352 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5353 'ProtocolName' : '' # Universal matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5354 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5355 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5356 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5357 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5358 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5359 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5360 '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
5361 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5362 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5363 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5364 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5365 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5366 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5367 'ProtocolName' : '*MISMATCHED^VALUE*'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5368 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5369 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5370 }))
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 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5373 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5374 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5375 'ProtocolName' : '' # Universal matching
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 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5378 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5379
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5380
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 ## "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
5383 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5384
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5385 for level in [ 'Study', 'Series' ] :
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5386 for normalize in [ True, False ]:
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5387 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5388 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5389 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5390 'StudyInstanceUID' : '' # Universal matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5391 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5392 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5393 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5394 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5395 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5396 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5397 'StudyInstanceUID' : 'MISMATCHED^VALUE'
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 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5400 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5401 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5402 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5403 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5404 '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
5405 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5406 'Normalize' : normalize,
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
269
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 268
diff changeset
5409 # 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
5410 # This test fails on Orthanc <= 1.5.8
269
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 268
diff changeset
5411 self.assertRaises(Exception, lambda: CountAnswers({
263
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5412 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5413 'Query' : {
269
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 268
diff changeset
5414 'StudyInstanceUID' : '*'
263
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5415 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5416 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5417 }))
265
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5418
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5419
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5420 def test_rendered(self):
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5421 # New in Orthanc 1.6.0
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5422 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID']
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5423 im = GetImage(_REMOTE, '/instances/%s/rendered' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5424 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5425 self.assertEqual(41, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5426 self.assertEqual(41, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5427
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5428 # http://effbot.org/zone/pil-comparing-images.htm
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5429 truth = Image.open(GetDatabasePath('ColorTestMalaterre.png'))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5430 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5431
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5432 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5433 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5434 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5435 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5436
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5437 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5438 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5439 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5440 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5441
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5442 im = GetImage(_REMOTE, '/instances/%s/rendered?height=128' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5443 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5444 self.assertEqual(128, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5445 self.assertEqual(128, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5446
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5447 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10&smooth=0' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5448 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5449 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5450 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5451
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5452 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10&smooth=1' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5453 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5454 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5455 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5456
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5457 im = GetImage(_REMOTE, '/instances/%s/rendered?height=5&width=10' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5458 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5459 self.assertEqual(5, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5460 self.assertEqual(5, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5461
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5462
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5463 # Grayscale image
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5464 i = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5465 im = GetImage(_REMOTE, '/instances/%s/rendered' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5466 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5467 self.assertEqual(288, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5468 self.assertEqual(288, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5469 self.assertEqual(0, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5470
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5471 # Those are the original windowing parameters that are written
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5472 # inside the DICOM file
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5473 im2 = GetImage(_REMOTE, '/instances/%s/rendered?window-center=248.009544468547&window-width=431.351843817788' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5474 self.assertEqual("L", im2.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5475 self.assertEqual(288, im2.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5476 self.assertEqual(288, im2.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5477 self.assertTrue(ImageChops.difference(im, im2).getbbox() is None)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5478
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5479 im = GetImage(_REMOTE, '/instances/%s/rendered?width=512&smooth=0' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5480 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5481 self.assertEqual(512, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5482 self.assertEqual(512, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5483
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5484 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&smooth=0' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5485 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5486 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5487 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5488
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5489 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&smooth=1' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5490 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5491 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5492 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5493
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5494 im = GetImage(_REMOTE, '/instances/%s/rendered?width=1&window-center=-1000' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5495 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5496 self.assertEqual(1, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5497 self.assertEqual(1, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5498 self.assertEqual(255, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5499
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5500 im = GetImage(_REMOTE, '/instances/%s/rendered?width=1&window-center=1000' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5501 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5502 self.assertEqual(1, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5503 self.assertEqual(1, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5504 self.assertEqual(0, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5505
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5506
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5507 # Test monochrome 1
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5508 i = UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')['ID']
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5509 im = GetImage(_REMOTE, '/instances/%s/rendered' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5510 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5511 self.assertEqual(2010, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5512 self.assertEqual(2446, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5513 self.assertEqual(0, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5514 im = GetImage(_REMOTE, '/instances/%s/rendered?width=20' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5515 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5516 self.assertEqual(20, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5517 self.assertEqual(24, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5518 im = GetImage(_REMOTE, '/instances/%s/rendered?height=24' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5519 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5520 self.assertEqual(20, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5521 self.assertEqual(24, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5522 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&height=24' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5523 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5524 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5525 self.assertEqual(12, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5526 im = GetImage(_REMOTE, '/instances/%s/rendered?width=40&height=24' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5527 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5528 self.assertEqual(20, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5529 self.assertEqual(24, im.size[1])
268
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5530
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5531
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5532 def test_bitbucket_issue_154(self):
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5533 # "Matching against list of UID-s by C-MOVE"
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5534 # 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
5535 a = UploadInstance(_REMOTE, 'Issue154-d1.dcm') ['ID']
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5536 b = UploadInstance(_REMOTE, 'Issue154-d2.dcm') ['ID']
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5537
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5538 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
5539 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
5540 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
5541
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5542 # C-FIND is working on list of UIDs
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5543 i = CallFindScu([ '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5544 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5545 '-k', 'SeriesInstanceUID=%s\\%s' % (series1, series2) ])
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5546 series = re.findall('\(0020,000e\).*?\[(.*?)\]', i)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5547 self.assertEqual(2, len(series))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5548 self.assertTrue(series1 in series)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5549 self.assertTrue(series2 in series)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5550
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5551 # Individual retrieval is working in Orthanc < 1.6.0
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5552 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5553 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5554 '--study', '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5555 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5556 '-k', 'SeriesInstanceUID=%s' % series1,
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 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5559 '--study', '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5560 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5561 '-k', 'SeriesInstanceUID=%s' % series2,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5562 ])))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5563 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
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 DropOrthanc(_LOCAL)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5566
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5567 # 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
5568 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5569 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5570 '--study', '-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 ])))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5574 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5575
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5576
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5577 def test_storage_commitment_api(self):
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5578 # 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
5579
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5580 def WaitTransaction(uid):
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5581 while True:
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5582 s = DoGet(_REMOTE, '/storage-commitment/%s' % uid)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5583 if s['Status'] != 'Pending':
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5584 return s
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5585 else:
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
5586 time.sleep(0.01)
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5587
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5588 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5589 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
5590 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
5591
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5592 # Against self
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5593 transaction = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5594 "DicomInstances" : [ [ sopClassUid, sopInstanceUid ] ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5595 }) ['ID']
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5596 self.assertTrue(transaction.startswith('2.25.'))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5597
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5598 result = WaitTransaction(transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5599 self.assertEqual('ORTHANC', result['RemoteAET'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5600 self.assertEqual('Success', result['Status'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5601 self.assertEqual(1, len(result['Success']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5602 self.assertEqual(0, len(result['Failures']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5603 self.assertEqual(sopClassUid, result['Success'][0]['SOPClassUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5604 self.assertEqual(sopInstanceUid, result['Success'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5605
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5606 tmp = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5607 "DicomInstances" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5608 { 'SOPClassUID' : sopClassUid,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5609 'SOPInstanceUID' : sopInstanceUid },
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5610 ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5611 })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5612 self.assertEqual(tmp['Path'], '/storage-commitment/%s' % tmp['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5613 self.assertEqual(result, WaitTransaction(transaction))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5614
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5615 tmp = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5616 "Resources" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5617 instance['ID'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5618 instance['ParentSeries'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5619 instance['ParentStudy'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5620 instance['ParentPatient'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5621 ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5622 })
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5623 self.assertEqual(tmp['Path'], '/storage-commitment/%s' % tmp['ID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5624 self.assertEqual(result, WaitTransaction(transaction))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5625
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5626
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5627 transaction = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5628 "DicomInstances" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5629 [ 'nope', 'nope2' ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5630 [ sopClassUid, sopInstanceUid ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5631 ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5632 }) ['ID']
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5633 self.assertTrue(transaction.startswith('2.25.'))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5634
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5635 result = WaitTransaction(transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5636 self.assertEqual('ORTHANC', result['RemoteAET'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5637 self.assertEqual('Failure', result['Status'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5638 self.assertEqual(1, len(result['Success']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5639 self.assertEqual(1, len(result['Failures']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5640 self.assertEqual(sopClassUid, result['Success'][0]['SOPClassUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5641 self.assertEqual(sopInstanceUid, result['Success'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5642 self.assertEqual('nope', result['Failures'][0]['SOPClassUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5643 self.assertEqual('nope2', result['Failures'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5644 self.assertEqual(274, result['Failures'][0]['FailureReason'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5645
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5646 # Cannot remove items from a failed storage commitment transaction
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5647 self.assertRaises(Exception, lambda:
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5648 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5649
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5650
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5651 # 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
5652 self.assertRaises(Exception, lambda:
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5653 DoPost(_REMOTE, '/modalities/orthanctest/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5654 "DicomInstances" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5655 [ sopClassUid, sopInstanceUid ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5656 ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5657 }))
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5658
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5659
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5660
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5661 def test_storage_commitment_store(self):
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5662 # 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
5663
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5664 def WaitTransaction(uid):
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5665 while True:
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5666 s = DoGet(_REMOTE, '/storage-commitment/%s' % uid)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5667 if s['Status'] != 'Pending':
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5668 return s
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5669 else:
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
5670 time.sleep(0.01)
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5671
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5672 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5673 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5674 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5675
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5676 # 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
5677 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
5678 'Resources' : [ i ],
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5679 'StorageCommitment' : True,
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5680 }))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5681
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5682 j = DoPost(_REMOTE, '/modalities/orthanctest/store', {
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5683 'Resources' : [ i ],
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5684 'StorageCommitment' : False,
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 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
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 j = DoPost(_REMOTE, '/modalities/self/store', {
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5689 'Resources' : [ i ],
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5690 'StorageCommitment' : True,
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5691 })
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5692
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5693 transaction = j['StorageCommitmentTransactionUID']
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5694 self.assertTrue(transaction.startswith('2.25.'))
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5695
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5696 result = WaitTransaction(transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5697 self.assertEqual('ORTHANC', result['RemoteAET'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5698 self.assertEqual('Success', result['Status'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5699 self.assertEqual(1, len(result['Success']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5700 self.assertEqual(0, len(result['Failures']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5701 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
5702 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
5703 result['Success'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5704
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5705 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5706 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5707 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
285
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5708
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5709
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5710 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
5711 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5712 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5713
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5714 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5715 dicom = f.read()
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5716
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5717 self.assertRaises(Exception, lambda: DoPost(
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5718 _REMOTE, '/modalities/orthanctest/store-straight', 'nope', 'nope'))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5719
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5720 answer = DoPost(_REMOTE, '/modalities/orthanctest/store-straight', dicom, 'nope')
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5721
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5722 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
5723 answer['SOPClassUID'])
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5724 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
5725 answer['SOPInstanceUID'])
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5726
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5727 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5728 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
289
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5729
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5730
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5731 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
5732 # Add a RLE-encoded DICOM file
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5733 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
5734 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5735 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5736 rleSize = len(DoGet(_REMOTE, '/instances/%s/file' % i))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5737
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5738 # Export the instance, with transcoding: "_REMOTE" is the
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5739 # Orthanc server being tested
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5740 try:
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5741 DoDelete(_REMOTE, '/modalities/toto')
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5742 except:
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5743 pass
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5744
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5745 params = DoGet(_REMOTE, '/modalities?expand') ['orthanctest']
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5746 DoPut(_REMOTE, '/modalities/toto', params)
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5747 DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain')
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5748 j = DoGet(_LOCAL, '/instances')
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5749 self.assertEqual(1, len(j))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5750 uncompressedSize = len(DoGet(_LOCAL, '/instances/%s/file' % j[0]))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5751 self.assertTrue(uncompressedSize > rleSize / 2)
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5752
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5753 # Export, with transcoding disabled => this fails
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5754 params['AllowTranscoding'] = False
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5755 DoPut(_REMOTE, '/modalities/toto', params)
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5756 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
5757 DoDelete(_REMOTE, '/modalities/toto')
290
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5758
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5759
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5760 def test_bitbucket_issue_169(self):
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5761 with open(GetDatabasePath('Issue169.dcm.bz2'), 'rb') as f:
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5762 dicom = bz2.decompress(f.read())
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5763
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5764 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
5765
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5766 self.assertEqual(44350560, len(dicom))
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5767 i = DoPost(_REMOTE, '/instances', dicom, 'application/dicom') ['ID']
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5768
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5769 tags = DoGet(_REMOTE, '/instances/%s/tags' % i)
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5770 self.assertEqual('NORMAL', tags['1337,1001']['Value'])
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5771
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5772 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5773 DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5774 j = DoGet(_LOCAL, '/instances')
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5775 self.assertEqual(1, len(j))
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5776
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5777 # 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
5778 # 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
5779 # Little Endian" (1.2.840.10008.1.2)
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5780 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5781 DoGet(_LOCAL, '/instances/%s/file' % j[0])))
290
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5782
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5783 # 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
5784 # because of this transcoding
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5785 tags = DoGet(_LOCAL, '/instances/%s/tags' % j[0])
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5786 self.assertEqual('NORMAL', tags['1337,1001']['Value'])
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5787
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5788
302
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5789 def test_modify_transcode_instance(self):
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5790 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5791 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5792 DoGet(_REMOTE, '/instances/%s/file' % i)))
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5793
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5794 a = ExtractDicomTags(DoGet(_REMOTE, '/instances/%s/file' % i), [ 'SOPInstanceUID' ]) [0]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5795 self.assertTrue(len(a) > 20)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5796
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5797 SYNTAXES = [
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5798 '1.2.840.10008.1.2',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5799 '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
5800 #'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
5801 '1.2.840.10008.1.2.2',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5802 '1.2.840.10008.1.2.4.50',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5803 '1.2.840.10008.1.2.4.51',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5804 '1.2.840.10008.1.2.4.57',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5805 '1.2.840.10008.1.2.4.70',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5806 ]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5807
304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 302
diff changeset
5808 if HasGdcmPlugin(_REMOTE):
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5809 SYNTAXES = SYNTAXES + [
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5810 '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
5811 '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
5812 '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
5813 '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
5814 ]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5815
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5816 for syntax in SYNTAXES:
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5817 transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, {
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5818 'Transcode' : syntax,
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5819 'Keep' : [ 'SOPInstanceUID' ],
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5820 'Force' : True,
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5821 })
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5822
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5823 self.assertEqual(syntax, GetTransferSyntax(transcoded))
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5824
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5825 b = ExtractDicomTags(transcoded, [ 'SOPInstanceUID' ]) [0]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5826 self.assertTrue(len(b) > 20)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5827 if syntax in [ '1.2.840.10008.1.2.4.50',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5828 '1.2.840.10008.1.2.4.51',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5829 '1.2.840.10008.1.2.4.81',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5830 '1.2.840.10008.1.2.4.91' ]:
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5831 # Lossy transcoding: The SOP instance UID must have changed
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5832 self.assertNotEqual(a, b)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5833 else:
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5834 self.assertEqual(a, b)
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5835
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5836 def test_archive_transcode(self):
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5837 info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5838
293
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5839 # GET on "/media"
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5840 z = GetArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'])
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5841 self.assertEqual(2, len(z.namelist()))
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5842 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
5843
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5844 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
5845
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5846 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
5847 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
5848
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5849 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
5850 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
5851
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5852 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
5853 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
5854
293
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5855
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5856 # POST on "/media"
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5857 self.assertRaises(Exception, lambda: PostArchive(
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5858 _REMOTE, '/patients/%s/media' % info['ParentPatient'], { 'Transcode' : 'nope' }))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5859
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5860 z = PostArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5861 'Transcode' : '1.2.840.10008.1.2.4.50',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5862 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5863 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
5864
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5865 z = PostArchive(_REMOTE, '/studies/%s/media' % info['ParentStudy'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5866 'Transcode' : '1.2.840.10008.1.2.4.51',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5867 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5868 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
5869
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5870 z = PostArchive(_REMOTE, '/series/%s/media' % info['ParentSeries'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5871 'Transcode' : '1.2.840.10008.1.2.4.57',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5872 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5873 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
5874
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5875
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5876 # GET on "/archive"
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5877 z = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'])
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5878 self.assertEqual(1, len(z.namelist()))
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5879 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
5880
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5881 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
5882
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5883 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
5884 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
5885
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5886 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
5887 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
5888
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5889 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
5890 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
5891
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5892
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5893 # POST on "/archive"
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5894 self.assertRaises(Exception, lambda: PostArchive(
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5895 _REMOTE, '/patients/%s/archive' % info['ParentPatient'], { 'Transcode' : 'nope' }))
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, '/patients/%s/archive' % info['ParentPatient'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5898 'Transcode' : '1.2.840.10008.1.2.4.50',
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.50', GetTransferSyntax(z.read(z.namelist()[0])))
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 z = PostArchive(_REMOTE, '/studies/%s/archive' % info['ParentStudy'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5903 'Transcode' : '1.2.840.10008.1.2.4.51',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5904 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5905 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
5906
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5907 z = PostArchive(_REMOTE, '/series/%s/archive' % info['ParentSeries'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5908 'Transcode' : '1.2.840.10008.1.2.4.57',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5909 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5910 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
5911
293
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5912
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5913 # "/tools/create-*"
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5914 z = PostArchive(_REMOTE, '/tools/create-archive', {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5915 'Resources' : [ info['ParentStudy'] ],
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5916 'Transcode' : '1.2.840.10008.1.2.4.50',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5917 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5918 self.assertEqual(1, len(z.namelist()))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5919 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
5920
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5921 z = PostArchive(_REMOTE, '/tools/create-media', {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5922 'Resources' : [ info['ParentStudy'] ],
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5923 'Transcode' : '1.2.840.10008.1.2.4.51',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5924 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5925 self.assertEqual(2, len(z.namelist()))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5926 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
5927
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5928 z = PostArchive(_REMOTE, '/tools/create-media-extended', {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5929 'Resources' : [ 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.57',
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(2, len(z.namelist()))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5933 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
5934
308
2565d39dd36c integration mainline->c-get
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 307 305
diff changeset
5935
301
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5936 def test_modify_keep_source(self):
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5937 # 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
5938 i = UploadInstance(_REMOTE, 'DummyCT.dcm')
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5939 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5940
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5941 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5942 'Replace' : {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5943 'StationName' : 'TEST',
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5944 },
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5945 'KeepSource' : True,
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5946 })
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5947
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5948 s = DoGet(_REMOTE, '/studies')
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5949 self.assertEqual(2, len(s))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5950 self.assertTrue(i['ParentStudy'] in s)
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5951 self.assertTrue(j['ID'] in s)
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5952
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5953 DoDelete(_REMOTE, '/studies/%s' % j['ID'])
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5954 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5955
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5956 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5957 'Replace' : {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5958 'StationName' : 'TEST',
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5959 },
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5960 'KeepSource' : False,
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5961 })
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5962
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5963 s = DoGet(_REMOTE, '/studies')
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5964 self.assertEqual(1, len(s))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5965 self.assertFalse(i['ParentStudy'] in s)
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
5966 self.assertTrue(j['ID'] in s)
302
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5967
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5968
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5969 def test_modify_transcode_study(self):
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5970 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5971 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
5972 DoGet(_REMOTE, '/instances/%s/file' % i['ID'])))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5973
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5974 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5975 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], {
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5976 'Transcode' : '1.2.840.10008.1.2.4.50',
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5977 'KeepSource' : False
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5978 })
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5979
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5980 k = DoGet(_REMOTE, '/instances')
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5981 self.assertEqual(1, len(k))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5982 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
5983 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
5984 DoGet(_REMOTE, '/instances/%s/file' % k[0])))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5985
305
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5986
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5987 def test_store_peer_transcoding(self):
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5988 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5989
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5990 SYNTAXES = [
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5991 '1.2.840.10008.1.2',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5992 '1.2.840.10008.1.2.1',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5993 #'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
5994 '1.2.840.10008.1.2.2',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5995 '1.2.840.10008.1.2.4.50',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5996 '1.2.840.10008.1.2.4.51',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5997 '1.2.840.10008.1.2.4.57',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5998 '1.2.840.10008.1.2.4.70',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
5999 ]
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6000
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6001 if HasGdcmPlugin(_REMOTE):
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6002 SYNTAXES = SYNTAXES + [
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6003 '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
6004 '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
6005 '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
6006 '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
6007 ]
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6008
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6009 for syntax in SYNTAXES:
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6010 body = {
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6011 'Resources' : [ i ],
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6012 }
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 if syntax != '1.2.840.10008.1.2.1':
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6015 body['Transcode'] = syntax
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 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6018 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6019 DoPost(_REMOTE, '/peers/peer/store', body, 'text/plain')
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6020 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6021 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6022 self.assertEqual(syntax, GetTransferSyntax(
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6023 DoGet(_LOCAL, '/instances/%s/file' % DoGet(_LOCAL, '/instances') [0])))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6024
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6025 DropOrthanc(_LOCAL)
308
2565d39dd36c integration mainline->c-get
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 307 305
diff changeset
6026
2565d39dd36c integration mainline->c-get
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 307 305
diff changeset
6027
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6028 def test_getscu(self):
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6029 def CleanTarget():
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6030 if os.path.isdir('/tmp/GETSCU'):
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6031 shutil.rmtree('/tmp/GETSCU')
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6032 os.makedirs('/tmp/GETSCU')
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6033
306
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6034 env = {}
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6035 if _DOCKER:
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6036 # 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
6037 # and running in a GNU/Linux distribution running DCMTK
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6038 # 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
6039 env['DCMDICTPATH'] = '/usr/share/libdcmtk2/dicom.dic'
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6040
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6041 # no transcoding required
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6042 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6043
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6044 CleanTarget()
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6045
306
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6046 subprocess.check_call([
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6047 FindExecutable('getscu'),
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6048 _REMOTE['Server'],
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6049 str(_REMOTE['DicomPort']),
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6050 '-aec', 'ORTHANC',
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6051 '-aet', 'ORTHANCTEST', # pretend to be the other orthanc
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6052 '-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
6053 '-k', '0008,0052=STUDY',
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6054 '--output-directory', '/tmp/GETSCU/'
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6055 ], env = env)
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6056
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6057 f1 = '/tmp/GETSCU/MR.1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314079549'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6058 self.assertTrue(os.path.isfile(f1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6059 with open(f1, 'rb') as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6060 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read()))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6061
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6062 CleanTarget()
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6063
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6064 # transcoding required
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6065 UploadInstance(_REMOTE, 'TransferSyntaxes/1.2.840.10008.1.2.4.50.dcm')
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6066
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6067 subprocess.check_call([
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6068 FindExecutable('getscu'),
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6069 _REMOTE['Server'],
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6070 str(_REMOTE['DicomPort']),
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6071 '-aec', 'ORTHANC',
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6072 '-aet', 'ORTHANCTEST', # pretend to be the other orthanc
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6073 '-k', '0020,000d=2.16.840.1.113669.632.20.1211.10000357775\\1.2.840.113663.1298.6234813.1.298.20000329.1115122',
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6074 '-k', '0008,0052=STUDY',
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6075 '--output-directory', '/tmp/GETSCU/'
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6076 ], env = env)
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6077
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6078 self.assertTrue(os.path.isfile(f1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6079 with open(f1, 'rb') as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6080 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read()))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6081
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6082 # This file is transcoded from "1.2.840.10008.1.2.4.50" to "1.2.840.10008.1.2.1"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6083 # (LittleEndianExplicit is proposed by default by "getscu")
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6084 f2 = '/tmp/GETSCU/US.1.2.840.113663.1298.1.3.715.20000329.1115326'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6085 self.assertTrue(os.path.isfile(f2))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6086 with open(f2, 'rb') as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6087 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
6088
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6089
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6090 def test_findscu_truncation(self):
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6091 # https://groups.google.com/forum/#!msg/orthanc-users/FkckWAHvso8/UbRBAhQ5CwAJ
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6092 # Fixed by: https://hg.orthanc-server.com/orthanc/rev/2724977419fb
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6093 UploadInstance(_REMOTE, 'Multiframe.dcm')
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6094 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6095
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6096 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
6097
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6098 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyInstanceUID' ])
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6099 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i)
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6100 self.assertEqual(2, len(result))
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6101
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6102 # 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
6103 # study, leading to a string of 249 characters
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6104 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k',
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6105 'StudyInstanceUID=%s\\%s\\%s\\%s\\%s' % (( study, ) * 5) ])
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6106 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i)
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6107 self.assertEqual(1, len(result))
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6108
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6109 # 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
6110 # study, leading to a string of 299 characters. In Orthanc <=
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6111 # 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
6112 # == 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
6113 # 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
6114 # "StudyInstanceUID" and returns all the available
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6115 # 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
6116 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k',
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6117 'StudyInstanceUID=%s\\%s\\%s\\%s\\%s\\%s' % (( study, ) * 6) ])
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6118 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i)
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6119 self.assertEqual(1, len(result))
328
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6120
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6121
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6122 def test_store_compressed(self):
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6123 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6124 dicom = f.read()
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6125 i = DoPost(_REMOTE, '/instances', dicom) ['ID']
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6126 sourceSize = len(dicom)
324
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6127
328
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6128 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6129 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6130
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6131 # 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
6132 jobId = MonitorJob2(_REMOTE, lambda: DoPost(
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6133 _REMOTE, '/peers/peer/store', {
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6134 'Resources' : [ i ],
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6135 'Synchronous' : False,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6136 }))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6137
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6138 job = DoGet(_REMOTE, '/jobs/%s' % jobId)
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6139 self.assertFalse(job['Content']['Compress'])
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6140 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
6141 self.assertEqual(str(sourceSize), job['Content']['Size'])
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6142
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6143 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6144 DropOrthanc(_LOCAL)
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6145
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6146 # 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
6147 # Not supported by Orthanc 0.8.6 => failure
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6148 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/peers/peer/store', {
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6149 'Resources' : [ i ],
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6150 'Compress' : True,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6151 }))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6152 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6153
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6154 # Sending to the tested remote server, with compression: OK
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6155 jobId = MonitorJob2(_REMOTE, lambda: DoPost(
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6156 _REMOTE, '/peers/self/store', {
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6157 'Resources' : [ i ],
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6158 'Compress' : True,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6159 'Synchronous' : False,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6160 }))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6161
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6162 job = DoGet(_REMOTE, '/jobs/%s' % jobId)
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6163 self.assertTrue(job['Content']['Compress'])
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 # 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
6166 self.assertLess(int(job['Content']['Size']), sourceSize / 2)
332
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6167
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6168
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6169 def test_move_ambra(self):
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6170 # "Orthanc + Ambra: Query/Retrieve" (2020-08-25)
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6171 # https://groups.google.com/g/orthanc-users/c/yIUnZ9v9-Zs/m/GQPXiAOiCQAJ
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6172
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6173 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm')
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6174
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6175 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6176 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6177 '-k', 'StudyInstanceUID='
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6178 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6179
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6180 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6181 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6182 '-k', 'AccessionNumber=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6183 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6184
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6185 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6186 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6187 '-k', 'AccessionNumber=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6188 '-k', 'StudyInstanceUID='
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6189 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6190
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6191 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6192 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6193 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6194 '-k', 'AccessionNumber=CT16000988',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6195 '-k', 'StudyInstanceUID=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6196 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6197 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6198 DropOrthanc(_LOCAL)
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6199
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6200 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6201 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6202 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6203 '-k', 'AccessionNumber=CT16000988',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6204 '-k', 'StudyInstanceUID=1.2.840.113619.2.278.3.4194965761.659.1468842739.39',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6205 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6206 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6207 DropOrthanc(_LOCAL)
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6208
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6209 # This fails on Orthanc <= 1.7.3
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6210 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6211 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6212 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6213 '-k', 'AccessionNumber=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6214 '-k', 'StudyInstanceUID=1.2.840.113619.2.278.3.4194965761.659.1468842739.39'
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6215 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6216 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6217 DropOrthanc(_LOCAL)
333
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6218
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6219
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6220 def test_decode_elscint(self):
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6221 # 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
6222 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
6223 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
6224
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6225 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % a)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6226 self.assertEqual("L", im.mode)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6227 self.assertEqual(512, im.size[0])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6228 self.assertEqual(512, im.size[1])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6229
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6230 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % b)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6231 self.assertEqual("L", im.mode)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6232 self.assertEqual(512, im.size[0])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6233 self.assertEqual(512, im.size[1])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6234
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6235 # The two tests below fail on Orthanc <= 1.7.3
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6236 raw = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % a)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6237 self.assertEqual(512 * 512 * 2, len(raw))
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6238
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6239 raw = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % b)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6240 self.assertEqual(512 * 512 * 2, len(raw))
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6241
334
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6242
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6243 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
6244 # 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
6245 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
6246 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
6247
335
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6248 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
6249 modalitiesInStudy = re.findall('\(0008,0061\).*?\[(.*?)\]', i)
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6250 self.assertEqual(1, len(modalitiesInStudy))
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6251 self.assertEqual('CT\\PT ', modalitiesInStudy[0])
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6252
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6253 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
6254 # 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
6255 # 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
6256
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6257 if i in [ 'UX', 'UX\\MR' ]:
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6258 expected = 0
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6259 else:
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6260 expected = 1
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6261
334
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6262 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6263 'Query' : { 'ModalitiesInStudy' : i }})
335
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6264 self.assertEqual(expected, len(a))
334
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6265
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6266 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
6267 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
6268 self.assertEqual(expected, len(studyInstanceUid))
337
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6269
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6270
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6271 def test_webdav(self):
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6272 self.assertRaises(Exception, lambda: DoPropFind(_REMOTE, '/webdav/', 2))
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6273
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6274 for suffix in [ '', '/' ]:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6275 f = DoPropFind(_REMOTE, '/webdav' + suffix, 0)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6276 self.assertEqual(1, len(f))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6277 self.assertTrue('/webdav/' in f.keys())
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6278 self.assertTrue(f['/webdav/']['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6279 self.assertEqual('webdav', f['/webdav/']['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6280
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6281 f = DoPropFind(_REMOTE, '/webdav' + suffix, 1)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6282 self.assertEqual(6, len(f))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6283 self.assertTrue(f['/webdav/']['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6284 self.assertEqual('webdav', f['/webdav/']['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6285
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6286 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
6287 self.assertTrue(f['/webdav/%s' % i]['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6288 self.assertEqual(i, f['/webdav/%s' % i]['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6289
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6290 for depth in [ 0, 1 ]:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6291 for suffix2 in [ '', '/' ]:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6292 g = DoPropFind(_REMOTE, '/webdav/%s%s' % (i, suffix2), depth)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6293
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6294 if i == 'uploads':
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6295 # Empty folders might still exist in "/uploads/"
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6296 self.assertTrue('/webdav/uploads/' in g)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6297 self.assertEqual('uploads', g['/webdav/uploads/']['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6298 for j in g.items():
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6299 self.assertTrue(g.items()[0][1]['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6300 else:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6301 self.assertEqual(1, len(g))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6302 self.assertEqual('/webdav/%s/' % i, g.items()[0][0])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6303 self.assertTrue(g.items()[0][1]['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6304 self.assertEqual(i, g.items()[0][1]['displayname'])
341
66a36befb208 extending Toolbox.DoPropFind()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 337
diff changeset
6305
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6306 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6307 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6308 DoPut(_REMOTE, '/webdav/uploads/dummy', f.read(), 'text/plain')
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6309
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6310 while len(DoGet(_REMOTE, '/patients')) == 0:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6311 time.sleep(0.01)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6312 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
337
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6313
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6314
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6315 def test_log_categories(self):
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6316 original = DoGet(_REMOTE, '/tools/log-level-http')
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6317
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6318 DoPut(_REMOTE, '/tools/log-level-http', 'default')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6319 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level-http'))
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6320 DoGet(_REMOTE, '/system')
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6321
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6322 DoPut(_REMOTE, '/tools/log-level-http', 'verbose')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6323 self.assertEqual('verbose', DoGet(_REMOTE, '/tools/log-level-http'))
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6324 DoGet(_REMOTE, '/system')
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6325
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6326 DoPut(_REMOTE, '/tools/log-level-http', 'trace')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6327 self.assertEqual('trace', DoGet(_REMOTE, '/tools/log-level-http'))
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6328 DoGet(_REMOTE, '/system')
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6329
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6330 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
6331
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6332 # Switch back to the original log level
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6333 DoPut(_REMOTE, '/tools/log-level-http', original)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6334
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6335 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
6336 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
6337
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6338 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/log-level-nope', 'default'))
357
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6339
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6340
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6341 def test_upload_zip(self):
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6342 f = StringIO()
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6343 with zipfile.ZipFile(f, 'w') as z:
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6344 z.writestr('hello/world/invalid.txt', 'Hello world')
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6345 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as g:
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6346 c = g.read()
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6347 z.writestr('hello/world/dicom1.dcm', c)
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6348 z.writestr('hello/world/dicom2.dcm', c)
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6349
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6350 f.seek(0)
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6351 i = DoPost(_REMOTE, '/instances', f.read())
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6352
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6353 self.assertEqual(2, len(i))
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6354 self.assertEqual(i[0], i[1])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6355 self.assertEqual(6, len(i[0]))
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6356 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', i[0]['ID'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6357 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', i[0]['ParentSeries'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6358 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', i[0]['ParentStudy'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6359 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', i[0]['ParentPatient'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6360 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', i[0]['Path'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6361
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6362 # Both are "Success" (instead of one "AlreadyStored"), because "OverwriteInstance" is true
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6363 self.assertEqual('Success', i[0]['Status'])
361
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6364
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6365
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6366 def test_transfer_syntax_no_metaheader(self):
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6367 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
6368 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % a)
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6369 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
6370
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6371 # This fails on Orthanc <= 1.8.1
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6372 self.assertTrue('TransferSyntax' in m)
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6373 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
6374
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6375
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6376 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
6377 # 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
6378
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6379 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
6380 return (('--%s\r\n' +
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6381 '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
6382 '\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
6383
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6384 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
6385 dcm1 = f.read()
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6386
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6387 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
6388 dcm2 = f.read()
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6389
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6390 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
6391
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6392 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ'
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6393 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
6394 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
6395 '--' + boundary + '--'), headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6396 '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
6397 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6398 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6399
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6400 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
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_2(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 "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
6405 # 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
6406 # "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
6407
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6408 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
6409 return (('--%s\r\n' +
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6410 '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
6411 '\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
6412
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6413 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
6414 dcm = f.read()
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6415
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6416 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
6417 dcm2 = f.read()
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
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6421 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
6422 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6423 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
6424 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6425 '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
6426 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6427 '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
6428 '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
6429 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6430
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6431 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
6432 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6433 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
6434 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6435 '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
6436 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6437 '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
6438 '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
6439 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6440 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
6441
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6442 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6443 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
6444 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6445 '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
6446 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6447 '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
6448 '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
6449 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6450
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6451 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
6452
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6453 # 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
6454 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6455 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
6456 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6457 '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
6458 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6459 '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
6460 '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
6461 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6462
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6463 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
377
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6464
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6465
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6466 def test_pixel_data_offset(self):
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6467 # New in Orthanc 1.9.1
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6468 def Check(path, offset):
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6469 i = UploadInstance(_REMOTE, path) ['ID']
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6470 metadata = DoGetRaw(_REMOTE, '/instances/%s/metadata/PixelDataOffset' % i) [1]
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6471 self.assertEqual(offset, metadata)
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6472
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6473 Check('ColorTestMalaterre.dcm', str(0x03a0))
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6474 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
6475 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
6476 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
6477 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
6478 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
6479 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
6480 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
6481 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
6482 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
6483 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
6484 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
6485 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
6486
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6487
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6488 def test_peer_store_straight(self):
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6489 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports']))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6490 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6491
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6492 peer = DoGet(_REMOTE, '/peers/peer/system')
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6493 self.assertEqual(3, len(peer))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6494 self.assertEqual(5, peer['DatabaseVersion'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6495 self.assertEqual('MyOrthanc', peer['Name'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6496 self.assertEqual('0.8.6', peer['Version'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6497
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6498 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6499 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
6500
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6501 # 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
6502 # "ParentStudy", "ParentSeries" are not reported
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6503 self.assertEqual(3, len(j))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6504 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
6505 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
6506 self.assertEqual('Success', j['Status'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6507
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6508 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6509 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))