annotate Tests/Tests.py @ 439:2ca9e31d582f

numpy and getscu are now included in jodogne/orthanc-tests Docker image
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 26 Nov 2021 18:46:13 +0100
parents e769bcf2b94f
children 3a5222eb4c93
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
437
e769bcf2b94f added copyright UCLouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 436
diff changeset
9 # Copyright (C) 2021-2021 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 #
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 # This program is free software: you can redistribute it and/or
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 # modify it under the terms of the GNU General Public License as
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 # published by the Free Software Foundation, either version 3 of the
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 # License, or (at your option) any later version.
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 #
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 # This program is distributed in the hope that it will be useful, but
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 # WITHOUT ANY WARRANTY; without even the implied warranty of
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 # General Public License for more details.
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 #
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 # You should have received a copy of the GNU General Public License
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
25 import base64
290
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
26 import bz2
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
27 import copy
439
2ca9e31d582f numpy and getscu are now included in jodogne/orthanc-tests Docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 437
diff changeset
28 import numpy
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
29 import pprint
439
2ca9e31d582f numpy and getscu are now included in jodogne/orthanc-tests Docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 437
diff changeset
30 import shutil
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
31 import tempfile
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 import unittest
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
34 from PIL import ImageChops
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 from Toolbox import *
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
36 from xml.dom import minidom
312
e12c8434aa1e print date
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 311
diff changeset
37 from datetime import datetime
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 _LOCAL = None
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 _REMOTE = None
306
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
41 _DOCKER = False
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
42
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
43
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
44 def SetOrthancParameters(local, remote, withinDocker):
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
45 global _LOCAL, _REMOTE, _DOCKER
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 _LOCAL = local
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 _REMOTE = remote
306
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
48 _DOCKER = withinDocker
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
49
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
50
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
51 def ExtractDicomTags(rawDicom, tags):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
52 with tempfile.NamedTemporaryFile(delete = True) as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
53 f.write(rawDicom)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
54 f.flush()
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
55 data = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ])
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
57 result = []
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
58 for tag in tags:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
59 match = re.search('<element[^>]+name="%s">([^>]*)</element>' % tag, data)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
60 if match == None:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
61 result.append('')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
62 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
63 result.append(match.group(1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
64
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
65 return result
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
66
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
67
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
68 def CompareLists(a, b):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
69 if len(a) != len(b):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
70 return False
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
71
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
72 for i in range(len(a)):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
73 d = a[i] - b[i]
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
74 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
75 return False
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 return True
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
78
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
79
80
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
80 def CompareTags(a, b, tagsToIgnore):
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
81 for i in tagsToIgnore:
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
82 if i in a:
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
83 del a[i]
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
84 if i in b:
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
85 del b[i]
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
86
123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
87 if a.keys() == b.keys():
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
88 return True
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
89 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
90 print('Mismatch in tags: %s' % str(set(a.keys()) ^ set(b.keys())))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
91 return False
80
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
92
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
93
71
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
94 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
95 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
96 '-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
97 _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
98 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
99 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
100
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
101
142
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
102 def GetMoveScuCommand():
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
103 return [
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
104 FindExecutable('movescu'),
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
105 '--move', _LOCAL['DicomAet'], # Target AET (i.e. storescp)
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
106 '--call', _REMOTE['DicomAet'], # Called AET (i.e. Orthanc)
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
107 '--aetitle', _LOCAL['DicomAet'], # Calling AET (i.e. storescp)
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
108 _REMOTE['Server'],
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
109 str(_REMOTE['DicomPort'])
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
110 ]
6d2bfbbd0c2d reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 141
diff changeset
111
231
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
112
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
113 def IsDicomUntilPixelDataStored(orthanc):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
114 # 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
115 # "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
116
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
117 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
118 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
119 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
120 if a != 0x03a0:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
121 raise Exception('Internal error')
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
122
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
123 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
124 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
125 raise Exception('Internal error')
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 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
128
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
129 if len(a) == 1:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
130 return False
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
131 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
132 return True
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
133 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
134 raise Exception('Internal error')
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
135
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
136 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
137 return False
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
138
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
139
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
140 def CallMoveScu(args):
231
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
141 try:
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
142 subprocess.check_call(GetMoveScuCommand() + args,
318
bac7cc80f240 dicomweb: test_wado_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 315
diff changeset
143 stderr = subprocess.PIPE)
231
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
144 except subprocess.CalledProcessError as e:
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
145 # 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
146 # 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
147 # 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
148 # DICOM instances.
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
149 # 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
150 if e.returncode != 69:
4087505ddfe3 catching error codes of movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 220
diff changeset
151 raise e
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
152
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
153
51
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
154 def GenerateTestSequence():
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
155 return [
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
156 {
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
157 'StudyDescription': 'Hello^',
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
158 'ReferencedStudySequence' : [
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 'StudyDescription': 'Toto',
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
161 },
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 'StudyDescription': 'Tata',
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 },
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
167 {
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
168 'StudyDescription': 'Sébastien^',
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
169 'StudyDate' : '19700202',
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 ]
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
172
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
173
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 class Orthanc(unittest.TestCase):
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175 def setUp(self):
83
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
176 if (sys.version_info >= (3, 0)):
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
177 # Remove annoying warnings about unclosed socket in Python 3
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
178 import warnings
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
179 warnings.simplefilter("ignore", ResourceWarning)
3f2170efa8d2 patches for python3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 81
diff changeset
180
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 DropOrthanc(_LOCAL)
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 DropOrthanc(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
183 UninstallLuaCallbacks(_REMOTE)
423
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
184
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
185 # Reset stuff possibly set by some integration tests
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
186 DoPut(_REMOTE, '/tools/default-encoding', 'Latin1')
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
187 DoPut(_REMOTE, '/tools/accepted-transfer-syntaxes', [ '1.2.840.10008.1.*' ])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
188 DoPut(_REMOTE, '/tools/unknown-sop-class-accepted', '0')
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
189
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
190 for i in [ 'toto', 'tata' ]:
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
191 if i in DoGet(_REMOTE, '/modalities'):
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
192 DoDelete(_REMOTE, '/modalities/%s' % i)
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
193 if i in DoGet(_REMOTE, '/peers'):
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
194 DoDelete(_REMOTE, '/peers/%s' % i)
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
195
312
e12c8434aa1e print date
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 311
diff changeset
196 #print("%s: In test %s" % (datetime.now(), self._testMethodName))
44
ffa542cce638 Toolbox.FindExecutable()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
197
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
198 def AssertSameImages(self, truth, url):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
199 im = GetImage(_REMOTE, url)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
200 self.assertTrue(CompareLists(truth, im.getdata()))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
201
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203 def test_system(self):
177
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
204 self.assertTrue('Version' in DoGet(_REMOTE, '/system'))
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
205 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize'])
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
206 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
207
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
208 systemInfo = DoGet(_REMOTE, '/system')
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
209 if systemInfo["Version"] == "mainline":
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
210 print "Skipping version checks since you're currently in mainline"
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
211 return
ef6b791c6d62 fix version checks
am@osimis.io
parents: 176
diff changeset
212
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
213 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 8, 6))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
214 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 8, 7))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
215 self.assertTrue(IsOrthancVersionAbove(_LOCAL, 0, 7, 6))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
216 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 0, 9, 6))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
217 self.assertFalse(IsOrthancVersionAbove(_LOCAL, 1, 8, 6))
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 def test_upload(self):
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
220 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
221 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
222
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
223 sizeDummyCT = 2472
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
224 sizeOverwrite = 2476
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
225 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d'
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
226
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
227 # 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
228 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
229 isCompressed = (DoGet(_REMOTE, '/instances/%s/attachments/dicom/is-compressed' % u['ID']) != 0)
183
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
230 self.assertEqual(instance, u['ID'])
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 self.assertEqual('Success', u['Status'])
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
232
183
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
233 if True:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
234 # New test for Orthanc 1.4.3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
235 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', u['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
236 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', u['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
237 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', u['ParentPatient'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 182
diff changeset
238
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
239 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
240 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
241 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
242 j = 0
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
243 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
244 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
245 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
246
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
247 s = sizeDummyCT + j
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
248
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
249 if isCompressed:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
250 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
251 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
252 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
253
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
254 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
255
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
256 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
257 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
258 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
259 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
260 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
261
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
262 if isCompressed:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
263 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
264 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
265 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
266
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
267 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
268
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
269 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance)
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270 self.assertEqual('20070101', i['StudyDate'])
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
271 self.assertEqual('KNIX', i['PatientName'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
272
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
273 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2):
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
274 # Overwriting
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
275 self.assertEqual('Success', u['Status'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
276 else:
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
277 self.assertEqual('AlreadyStored', u['Status'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
278
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
279 u = UploadInstance(_REMOTE, 'DummyCT-overwrite.dcm')
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
280 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
281 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
282 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
283 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
284
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
285 if IsOrthancVersionAbove(_REMOTE, 1, 4, 2):
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
286 # Overwriting
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
287 self.assertEqual('Success', u['Status'])
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
288 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
289 j2 = 0
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
290 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
291 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
292 self.assertNotEqual(j, j2)
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
293 s2 = sizeOverwrite + j2
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
294 self.assertNotEqual(s, s2)
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
295 if isCompressed:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
296 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
297 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
298 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
299
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
300 self.assertEqual(s2, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
173
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
301 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % instance)
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
302 self.assertEqual('ANOTHER', i['PatientName'])
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
303 else:
ed3db6386587 testing overwrite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 154
diff changeset
304 self.assertEqual('AlreadyStored', u['Status'])
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
305 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
306 self.assertEqual(s, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307
5
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
308 def test_upload_2(self):
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310 instance = DoGet(_REMOTE, '/instances/%s' % i)
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 self.assertEqual(i, instance['ID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 instance['MainDicomTags']['SOPInstanceUID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 series = DoGet(_REMOTE, '/series/%s' % instance['ParentSeries'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 series['MainDicomTags']['SeriesInstanceUID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319 study = DoGet(_REMOTE, '/studies/%s' % series['ParentStudy'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321 study['MainDicomTags']['StudyInstanceUID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 patient = DoGet(_REMOTE, '/patients/%s' % study['ParentPatient'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324 self.assertEqual('ozp00SjY2xG',
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 patient['MainDicomTags']['PatientID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 dicom = DoGet(_REMOTE, '/instances/%s/file' % instance['ID'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328 self.assertEqual(2472, len(dicom))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329 self.assertEqual('3e29b869978b6db4886355a2b1132124', ComputeMD5(dicom))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/frames' % i)))
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/simplified-tags' % i)['StationName'])
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 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
333 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
334 self.assertEqual('TWINOW', DoGet(_REMOTE, '/instances/%s/tags?short' % i)['0008,1010'])
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
335
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
336
5
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
337 def test_images(self):
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
338 i = UploadInstance(_REMOTE, 'Phenix/IM-0001-0001.dcm')['ID']
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
339 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/frames' % i)))
3
2dbba2e6aa4b reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340
5
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
341 im = GetImage(_REMOTE, '/instances/%s/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/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/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])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
354
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
355 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
356 self.assertEqual("L", im.mode)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
357 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
358 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
359
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
360 im = GetImage(_REMOTE, '/instances/%s/frames/0/image-uint8' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
361 self.assertEqual("L", im.mode)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
362 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
363 self.assertEqual(358, im.size[1])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
364
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
365 im = GetImage(_REMOTE, '/instances/%s/frames/0/image-uint16' % i)
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
366 self.assertEqual(512, im.size[0])
19eb87a45685 test_images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
367 self.assertEqual(358, im.size[1])
64
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
368
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
369 # This is Little Endian Explicit
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
370 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
371
6
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 def test_hierarchy(self):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
374 UploadFolder(_REMOTE, 'Brainix/Epi')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
375 UploadFolder(_REMOTE, 'Brainix/Flair')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
376 UploadFolder(_REMOTE, 'Knee/T1')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
377 UploadFolder(_REMOTE, 'Knee/T2')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
378
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
379 p = DoGet(_REMOTE, '/patients')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
380 s = DoGet(_REMOTE, '/studies')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
381 t = DoGet(_REMOTE, '/series')
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
382 self.assertEqual(2, len(p))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
383 self.assertEqual(2, len(s))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
384 self.assertEqual(4, len(t))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
385 self.assertEqual(94, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
386
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
387 brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
388 brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
389 brainixEpi = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
390 brainixFlair = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
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 kneePatient = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
393 kneeStudy = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
394 kneeT1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
395 kneeT2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
396
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
397 self.assertTrue(brainixPatient in p)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
398 self.assertTrue(kneePatient in p)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
399 self.assertTrue(brainixStudy in s)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
400 self.assertTrue(kneeStudy in s)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
401 self.assertTrue(brainixEpi in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
402 self.assertTrue(brainixFlair in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
403 self.assertTrue(kneeT1 in t)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
404 self.assertTrue(kneeT2 in t)
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(44, len(DoGet(_REMOTE, '/patients/%s/instances' % brainixPatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
407 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/series' % brainixPatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
408 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/studies' % brainixPatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
409
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
410 self.assertEqual(50, len(DoGet(_REMOTE, '/patients/%s/instances' % kneePatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
411 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/series' % kneePatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
412 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/studies' % kneePatient)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
413
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
414 self.assertEqual(2, len(DoGet(_REMOTE, '/studies/%s/series' % brainixStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
415 self.assertEqual(44, len(DoGet(_REMOTE, '/studies/%s/instances' % brainixStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
416
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
417 self.assertEqual(2, len(DoGet(_REMOTE, '/studies/%s/series' % kneeStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
418 self.assertEqual(50, len(DoGet(_REMOTE, '/studies/%s/instances' % kneeStudy)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
419
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
420 self.assertEqual(22, len(DoGet(_REMOTE, '/series/%s/instances' % brainixEpi)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
421 self.assertEqual(22, len(DoGet(_REMOTE, '/series/%s/instances' % brainixFlair)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
422 self.assertEqual(24, len(DoGet(_REMOTE, '/series/%s/instances' % kneeT1)))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
423 self.assertEqual(26, len(DoGet(_REMOTE, '/series/%s/instances' % kneeT2)))
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 for patient in p:
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
426 for study in DoGet(_REMOTE, '/patients/%s/studies' % patient):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
427 self.assertEqual(patient, study['ParentPatient'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
428 for series in DoGet(_REMOTE, '/studies/%s/series' % study['ID']):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
429 self.assertEqual(study['ID'], series['ParentStudy'])
211
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
430 self.assertEqual('Unknown', series['Status'])
6
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
431 for instance in DoGet(_REMOTE, '/series/%s/instances' % series['ID']):
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
432 self.assertEqual(series['ID'], instance['ParentSeries'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
433
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
434 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
435 # 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
436 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
437 json.dumps(DoGet(_REMOTE, '/instances/%s/tags' % instance['ID'])))
6
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
438
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
439
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
440 r = DoDelete(_REMOTE, "/studies/%s" % brainixStudy)['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
441 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
442 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
443 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
444 self.assertEqual(50, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
445 self.assertEqual(None, r)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
446
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
447 r = DoDelete(_REMOTE, "/series/%s" % kneeT2)['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
448 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
449 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
450 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
451 self.assertEqual(24, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
452 self.assertEqual('Study', r['Type'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
453 self.assertEqual(kneeStudy, r['ID'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
454
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
455 r = DoDelete(_REMOTE, "/instances/%s" % DoGet(_REMOTE, '/instances')[0])['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
456 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
457 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
458 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
459 self.assertEqual(23, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
460 self.assertEqual('Series', r['Type'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
461 self.assertEqual(kneeT1, r['ID'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
462
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
463 r = DoDelete(_REMOTE, "/patients/%s" % kneePatient)['RemainingAncestor']
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
464 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
465 self.assertEqual(0, len(DoGet(_REMOTE, '/studies')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
466 self.assertEqual(0, len(DoGet(_REMOTE, '/series')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
467 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
468 self.assertEqual(None, r)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
469
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
470 DropOrthanc(_REMOTE)
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
471 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalDiskSize'])
6d645b3011e1 test_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5
diff changeset
472 self.assertEqual('0', DoGet(_REMOTE, '/statistics')['TotalUncompressedSize'])
7
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
473
213
eba6b8c38eee added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents: 211
diff changeset
474 def test_delete_cascade(self):
eba6b8c38eee added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents: 211
diff changeset
475 # 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
476
eba6b8c38eee added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents: 211
diff changeset
477 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
478 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
479 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
480 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
481 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
482 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
483
eba6b8c38eee added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents: 211
diff changeset
484 DoDelete(_REMOTE, '/instances/%s' % a)
eba6b8c38eee added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents: 211
diff changeset
485
eba6b8c38eee added a delete_cascade test to reproduce an issue in our MSSQL plugin
amazy
parents: 211
diff changeset
486 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
487 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
488 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
489 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
490
7
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
491
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
492 def test_multiframe(self):
7
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
493 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
494 self.assertEqual(76, len(DoGet(_REMOTE, '/instances/%s/frames' % i)))
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
495
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
496 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
497 self.assertEqual("L", im.mode)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
498 self.assertEqual(512, im.size[0])
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
499 self.assertEqual(512, im.size[1])
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
500
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
501 DoGet(_REMOTE, '/instances/%s/frames/0/image-uint8' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
502 DoGet(_REMOTE, '/instances/%s/frames/0/image-uint16' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
503 DoGet(_REMOTE, '/instances/%s/frames/75/preview' % i)
302f06f3bba2 test_multi_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 6
diff changeset
504 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
505 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
506
8
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
507
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
508 def test_changes(self):
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
509 # Check emptiness
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
510 c = DoGet(_REMOTE, '/changes')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
511 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
512 #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
513 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
514 c = DoGet(_REMOTE, '/changes?last')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
515 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
516 #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
517 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
518
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
519 # Add 1 instance
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
520 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
521 c = DoGet(_REMOTE, '/changes')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
522 begin = c['Last']
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
523 self.assertEqual(4, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
524 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
525 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
526
390
5c2472f008eb Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 389
diff changeset
527 # Check the order in which the creation events are reported
5c2472f008eb Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 389
diff changeset
528 self.assertEqual(c['Changes'][0]['ChangeType'], 'NewInstance')
5c2472f008eb Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 389
diff changeset
529 self.assertEqual(c['Changes'][1]['ChangeType'], 'NewSeries')
5c2472f008eb Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 389
diff changeset
530 self.assertEqual(c['Changes'][2]['ChangeType'], 'NewStudy')
5c2472f008eb Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 389
diff changeset
531 self.assertEqual(c['Changes'][3]['ChangeType'], 'NewPatient')
5c2472f008eb Check the order in which the creation events are reported
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 389
diff changeset
532
8
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
533 c = DoGet(_REMOTE, '/changes?last')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
534 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
535 self.assertEqual(begin, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
536 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
537 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
538 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
539 self.assertEqual(begin, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
540 self.assertTrue(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
541 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
542 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
543 self.assertEqual(begin - 1, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
544 self.assertFalse(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
545 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
546 self.assertEqual(1, len(c['Changes']))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
547 self.assertEqual(begin - 2, c['Last'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
548 self.assertFalse(c['Done'])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
549
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
550 UploadFolder(_REMOTE, 'Knee/T1')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
551 UploadFolder(_REMOTE, 'Knee/T2')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
552 since = begin
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
553 countPatients = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
554 countStudies = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
555 countSeries = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
556 countInstances = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
557 completed = 0
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
558 while True:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
559 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
560 since = c['Last']
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
561 for i in c['Changes']:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
562 if i['ResourceType'] == 'Instance':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
563 countInstances += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
564 if i['ResourceType'] == 'Patient':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
565 countPatients += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
566 if i['ResourceType'] == 'Study':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
567 countStudies += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
568 if i['ResourceType'] == 'Series':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
569 countSeries += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
570 if i['ChangeType'] == 'NewInstance':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
571 countInstances += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
572 if i['ChangeType'] == 'NewPatient':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
573 countPatients += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
574 if i['ChangeType'] == 'NewStudy':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
575 countStudies += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
576 if i['ChangeType'] == 'NewSeries':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
577 countSeries += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
578 if i['ChangeType'] == 'CompletedSeries':
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
579 completed += 1
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
580 self.assertTrue('ID' in i)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
581 self.assertTrue('Path' in i)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
582 self.assertTrue('Seq' in i)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
583 if c['Done']:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
584 break
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
585
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
586 self.assertEqual(2 * 50, countInstances)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
587 self.assertEqual(2 * 1, countPatients)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
588 self.assertEqual(2 * 1, countStudies)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
589 self.assertEqual(2 * 2, countSeries)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
590 self.assertEqual(0, completed)
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
591
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
592
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
593 def test_archive(self):
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
594 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
595 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
596 knee = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
597
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
598 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
599 self.assertEqual(2, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
600
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
601 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
602 self.assertEqual(2, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
603
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
604 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
605 self.assertEqual(1, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
606
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
607 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
608 brainix = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
609
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
610 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
611 self.assertEqual(2, len(z.namelist()))
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
612
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
613 z = PostArchive(_REMOTE, '/tools/create-archive', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
614 'Resources' : [ brainix, knee ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
615 })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
616 self.assertEqual(3, len(z.namelist()))
403
e08e15befa0c test sync POST to /archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 402
diff changeset
617
e08e15befa0c test sync POST to /archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 402
diff changeset
618 z = PostArchive(_REMOTE, '/patients/%s/archive' % knee, {
e08e15befa0c test sync POST to /archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 402
diff changeset
619 'Synchronous' : True
e08e15befa0c test sync POST to /archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 402
diff changeset
620 })
e08e15befa0c test sync POST to /archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 402
diff changeset
621 self.assertEqual(2, len(z.namelist()))
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 191
diff changeset
622
8
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
623
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
624 def test_media_archive(self):
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
625 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
626 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
627
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
628 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
629 self.assertEqual(3, len(z.namelist()))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
630 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
631 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
632 self.assertTrue('DICOMDIR' in z.namelist())
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
633
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
634 try:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
635 os.remove('/tmp/DICOMDIR')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
636 except:
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
637 # The file does not exist
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
638 pass
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
639
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
640 z.extract('DICOMDIR', '/tmp')
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
641 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
642 stderr = subprocess.STDOUT).split('\n')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
643 self.assertEqual(3, len(a))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
644 self.assertTrue(a[0].startswith('Warning'))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
645 self.assertEqual('BasicDirectory', a[1])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
646 self.assertEqual('', a[2])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
647
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
648 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
649 stderr = subprocess.STDOUT).split('\n')
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
650 self.assertEqual(1, len(a))
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
651 self.assertEqual('', a[0])
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
652
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
653 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
654 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
655 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
656
f8d781d1d267 test_changes, test_archive, test_media_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
657 os.remove('/tmp/DICOMDIR')
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
658
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
659
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
660 def test_protection(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
661 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
662 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
663 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
664 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
665 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
666 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
667 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
668 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
669 DoPut(_REMOTE, '/patients/%s/protected' % a, '1', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
670 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
671 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
672 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
673
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
674
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
675 def test_raw_tags(self):
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
676 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
677
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
678 dicom = DoGet(_REMOTE, '/instances/%s/file' % i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
679 self.assertEqual('1a7c56cb02d6e742cc9c856a8ac182e3', ComputeMD5(dicom))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
680
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
681 s = '/instances/%s/content/' % i
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
682
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
683 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, s + '0008-1010').strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
684 self.assertRaises(Exception, lambda: DoGet(_REMOTE, s + '0008-1011'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
685
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
686 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
687 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
688
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
689 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
690 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
691 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
692 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
694 for i in DoGet(_REMOTE, '/instances'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
695 aid = DoGet(_REMOTE, '/instances/%s' % i)['MainDicomTags']['SOPInstanceUID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
696 self.assertEqual(aid, DoGet(_REMOTE, '/instances/%s/content/0008-0018' % i).replace(chr(0), ''))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
697
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
698
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
699 def test_raw_tags_mdn(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
700 # Bug reported by Cyril Paulus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
701 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
702 self.assertAlmostEqual(0.000027, DoGet(_REMOTE, '/instances/%s/content/7053-1000' % i))
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_instance(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
706 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
707 modified = DoPost(_REMOTE, '/instances/%s/modify' % i,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
708 json.dumps({
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
709 "Replace" : {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
710 "PatientName" : "hello",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
711 #"PatientID" : "world"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
712 },
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
713 "Remove" : [ "StationName" ],
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
714 "RemovePrivateTags" : True
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
715 }),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
716 'application/json')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
717 j = DoPost(_REMOTE, '/instances', modified, 'application/dicom')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
718
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
719 self.assertNotEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
720 #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
721 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i).strip())
10
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
722 DoGet(_REMOTE, '/instances/%s/content/6003-1010' % i) # Some private tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
723
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
724 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
725 #self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
726 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
727 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/6003-1010' % j))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
728
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
729
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
730 def test_modify_series(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
731 # Upload 4 images from the same series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
732 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
733 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
734
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
735 origSeries = DoGet(_REMOTE, '/series')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
736 newSeries = DoPost(_REMOTE, '/series/%s/modify' % origSeries,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
737 '{"Replace":{"PatientName":"Jodogne"}}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
738 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
739
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
740 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['ModifiedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
741 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
742 self.assertEqual(4, len(instances))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
743 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
744 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
745 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
746 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
747
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
748 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
749 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
750
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
751
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
752 def test_modify_study(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
753 # Upload 4 images from the 2 series of the same study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
754 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
755 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
756 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
757
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
758 origStudy = DoGet(_REMOTE, '/studies')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
759 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
760 '{"Replace":{"PatientName":"Jodogne"}}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
761 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
762
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
763 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['ModifiedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
764 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
765 self.assertEqual(2, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
766 for s in series:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
767 ss = DoGet(_REMOTE, '/series/%s' % s)['ModifiedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
768 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
769 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
770
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
771 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
772 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
773 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
774 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
775 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
776
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
777 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
778 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
779
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
780
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
781 def test_anonymize_series(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
782 # Upload 4 images from the same series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
783 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
784 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
785
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
786 origSeries = DoGet(_REMOTE, '/series')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
787 newSeries = DoPost(_REMOTE, '/series/%s/anonymize' % origSeries,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
788 '{}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
789 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
790
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
791 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['AnonymizedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
792 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
793 self.assertEqual(4, len(instances))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
794 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
795 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
796 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
797 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
798
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
799 DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
800 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
801
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
802
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
803 def test_anonymize_study(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
804 # Upload 4 images from the 2 series of the same study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
805 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
806 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
807 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
808
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
809 origStudy = DoGet(_REMOTE, '/studies')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
810 newStudy = DoPost(_REMOTE,'/studies/%s/anonymize' % origStudy,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
811 '{"Replace":{"PatientName":"Jodogne"}}',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
812 'application/json')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
813
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
814 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['AnonymizedFrom'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
815 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
816 self.assertEqual(2, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
817 for s in series:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
818 ss = DoGet(_REMOTE, '/series/%s' % s)['AnonymizedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
819 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
820 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
821
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
822 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
823 for i in instances:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
824 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
825 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
826 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
827
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
828 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
829 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
830
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
831
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
832
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
833 def test_storescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
834 # Check emptiness
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
835 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
836 self.assertEqual(0, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
837 self.assertEqual(0, e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
838 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
839 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
840 self.assertEqual(0, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
841 self.assertEqual(0, e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
842 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
843
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
844 # Add 1 instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
845 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
846 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
847
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
848 # Export the instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
849 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') # instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
850 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
851 self.assertEqual(1, len(DoGet(_LOCAL, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
852 self.assertEqual(1, len(DoGet(_LOCAL, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
853 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
854
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
855 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
856 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
857 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
858 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
859 e = DoGet(_REMOTE, '/exports?limit=1')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
860 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
861 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
862 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
863 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
864 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
865 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
866 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
867 seqInstance = e['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
868
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
869 # Export the series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
870 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
871
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
872 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
873 self.assertEqual(2, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
874 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
875 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
876 seqSeries = e['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
877 self.assertNotEqual(seqInstance, seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
878 e = DoGet(_REMOTE, '/exports?limit=1&since=0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
879 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
880 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
881 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
882 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
883 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
884 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
885 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
886 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
887 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
888 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
889 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
890
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
891 # Export the study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
892 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
893 seqStudy = DoGet(_REMOTE, '/exports')['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
894
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
895 # Export the patient
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
896 j = DoPost(_REMOTE, '/modalities/orthanctest/store', '6816cb19-844d5aee-85245eba-28e841e6-2414fae2', 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
897 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
898 self.assertEqual(1, len(DoGet(_LOCAL, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
899 self.assertEqual(1, len(DoGet(_LOCAL, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
900 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
901
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
902 e = DoGet(_REMOTE, '/exports')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
903 self.assertEqual(4, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
904 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
905 self.assertEqual(e['Exports'][-1]['Seq'], e['Last'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
906 seqPatient = e['Last']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
907 self.assertNotEqual(seqInstance, seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
908 self.assertNotEqual(seqSeries, seqStudy)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
909 self.assertNotEqual(seqStudy, seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
910 self.assertTrue(seqInstance < seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
911 self.assertTrue(seqSeries < seqStudy)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
912 self.assertTrue(seqStudy < seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
913 e = DoGet(_REMOTE, '/exports?limit=1&since=0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
914 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
915 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
916 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
917 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
918 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
919 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
920 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
921 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqSeries))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
922 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
923 self.assertFalse(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
924 self.assertEqual(e['Exports'][-1]['Seq'], seqStudy)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
925 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqStudy))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
926 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
927 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
928 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
929 e = DoGet(_REMOTE, '/exports?last')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
930 self.assertEqual(1, len(e['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
931 self.assertTrue(e['Done'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
932 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
933
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
934
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
935 # Check the content of the logged information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
936 e = DoGet(_REMOTE, '/exports')['Exports']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
937
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
938 if 'PatientID' in e[0]:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
939 # Since Orthanc 0.8.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
940 patient = 'PatientID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
941 study = 'StudyInstanceUID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
942 series = 'SeriesInstanceUID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
943 instance = 'SOPInstanceUID'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
944 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
945 # Up to Orthanc 0.8.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
946 patient = 'PatientId'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
947 study = 'StudyInstanceUid'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
948 series = 'SeriesInstanceUid'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
949 instance = 'SopInstanceUid'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
950
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
951 for k in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
952 self.assertTrue('Date' in e[k])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
953 self.assertTrue('Seq' in e[k])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
954 self.assertEqual('orthanctest', e[k]['RemoteModality'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
956 self.assertEqual(10, len(e[0]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
957 self.assertEqual('Instance', e[0]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
958 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
959 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
960 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
961 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
962 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
963 self.assertEqual('ozp00SjY2xG', e[0][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
964
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
965 self.assertEqual(9, len(e[1]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
966 self.assertEqual('Series', e[1]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
967 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
968 self.assertEqual('/series/f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
969 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
970 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
971 self.assertEqual('ozp00SjY2xG', e[1][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
972
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
973 self.assertEqual(8, len(e[2]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
974 self.assertEqual('Study', e[2]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
975 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
976 self.assertEqual('/studies/b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
977 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
978 self.assertEqual('ozp00SjY2xG', e[2][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
979
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
980 self.assertEqual(7, len(e[3]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
981 self.assertEqual('Patient', e[3]['ResourceType'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
982 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
983 self.assertEqual('/patients/6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
984 self.assertEqual('ozp00SjY2xG', e[3][patient])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
985
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
986 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
987 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
988
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
989
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
990 def test_store_peer(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
991 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
992 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
993
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
994 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
995 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
996 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
997
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
998 j = DoPost(_REMOTE, '/peers/peer/store', str(i), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
999 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1000 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1001
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1002 self.assertEqual(1, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1003
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1004 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1005 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1006
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1007
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1008 def test_bulk_storescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1009 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1010
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1011 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1012 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1013
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1014 j = DoPost(_REMOTE, '/modalities/orthanctest/store', [ a['ID'], b['ID'] ], 'application/json')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1015 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1016
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1017 DropOrthanc(_LOCAL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1018
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1019 # Send using patient's UUID
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1020 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1021 j = DoPost(_REMOTE, '/modalities/orthanctest/store',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1022 [ 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' ], 'application/json')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1023 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1024
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1025
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1026 def test_color(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1027 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1028 im = GetImage(_REMOTE, '/instances/%s/preview' % i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1029 self.assertEqual("RGB", im.mode)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1030 self.assertEqual(41, im.size[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1031 self.assertEqual(41, im.size[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1032
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1033 # http://effbot.org/zone/pil-comparing-images.htm
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1034 truth = Image.open(GetDatabasePath('ColorTestMalaterre.png'))
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1035 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1036
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 10
diff changeset
1037
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1038 def test_faking_ruby_put(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1039 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1040 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1041 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1042 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1043 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1044 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1045 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '0')
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 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '1')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1048 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1049 DoGet(_REMOTE, '/patients/%s/protected' % a, data = { '_method' : 'PUT' }, body = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1050 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1051
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1052
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1053 def test_faking_ruby_delete(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1054 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1055 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1056 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1057 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1058 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1059 DoGet(_REMOTE, '/patients/%s' % a, data = { '_method' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1060 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1061 DoGet(_REMOTE, '/patients/%s' % b, data = { '_method' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1062 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1063
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1064
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1065 def test_faking_google_put(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1066 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1067 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1068 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1069 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1070 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1071 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1072 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1073 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1074 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '1')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1075 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1076 DoPost(_REMOTE, '/patients/%s/protected' % a, headers = { 'X-HTTP-Method-Override' : 'PUT' }, data = '0')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1077 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1078
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1079
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1080 def test_faking_google_delete(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1081 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1082 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1083 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1084 a = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1085 b = DoGet(_REMOTE, '/patients')[1]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1086 DoPost(_REMOTE, '/patients/%s' % a, headers = { 'X-HTTP-Method-Override' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1087 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1088 DoPost(_REMOTE, '/patients/%s' % b, headers = { 'X-HTTP-Method-Override' : 'DELETE' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1089 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1090
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1091
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1092 def test_lua(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1093 self.assertEqual(42, DoPost(_REMOTE, '/tools/execute-script', 'print(42)'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1094 self.assertTrue(IsDefinedInLua(_REMOTE, 'PrintRecursive'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1095 self.assertFalse(IsDefinedInLua(_REMOTE, 'HelloWorld'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1096
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1097
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1098 def test_metadata(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1099 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1100 p = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1101 i = DoGet(_REMOTE, '/instances')[0]
369
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1102 series = DoGet(_REMOTE, '/series')[0]
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1103
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1104 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1105 self.assertEqual(1, len(m))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1106 self.assertEqual('LastUpdate', m[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1107
369
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1108 # 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
1109 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
1110 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
1111 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
1112
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1113 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
1114 self.assertEqual(1, len(m))
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1115 self.assertEqual('LastUpdate', m[0])
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1116
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1117 m = DoGet(_REMOTE, '/series/%s/metadata' % series)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1118 self.assertEqual(2, len(m))
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1119 self.assertTrue('LastUpdate' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1120
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1121 # New in Orthanc 1.9.0
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1122 self.assertTrue('RemoteAET' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1123 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
1124
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1125 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
1126 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1127 self.assertEqual(9, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1128 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
1129 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
1130 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1131 self.assertEqual(8, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1132
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1133 self.assertTrue('IndexInSeries' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1134 self.assertTrue('ReceptionDate' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1135 self.assertTrue('RemoteAET' in m)
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1136 self.assertTrue('Origin' in m)
89
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
1137 self.assertTrue('TransferSyntax' in m)
95
a807a4699eb4 testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 92
diff changeset
1138 self.assertTrue('SopClassUid' in m)
145
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1139 self.assertTrue('RemoteIP' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1140 self.assertTrue('HttpUsername' in m)
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1141 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
1142 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
1143 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
1144 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
1145 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
1146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1147 # Play with custom metadata
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1148 (headers, body) = DoPutRaw(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou')
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1149 self.assertEqual('200', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1150 self.assertEqual('', body)
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1151
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1152 if IsOrthancVersionAbove(_REMOTE, 1, 9, 2):
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
1153 self.assertEqual('"0-%s"' % ComputeMD5('coucou'), headers['etag'])
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1154 else:
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1155 self.assertFalse('ETag' in headers)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1156 self.assertFalse('etag' in headers)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1157
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1158 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1159 self.assertEqual(2, len(m))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1160 self.assertTrue('LastUpdate' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1161 self.assertTrue('5555' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1162 self.assertEqual('coucou', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p))
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1163
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1164 if IsOrthancVersionAbove(_REMOTE, 1, 9, 2):
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1165 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'hello', headers = {
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1166 'If-Match' : headers['etag']
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1167 })
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1168 else:
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1169 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'hello')
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1170
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1171 (headers, body) = DoGetRaw(_REMOTE, '/patients/%s/metadata/5555' % p)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1172 self.assertEqual('200', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
1173 self.assertEqual('hello', body)
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1174
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1175 if IsOrthancVersionAbove(_REMOTE, 1, 9, 2):
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1176 DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p, headers = {
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1177 'If-Match' : headers['etag']
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1178 })
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1179 else:
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1180 DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1181
12
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1182 m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1183 self.assertEqual(1, len(m))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
1184 self.assertTrue('LastUpdate' in m)
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1185
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1186
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1187 def test_statistics(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1188 # Upload 16 instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1189 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1190 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1191 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1192 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1193 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1194
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1195 s = DoGet(_REMOTE, '/statistics')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1196 self.assertEqual(16, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1197 self.assertEqual(2, s['CountPatients'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1198 self.assertEqual(2, s['CountStudies'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1199 self.assertEqual(4, s['CountSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1200 d = int(s['TotalUncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1201
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1202 e = 0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1203 for patient in DoGet(_REMOTE, '/patients'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1204 s = DoGet(_REMOTE, '/patients/%s/statistics' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1205 self.assertEqual(8, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1206 self.assertEqual(1, s['CountStudies'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1207 self.assertEqual(2, s['CountSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1208 e += int(s['UncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1209
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1210 for study in DoGet(_REMOTE, '/studies'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1211 s = DoGet(_REMOTE, '/studies/%s/statistics' % study)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1212 self.assertEqual(8, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1213 self.assertEqual(2, s['CountSeries'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1214 e += int(s['UncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1215
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1216 for series in DoGet(_REMOTE, '/series'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1217 s = DoGet(_REMOTE, '/series/%s/statistics' % series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1218 self.assertEqual(4, s['CountInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1219 e += int(s['UncompressedSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1221 self.assertEqual(3 * d, e)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1222
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1223
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1224 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
1225 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
1226
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1227 patient = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1228 instance = DoGet(_REMOTE, '/instances')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1229 size = int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1230 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1231
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1232 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1233 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
1234
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1235 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
1236 if IsDicomUntilPixelDataStored(_REMOTE):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1237 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
1238 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
1239 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1240 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
1241 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
1242 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
1243 self.assertTrue('dicom-as-json' in DoGet(_REMOTE, '/instances/%s/attachments' % instance))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1244
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1245 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/patients/%s/attachments/22' % patient, 'hello'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1246 hello = 'hellohellohellohellohellohellohellohellohello'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1247 DoPut(_REMOTE, '/patients/%s/attachments/1025' % patient, hello)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1248 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1249 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1250 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1251 size + int(DoGet(_REMOTE, '/patients/%s/attachments/1025/compressed-size' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1252
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1253 DoPut(_REMOTE, '/patients/%s/attachments/1026' % patient, 'world')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1254 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1255 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1256 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1257 size +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1258 int(DoGet(_REMOTE, '/patients/%s/attachments/1025/compressed-size' % patient)) +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1259 int(DoGet(_REMOTE, '/patients/%s/attachments/1026/compressed-size' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1260
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1261 self.assertEqual(2, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1262 self.assertEqual(hello, DoGet(_REMOTE, '/patients/%s/attachments/1025/data' % patient))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1263 self.assertEqual('world', DoGet(_REMOTE, '/patients/%s/attachments/1026/data' % patient))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1264 DoPost(_REMOTE, '/patients/%s/attachments/1025/verify-md5' % patient)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1265 DoPost(_REMOTE, '/patients/%s/attachments/1026/verify-md5' % patient)
392
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
1266 DoPut(_REMOTE, '/patients/%s/attachments/1026' % patient, 'world2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
1267 'If-Match' : '0-%s' % ComputeMD5('world'),
392
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
1268 })
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
1269
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1270 (headers, body) = DoGetRaw(_REMOTE, '/patients/%s/attachments/1026/data' % patient)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1271 self.assertEqual('200', headers['status'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
1272 self.assertEqual('world2', body)
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1273
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1274 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/instances/%s/attachments/dicom' % instance))
392
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
1275 DoDelete(_REMOTE, '/patients/%s/attachments/1025' % patient, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
1276 'If-Match' : '0-%s' % ComputeMD5(hello),
392
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
1277 })
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1278 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1279 int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1280 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1281 size + int(DoGet(_REMOTE, '/patients/%s/attachments/1026/compressed-size' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1282
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1283 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1284
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1285 if IsOrthancVersionAbove(_REMOTE, 1, 9, 2):
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1286 DoDelete(_REMOTE, '/patients/%s/attachments/1026' % patient, headers = {
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1287 'If-Match' : headers['etag']
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1288 })
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1289 else:
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1290 self.assertFalse('etag' in headers)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1291 DoDelete(_REMOTE, '/patients/%s/attachments/1026' % patient)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
1292
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1293 self.assertEqual(0, len(DoGet(_REMOTE, '/patients/%s/attachments' % patient)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1294
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1295 self.assertEqual(int(DoGet(_REMOTE, '/patients/%s/statistics' % patient)['DiskSize']), size)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1296 self.assertEqual(size, int(DoGet(_REMOTE, '/statistics')['TotalDiskSize']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1297
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1298
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1299 def test_incoming_storescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1300 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
1301 subprocess.check_call([ FindExecutable('storescu'),
44
ffa542cce638 Toolbox.FindExecutable()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1302 _REMOTE['Server'], str(_REMOTE['DicomPort']),
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1303 GetDatabasePath('ColorTestImageJ.dcm') ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1304 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1305
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1306 i = DoGet(_REMOTE, '/instances')
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1307 self.assertEqual(1, len(i))
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1308 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
1309
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1310 if IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1311 self.assertEqual(9, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1312 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
1313 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1314 self.assertEqual(8, len(m))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
1315
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1316 self.assertTrue('IndexInSeries' in m)
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1317 self.assertTrue('ReceptionDate' in m)
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1318 self.assertTrue('RemoteAET' in m)
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1319 self.assertTrue('Origin' in m)
89
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
1320 self.assertTrue('TransferSyntax' in m)
95
a807a4699eb4 testing of metadata SopClassUid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 92
diff changeset
1321 self.assertTrue('SopClassUid' in m)
145
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1322 self.assertTrue('RemoteIP' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 144
diff changeset
1323 self.assertTrue('CalledAET' in m)
63
2652d562267a test Origin metadata of instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 62
diff changeset
1324 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
1325 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
1326 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
1327 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
1328 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
1329
369
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1330 series = DoGet(_REMOTE, '/series')[0]
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1331 m = DoGet(_REMOTE, '/series/%s/metadata' % series)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1332 self.assertEqual(2, len(m))
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1333 self.assertTrue('LastUpdate' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1334 self.assertTrue('RemoteAET' in m)
24d93b42873a test "RemoteAET" metadata at series level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 368
diff changeset
1335 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
1336 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
1337 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
1338
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1339
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1340 def test_incoming_findscu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1341 UploadInstance(_REMOTE, 'Multiframe.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1342 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1343
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1344 i = CallFindScu([ '-k', '0008,0052=PATIENT', '-k', '0010,0010' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1345 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1346 self.assertEqual(2, len(patientNames))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1347 self.assertTrue('Test Patient BG ' in patientNames)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1348 self.assertTrue('Anonymized' in patientNames)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1349
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1350 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0008,0021' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1351 series = re.findall('\(0008,0021\).*?\[\s*(.*?)\s*\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1352 self.assertEqual(2, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1353 self.assertTrue('20070208' in series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1354 self.assertTrue('19980312' in series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1355
335
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
1356 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
1357 series = re.findall('\(0008,0021\).*?\[\s*(.*?)\s*\]', i)
1059b8de42de ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 55
diff changeset
1358 self.assertEqual(1, len(series))
1059b8de42de ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 55
diff changeset
1359 self.assertTrue('19980312' in series)
1059b8de42de ModalitiesInStudy subtest
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 55
diff changeset
1360
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1361 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'PatientName=Anonymized' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1362 series = re.findall('\(0010,0010\).*?\[\s*(.*?)\s*\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1363 self.assertEqual(1, len(series))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1364
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1365 # Test the "CaseSentitivePN" flag (false by default)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1366 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', 'PatientName=anonymized' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1367 series = re.findall('\(0010,0010\).*?\[\s*(.*?)\s*\]', i)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1368 self.assertEqual(1, len(series))
66
821d9eb73c45 Test returning sequence values
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 64
diff changeset
1369
70
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1370 # Test range search (buggy if Orthanc <= 0.9.6)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1371 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=19980312-' ])
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1372 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1373 self.assertEqual(2, len(studies))
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1374 self.assertTrue('20070208' in studies)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1375 self.assertTrue('19980312' in studies)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1376 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=19980312-19980312' ])
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1377 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1378 self.assertEqual(1, len(studies))
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1379 self.assertTrue('19980312' in studies)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1380 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyDate=-19980312' ])
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1381 studies = re.findall('\(0008,0020\).*?\[\s*(.*?)\s*\]', i)
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1382 self.assertEqual(1, len(studies))
9e7b5809481f test range search
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 69
diff changeset
1383 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
1384
05f48c19c60d Test "Retrieve AE Title" is returned by C-FIND SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 324
diff changeset
1385 # 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
1386 # 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
1387 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
1388 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
1389 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
1390 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
1391 self.assertEqual('ORTHANC', instances[1].strip())
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1392
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1393
191
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1394 def test_incoming_findscu_2(self):
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1395 # This test fails if "LookupMode_DatabaseOnly" is used
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1396 # (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
1397 # DICOM tags are returned)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1398 UploadInstance(_REMOTE, 'Multiframe.dcm')
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1399 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1400
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1401 # 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
1402 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
1403 sequences = re.findall('\(0008,2112\)', i)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1404 self.assertEqual(1, len(sequences))
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1405
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1406 # Test returning a non-main DICOM tag,
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1407 # "SecondaryCaptureDeviceID" (0018,1010), whose value is
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1408 # "MEDPC" in "ColorTestImageJ.dcm"
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1409 i = CallFindScu([ '-k', '0008,0052=SERIES', '-k', '0018,1010' ])
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1410 tags = re.findall('\(0018,1010\).*MEDPC', i)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1411 self.assertEqual(1, len(tags))
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1412
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1413
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1414 def test_incoming_findscu_3(self):
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1415 # This test fails if "LookupMode_DatabaseOnly" or
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1416 # "LookupMode_DiskOnAnswer" is used, as
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1417 # "SecondaryCaptureDeviceID" (0018,1010) is not a main DICOM
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1418 # 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
1419 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1420
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1421 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
1422 sequences = re.findall('\(0018,1010\)', i)
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1423 self.assertEqual(1, len(sequences))
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1424
bc8bc83465dc testing C-FIND optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 189
diff changeset
1425
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1426 def test_incoming_movescu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1427 UploadInstance(_REMOTE, 'Multiframe.dcm')
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1428
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1429 # No matching patient, so no job is created
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1430 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1431 CallMoveScu([ '--patient', '-k', '0008,0052=PATIENT', '-k', 'PatientID=none' ])
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1432 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1433
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1434 # 1 Matching patient, track the job
138
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1435 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1436 '--patient',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1437 '-k', '0008,0052=PATIENT',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1438 '-k', 'PatientID=12345678'
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
1439 ])))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1440 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1441
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1442
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1443 def test_findscu(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1444 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1445 j = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1446 k = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1447 DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1448
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1449 # Test the "find-patient" level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1450 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1451 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1452 self.assertEqual('ozp00SjY2xG', p[0]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1453
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1454 # Test wildcards constraints. The "LO" value representation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1455 # for PatientID is always case-sensitive, but the "PN" for
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1456 # PatientName might depend on the implementation:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1457 # "GenerateConfigurationForTests.py" will force it to be case
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1458 # insensitive (which was the default until Orthanc 0.8.6).
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1459 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'K*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1460 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1461
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1462 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'k*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1463 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1464
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1465 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : 'ozp*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1466 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1467
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1468 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : 'o?p*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1469 self.assertEqual(1, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1470
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1471 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientID' : '0?q*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1472 self.assertEqual(0, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1473
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1474 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'B*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1475 self.assertEqual(0, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1476
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1477 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'b*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1478 self.assertEqual(0, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1479
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1480 DoPost(_REMOTE, '/modalities/orthanctest/store', str(j), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1481 DoPost(_REMOTE, '/modalities/orthanctest/store', str(k), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1482 DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1483 self.assertEqual(3, len(DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { })))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1484
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1485 p = DoPost(_REMOTE, '/modalities/orthanctest/find-patient', { 'PatientName' : 'A*' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1486 self.assertEqual(2, len(p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1487
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1488 # Test the "find-study" level. This is the instance "ColorTestImageJ.dcm"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1489 s = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1490 self.assertEqual(1, len(s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1491 self.assertEqual('20070208', s[0]['StudyDate'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1492
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1493 # Test range searches
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1494 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1495 'StudyDate' : '-20070101' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1496 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1497
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1498 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1499 'StudyDate' : '20090101-' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1500 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1501
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1502 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1503 'StudyDate' : '20070101-' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1504 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1505
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1506 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1507 'StudyDate' : '-20090101' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1508 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1509
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1510 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1511 'StudyDate' : '20070207-20070207' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1512 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1513
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1514 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1515 'StudyDate' : '20070208-20070208' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1516 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1517
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1518 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', { 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1519 'StudyDate' : '20070209-20070209' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1520 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1521
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1522 # Test the ModalitiesInStudy tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1523 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1524 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1525 'ModalitiesInStudy' : 'US' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1526 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1527
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1528 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1529 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1530 'ModalitiesInStudy' : 'CT' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1531 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1532
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1533 t = DoPost(_REMOTE, '/modalities/orthanctest/find-study', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1534 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1535 'ModalitiesInStudy' : 'US\\CT' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1536 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1537
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1538 # Test the "find-series" level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1539 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1540 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1541 'StudyInstanceUID' : s[0]['StudyInstanceUID'] })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1542 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1543
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1544 # Test "\" separator
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1545 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1546 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1547 'StudyInstanceUID' : s[0]['StudyInstanceUID'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1548 'Modality' : 'MR\\CT\\US' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1549 self.assertEqual(1, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1550
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1551 t = DoPost(_REMOTE, '/modalities/orthanctest/find-series', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1552 'PatientID' : 'B9uTHKOZ',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1553 'StudyInstanceUID' : s[0]['StudyInstanceUID'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1554 'Modality' : 'MR\\US' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1555 self.assertEqual(0, len(t))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1556
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1557
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1558 def test_update_modalities(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1559 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
1560 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/modalities/toto'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1561 DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000 ])
116
4a196ebc7a4f updated tests for issue #31
amazy
parents: 112
diff changeset
1562 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
1563 DoDelete(_REMOTE, '/modalities/tata')
124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
1564 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'GenericNoUniversalWildcard' ])
121
1a19f953f53c also test GenericNoWildcardInDates
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 120
diff changeset
1565 DoDelete(_REMOTE, '/modalities/tata')
1a19f953f53c also test GenericNoWildcardInDates
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 120
diff changeset
1566 DoPut(_REMOTE, '/modalities/tata', [ "STORESCP", "localhost", 2000, 'GenericNoWildcardInDates' ])
128
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1567 modalitiesReadback = DoGet(_REMOTE, '/modalities?expand')
182
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1568 self.assertEqual('STORESCP', modalitiesReadback['tata']['AET'])
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1569 self.assertEqual('localhost', modalitiesReadback['tata']['Host'])
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1570 self.assertEqual(2000, modalitiesReadback['tata']['Port'])
7a6b532853ab modalities are now described as JSON objects
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 181
diff changeset
1571 self.assertEqual('GenericNoWildcardInDates', modalitiesReadback['tata']['Manufacturer'])
116
4a196ebc7a4f updated tests for issue #31
amazy
parents: 112
diff changeset
1572 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/modalities/toto', [ "STORESCP", "localhost", 2000, 'InvalidManufacturerName' ]))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1573 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1574 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
1575
429cc9d03610 test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 350
diff changeset
1576 # 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
1577 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
1578 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
1579
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1580 DoDelete(_REMOTE, '/modalities/toto')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1581 DoDelete(_REMOTE, '/modalities/tata')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1582 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1583 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/tata'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1584
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1585
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1586 def test_update_peers(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1587 # curl -X PUT http://localhost:8042/peers/toto -d '["http://localhost:8042/"]' -v
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1588 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
1589 self.assertRaises(Exception, lambda: DoDelete(_REMOTE, '/peers/toto'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1590 DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/' ])
214
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1591 DoPut(_REMOTE, '/peers/tata', { 'Url': 'http://localhost:8042/',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1592 'Username': 'user',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1593 'Password' : 'pass',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1594 'RemoteSelf' : 'self' })
128
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1595 self.assertTrue('tata' in DoGet(_REMOTE, '/peers'))
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1596 peersReadback = DoGet(_REMOTE, '/peers?expand')
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1597 self.assertEqual('http://localhost:8042/', peersReadback['tata']['Url'])
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1598 self.assertEqual('user', peersReadback['tata']['Username'])
214
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1599
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1600 if IsOrthancVersionAbove(_REMOTE, 1, 5, 4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1601 self.assertEqual(None, peersReadback['tata']['Password']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1602 self.assertFalse(peersReadback['tata']['Pkcs11']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1603 self.assertEqual('self', peersReadback['tata']['RemoteSelf'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1604 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1605 self.assertFalse('Password' in peersReadback['tata']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1606 self.assertFalse('Pkcs11' in peersReadback['tata']) # make sure no sensitive data is included
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1607 self.assertFalse('RemoteSelf' in peersReadback['tata'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1608
128
a9fdfcb696e6 added tests for ?expand in /peers and /modalities
amazy
parents: 127
diff changeset
1609 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
1610 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
1611 self.assertFalse('CertificateKeyPassword' in peersReadback['tata']) # make sure no sensitive data is included
214
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 213
diff changeset
1612
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1613 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/', 'a' ]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1614 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/peers/toto', [ 'http://localhost:8042/', 'a', 'b', 'c' ]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1615 self.assertTrue('store' in DoGet(_REMOTE, '/peers/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1616 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
1617
429cc9d03610 test access to the configuration of one single peer or modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 350
diff changeset
1618 # 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
1619 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
1620 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
1621
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1622 DoDelete(_REMOTE, '/peers/toto')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1623 DoDelete(_REMOTE, '/peers/tata')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1624 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/toto'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1625 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/peers/tata'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1626
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1627
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1628 def test_mesterhazy_modification(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1629 # When I modify a series ( eg. curl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1630 # http://localhost:8042/series/uidhere/modify -X POST -d
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1631 # '{"Replace":{"SeriesDate":"19990101"}}' ) the modified
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1632 # series is added to a new Study, instead of the existing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1633 # Study. Fixed in Orthanc 0.7.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1634
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1635 u = UploadInstance(_REMOTE, 'DummyCT.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1636 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1637 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1638
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1639 modified = DoPost(_REMOTE, '/series/%s/modify' % series,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1640 json.dumps({ "Replace" : { "SeriesDate" : "19990101" }}))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1641
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1642 self.assertEqual(study, DoGet(_REMOTE, '/series/%s' % modified['ID']) ['ParentStudy'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1643
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1644
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1645 def test_create(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1646 i = DoPost(_REMOTE, '/tools/create-dicom',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1647 json.dumps({
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1648 'PatientName' : 'Jodogne',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1649 'Modality' : 'CT',
58
b5518378e23b fix test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
1650 'SOPClassUID' : '1.2.840.10008.5.1.4.1.1.1',
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1651 'PixelData' : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' # red dot in RGBA
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1652 }))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1653
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1654 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i['ID']).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1655 self.assertEqual('CT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i['ID']).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1656
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1657 png = GetImage(_REMOTE, '/instances/%s/preview' % i['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1658 self.assertEqual((5, 5), png.size)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1659
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1660 j = DoGet(_REMOTE, i['Path'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1661 self.assertEqual('Instance', j['Type'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1662 self.assertEqual(j['ID'], i['ID'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
1663
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1664
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1665 def test_pilates(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1666 # "SCU failed error when accessing orthanc with osirix" by
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1667 # Pilates Agentur (Mar 10, 2014 at 9:33 PM)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1668 i = UploadInstance(_REMOTE, 'PilatesArgenturGEUltrasoundOsiriX.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1669 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1670 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1671 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1672
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1673
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1674 def test_shared_tags(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1675 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1676 b = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1677 p = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1678
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1679 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1680 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
1681 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
1682
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
1683 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
1684 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
1685 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
1686
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1687 self.assertTrue('0008,1030' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1688 self.assertTrue('StudyDescription' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1689 self.assertTrue('0008,103e' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1690 self.assertTrue('SeriesDescription' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1691 self.assertFalse('0008,0018' in DoGet(_REMOTE, '/patients/%s/shared-tags' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1692 self.assertFalse('SOPInstanceUID' in DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1694 self.assertTrue('0008,0018' in DoGet(_REMOTE, '/instances/%s/tags' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1695 self.assertTrue('SOPInstanceUID' in DoGet(_REMOTE, '/instances/%s/tags?simplify' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1696
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1697
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1698 def test_modules(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1699 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1700 p = DoGet(_REMOTE, '/patients')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1701 s = DoGet(_REMOTE, '/studies')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1702 t = DoGet(_REMOTE, '/series')[0]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1703
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1704 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/patients/%s/module' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1705 self.assertTrue('PatientName' in DoGet(_REMOTE, '/patients/%s/module?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1706 self.assertTrue('0010,0010' in DoGet(_REMOTE, '/studies/%s/module-patient' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1707 self.assertTrue('PatientName' in DoGet(_REMOTE, '/studies/%s/module-patient?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1708 self.assertTrue('0008,1030' in DoGet(_REMOTE, '/studies/%s/module' % s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1709 self.assertTrue('StudyDescription' in DoGet(_REMOTE, '/studies/%s/module?simplify' % s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1710 self.assertTrue('0008,103e' in DoGet(_REMOTE, '/series/%s/module' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1711 self.assertTrue('SeriesDescription' in DoGet(_REMOTE, '/series/%s/module?simplify' % p))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1712 self.assertTrue('0008,0018' in DoGet(_REMOTE, '/instances/%s/module' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1713 self.assertTrue('SOPInstanceUID' in DoGet(_REMOTE, '/instances/%s/module?simplify' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1714
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1715
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1716 def test_auto_directory(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1717 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1718 self.assertTrue('now' in DoGet(_REMOTE, '/tools'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1719 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
1720 self.assertTrue('invalidate-tags' in DoGet(_REMOTE, '/tools'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1721 self.assertTrue(len(DoGet(_REMOTE, '/tools/dicom-conformance')) > 1000)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1722 self.assertTrue('orthanctest' in DoGet(_REMOTE, '/modalities'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1723 self.assertTrue('echo' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1724 self.assertTrue('find' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1725 self.assertTrue('find-instance' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1726 self.assertTrue('find-patient' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1727 self.assertTrue('find-series' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1728 self.assertTrue('find-study' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1729 self.assertTrue('store' in DoGet(_REMOTE, '/modalities/orthanctest'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1730 self.assertTrue('store' in DoGet(_REMOTE, '/peers/peer'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1731 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
1732 self.assertTrue('raw' in DoGet(_REMOTE, '/instances/%s/frames/0' % a))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1733 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/tools/nope'))
28
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1734 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/nope'))
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1735 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/nope/nope.html'))
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1736 self.assertEqual(404, DoGetRaw(_REMOTE, '/nope')[0].status)
156c7ae164b5 new test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 27
diff changeset
1737 self.assertEqual(404, DoGetRaw(_REMOTE, '/nope/nope.html')[0].status)
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1738
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1739
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1740 def test_echo(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1741 DoPost(_REMOTE, '/modalities/orthanctest/echo')
359
8b476a383999 test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 357
diff changeset
1742 DoPost(_REMOTE, '/modalities/orthanctest/echo', '{}')
8b476a383999 test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 357
diff changeset
1743
8b476a383999 test empty body in /modalities/.../echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 357
diff changeset
1744 # 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
1745 DoPost(_REMOTE, '/modalities/orthanctest/echo', '')
352
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1746 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/modalities/nope/echo'))
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1747
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1748 # New in Orthanc 1.8.1
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1749 DoPost(_REMOTE, '/tools/dicom-echo', [
355
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 354
diff changeset
1750 _REMOTE['DicomAet'], _REMOTE['Server'], _REMOTE['DicomPort'] ])
352
3d406c0261fc test /tools/dicom-echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 351
diff changeset
1751 DoPost(_REMOTE, '/tools/dicom-echo', DoGet(_REMOTE, '/modalities/orthanctest/configuration'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1752
353
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1753 # Use the 'CheckFind' new option in Orthanc 1.8.1
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1754 DoPost(_REMOTE, '/modalities/self/echo', { 'CheckFind' : True })
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1755 DoPost(_REMOTE, '/tools/dicom-echo', {
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1756 'AET' : _REMOTE['DicomAet'],
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1757 'Host' : _REMOTE['Server'],
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1758 'Port' : _REMOTE['DicomPort'],
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1759 'CheckFind' : True
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1760 })
49f2943544eb CheckFind on echo
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 352
diff changeset
1761
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1762
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1763 def test_xml(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1764 json = DoGet(_REMOTE, '/tools', headers = { 'accept' : 'application/json' })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1765 xml = minidom.parseString(DoGet(_REMOTE, '/tools', headers = { 'accept' : 'application/xml' }))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1766 items = xml.getElementsByTagName('root')[0].getElementsByTagName('item')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1767 self.assertEqual(len(items), len(json))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1768
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1769 self.assertTrue('dicom-conformance' in json)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1770
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1771 ok = False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1772 for i in items:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1773 if i.childNodes[0].data == 'dicom-conformance':
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1774 ok = True
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1775 self.assertTrue(ok)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1776
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1777
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1778 def test_googlecode_issue_16(self):
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1779 i = UploadInstance(_REMOTE, 'Issue16.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1780 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)['FrameIncrementPointer']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1781 self.assertEqual('0018,1063', t)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1782
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1783
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1784 def test_googlecode_issue_22(self):
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1785 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1786 a = [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1787 "f804691f62197040438f4627c6b994f1", # Frame 0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1788 "c69eee9a51eea3e8611e82e578897254",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1789 "315666be83e2d0111c77bc0996d84901",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1790 "3e27aa959d911172c48a1436443c72b1",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1791 "958642c9e7e9d232d3869faff546058c",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1792 "5e7ea8e3e4230cae707d143481355c59",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1793 "eda37f83558d858a596175aed8b2ad47",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1794 "486713bd2895c4ecbe0e97715ac7f80a",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1795 "091ef729eb169e67da8a0faa9631f9a8",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1796 "5aa2b8c7ffe0a483efaa8e12417686ca",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1797 "e2f39e85896fe58876654b94cd0b5013",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1798 "6fd2129e4950abbe1be053bc814d5da8",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1799 "c3331a8ba7a757f3d423735ab7fa81f9",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1800 "746f808582156734dd6b6fdfd3a0b72c",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1801 "8075ea2b227a70c60ea6b7b75a6bb190",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1802 "806b8b3e300c615099c11a5ec23465aa",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1803 "7c836aa298ba6eef96434579af631a11",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1804 "a0357dc9f4f72d73a885c33d7c287446",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1805 "f25ba3be1cc7d7fad95706adc199ea7d",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1806 "8b114c526b8cbed6cad8a3248b7b480c",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1807 "44e6670f127e612a2b4aa60a0d207698",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1808 "b8945f90fe02facf2ace24ca1ecbe0a5",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1809 "95c796c2fa8f59018b15cf2987b1f79b",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1810 "ce0a51ab30224205b44920221dc27351", # Frame 23
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1811 ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1812
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1813 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1814 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/24/preview' % s))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1815
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1816 for i in range(len(a)):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1817 self.assertEqual(a[i], ComputeMD5(DoGet(_REMOTE, '/instances/%s/frames/%d/preview' % (s, i))))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1818
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1819
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1820 def test_googlecode_issue_19(self):
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
1821 # 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
1822 # 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
1823
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1824 a = UploadInstance(_REMOTE, 'Issue19.dcm')['ID']
304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 302
diff changeset
1825 if not HasGdcmPlugin(_REMOTE):
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
1826 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/941ad3c8-05d05b88-560459f9-0eae0e20-6cddd533/preview'))
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1827
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1828
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
1829 def test_googlecode_issue_37(self):
13
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1830 # Same test for issues 35 and 37. Fixed in Orthanc 0.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1831 u = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1832
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1833 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1834 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1835 'Query' : { 'StationName' : 'SMR4-MP3' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 12
diff changeset
1836 self.assertEqual(1, len(a))
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1837
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1838
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1839 def test_rest_find(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1840 # Upload 8 instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1841 for i in range(2):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1842 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1843 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1844 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1845 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1846
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1847 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1848 'CaseSensitive' : False,
194
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1849 'Query' : { 'PatientName' : 'BRAINIX' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1850 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1851
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1852 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1853 'CaseSensitive' : False,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1854 'Query' : { 'PatientName' : 'BRAINIX\\KNEE\\NOPE' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1855 self.assertEqual(2, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1856
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1857 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1858 'CaseSensitive' : False,
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1859 'Query' : { 'PatientName' : '*n*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1860 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1861
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1862 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1863 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1864 'Query' : { 'PatientName' : '*n*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1865 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1866
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1867 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1868 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1869 'CaseSensitive' : False,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1870 'Query' : { 'PatientName' : '*ne*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1871 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1872 self.assertEqual('20080822', a[0]['MainDicomTags']['PatientBirthDate'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1873
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1874 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1875 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1876 'Query' : { 'PatientName' : '*ne*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1877 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1878
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1879 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1880 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1881 'Query' : { 'PatientName' : '*NE*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1882 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1883
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1884 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1885 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1886 'Query' : { 'PatientName' : '*NE*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1887 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1888
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1889 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1890 'CaseSensitive' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1891 'Query' : { 'PatientName' : '*NE*' }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1892 self.assertEqual(4, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1893
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1894 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1895 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1896
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1897 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1898 self.assertEqual(2, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1899
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1900 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1901 self.assertEqual(4, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1902
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1903 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance', 'Query' : { }})
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1904 self.assertEqual(8, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1905
194
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1906 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1907 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1908 'Query' : { 'StudyDate' : '20061201-20061201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1909 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1910 self.assertEqual('BRAINIX', a[0]['PatientMainDicomTags']['PatientName'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1911
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1912 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1913 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1914 'Query' : { 'StudyDate' : '20061201-20091201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1915 self.assertEqual(2, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1916 for i in range(2):
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1917 self.assertTrue(a[i]['PatientMainDicomTags']['PatientName'] in ['BRAINIX', 'KNEE'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1918
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1919 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1920 'Query' : { 'StudyDate' : '20061202-20061202' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1921 self.assertEqual(0, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1922
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1923 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1924 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1925 'Query' : { 'StudyDate' : '-20061201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1926 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1927 self.assertEqual('BRAINIX', a[0]['PatientMainDicomTags']['PatientName'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1928
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1929 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1930 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1931 'Query' : { 'StudyDate' : '-20051201' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1932 self.assertEqual(0, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1933
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1934 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1935 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1936 'Query' : { 'StudyDate' : '20061201-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1937 self.assertEqual(2, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1938 for i in range(2):
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1939 self.assertTrue(a[i]['PatientMainDicomTags']['PatientName'] in ['BRAINIX', 'KNEE'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1940
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1941 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1942 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1943 'Query' : { 'StudyDate' : '20061202-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1944 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1945 self.assertEqual('KNEE', a[0]['PatientMainDicomTags']['PatientName'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1946
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1947 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1948 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1949 'Query' : { 'StudyDate' : '20080819-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1950 self.assertEqual(1, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1951 self.assertEqual('KNEE', a[0]['PatientMainDicomTags']['PatientName'])
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1952
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1953 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1954 'Expand' : True,
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1955 'Query' : { 'StudyDate' : '20080820-' }})
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1956 self.assertEqual(0, len(a))
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1957
9f7ae64c0fda more tests about find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1958
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1959
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1960 def test_rest_query_retrieve(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1961 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1962
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1963 # Upload 8 instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1964 for i in range(2):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1965 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1966 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1967 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1968 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1969
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1970 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1971 for p in DoGet(_REMOTE, '/patients'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1972 DoPost(_REMOTE, '/modalities/orthanctest/store', p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1973 DoDelete(_REMOTE, '/patients/%s' % p)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1974
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1975 for q in DoGet(_REMOTE, '/queries'):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1976 DoDelete(_REMOTE, '/queries/%s' % q)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1977
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1978 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1979 self.assertEqual(0, len(DoGet(_REMOTE, '/queries')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1980 a = DoPost(_REMOTE, '/modalities/orthanctest/query', { 'Level' : 'Series',
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1981 'Query' : {
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1982 'PatientName' : '*NE*',
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1983 'StudyDate' : '*',
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1984 }})['ID']
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1985 self.assertEqual(1, len(DoGet(_REMOTE, '/queries')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1986
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1987 b = DoGet(_REMOTE, '/queries/%s' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1988 self.assertTrue('answers' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1989 self.assertTrue('level' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1990 self.assertTrue('modality' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1991 self.assertTrue('query' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1992 self.assertTrue('retrieve' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1993 self.assertEqual('Series', DoGet(_REMOTE, '/queries/%s/level' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1994 self.assertEqual('orthanctest', DoGet(_REMOTE, '/queries/%s/modality' % a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1995
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1996 q = DoGet(_REMOTE, '/queries/%s/query?simplify' % a)
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1997 self.assertEqual(2, len(q))
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
1998 self.assertTrue('PatientName' in q)
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
1999 self.assertTrue('StudyDate' in q)
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2000 self.assertEqual('*NE*', q['PatientName'])
27
cde1691838d3 wildcard test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
2001 self.assertEqual('*', q['StudyDate'])
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2002
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2003 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2004
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2005 s = DoGet(_REMOTE, '/queries/%s/answers/0' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2006 self.assertTrue('content' in s)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2007 self.assertTrue('retrieve' in s)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2008
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2009 s = DoGet(_REMOTE, '/queries/%s/answers/0/content?simplify' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2010 self.assertEqual('887', s['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2011 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', s['StudyInstanceUID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2012
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2013 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2014 DoPost(_REMOTE, '/queries/%s/answers/0/retrieve' % a, 'ORTHANC')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2015 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2016 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2017 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2018 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2019
112
9d09f6f21b60 added a test for issue #36
amazy
parents: 111
diff changeset
2020 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
2021 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2022 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2023 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2024 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2025
186
8feebc2bf9fc test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 183
diff changeset
2026 # 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
2027 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
2028 self.assertEqual(2, len(s))
8feebc2bf9fc test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 183
diff changeset
2029 for i in range(2):
8feebc2bf9fc test options expand and limit to /queries/.../answers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 183
diff changeset
2030 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
2031 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
2032 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
2033
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2034 DoDelete(_REMOTE, '/queries/%s' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2035 self.assertEqual(0, len(DoGet(_REMOTE, '/queries')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2036
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2037
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2038 def test_parent(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2039 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2040 patient = '6816cb19-844d5aee-85245eba-28e841e6-2414fae2'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2041 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2042 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2043 instance = '66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d'
107
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
2044 self.assertEqual(instance, u)
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2045
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2046 a = DoGet(_REMOTE, '/studies/%s/patient' % study)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2047 self.assertEqual('Patient', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2048 self.assertEqual(patient, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2049
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2050 a = DoGet(_REMOTE, '/series/%s/patient' % series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2051 self.assertEqual('Patient', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2052 self.assertEqual(patient, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2053
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2054 a = DoGet(_REMOTE, '/series/%s/study' % series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2055 self.assertEqual('Study', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2056 self.assertEqual(study, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2057
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2058 a = DoGet(_REMOTE, '/instances/%s/patient' % instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2059 self.assertEqual('Patient', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2060 self.assertEqual(patient, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2061
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2062 a = DoGet(_REMOTE, '/instances/%s/study' % instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2063 self.assertEqual('Study', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2064 self.assertEqual(study, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2065
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2066 a = DoGet(_REMOTE, '/instances/%s/series' % instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2067 self.assertEqual('Series', a['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2068 self.assertEqual(series, a['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2069
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2070
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2071 def test_shanon(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2072 def Anonymize(instance, replacements = {}):
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2073 return DoPost(_REMOTE, '/instances/%s/anonymize' % instance, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2074 'Replace' : replacements,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2075 'Force' : True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2076 }, 'application/json')
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2077
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2078 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2079 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2080 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2081
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2082 tags = [ 'PatientID', 'StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID', 'DeidentificationMethod' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2083 ids = [ 'ozp00SjY2xG',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2084 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2085 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2086 '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2087
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2088 a = ExtractDicomTags(Anonymize(u), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2089 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2090 self.assertNotEqual(ids[i], a[i])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2091 self.assertTrue(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2092
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2093 a = ExtractDicomTags(Anonymize(u, { 'PatientName' : 'toto' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2094 for i in range(4):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2095 self.assertNotEqual(ids[i], a[i])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2096 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2097
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2098 a = ExtractDicomTags(Anonymize(u, { 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2099 self.assertEqual('instance', a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2100 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2101
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2102 a = ExtractDicomTags(Anonymize(u, { 'SeriesInstanceUID' : 'series' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2103 self.assertEqual('series', a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2104 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2105
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2106 a = ExtractDicomTags(Anonymize(u, { 'StudyInstanceUID' : 'study' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2107 self.assertEqual('study', a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2108 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2109
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2110 a = ExtractDicomTags(Anonymize(u, { 'PatientID' : 'patient' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2111 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2112 self.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2113
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2114 a = ExtractDicomTags(Anonymize(u, { 'PatientID' : 'patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2115 'StudyInstanceUID' : 'study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2116 'SeriesInstanceUID' : 'series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2117 'SOPInstanceUID' : 'instance' }), 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.assertFalse(a[4].startswith('Orthanc'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2120
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2121 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2122
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2124 def test_shanon_2(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2125 def Modify(instance, replacements = {}):
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2126 return DoPost(_REMOTE, '/instances/%s/modify' % instance, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2127 'Replace' : replacements,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2128 'Force': True,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
2129 }, 'application/json')
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2130
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2131 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2132 u = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2133 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2134
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2135 tags = [ 'PatientID', 'StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID', 'DeidentificationMethod' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2136 ids = [ 'ozp00SjY2xG',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2137 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2138 '1.2.840.113619.2.176.2025.1499492.7391.1171285944.394',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2139 '1.2.840.113619.2.176.2025.1499492.7040.1171286242.109' ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2141 a = ExtractDicomTags(Modify(u), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2142 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2143 self.assertEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2144 self.assertEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2145 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2146 self.assertEqual(0, len(a[4]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2147
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2148 a = ExtractDicomTags(Modify(u, { 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2149 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2150 self.assertEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2151 self.assertEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2152 self.assertEqual('instance', a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2153
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2154 a = ExtractDicomTags(Modify(u, { 'SeriesInstanceUID' : 'series' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2155 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2156 self.assertEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2157 self.assertEqual('series', a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2158 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2159
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2160 a = ExtractDicomTags(Modify(u, { 'StudyInstanceUID' : 'study' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2161 self.assertEqual(ids[0], a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2162 self.assertEqual('study', a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2163 self.assertNotEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2164 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2165
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2166 a = ExtractDicomTags(Modify(u, { 'PatientID' : 'patient' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2167 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2168 self.assertNotEqual(ids[1], a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2169 self.assertNotEqual(ids[2], a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2170 self.assertNotEqual(ids[3], a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2172 a = ExtractDicomTags(Modify(u, { 'PatientID' : 'patient',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2173 'StudyInstanceUID' : 'study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2174 'SeriesInstanceUID' : 'series',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2175 'SOPInstanceUID' : 'instance' }), tags)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2176 self.assertEqual('patient', a[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2177 self.assertEqual('study', a[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2178 self.assertEqual('series', a[2])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2179 self.assertEqual('instance', a[3])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2180
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2181 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2182
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2183
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2184 def test_instances_tags(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2185 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2186 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2187 #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
2188 #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
2189
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2190 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/patients')[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2191 self.assertEqual(2, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2192 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2193 self.assertEqual('887', i[i.keys()[1]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2194
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2195 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/studies')[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2196 self.assertEqual(2, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2197 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2198 self.assertEqual('887', i[i.keys()[1]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2199
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2200 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2201 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/series')[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2202 self.assertEqual(1, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2203 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2204
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2205 i = DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % DoGet(_REMOTE, '/series')[1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2206 self.assertEqual(1, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2207 self.assertEqual('887', i[i.keys()[0]]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2208
136
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2209 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
2210 self.assertEqual(1, len(i))
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2211 self.assertEqual('887', i[i.keys()[0]]['0010,0020'])
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2212
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2213
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2214 def test_lookup(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2215 a = DoPost(_REMOTE, '/tools/lookup', 'ozp00SjY2xG')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2216 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2217
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2218 UploadInstance(_REMOTE, 'DummyCT.dcm')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2219
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2220 a = DoPost(_REMOTE, '/tools/lookup', 'ozp00SjY2xG')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2221 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2222 self.assertEqual('Patient', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2223 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2224 self.assertEqual('/patients/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2225
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2226 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
2227 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2228 self.assertEqual('Study', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2229 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2230 self.assertEqual('/studies/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2231
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2232 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
2233 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2234 self.assertEqual('Series', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2235 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2236 self.assertEqual('/series/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2237
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2238 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
2239 self.assertEqual(1, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2240 self.assertEqual('Instance', a[0]['Type'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2241 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', a[0]['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2242 self.assertEqual('/instances/%s' % a[0]['ID'], a[0]['Path'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2243
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2244 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2245 a = DoPost(_REMOTE, '/tools/lookup', '3113719P')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2246 self.assertEqual(0, len(a))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 13
diff changeset
2247
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2248
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2249 def test_autorouting(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2250 knee1 = 'Knee/T1/IM-0001-0001.dcm'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2251 knee2 = 'Knee/T2/IM-0001-0002.dcm'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2252 other = 'Brainix/Flair/IM-0001-0001.dcm'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2253
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2254 # Check that this version is >= 0.8.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2255 self.assertTrue(IsDefinedInLua(_REMOTE, '_InitializeJob'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2256 self.assertTrue('orthanctest' in DoGet(_REMOTE, '/modalities'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2257
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2258 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2259 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2260
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2261 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2262 DropOrthanc(_LOCAL)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2263 InstallLuaScriptFromPath(_REMOTE, 'Lua/Autorouting.lua')
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2264 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2265 UploadInstance(_REMOTE, knee2)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2266 UploadInstance(_REMOTE, other)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2267 WaitEmpty(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2268 UninstallLuaCallbacks(_REMOTE)
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2269 self.assertEqual(3, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2270
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2271 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2272 DropOrthanc(_LOCAL)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2273 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingConditional.lua')
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2274 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2275 UploadInstance(_REMOTE, knee2)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2276 UploadInstance(_REMOTE, other)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2277 WaitEmpty(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2278 UninstallLuaCallbacks(_REMOTE)
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2279 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2280
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2281 DropOrthanc(_REMOTE)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2282 DropOrthanc(_LOCAL)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2283 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingModification.lua')
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2284 UploadInstance(_REMOTE, knee1)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2285 WaitEmpty(_REMOTE)
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2286 UninstallLuaCallbacks(_REMOTE)
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2287 i = DoGet(_LOCAL, '/instances')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2288 self.assertEqual(1, len(i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2289
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2290 with tempfile.NamedTemporaryFile(delete = True) as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2291 f.write(DoGet(_LOCAL, '/instances/%s/file' % i[0]))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2292 f.flush()
45
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 44
diff changeset
2293 routed = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ])
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2294 self.assertEqual('My Medical Device', re.search('"StationName">(.*?)<', routed).group(1).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2295 self.assertEqual(None, re.search('"MilitaryRank"', routed))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
2296 self.assertEqual(None, re.search('"0051,0010"', routed)) # A private tag
17
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2297
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2298
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2299 def test_storescu_rf(self):
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2300 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2301 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2302 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
7c8500991a12 karsten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 15
diff changeset
2303 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
18
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2305
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2306 def test_anonymize_instance(self):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2307 def AnonymizeAndUpload(instanceId, parameters):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2308 return DoPost(_REMOTE, '/instances', DoPost(_REMOTE, '/instances/%s/anonymize' % instanceId, parameters,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2309 'application/json'), 'application/dicom')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2310
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2311 def ModifyAndUpload(instanceId, parameters):
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2312 return DoPost(_REMOTE, '/instances', DoPost(_REMOTE, '/instances/%s/modify' % instanceId, parameters,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2313 'application/json'), 'application/dicom')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2314
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2315 a = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2316 s1 = DoGet(_REMOTE, '/instances/%s/content/PatientName' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2317 s2 = DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % a) # Some private tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2318 s3 = DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2319 s4 = DoGet(_REMOTE, '/instances/%s/content/SeriesDescription' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2320 s5 = DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2321
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2322 b = AnonymizeAndUpload(a, '{}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2323 self.assertNotEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2324 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2325
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2326 # Keep private tag (only OK since Orthanc 0.8.0)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2327 b = AnonymizeAndUpload(a, '{"Keep":["00e1-10c2"]}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2328 self.assertNotEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2329 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2330
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2331 b = AnonymizeAndUpload(a, '{"Keep":["00e1,10c2","PatientName"]}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2332 self.assertEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2333 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2334
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2335 b = AnonymizeAndUpload(a, '{"Keep":["PatientName"],"Replace":{"00e1,10c2":"Hello"}}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2336 self.assertEqual(s1, DoGet(_REMOTE, '/instances/%s/content/PatientName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2337 self.assertTrue(DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b).startswith('Hello'))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2338
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2339 # Examples from the Wiki
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
2340 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
2341 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2342 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2343 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2344 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008,103e' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2345 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008-103E' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2346 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2347 DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2348 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2349
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
2350 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
2351 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2352 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2353 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2354 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008,103e' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2355 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/00e1-10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2356 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2357
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
2358 b = ModifyAndUpload(a, '{"Replace":{"PatientName":"hello","PatientID":"world"},"Force":true}')
18
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2359 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2360 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/PatientID' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2361 self.assertEqual(s2, DoGet(_REMOTE, '/instances/%s/content/00e1,10c2' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2362 self.assertEqual(s3, DoGet(_REMOTE, '/instances/%s/content/0008,1030' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2363 self.assertEqual(s4, DoGet(_REMOTE, '/instances/%s/content/0008-103E' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2364 self.assertEqual(s5, DoGet(_REMOTE, '/instances/%s/content/InstitutionName' % b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2365
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2366
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2367 # Test modify non-existing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2368 i = DoPost(_REMOTE, '/tools/create-dicom',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2369 json.dumps({
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2370 'PatientName' : 'Jodogne',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2371 'Modality' : 'CT',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2372 }))['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2373
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2374 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2375 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % i))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2376 self.assertEqual('CT', DoGet(_REMOTE, '/instances/%s/content/Modality' % i).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2377
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2378 b = ModifyAndUpload(i, '{"Replace":{"StudyDescription":"hello","Modality":"world"}}')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2379 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/PatientName' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2380 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/StudyDescription' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2381 self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/Modality' % b).strip())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 17
diff changeset
2382
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2383
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2384 def test_incoming_jpeg(self):
61
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2385 def storescu(image, acceptUnknownSopClassUid):
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2386 if acceptUnknownSopClassUid:
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2387 tmp = [ '-xf', GetDatabasePath('UnknownSopClassUid.cfg'), 'Default' ]
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2388 else:
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2389 tmp = [ '-xs' ]
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2390
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2391 with open(os.devnull, 'w') as FNULL:
61
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2392 subprocess.check_call([ FindExecutable('storescu') ] + tmp +
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2393 [ _REMOTE['Server'], str(_REMOTE['DicomPort']),
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2394 GetDatabasePath(image) ],
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2395 stderr = FNULL)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2396
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2397 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
2398
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2399 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
2400 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
2401 '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
2402 ])
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2403 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
2404 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
2405 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
2406 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
2407 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
2408 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
2409 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
2410 else:
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2411 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
2412
61
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2413 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
2414 self.assertRaises(Exception, lambda: storescu('UnknownSopClassUid.dcm', True))
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2415 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
2416
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2417 if IsOrthancVersionAbove(_REMOTE, 1, 9, 0):
374
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
2418 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
2419 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
2420 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
2421 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
2422 else:
f673153f27a4 use of /tools/unknown-sop-class-accepted and /tools/accepted-transfer-syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 372
diff changeset
2423 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
2424
62
f9c4ce95756f removal of useless information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 61
diff changeset
2425 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
2426 storescu('Knix/Loc/IM-0001-0001.dcm', False)
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2427 storescu('UnknownSopClassUid.dcm', True)
967d44407308 test UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 60
diff changeset
2428 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2429
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2430
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2431 def test_storescu_jpeg(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2432 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
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 knixStudy = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
64
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2435 i = UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm')['ID']
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2436
369e439cdfd6 test access header
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 63
diff changeset
2437 # This is JPEG lossless
136
5634ef96fcc5 testing "short" option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
2438 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
2439 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
2440 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
2441
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2442 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0002.dcm')
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2443 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0003.dcm')
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2444
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2445 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
2446 b = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2447 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2448 DoPost(_REMOTE, '/modalities/orthanctest/store', [ knixStudy, a, b ])
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2449 self.assertEqual(5, len(DoGet(_LOCAL, '/instances')))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2450
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2451 self.assertEqual(3, len(DoGet(_REMOTE, '/exports')['Exports']))
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 DropOrthanc(_REMOTE)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2454 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2455
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2456
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2457 def test_pixel_data(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2458 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
2459 color = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2460 phenix = UploadInstance(_REMOTE, 'Phenix/IM-0001-0001.dcm')['ID']
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 phenixSize = 358 * 512 * 2
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2463 colorSize = 1000 * 1000 * 3
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2464 jpegSize = 51918
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2465
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2466 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
2467 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
2468 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
2469
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2470 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
2471 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
2472
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2473 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
2474 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
2475
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2476
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2477 def test_decode_brainix(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2478 brainix = [
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2479 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'], # (*)
384
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 383
diff changeset
2480 UploadInstance(_REMOTE, 'Formats/JpegLossless.dcm')['ID'], # JPEG-LS, same as (*) (since Orthanc 0.7.6) => doesn't work on big-endian
21
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2481 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
2482 ]
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2483 h = '6fb11b932d535c2be04beabd99793ff8'
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2484 maxValue = 426.0
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2485
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2486 truth = Image.open(GetDatabasePath('Formats/Brainix.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2487 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2488 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2489 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2490
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2491 truth2 = map(lambda x: min(255, x), truth.getdata())
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2492 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2493 self.AssertSameImages(truth2, '/instances/%s/image-uint8' % i)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2494
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2495 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
2496 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2497 self.AssertSameImages(truth2, '/instances/%s/preview' % i)
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 for i in brainix:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2500 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
2501
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2502
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2503 def test_decode_color(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2504 imagej = UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2505 color = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID']
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 for i in [ imagej, color ]:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2508 for j in [ 'image-uint8', 'image-uint16', 'image-int16' ]:
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2509 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
2510
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2511 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
2512 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
2513
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2514 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
2515 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
2516
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2517
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2518 def test_decode_rf(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2519 rf = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2520 truth = Image.open(GetDatabasePath('Formats/KarstenHilbertRF.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2521
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2522 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint8' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2523 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2524 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2525 self.AssertSameImages(truth.getdata(), '/instances/%s/preview' % rf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2526
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2527 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
2528
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2529
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2530 def test_decode_multiframe(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2531 mf = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2532
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2533 # Test the first frame
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2534 truth = Image.open(GetDatabasePath('Formats/Multiframe0.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2535 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint8' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2536 self.AssertSameImages(truth.getdata(), '/instances/%s/image-uint16' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2537 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2538 self.AssertSameImages(truth.getdata(), '/instances/%s/preview' % mf)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2539 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
2540
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2541 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
2542
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2543 # Test the last frame
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2544 truth = Image.open(GetDatabasePath('Formats/Multiframe75.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2545 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
2546
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2547
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2548 def test_decode_signed(self):
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2549 signed = UploadInstance(_REMOTE, 'SignedCT.dcm')['ID']
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2550 minValue = -2000
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2551 maxValue = 4042
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2552
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2553 truth = Image.open(GetDatabasePath('Formats/SignedCT.png'))
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2554 self.AssertSameImages(truth.getdata(), '/instances/%s/image-int16' % signed)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2555
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2556 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
2557 self.AssertSameImages(truth2, '/instances/%s/image-uint16' % signed)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2558
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2559 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
2560 self.AssertSameImages(truth3, '/instances/%s/image-uint8' % signed)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2561
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2562 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
2563 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
2564 self.AssertSameImages(tmp, '/instances/%s/preview' % signed)
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2565
2a29bcff60a7 tests of image decoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 18
diff changeset
2566 self.assertEqual('b57e6c872a3da50877c7da689b03a444', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % signed)))
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2567
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2568
46
85b2e36ed392 explicit GoogleCode source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 45
diff changeset
2569 def test_googlecode_issue_32(self):
92
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2570 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/default-encoding', 'nope'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2571 self.assertEqual('Windows1251', DoPut(_REMOTE, '/tools/default-encoding', 'Windows1251'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2572 self.assertEqual('Windows1251', DoGet(_REMOTE, '/tools/default-encoding'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2573
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2574 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2575 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2576 self.assertEqual(u'Рентгенография', tags['SeriesDescription'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2577 self.assertEqual(u'Таз', tags['BodyPartExamined'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2578 self.assertEqual(u'Прямая', tags['ViewPosition'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2579
92
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2580 # 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
2581 self.assertEqual('Latin1', DoPut(_REMOTE, '/tools/default-encoding', 'Latin1'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2582
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2583 DoDelete(_REMOTE, '/instances/%s' % f)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2584 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID']
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2585 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2586 self.assertNotEqual(u'Рентгенография', tags['SeriesDescription'])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2587
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
2588
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2589 def test_encodings(self):
23
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2590 # Latin-1 (ISO_IR 100)
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2591 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2592 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 21
diff changeset
2593 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
2594
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2595 # Latin-2 (ISO_IR 101)
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2596 a = UploadInstance(_REMOTE, 'MarekLatin2.dcm')['ID']
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2597 i = DoGet(_REMOTE, '/instances/%s/simplified-tags' % a)
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2598 # 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
2599 self.assertEqual('Imię i Nazwisko osoby opisującej',
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2600 i['ContentSequence'][4]['ConceptNameCodeSequence'][0]['CodeMeaning'].encode('utf-8'))
30ecc857fa07 test latin-2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 22
diff changeset
2601
26
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2602
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2603 def test_storescu_custom_aet(self):
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2604 # 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
2605 # 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
2606 # in the REST API)."
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2607 # 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
2608
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2609 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2610
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2611 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2612 b = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2613 c = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0003.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2614
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2615 j = DoPost(_REMOTE, '/modalities/orthanctest/store', {
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2616 'LocalAet' : 'YOP',
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2617 'Resources' : [ a['ID'], b['ID'] ]
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2618 })
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2619
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2620 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2621 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
2622
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2623 DropOrthanc(_LOCAL)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2624 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2625
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2626 j = DoPost(_REMOTE, '/modalities/orthanctest/store', {
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2627 'Resources' : [ c['ID'] ]
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2628 })
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2629
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2630 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2631 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
2632
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2633 DropOrthanc(_REMOTE)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2634 DropOrthanc(_LOCAL)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2635
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
2636 InstallLuaScriptFromPath(_REMOTE, 'Lua/AutoroutingChangeAet.lua')
26
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2637 DoPost(_REMOTE, '/tools/execute-script', 'aet = "HELLO"', 'application/lua')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2638
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2639 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2640 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2641 WaitEmpty(_REMOTE)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2642 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2643 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
2644
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2645 DoPost(_REMOTE, '/tools/execute-script', 'aet = nill', 'application/lua')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2646 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2647 WaitEmpty(_REMOTE)
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2648 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
040f6ef1394a test_storescu_custom_aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 23
diff changeset
2649 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
2650
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2651 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
2652 # 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
2653 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
2654 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
2655 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
2656 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
2657 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
2658
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2659 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
2660 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
2661 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
2662 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
2663
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2664 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
2665 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
2666
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2667 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
2668 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
2669 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
2670 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
2671 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
2672 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
2673 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
2674 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
2675 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
2676 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
2677 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
2678 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
2679 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
2680 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
2681 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
2682
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2683 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
2684 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
2685 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
2686 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
2687 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
2688 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
2689 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
2690
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2691 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
2692 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
2693 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
2694
1047d7bc5210 test limit and since arguments while retrieving DICOM resources in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 28
diff changeset
2695 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
2696 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
2697 self.assertTrue(instance in s)
36
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
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2700 def test_create_pdf(self):
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2701 # Upload 4 instances
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2702 brainixInstance = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2703 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2704 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2705 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
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 brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2708 brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2709 brainixEpi = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8'
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2710
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2711 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f:
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2712 pdf = f.read()
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2713
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2714 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2715 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2716 'Tags' : {
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2717 'PatientName' : 'Jodogne',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2718 'Modality' : 'CT',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2719 },
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2720 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2721 }))
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.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
2724 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
2725
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2726 b = DoGet(_REMOTE, '/instances/%s/content/0042-0011' % i['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2727 self.assertEqual(len(b), len(pdf) + 1)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2728 self.assertEqual(ComputeMD5(b), ComputeMD5(pdf + '\0'))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2729
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2730 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2731 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2732 'Parent' : brainixPatient,
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2733 'Tags' : {
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2734 'PatientName' : 'Jodogne',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2735 }
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2736 })))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2737
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2738 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2739 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2740 'Parent' : brainixPatient,
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2741 'Tags' : { 'StudyDescription' : 'PDF^Patient' },
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2742 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2743 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2744
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2745 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
2746
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2747 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2748 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2749 'Parent' : brainixStudy,
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2750 'Tags' : { 'SeriesDescription' : 'PDF^Study' },
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2751 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2752 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2753
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2754 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
2755
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2756 i = DoPost(_REMOTE, '/tools/create-dicom',
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2757 json.dumps({
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2758 'Parent' : brainixEpi,
37
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 36
diff changeset
2759 'Tags' : { 'SpecificCharacterSet' : 'ISO_IR 13' },
36
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2760 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2761 }))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2762
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2763 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
2764
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2765 b = DoGet(_REMOTE, '/instances/%s/pdf' % i['ID'])
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2766 self.assertEqual(len(b), len(pdf))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2767 self.assertEqual(ComputeMD5(b), ComputeMD5(pdf))
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2768
42ad759ef40a test PDF embedding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 34
diff changeset
2769 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
2770
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2771
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2772 def test_create_series(self):
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2773 i = DoPost(_REMOTE, '/tools/create-dicom',
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2774 json.dumps({
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2775 'Tags' : {
40
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2776 'SpecificCharacterSet' : 'ISO_IR 100',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2777 'PatientName' : 'Sébastien Jodogne',
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2778 'Modality' : 'CT',
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2779 },
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2780 'Content' : [
40
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2781 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2782 'Content': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', # red dot in RGBA
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2783 'Tags' : { 'ImageComments' : 'Tutu' }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2784 },
38
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2785 '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
2786 ]
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2787 }))
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2788
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2789 s = DoGet(_REMOTE, i['Path'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2790 self.assertEqual('Series', s['Type'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2791 self.assertEqual(s['ID'], i['ID'])
d147e36c6d18 test_create_series
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 37
diff changeset
2792 self.assertEqual(2, len(s['Instances']))
39
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 38
diff changeset
2793 self.assertEqual(2, s['ExpectedNumberOfInstances'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 38
diff changeset
2794 self.assertEqual('Complete', s['Status'])
40
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2795
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2796 a = DoGet(_REMOTE, '/instances/%s/tags?simplify' % s['Instances'][0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2797 b = DoGet(_REMOTE, '/instances/%s/tags?simplify' % s['Instances'][1])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2798 self.assertTrue('ImageComments' in a or 'ImageComments' in b)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2799 if 'ImageComments' in a:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2800 self.assertEqual('Tutu', a['ImageComments'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2801 else:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2802 self.assertEqual('Tutu', b['ImageComments'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2803
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2804 patient = DoGet(_REMOTE, '/instances/%s/patient' % s['Instances'][0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2805 self.assertEqual(patient['MainDicomTags']['PatientName'].encode('utf-8'),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 39
diff changeset
2806 'Sébastien Jodogne')
47
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2807
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2808
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2809 def test_create_binary(self):
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2810 binary = ''.join(map(chr, range(256)))
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2811 encoded = 'data:application/octet-stream;base64,' + base64.b64encode(binary)
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2812 tags = {
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2813 'PatientName' : 'Jodogne',
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2814 '8899-8899' : encoded
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2815 }
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2816
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2817 i = DoPost(_REMOTE, '/tools/create-dicom',
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2818 json.dumps({
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2819 'Tags' : tags,
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2820 'PrivateCreator' : 'TestBinary',
47
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2821 }))
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2822
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2823 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
2824 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
2825
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2826 i = DoPost(_REMOTE, '/tools/create-dicom',
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2827 json.dumps({
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2828 'InterpretBinaryTags' : False,
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2829 'Tags' : tags,
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
2830 'PrivateCreator' : 'TestBinary',
47
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2831 }))
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2832
f610491f74c3 test_create_binary
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 46
diff changeset
2833 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
2834 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
2835
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2836
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2837 def test_patient_ids_collision(self):
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2838 # 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
2839 # same PatientID
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2840 for i in range(3):
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2841 UploadInstance(_REMOTE, 'PatientIdsCollision/Image%d.dcm' % (i + 1))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2842
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2843 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2844 'Query' : { 'PatientName' : '*' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2845 self.assertEqual(1, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2846 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
2847
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2848 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2849 'CaseSensitive' : True,
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2850 'Query' : { 'PatientName' : 'FOO\\HELLO' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2851 self.assertEqual(2, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2852
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2853 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2854 'CaseSensitive' : False,
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2855 'Query' : { 'PatientName' : 'Foo' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2856 self.assertEqual(1, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2857 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
2858 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
2859 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
2860
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2861 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2862 'Query' : { 'PatientName' : '*' }})
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2863 self.assertEqual(3, len(a))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2864 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
2865 self.assertTrue('FOO^SERIES' in d)
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2866 self.assertTrue('HELLO^SERIES' in d)
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2867 self.assertTrue('WORLD^SERIES' in d)
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2868
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2869 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
2870 self.assertEqual(1, len(set(d)))
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2871 self.assertEqual('COMMON', d[0])
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2872
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2873 for i in a:
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2874 d = DoGet(_REMOTE, '/studies/%s' % i) ['MainDicomTags']['StudyDescription']
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2875 p = DoGet(_REMOTE, '/studies/%s' % i) ['PatientMainDicomTags']['PatientName']
e4352463ff74 test_patient_ids_collision
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 47
diff changeset
2876 self.assertEqual('%s^SERIES' % p, d)
49
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2877
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2878
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2879 def test_bitbucket_issue_4(self):
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2880 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2881 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2882 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0003.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2883 UploadInstance(_REMOTE, 'Formats/Jpeg.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2884 UploadInstance(_REMOTE, 'Formats/JpegLossless.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2885 UploadInstance(_REMOTE, 'Formats/Rle.dcm')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2886
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2887 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2888 self.assertEqual(6, len(DoGet(_REMOTE, '/instances')))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2889
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2890 p = DoGet(_REMOTE, '/patients')
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2891 self.assertEqual(2, len(p))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2892 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
2893 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
2894 self.assertEqual(3, len(i1))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2895 self.assertEqual(3, len(i2))
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2896
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2897 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
2898
e7f9b8199545 test_bitbucket_issue_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 48
diff changeset
2899 self.assertEqual(6, len(DoGet(_LOCAL, '/instances')))
50
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2900
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2901
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2902 def test_create_sequence(self):
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2903 i = DoPost(_REMOTE, '/tools/create-dicom',
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2904 json.dumps({
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2905 'Tags' : {
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2906 'SpecificCharacterSet': 'ISO_IR 100', # Encode using Latin1
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2907 'PatientName': 'Jodogne^',
51
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2908 'ReferencedStudySequence': GenerateTestSequence(),
50
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2909 }
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2910 }))['ID']
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2911
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2912 self.assertEqual('Jodogne^', DoGet(_REMOTE, '/instances/%s/content/PatientName' % i))
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2913 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
2914 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
2915 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
2916 self.assertEqual(u'Sébastien^'.encode('latin-1'),
8de63d56cf11 test_create_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 49
diff changeset
2917 DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence/1/StudyDescription' % i))
51
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2918
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2919
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2920 def test_modify_sequence(self):
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2921 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2922 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
2923
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2924 j = DoPost(_REMOTE, '/instances/%s/modify' % i,
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2925 json.dumps({
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2926 "Replace" : {
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2927 "PatientName" : "hello",
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2928 'ReferencedStudySequence': GenerateTestSequence(),
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2929 },
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2930 }),
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2931 'application/json')
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2932 j = DoPost(_REMOTE, '/instances', j, 'application/dicom')['ID']
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2933 DoDelete(_REMOTE, '/instances/%s' % i)
264a20a0276d test_modify_sequence
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 50
diff changeset
2934
52
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2935 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/content/ReferencedStudySequence' % j)))
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2936
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2937
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2938 def test_compression(self):
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2939 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2940
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2941 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
2942 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
2943 # 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
2944 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
2945 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
2946 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2947 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
2948 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
2949 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
2950
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2951 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
2952
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2953 # 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
2954 # 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
2955 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
2956 DoPost(_REMOTE, '/instances/%s/attachments/dicom/uncompress' % i)
52
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2957
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2958 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
2959 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
2960 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
2961 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
2962 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
2963 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
2964 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
2965
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2966 ops = DoGet(_REMOTE, '/instances/%s/attachments/dicom' % i)
52
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2967 self.assertTrue('compress' in ops)
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2968 self.assertTrue('uncompress' in ops)
7c08e542db23 test_compression
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
2969 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
2970 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
2971 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
2972
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2973 # Re-compress the attachment
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2974 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
2975 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
2976 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
2977 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
2978 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
2979 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
2980 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
2981 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
2982 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
2983 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
2984
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
2985 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
2986 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
2987 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
2988 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
2989 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
2990 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
2991 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
2992 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
2993 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
2994 self.assertEqual(us, int(DoGet(_REMOTE, '/statistics')['TotalUncompressedSize']))
53
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2995
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2996
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2997 def test_ordered_slices(self):
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2998 i = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
2999 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3000 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s)
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3001 self.assertEqual('Sequence', o['Type'])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3002 self.assertEqual(1, len(o['Dicom']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3003 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
3004 self.assertEqual(76, len(o['Slices']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3005 for j in range(76):
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3006 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
3007
68
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3008 self.assertEqual(1, len(o['SlicesShort']))
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3009 self.assertEqual('9e05eb0a-18b6268c-e0d36085-8ddab517-3b5aec02', o['SlicesShort'][0][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3010 self.assertEqual(0, o['SlicesShort'][0][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3011 self.assertEqual(76, o['SlicesShort'][0][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3012
53
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3013 i = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3014 j = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3015 k = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0003.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3016 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3017 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s)
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3018
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3019 self.assertEqual('Volume', o['Type'])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3020 self.assertEqual(3, len(o['Dicom']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3021 self.assertEqual(3, len(o['Slices']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3022 self.assertEqual('/instances/%s/file' % i, o['Dicom'][2])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3023 self.assertEqual('/instances/%s/file' % j, o['Dicom'][1])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3024 self.assertEqual('/instances/%s/file' % k, o['Dicom'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3025 self.assertEqual('/instances/%s/frames/0' % i, o['Slices'][2])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3026 self.assertEqual('/instances/%s/frames/0' % j, o['Slices'][1])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3027 self.assertEqual('/instances/%s/frames/0' % k, o['Slices'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3028
68
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3029 self.assertEqual(3, len(o['SlicesShort']))
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3030 self.assertEqual(k, o['SlicesShort'][0][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3031 self.assertEqual(0, o['SlicesShort'][0][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3032 self.assertEqual(1, o['SlicesShort'][0][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3033 self.assertEqual(j, o['SlicesShort'][1][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3034 self.assertEqual(0, o['SlicesShort'][1][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3035 self.assertEqual(1, o['SlicesShort'][1][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3036 self.assertEqual(i, o['SlicesShort'][2][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3037 self.assertEqual(0, o['SlicesShort'][2][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3038 self.assertEqual(1, o['SlicesShort'][2][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3039
53
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3040 i = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0001.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3041 j = UploadInstance(_REMOTE, 'Beaufix/IM-0001-0002.dcm')['ID']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3042 s = DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3043 o = DoGet(_REMOTE, '/series/%s/ordered-slices' % s)
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3044
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3045 self.assertEqual('Sequence', o['Type'])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3046 self.assertEqual(2, len(o['Dicom']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3047 self.assertEqual(2, len(o['Slices']))
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3048 self.assertEqual('/instances/%s/file' % i, o['Dicom'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3049 self.assertEqual('/instances/%s/file' % j, o['Dicom'][1])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3050 self.assertEqual('/instances/%s/frames/0' % i, o['Slices'][0])
e0d1ee04119f test_ordered_slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 52
diff changeset
3051 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
3052
68
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3053 self.assertEqual(2, len(o['SlicesShort']))
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3054 self.assertEqual(i, o['SlicesShort'][0][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3055 self.assertEqual(0, o['SlicesShort'][0][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3056 self.assertEqual(1, o['SlicesShort'][0][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3057 self.assertEqual(j, o['SlicesShort'][1][0])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3058 self.assertEqual(0, o['SlicesShort'][1][1])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3059 self.assertEqual(1, o['SlicesShort'][1][2])
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3060
a8d1a347a701 SlicesShort
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 67
diff changeset
3061
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3062
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3063 def test_incoming_movescu_accession(self):
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3064 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3065
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3066 # No matching patient, so no job is created
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3067 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3068 CallMoveScu([ '--study', '-k', '0008,0052=STUDY', '-k', 'AccessionNumber=nope' ])
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3069 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3070 CallMoveScu([ '--study', '-k', '0008,0052=PATIENT', '-k', 'AccessionNumber=A10003245599' ])
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3071 self.assertEqual(0, len(DoGet(_LOCAL, '/patients')))
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3072
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3073 # 1 Matching patient, track the job
138
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3074 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3075 '--study',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3076 '-k', '0008,0052=STUDY',
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3077 '-k', 'AccessionNumber=A10003245599'
0682740fcfcb cleanup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 137
diff changeset
3078 ])))
137
412d5f70447e testing asynchronous c-move
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
3079
54
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3080 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
c5f8a6b0d85e test_incoming_movescu_accession
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 53
diff changeset
3081
55
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3082
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3083 def test_dicom_to_json(self):
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3084 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
3085 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
3086
cd3c7f70f139 test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
3087 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
3088 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
3089 self.assertTrue(CompareTags(t, json.loads(f.read()), [
123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3090 # Tags for compatibility with DCMTK 3.6.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3091 'RETIRED_OtherPatientIDs',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3092 'OtherPatientIDs',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3093 'ACR_NEMA_2C_VariablePixelDataGroupLength',
80
8466dbfcb22b fix test against dcmtk 3.6.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 79
diff changeset
3094 ]))
55
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3095
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3096 t = DoGet(_REMOTE, '/instances/%s/tags' % i)
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3097 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
3098 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
3099 ]))
55
a395fd51cc4f test_dicom_to_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 54
diff changeset
3100
60
cd3c7f70f139 test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
3101 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
3102 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
3103 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
3104 ]))
60
cd3c7f70f139 test backward compatibility with Orthanc 0.9.4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
3105
372
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3106
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3107 # 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
3108 # following command:
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3109 # $ 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
3110 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
3111 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
3112 a = json.loads(f.read())
378
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3113
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3114 # 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
3115 # 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
3116 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
3117 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
3118 self.assertFalse('7fe1,1001' in t)
378
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3119 del a['7fe1,0010']
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3120 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
3121 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3122 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
3123 self.assertTrue('7fe1,1001' in t)
378
a4b8450a1158 fix test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
3124
65
09fc27e0899a patch for testing windows builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 64
diff changeset
3125 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
3126 tt = (json.dumps(t)
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3127 .replace('2e+022', '2e+22')
e9b03d8f3b78 fix for DCMTK 3.6.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 369
diff changeset
3128 # 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
3129 .replace('IllegalPrivatePixelSequence', 'Unknown Tag & Data'))
65
09fc27e0899a patch for testing windows builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 64
diff changeset
3130 self.assertEqual(aa, tt)
57
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3131
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3132
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3133 def test_batch_archive(self):
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3134 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3135 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3136 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3137 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3138 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3139 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3140 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3141 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0002.dcm')
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3142
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3143 s = DoPost(_REMOTE, '/tools/create-archive', [ ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3144 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3145 self.assertEqual(0, len(z.namelist()))
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3146
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3147 # One patient
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3148 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
3149 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3150 self.assertEqual(4, len(z.namelist()))
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3151
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3152 # One patient + twice its study + one series from other patient
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3153 s = DoPost(_REMOTE, '/tools/create-archive', [
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3154 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3155 '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3156 '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3157 ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3158 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3159 self.assertEqual(6, len(z.namelist()))
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3160
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3161 # One patient + one series + one instance
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3162 s = DoPost(_REMOTE, '/tools/create-archive', [
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3163 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3164 '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0',
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3165 '1d429ccb-bdcc78a1-7d129d6a-ba4966ed-fe4dbd87'
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3166 ])
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3167 z = zipfile.ZipFile(StringIO(s), "r")
784a544706cf test_batch_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 56
diff changeset
3168 self.assertEqual(7, len(z.namelist()))
59
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3169
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3170
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3171 def test_decode_brainix_as_jpeg(self):
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3172 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
3173
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3174 j = GetImage(_REMOTE, '/instances/%s/preview' % i)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3175 self.assertEqual('PNG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3176 self.assertEqual(j.size[0], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3177 self.assertEqual(j.size[1], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3178
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3179 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
3180 self.assertEqual('PNG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3181
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3182 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
3183 self.assertEqual('PNG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3184
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3185 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
3186 self.assertEqual('PNG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3187
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3188 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
3189 self.assertEqual('JPEG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3190 self.assertEqual(j.size[0], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3191 self.assertEqual(j.size[1], 256)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3192
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3193 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
3194 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
3195 self.assertLess(a, b)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3196
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3197 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
3198 self.assertEqual('JPEG', j.format)
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3199
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3200 # 16bit encoding is not supported with JPEG
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3201 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
3202 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
3203
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3204 # No matching content type
84378ada15ab test_decode_brainix_as_jpeg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 58
diff changeset
3205 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
3206
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3207
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3208
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3209 def test_media_encodings(self):
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3210 ascii = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')['ID']
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3211 latin1 = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3212 latin2 = UploadInstance(_REMOTE, 'MarekLatin2.dcm')['ID']
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3213
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3214 tmp = DoPost(_REMOTE, '/tools/create-media', [ascii,latin1,latin2])
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3215 z = zipfile.ZipFile(StringIO(tmp), "r")
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3216
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3217 self.assertEqual(4, len(z.namelist()))
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3218 self.assertTrue('IMAGES/IM0' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3219 self.assertTrue('IMAGES/IM1' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3220 self.assertTrue('IMAGES/IM2' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3221 self.assertTrue('DICOMDIR' in z.namelist())
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3222
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3223 try:
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3224 os.remove('/tmp/DICOMDIR')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3225 except:
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3226 # The file does not exist
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3227 pass
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3228
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3229 z.extract('DICOMDIR', '/tmp')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3230 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ],
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3231 stderr = subprocess.STDOUT).split('\n')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3232
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3233 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ],
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3234 stderr = subprocess.STDOUT).split('\n')
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3235 self.assertEqual(1, len(a))
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3236 self.assertEqual('', a[0])
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3237
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3238 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ])
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3239 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
3240 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
3241 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
3242
83fd88230097 test_media_encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 68
diff changeset
3243 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
3244
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3245
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3246 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
3247 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
3248 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
3249 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
3250
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3251 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
3252 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
3253 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
3254 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
3255
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3256 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
3257 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
3258 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
3259 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
3260
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3261 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
3262 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
3263 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
3264 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
3265
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3266 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
3267 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
3268 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
3269 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
3270
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3271 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
3272 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
3273 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
3274 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
3275
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3276 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
3277 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
3278 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
3279 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
3280 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
3281
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3282 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
3283 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
3284 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
3285 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
3286 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
3287 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
3288
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3289 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
3290 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
3291 self.assertEqual(1, len(s))
176
48cc188ffb09 strip trailing 0 char that appears with some findscu versions
am@osimis.io
parents: 175
diff changeset
3292 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
3293 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
3294 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
3295
48740070cbf1 TDD: tests for ongoing development of counter tags in C-Find
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 70
diff changeset
3296
78
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3297 def test_decode_transfer_syntax(self):
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3298 def Check(t, md5):
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3299 i = UploadInstance(_REMOTE, 'TransferSyntaxes/%s.dcm' % t)['ID']
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3300
89
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
3301 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
3302 transferSyntax = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i)
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
3303 self.assertEqual(t, transferSyntax)
74b7b9aed5f8 test TransferSyntax metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 87
diff changeset
3304
78
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3305 if md5 == None:
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3306 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
3307 else:
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3308 m = ComputeMD5(DoGet(_REMOTE, '/instances/%s/preview' % i))
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3309 self.assertEqual(m, md5)
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3310
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3311 Check('1.2.840.10008.1.2.1', 'fae08d5415c4c0cd2cdbae4522408631')
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3312 Check('1.2.840.10008.1.2.2', 'f3d9784768b8feb54d6a50b6d5c37682')
b89af51797ff test_decode_transfer_syntax
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 74
diff changeset
3313 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
3314 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
3315 Check('1.2.840.10008.1.2.4.70', '7132cfbc457305b04b59787030c785d2')
384
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 383
diff changeset
3316 Check('1.2.840.10008.1.2.5', '6ff51ae525d362e0d04f550a64075a0e') # RLE, supported since Orthanc 1.0.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 383
diff changeset
3317 Check('1.2.840.10008.1.2', 'd54aed9f67a100984b42942cc2e9939b')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 383
diff changeset
3318
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 383
diff changeset
3319 # The 3 checks below don't work on big-endian
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 383
diff changeset
3320 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
3321 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
3322 Check('1.2.840.10008.1.2.4.81', '801579ae7cbf28e604ea74f2c99fa2ca')
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3323
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3324 # JPEG2k image, not supported without GDCM plugin
304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 302
diff changeset
3325 if not HasGdcmPlugin(_REMOTE):
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3326 Check('1.2.840.10008.1.2.4.90', None)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
3327 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
3328
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3329
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3330 def test_raw_frame(self):
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3331 s = UploadInstance(_REMOTE, 'Issue22.dcm')['ID']
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3332 self.assertEqual(24, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3333 a = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3334 self.assertEqual(512 * 512 * 2, len(a))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3335 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
3336 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
3337 self.assertEqual('1914287dc4d958eca21fdaacfb3482fa', ComputeMD5(a))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3338
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3339 s = UploadInstance(_REMOTE, 'Multiframe.dcm')['ID']
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3340 self.assertEqual(76, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3341 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
3342 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
3343 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
3344 im = GetImage(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3345 self.assertEqual("L", im.mode)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3346 self.assertEqual(512, im.size[0])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3347 self.assertEqual(512, im.size[1])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3348
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3349 # 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
3350 s = UploadInstance(_REMOTE, 'LenaTwiceWithFragments.dcm')['ID']
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3351 self.assertEqual(2, len(DoGet(_REMOTE, '/instances/%s/frames' % s)))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3352 a = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3353 b = DoGet(_REMOTE, '/instances/%s/frames/1/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3354 self.assertEqual(69214, len(a))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3355 self.assertEqual(ComputeMD5(a), ComputeMD5(b))
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3356 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
3357 im = GetImage(_REMOTE, '/instances/%s/frames/0/raw' % s)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3358 self.assertEqual("RGB", im.mode)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3359 self.assertEqual(512, im.size[0])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3360 self.assertEqual(512, im.size[1])
323
fbf5bdebbba7 comment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 322
diff changeset
3361 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
3362 self.assertEqual("RGB", im.mode)
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3363 self.assertEqual(512, im.size[0])
962274ebd797 test_raw_frame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 78
diff changeset
3364 self.assertEqual(512, im.size[1])
81
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3365
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3366
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 def test_rest_movescu(self):
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3369 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
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 # Upload 4 instances
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3372 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3373 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0002.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3374 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3375 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
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 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3378 for p in DoGet(_REMOTE, '/patients'):
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3379 DoPost(_REMOTE, '/modalities/orthanctest/store', p)
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3380 DoDelete(_REMOTE, '/patients/%s' % p)
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3381
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3382 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
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 # Upload instance Brainix/Flair/IM-0001-0001.dcm
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3385 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Instance',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3386 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3387 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3388 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3389 '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
3390 '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
3391 }
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
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3394 # Upload series Brainix/Flair/*
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3395 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3396 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3397 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3398 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
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 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Series',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3401 'Resources' : [
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 '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
3405 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3406 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3407 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3408 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3409 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3410 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3411
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3412 # Upload series Brainix/Epi/*
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3413 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Series',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3414 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3415 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3416 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3417 '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
3418 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3419 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3420 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3421 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3422 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3423 self.assertEqual(3, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3424
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3425 # Upload study Knee/*
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3426 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Study',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3427 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3428 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3429 'StudyInstanceUID' : '2.16.840.1.113669.632.20.121711.10000160881',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3430 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3431 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3432 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3433 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3434 self.assertEqual(3, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3435 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3436
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3437 # Reset
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3438 for p in DoGet(_REMOTE, '/patients'):
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3439 DoDelete(_REMOTE, '/patients/%s' % p)
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3440
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3441 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3442
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3443
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3444 # Upload all at once
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3445 DoPost(_REMOTE, '/modalities/orthanctest/move', { 'Level' : 'Study',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3446 'Resources' : [
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3447 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3448 'StudyInstanceUID' : '2.16.840.1.113669.632.20.121711.10000160881',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3449 },
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3450 {
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3451 'StudyInstanceUID' : '2.16.840.1.113669.632.20.1211.10000357775',
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3452 }
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3453 ]})
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3454 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3455 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3456 self.assertEqual(3, len(DoGet(_REMOTE, '/series')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3457 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
5920954287dd test_rest_movescu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 80
diff changeset
3458
86
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3459
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3460
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3461 def test_reconstruct_json(self):
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3462 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3463
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3464 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3465 first = DoGet(_REMOTE, '/instances/%s/tags' % instance)
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3466
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3467 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
3468
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3469 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
3470 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
3471 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3472 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
3473
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3474 # Cannot delete the "DICOM" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3475 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
3476
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3477 # Can delete the "DICOM as JSON" attachment
392
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
3478 if not IsOrthancVersionAbove(_REMOTE, 1, 9, 1):
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
3479 r = DoDelete(_REMOTE, '/instances/%s/attachments/dicom-as-json' % instance)
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
3480 self.assertTrue(type(r) is dict and len(r) == 0)
86
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3481
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3482 # Only the "DICOM" attachment subsists
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3483 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/%s/attachments' % instance)))
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3484
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3485 # Cannot manually reconstruct the "DICOM as JSON" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3486 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
3487
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3488 # Transparently reconstruct the "DICOM as JSON" attachment
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3489 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
3490 second = DoGet(_REMOTE, '/instances/%s/tags' % instance)
0401ef51f5c1 test_reconstruct_json
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
3491 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
3492
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):
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' % instance)))
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3495 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3496 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
3497 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
3498 self.assertEqual(str(first), str(third))
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_reconstruct_json2(self):
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3502 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3503
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3504 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
3505 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
3506
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3507 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
3508 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
3509
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3510 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
3511 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
3512
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3513 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
3514 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
3515 self.assertEqual(aa, bb)
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3516 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
3517 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
3518 elif IsDicomUntilPixelDataStored(_REMOTE):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3519 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
3520 self.assertEqual(aa, bb)
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3521 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
3522 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
3523 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3524 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
3525 self.assertEqual(aa, bb)
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3526 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
3527
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3528 # 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
3529 DoPost(_REMOTE, '/tools/invalidate-tags', '', 'text/plain')
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3530
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3531 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
3532 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
3533 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
3534 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3535 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
3536 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
3537
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3538 # 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
3539 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
3540 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
3541
380
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3542 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
3543 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
3544 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
3545 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
3546 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
3547 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
3548
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3549
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3550 def test_private_tags(self):
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3551 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
4b24faec842b test_reconstruct_json2 + test_private_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 86
diff changeset
3552 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
3553 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
3554 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
3555
92
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 def test_findscu_encoding(self):
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3558 # Check out ../Database/Encodings/Generate.sh
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3559 TEST = u'Test-éüäöòДΘĝדصķћ๛ネİ'
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3560 ENCODINGS = {
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3561 'Arabic' : [ 'ISO_IR 127' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3562 'Ascii' : [ 'ISO_IR 6' ], # More accurately, ISO 646
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3563 'Cyrillic' : [ 'ISO_IR 144' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3564 'Greek' : [ 'ISO_IR 126' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3565 'Hebrew' : [ 'ISO_IR 138' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3566 'Japanese' : [ 'ISO_IR 13', 'shift-jis' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3567 'Latin1' : [ 'ISO_IR 100' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3568 'Latin2' : [ 'ISO_IR 101' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3569 'Latin3' : [ 'ISO_IR 109' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3570 'Latin4' : [ 'ISO_IR 110' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3571 'Latin5' : [ 'ISO_IR 148' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3572 'Thai' : [ 'ISO_IR 166', 'tis-620' ],
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3573 'Utf8' : [ 'ISO_IR 192' ],
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
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3576 for name in ENCODINGS.iterkeys():
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3577 if len(ENCODINGS[name]) == 1:
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3578 ENCODINGS[name].append(name.lower())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3579
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3580 UploadInstance(_REMOTE, 'Encodings/Lena-utf8.dcm')
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3581
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3582 for name in ENCODINGS.iterkeys():
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3583 self.assertEqual(name, DoPut(_REMOTE, '/tools/default-encoding', name))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3584 self.assertEqual(name, DoGet(_REMOTE, '/tools/default-encoding'))
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 i = CallFindScu([ '-k', '0008,0052=STUDY',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3587 '-k', 'SpecificCharacterSet',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3588 '-k', 'PatientName' ])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3589
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3590 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3591 self.assertEqual(1, len(characterSet))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3592 self.assertEqual(ENCODINGS[name][0], characterSet[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3593
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3594 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3595 self.assertEqual(1, len(patientName))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3596
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3597 expected = TEST.encode(ENCODINGS[name][1], 'ignore')
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3598 self.assertEqual(expected, patientName[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3599
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3600
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3601 #for master in ENCODINGS:
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3602 for master in [ 'Latin1', 'Utf8', 'Cyrillic' ]: # Shortcut to speedup tests
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3603 self.assertEqual(master, DoPut(_REMOTE, '/tools/default-encoding', master))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3604 self.assertEqual(master, DoGet(_REMOTE, '/tools/default-encoding'))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3605
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3606 for name in ENCODINGS:
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3607 DropOrthanc(_REMOTE)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3608 UploadInstance(_REMOTE, 'Encodings/Lena-%s.dcm' % ENCODINGS[name][1])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3609
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3610 i = CallFindScu([ '-k', '0008,0052=STUDY',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3611 '-k', 'PatientID',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3612 '-k', 'SpecificCharacterSet',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3613 '-k', 'PatientName' ])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3614 i = i.decode(ENCODINGS[master][1])
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3615
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3616 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3617 self.assertEqual(1, len(characterSet))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3618 self.assertEqual(ENCODINGS[master][0], characterSet[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3619
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3620 patientId = re.findall('\(0010,0020\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3621 self.assertEqual(1, len(patientId))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3622 self.assertEqual(ENCODINGS[name][1], patientId[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3623
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3624 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3625 self.assertEqual(1, len(patientName))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3626
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3627 tmp = ENCODINGS[name][1]
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3628 expected = TEST.encode(tmp, 'ignore').decode(tmp)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3629 tmp = ENCODINGS[master][1]
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3630 expected = expected.encode(tmp, 'ignore').decode(tmp)
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3631
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3632 self.assertEqual(expected, patientName[0].strip())
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3633
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3634
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3635 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True,
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3636 'Level' : 'Study',
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3637 'Query' : { }})
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3638 self.assertEqual(1, len(a))
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3639
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3640 tmp = ENCODINGS[name][1]
dbcbffb889da test_findscu_encoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 89
diff changeset
3641 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
3642
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3643
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3644 def test_reconstruct(self):
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3645 def CompareMainDicomTag(expected, instance, level, tag):
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3646 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
3647
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3648 a = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3649
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3650 studies = DoGet(_REMOTE, '/studies/')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3651 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3652 self.assertEqual(1, len(studies))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3653 self.assertEqual(1, len(DoGet(_REMOTE, '/series/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3654 self.assertEqual(1, len(DoGet(_REMOTE, '/instances/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3655
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3656 modified = DoPost(_REMOTE, '/studies/%s/modify' % studies[0], {
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3657 "Replace" : {
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3658 "StudyDescription" : "hello",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3659 "SeriesDescription" : "world",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3660 "SOPClassUID" : "test",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3661 "SOPInstanceUID" : "myid",
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3662 },
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
3663 "Keep" : [ "StudyInstanceUID", "SeriesInstanceUID" ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
3664 "Force" : True
96
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3665 })
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3666
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3667 instances = DoGet(_REMOTE, '/instances/')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3668 self.assertEqual(1, len(DoGet(_REMOTE, '/patients/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3669 self.assertEqual(1, len(DoGet(_REMOTE, '/studies/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3670 self.assertEqual(1, len(DoGet(_REMOTE, '/series/')))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3671 self.assertEqual(2, len(instances))
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3672
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3673 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
3674
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3675 CompareMainDicomTag('Knee (R)', a, 'study', 'StudyDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3676 CompareMainDicomTag('AX. FSE PD', a, 'series', 'SeriesDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3677 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
3678 CompareMainDicomTag('myid', b, '', 'SOPInstanceUID')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3679 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
3680 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
3681
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3682 DoPost(_REMOTE, '/instances/%s/reconstruct' % b, {})
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3683
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3684 CompareMainDicomTag('hello', a, 'study', 'StudyDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3685 CompareMainDicomTag('world', a, 'series', 'SeriesDescription')
272d1229cb49 test reconstruction of tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 95
diff changeset
3686 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
3687
104
7530eb50c3c4 renamed HttpPost.lua into HttpClient.lua + fix tests
amazy
parents: 102
diff changeset
3688 def test_httpClient_lua(self):
7530eb50c3c4 renamed HttpPost.lua into HttpClient.lua + fix tests
amazy
parents: 102
diff changeset
3689 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
3690 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
3691
9671578fd4d3 added tests for Lua HttpPost/Put/Get/Delete methods
amazy
parents: 100
diff changeset
3692 self.assertIn('OK', result)
107
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3693
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3694
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3695 def test_bitbucket_issue_44(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3696 # 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
3697 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3698 UploadInstance(_REMOTE, 'Issue44/Monochrome2.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3699
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3700 # dcmcjpeg +ua +eb Monochrome1.dcm Monochrome1-Jpeg.dcm
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3701 UploadInstance(_REMOTE, 'Issue44/Monochrome1-Jpeg.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3702
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3703 # dcmcjpeg +ua Monochrome1.dcm Monochrome1-JpegLS.dcm
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3704 UploadInstance(_REMOTE, 'Issue44/Monochrome1-JpegLS.dcm')
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3705
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3706 monochrome1 = 'bcdd600a-a6a9c522-5f0a6e84-8657c9f3-b76e59b7'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3707 monochrome1_jpeg = '9df82121-208a2da8-0038674a-3d7a773b-b7008cd2'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3708 monochrome1_jpegls = '0486d1a2-9165573f-b1976b20-e927b016-6b8d67ab'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3709 monochrome2 = 'f00947b7-f61f7164-c93414d1-c6fbda6a-9e92ed20'
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3710
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3711 for i in [ monochrome1, monochrome1_jpeg, monochrome1_jpegls ]:
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3712 im = GetImage(_REMOTE, '/instances/%s/preview' % i)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3713 self.assertEqual("L", im.mode)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3714 self.assertEqual(2010, im.size[0])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3715 self.assertEqual(2446, im.size[1])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3716
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3717 # 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
3718 # white (255), should be rendered as black (0) => invert
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3719 if i == monochrome1_jpeg:
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3720 # Add some tolerance because of JPEG destructive compression
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3721 self.assertGreater(10, im.getpixel((0,0)))
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3722 else:
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3723 self.assertEqual(0, im.getpixel((0,0)))
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3724
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3725 im = GetImage(_REMOTE, '/instances/%s/preview' % monochrome2)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3726 self.assertEqual("L", im.mode)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3727 self.assertEqual(1572, im.size[0])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3728 self.assertEqual(2010, im.size[1])
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3729
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3730 # 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
3731 # white (255), should be rendered as white (255)
fddb35f7289d test_bitbucket_issue_44
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 104
diff changeset
3732 self.assertEqual(255, im.getpixel((0,0)))
111
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3733
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3734
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3735 def test_bitbucket_issue_42(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3736 # https://bugs.orthanc-server.com/show_bug.cgi?id=42
123
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 122
diff changeset
3737 # 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
3738 UploadInstance(_REMOTE, 'Issue42.dcm')['ID']
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3739 modified = DoPost(_REMOTE,
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3740 '/patients/da128605-e040d0c4-310615d2-3475da63-df2d1ef4/modify',
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 118
diff changeset
3741 '{"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
3742 'application/json')
7005cdeeb704 test_bitbucket_issue_42
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 107
diff changeset
3743 self.assertTrue('PatientID' in modified)
113
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3744
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 def test_rest_find_limit(self):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3747 # Check the "Since" and "Limit" parameters in URI "/tools/find"
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3748 # 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
3749
113
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3750 # Upload 6 instances
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3751 brainix = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3752 knee = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3753 for i in range(2):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3754 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
3755 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
3756 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
3757
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3758 # Check using BRAINIX
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' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3761 'Limit' : 10 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3762 self.assertEqual(4, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3763
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3764 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3765 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3766 'Limit' : 4 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3767 self.assertEqual(4, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3768
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3769 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3770 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3771 'Since' : 2,
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3772 'Limit' : 4 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3773 self.assertEqual(2, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3774
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3775 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3776 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3777 'Limit' : 3 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3778 self.assertEqual(3, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3779
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3780 b = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3781 for i in range(4):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3782 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3783 'Query' : { 'PatientName' : 'B*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3784 'Limit' : 1,
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3785 'Since' : i })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3786 self.assertEqual(1, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3787 b.append(a[0])
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3788
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3789 # 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
3790 self.assertEqual(0, len(set(b) ^ set(brainix)))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3791
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3792 # Check using KNEE
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3793 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3794 'Query' : { 'PatientName' : 'K*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3795 'Limit' : 10 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3796 self.assertEqual(2, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3797
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3798 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3799 'Query' : { 'PatientName' : 'K*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3800 'Limit' : 2 })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3801 self.assertEqual(2, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3802
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3803 b = []
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3804 for i in range(2):
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3805 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instance',
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3806 'Query' : { 'PatientName' : 'K*' },
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3807 'Limit' : 1,
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3808 'Since' : i })
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3809 self.assertEqual(1, len(a))
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3810 b.append(a[0])
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3811
3e5934363e76 test_rest_find_limitµ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 112
diff changeset
3812 self.assertEqual(0, len(set(b) ^ set(knee)))
115
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3813
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 def test_bitbucket_issue_46(self):
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3816 # "PHI remaining after anonymization"
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3817 # 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
3818
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3819 def GetAnonymizedTags(study, version):
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3820 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3821 { 'DicomVersion' : version },
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3822 'application/json') ['ID']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3823 a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3824 self.assertEqual(1, len(a))
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3825
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3826 instance = a[0]['ID']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3827
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3828 return (instance, DoGet(_REMOTE, '/instances/%s/tags' % instance))
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3829
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3830 UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3831 origStudy = '6068a14b-d4df27af-9ec22145-538772d8-74f228ff'
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3832
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3833 # 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
3834 # (Patient's Mother's Birth Name) tags
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3835 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy,
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3836 '{"Replace":{"0010,1060":"OSIMIS","0032,1033":"MOTHER"}}',
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3837 'application/json')['ID']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3838
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3839 # 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
3840 # 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
3841 (instance, tags) = GetAnonymizedTags(newStudy, "2008")
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3842 self.assertTrue('0032,1033' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3843 self.assertTrue('0010,1060' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3844
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3845 # 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
3846 # 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
3847 (instance, tags) = GetAnonymizedTags(newStudy, "2017c")
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3848 self.assertFalse('0032,1033' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3849 self.assertFalse('0010,1060' in tags)
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3850
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3851 t = {}
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3852 for (key, value) in tags.iteritems():
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3853 t[value['Name']] = value['Value']
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3854
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3855 self.assertEqual('', t['StudyDate']) # Type 1 tag => cleared
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3856 self.assertEqual('', t['StudyTime']) # Type 1 tag => cleared
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3857 self.assertEqual('', t['PatientSex']) # Type 1 tag => cleared
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3858 self.assertFalse('SeriesDate' in t) # Type 3 tag => null
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3859 self.assertFalse('SeriesTime' in t) # Type 3 tag => null
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3860
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3861 with tempfile.NamedTemporaryFile(delete = True) as f:
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3862 # 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
3863 f.write(DoGet(_REMOTE, '/instances/%s/file' % instance))
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3864 f.flush()
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3865 subprocess.check_output([ FindExecutable('dciodvfy'), f.name ],
45ebfab035b7 test_bitbucket_issue_46
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 113
diff changeset
3866 stderr = subprocess.STDOUT).split('\n')
118
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3867
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3868
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3869 def test_bitbucket_issue_55(self):
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3870 def Run(modify, query):
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3871 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3872
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3873 operation = 'modify' if modify else 'anonymize'
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3874
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3875 self.assertRaises(Exception, lambda: DoPost(
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3876 _REMOTE, '/studies/%s/%s' % (study, operation), query))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3877 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3878
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3879 query["Force"] = True
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3880 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
3881 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3882 DoDelete(_REMOTE, a)
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3883
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3884 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3885
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3886 UploadInstance(_REMOTE, 'DummyCT.dcm')
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3887 study = 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0'
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3888
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3889 Run(True, { "Replace" : { "StudyInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3890 Run(True, { "Replace" : { "SeriesInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3891 Run(True, { "Replace" : { "SOPInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3892
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3893 Run(False, { "Keep" : [ "StudyInstanceUID" ]})
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3894 Run(False, { "Keep" : [ "SeriesInstanceUID" ]})
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3895 Run(False, { "Keep" : [ "SOPInstanceUID" ]})
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3896
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3897 Run(False, { "Replace" : { "StudyInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3898 Run(False, { "Replace" : { "SeriesInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3899 Run(False, { "Replace" : { "SOPInstanceUID" : "world" } })
a954c535fef6 test_bitbucket_issue_55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 117
diff changeset
3900
120
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3901
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3902 def test_bitbucket_issue_56(self):
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3903 # Case-insensitive matching over accents. This test assumes
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3904 # that the "CaseSensitivePN" configuration option of Orthanc
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3905 # is set to "false" (default value).
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
3906 # 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
3907
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3908 def Check(name, expected, expectedSensitive):
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3909 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
3910 '-k', '0008,0052=PATIENT',
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3911 '-k', 'PatientName=%s' % name ])
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3912 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', a)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3913 self.assertEqual(expected, len(patientNames))
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3914
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3915 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3916 'CaseSensitive' : False,
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3917 'Query' : { 'PatientName' : name }})
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3918 self.assertEqual(expected, len(a))
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3919
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3920 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Patient',
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3921 'CaseSensitive' : True,
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3922 'Query' : { 'PatientName' : name }})
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3923 self.assertEqual(expectedSensitive, len(a))
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3924
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3925 UploadInstance(_REMOTE, 'Encodings/Lena-latin1.dcm')
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3926
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3927 # WildcardConstraint
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3928 Check('TeSt*', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3929 Check('TeSt-a*', 0, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3930 Check('TeSt-É*', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3931 Check('TeSt-é*', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3932 Check('Test-é*', 1, 1)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3933
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3934 # ListConstraint
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3935 Check('Test-éüäöò\\nope', 1, 1)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3936 Check('Test-ÉÜÄÖÒ\\nope', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3937
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3938 # ValueConstraint
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3939 Check('Test-éüäöò', 1, 1)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3940 Check('Test-ÉÜÄÖÒ', 1, 0)
fce08afe6b2d test_bitbucket_issue_56
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 119
diff changeset
3941
125
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3942
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3943 def test_gbk_alias(self):
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3944 # 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
3945 # This test fails on Orthanc <= 1.3.0
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3946 i = UploadInstance(_REMOTE, '2017-09-19-GBK-Tumashu.dcm')['ID']
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3947 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3948 self.assertEqual(tags['PatientName'], u'徐浩凯')
15e4dc0a5810 test_gbk_alias
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 124
diff changeset
3949 self.assertEqual(tags['InstitutionName'], u'灌云县疾病预防控制中心')
126
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3950
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3951
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3952 def test_long_tag(self):
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3953 i = UploadInstance(_REMOTE, 'DummyCTWithLongTag.dcm')['ID']
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3954 series = 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe'
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3955
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3956 tags = DoGet(_REMOTE, '/instances/%s/tags' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3957 self.assertTrue('0018,1020' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3958 self.assertEqual('SoftwareVersions', tags['0018,1020']['Name'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3959 self.assertEqual('TooLong', tags['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3960 self.assertEqual(None, tags['0018,1020']['Value'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3961
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3962 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
3963 self.assertTrue('0018,1020' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3964 self.assertEqual('SoftwareVersions', tags['0018,1020']['Name'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3965 self.assertEqual('String', tags['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3966 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
3967
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3968 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3969 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3970 self.assertEqual(None, tags['SoftwareVersions'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3971 self.assertTrue('HeartRate' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3972 self.assertEqual(474, int(tags['HeartRate']))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3973
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3974 tags = DoGet(_REMOTE, '/instances/%s/simplified-tags' % i)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3975 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3976 self.assertEqual(None, tags['SoftwareVersions'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3977
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3978 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
3979 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3980 self.assertTrue(tags['SoftwareVersions'].startswith('Lorem ipsum dolor sit amet'))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3981
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3982 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
3983 self.assertTrue('SoftwareVersions' in tags)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3984 self.assertTrue(tags['SoftwareVersions'].startswith('Lorem ipsum dolor sit amet'))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3985
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3986 tags = DoGet(_REMOTE, '/series/%s/instances-tags' % series)
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3987 self.assertEqual(1, len(tags))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3988 self.assertTrue(i in tags.keys())
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3989 self.assertTrue('0018,1020' in tags[i])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3990 self.assertEqual('TooLong', tags[i]['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3991
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3992 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
3993 self.assertEqual(1, len(tags))
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3994 self.assertTrue(i in tags.keys())
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3995 self.assertTrue('0018,1020' in tags[i])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3996 self.assertEqual('String', tags[i]['0018,1020']['Type'])
6ead76f08d9c test_long_tag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
3997 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
3998
127
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
3999
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4000 def test_extended_media(self):
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4001 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4002
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4003 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
4004 self.assertEqual(2, len(z.namelist()))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4005 self.assertTrue('IMAGES/IM0' in z.namelist())
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4006 self.assertTrue('DICOMDIR' in z.namelist())
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4007
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4008 try:
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4009 os.remove('/tmp/DICOMDIR')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4010 except:
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4011 # The file does not exist
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4012 pass
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4013
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4014 z.extract('DICOMDIR', '/tmp')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4015 a = subprocess.check_output([ FindExecutable('dciodvfy'), '/tmp/DICOMDIR' ],
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4016 stderr = subprocess.STDOUT).split('\n')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4017 self.assertEqual(5, len(a))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4018 self.assertTrue(a[0].startswith('Warning'))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4019 self.assertEqual('BasicDirectory', a[1])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4020 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
4021 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
4022 self.assertEqual('', a[4])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4023
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4024 a = subprocess.check_output([ FindExecutable('dcentvfy'), '/tmp/DICOMDIR' ],
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4025 stderr = subprocess.STDOUT).split('\n')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4026 self.assertEqual(1, len(a))
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4027 self.assertEqual('', a[0])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4028
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4029 a = subprocess.check_output([ FindExecutable('dcm2xml'), '/tmp/DICOMDIR' ])
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4030 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
4031
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4032 # Check the presence of the series description (extended tag)
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4033 self.assertTrue(re.search('T1W_aTSE', a) != None)
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4034
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4035 os.remove('/tmp/DICOMDIR')
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4036
1eea4d3a1ba9 test_extended_media
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 126
diff changeset
4037
132
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4038 def test_anonymize_relationships_1(self):
133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4039 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4040 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
4041 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4042
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4043 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
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 'application/json')['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4046
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4047 a = DoGet(_REMOTE, '/studies/%s/instances' % study)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4048 self.assertEqual(2, len(a))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4049 a1 = a[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4050 a2 = a[1]['ID']
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 b = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4053 self.assertEqual(2, len(b))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4054 b1 = b[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4055 b2 = b[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4056
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4057 SEQUENCE = '/instances/%s/content/ReferencedImageSequence'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4058 SOP = '/instances/%s/content/ReferencedImageSequence/%d/ReferencedSOPInstanceUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4059 CLASS = '/instances/%s/content/ReferencedImageSequence/%d/ReferencedSOPClassUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4060 FRAME = '/instances/%s/content/FrameOfReferenceUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4061
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4062 self.assertEqual(DoGet(_REMOTE, FRAME % a1),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4063 DoGet(_REMOTE, FRAME % a2))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4064 self.assertEqual(DoGet(_REMOTE, FRAME % b1),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4065 DoGet(_REMOTE, FRAME % b2))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4066 self.assertNotEqual(DoGet(_REMOTE, FRAME % a1),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4067 DoGet(_REMOTE, FRAME % b1))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4068 self.assertNotEqual(DoGet(_REMOTE, FRAME % a2),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4069 DoGet(_REMOTE, FRAME % b2))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4070
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4071 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
4072 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
4073 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
4074 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
4075
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4076 for i in range(3):
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4077 self.assertEqual(DoGet(_REMOTE, SOP % (a1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4078 DoGet(_REMOTE, SOP % (a2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4079 self.assertEqual(DoGet(_REMOTE, SOP % (b1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4080 DoGet(_REMOTE, SOP % (b2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4081 self.assertNotEqual(DoGet(_REMOTE, SOP % (a1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4082 DoGet(_REMOTE, SOP % (b1, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4083 self.assertNotEqual(DoGet(_REMOTE, SOP % (a2, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4084 DoGet(_REMOTE, SOP % (b2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4085 self.assertEqual(DoGet(_REMOTE, CLASS % (a1, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4086 DoGet(_REMOTE, CLASS % (b1, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4087 self.assertEqual(DoGet(_REMOTE, CLASS % (a2, i)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4088 DoGet(_REMOTE, CLASS % (b2, i)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4089
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4090
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4091 def test_anonymize_relationships_2(self):
133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4092 UploadInstance(_REMOTE, 'Comunix/Ct/IM-0001-0001.dcm')
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4093 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
4094 study = '6c65289b-db2fcb71-7eaf73f4-8e12470c-a4d6d7cf'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4095
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4096 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4097 '{}',
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4098 'application/json')['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4099
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4100 a = DoGet(_REMOTE, '/studies/%s/instances' % study)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4101 self.assertEqual(2, len(a))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4102 a1 = a[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4103 a2 = a[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4104
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4105 b = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4106 self.assertEqual(2, len(b))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4107 b1 = b[0]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4108 b2 = b[1]['ID']
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4109
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4110 SEQUENCE = '/instances/%s/content/SourceImageSequence'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4111 SOP = '/instances/%s/content/SourceImageSequence/%d/ReferencedSOPInstanceUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4112 CLASS = '/instances/%s/content/SourceImageSequence/%d/ReferencedSOPClassUID'
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4113
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4114 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
4115 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
4116 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
4117 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
4118 self.assertEqual(DoGet(_REMOTE, SOP % (a1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4119 DoGet(_REMOTE, SOP % (a2, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4120 self.assertEqual(DoGet(_REMOTE, SOP % (b1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4121 DoGet(_REMOTE, SOP % (b2, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4122 self.assertNotEqual(DoGet(_REMOTE, SOP % (a1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4123 DoGet(_REMOTE, SOP % (b1, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4124 self.assertNotEqual(DoGet(_REMOTE, SOP % (a2, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4125 DoGet(_REMOTE, SOP % (b2, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4126 self.assertEqual(DoGet(_REMOTE, CLASS % (a1, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4127 DoGet(_REMOTE, CLASS % (b1, 0)))
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4128 self.assertEqual(DoGet(_REMOTE, CLASS % (a2, 0)),
149144d854bb Orthanc.test_anonymize_relationships_1/2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 130
diff changeset
4129 DoGet(_REMOTE, CLASS % (b2, 0)))
133
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4130
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4131
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4132 def test_anonymize_relationships_3(self):
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4133 sr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/StructuredReports/IM0')['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4134 mr1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/StructuredReports/IM631')['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4135 study = 'ef351eb2-c1147229-062736b8-35a151e3-e32d526b'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4136
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4137 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4138 { "Keep" : [ "ContentSequence" ] }) ['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4139
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4140 a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4141 self.assertEqual(2, len(a))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4142
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4143 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
4144 sr2 = a[0]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4145 mr2 = a[1]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4146 else:
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4147 sr2 = a[1]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4148 mr2 = a[0]['ID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4149
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4150 self.assertEqual(DoGet(_REMOTE, '/instances/%s/content/Modality' % sr1),
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4151 DoGet(_REMOTE, '/instances/%s/content/Modality' % sr2))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4152 self.assertEqual(DoGet(_REMOTE, '/instances/%s/content/Modality' % mr1),
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4153 DoGet(_REMOTE, '/instances/%s/content/Modality' % mr2))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4154
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4155 mrUid1 = DoGet(_REMOTE, '/instances/%s' % mr1)['MainDicomTags']['SOPInstanceUID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4156 mrUid2 = DoGet(_REMOTE, '/instances/%s' % mr2)['MainDicomTags']['SOPInstanceUID']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4157 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
4158 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
4159 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
4160 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
4161
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4162 PATH1 = '/instances/%s/content/CurrentRequestedProcedureEvidenceSequence'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4163 PATH2 = PATH1 + '/0/ReferencedSeriesSequence'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4164 PATH3 = PATH2 + '/0/ReferencedSOPSequence'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4165 PATH4 = PATH3 + '/0/ReferencedSOPInstanceUID'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4166 PATH5 = PATH3 + '/0/ReferencedSOPClassUID'
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4167
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4168 self.assertEqual(1, len(DoGet(_REMOTE, PATH1 % sr1)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4169 self.assertEqual(1, len(DoGet(_REMOTE, PATH2 % sr1)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4170 self.assertEqual(1, len(DoGet(_REMOTE, PATH3 % sr1)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4171 self.assertEqual(DoGet(_REMOTE, PATH4 % sr1), mrUid1)
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4172 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
4173 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
4174
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4175 self.assertEqual(1, len(DoGet(_REMOTE, PATH1 % sr2)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4176 self.assertEqual(1, len(DoGet(_REMOTE, PATH2 % sr2)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4177 self.assertEqual(1, len(DoGet(_REMOTE, PATH3 % sr2)))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4178 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
4179
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4180 self.assertEqual(mrUid2, DoGet(_REMOTE, PATH4 % sr2).strip('\x00'))
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4181 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
4182 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
4183
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4184 content1 = DoGet(_REMOTE, '/instances/%s/tags?simplify' % sr1) ['ContentSequence']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4185 content2 = DoGet(_REMOTE, '/instances/%s/tags?simplify' % sr2) ['ContentSequence']
f0d4c4707e64 test_anonymize_relationships_3
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 132
diff changeset
4186 self.assertEqual(str(content1), str(content2))
141
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4187
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4188
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4189 def test_bitbucket_issue_94(self):
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4190 # "a simple instance modification should not modify FrameOfReferenceUID + ..."
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
4191 # 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
4192 i = UploadInstance(_REMOTE, 'Issue94.dcm')['ID']
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4193
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4194 source = DoGet(_REMOTE, '/instances/%s/attachments/dicom/data' % i)
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4195
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4196 modified = DoPost(_REMOTE, '/instances/%s/modify' % i,
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4197 { "Replace" : {"PatientID" : "toto"}, "Force": True})
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4198
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4199 anonymized = DoPost(_REMOTE, '/instances/%s/anonymize' % i)
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4200
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4201 a = ExtractDicomTags(source, [ 'FrameOfReferenceUID' ])
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4202 self.assertEqual(1, len(a))
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4203
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4204 b = ExtractDicomTags(modified, [ 'FrameOfReferenceUID' ])
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4205 self.assertEqual(1, len(b))
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4206
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4207 c = ExtractDicomTags(anonymized, [ 'FrameOfReferenceUID' ])
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4208 self.assertEqual(1, len(c))
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4209
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4210 self.assertEqual(a, b) # Modified DICOM
5de178abe4d8 test_bitbucket_issue_94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 138
diff changeset
4211 self.assertNotEqual(a, c) # Anonymized DICOM
143
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4212
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4213
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4214 def test_metadata_origin(self):
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4215 # Upload using the REST API
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4216 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
4217 self.assertEqual('RestApi', DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4218 self.assertEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4219 self.assertNotEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteIP' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4220 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata/CalledAET' % i))
315
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4221
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4222 # "HttpUsername" is empty iff "AuthenticationEnabled" is "false"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4223 self.assertTrue(DoGet(_REMOTE, '/instances/%s/metadata/HttpUsername' % i) in [ '', 'alice' ])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4224
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4225 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % i)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4226 self.assertEqual('RestApi', m['Origin'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4227 self.assertEqual('', m['RemoteAET'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4228 self.assertNotEqual('', m['RemoteIP'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4229 self.assertFalse('CalledAET' in m)
315
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4230 self.assertTrue('HttpUsername' in m)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 314
diff changeset
4231 self.assertTrue(m['HttpUsername'] in [ '', 'alice' ])
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4232
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4233 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
4234 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
4235 self.assertEqual('1', m['IndexInSeries'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4236 self.assertTrue('ReceptionDate' in m)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4237
143
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4238 DoDelete(_REMOTE, '/instances/%s' % i)
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4239
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4240 # Upload using the DICOM protocol
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4241 subprocess.check_call([ FindExecutable('storescu'),
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4242 _REMOTE['Server'], str(_REMOTE['DicomPort']),
144
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4243 GetDatabasePath('Knee/T1/IM-0001-0001.dcm'),
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4244 '-xw' ]) # Propose JPEG2000
143
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4245 self.assertEqual('DicomProtocol', DoGet(_REMOTE, '/instances/%s/metadata/Origin' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4246 self.assertEqual('STORESCU', DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4247 self.assertNotEqual('', DoGet(_REMOTE, '/instances/%s/metadata/RemoteIP' % i))
28d50ffac07d test_metadata_origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 142
diff changeset
4248 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
4249 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
4250
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4251 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % i)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4252 self.assertEqual('DicomProtocol', m['Origin'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4253 self.assertEqual('STORESCU', m['RemoteAET'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4254 self.assertNotEqual('', m['RemoteIP'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4255 self.assertEqual('ANY-SCP', m['CalledAET'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4256 self.assertFalse('HttpUsername' in m)
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4257
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4258 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
4259 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
4260 self.assertEqual('1', m['IndexInSeries'])
7809fdf8056f testing metadata?expand
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 143
diff changeset
4261 self.assertTrue('ReceptionDate' in m)
147
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4262
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4263
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4264 def test_lua_deadlock(self):
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4265 # 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
4266 # 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
4267 # 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
4268 # instance appears to be stored and then everything just
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4269 # halts, ie Orthanc wont respond to anything after that."
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4270 # https://groups.google.com/d/msg/orthanc-users/Rc-Beb42xc8/JUgdzrmCAgAJ
174
d468cbe1b161 added tests for IncomingWorklistRequestFilter
am@osimis.io
parents: 173
diff changeset
4271 InstallLuaScriptFromPath(_REMOTE, 'Lua/Jpeg2000Conversion.lua')
147
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4272
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4273 subprocess.check_call([ FindExecutable('storescu'),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4274 _REMOTE['Server'], str(_REMOTE['DicomPort']),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4275 GetDatabasePath('Brainix/Flair/IM-0001-0001.dcm'),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4276 GetDatabasePath('Brainix/Flair/IM-0001-0002.dcm'),
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4277 ])
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4278
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4279 instances = DoGet(_REMOTE, '/instances')
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4280 self.assertEqual(2, len(instances))
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4281
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4282 t1 = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % instances[0])
ff788c99f1aa test_lua_deadlock
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
4283 t2 = DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % instances[1])
175
am@osimis.io
parents: 174
diff changeset
4284 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
4285 self.assertEqual(t1, t2);
154
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4286
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4287
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4288 def test_find_group_length(self):
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4289 # 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
4290 # one of the Generic Group Length tags (*, 0x0000)
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4291 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
4292 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
4293 self.assertFalse('UnableToProcess' in result)
4a533d003080 test_find_group_length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 147
diff changeset
4294 self.assertFalse('E:' in result)
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4295
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4296
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4297 def test_split(self):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4298 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4299 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
4300 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
4301 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
4302 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4303 t1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4304 t2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4305
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4306 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4307 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4308
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4309 info = DoGet(_REMOTE, '/studies/%s' % study)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4310 self.assertTrue('ReferringPhysicianName' in info['MainDicomTags'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4311
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4312 job = MonitorJob2(_REMOTE, lambda: DoPost
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4313 (_REMOTE, '/studies/%s/split' % study, {
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4314 'Series' : [ t2 ],
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4315 'Replace' : { 'PatientName' : 'Hello' },
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4316 'Remove' : [ 'ReferringPhysicianName' ],
181
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4317 'KeepSource' : False,
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4318 'Asynchronous' : True
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4319 }))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4320
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4321 self.assertNotEqual(None, job)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4322
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4323 studies = set(DoGet(_REMOTE, '/studies'))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4324 self.assertEqual(2, len(studies))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4325
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4326 series = set(DoGet(_REMOTE, '/series'))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4327 self.assertEqual(2, len(series))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4328 self.assertTrue(t1 in series)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4329
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4330 study2 = DoGet(_REMOTE, '/jobs/%s' % job)['Content']['TargetStudy']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4331 self.assertTrue(study in studies)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4332 self.assertTrue(study2 in studies)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4333
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4334 info = DoGet(_REMOTE, '/studies/%s' % study2)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4335 self.assertTrue('Hello', info['PatientMainDicomTags']['PatientName'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4336 self.assertFalse('ReferringPhysicianName' in info['MainDicomTags'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4337
254
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4338 sopInstanceUids = set()
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4339 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
4340 sopInstanceUids.add(i['MainDicomTags']['SOPInstanceUID'])
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4341
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4342 self.assertTrue(knee1Sop in sopInstanceUids)
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4343
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4344 # Fails if Orthanc <= 1.5.7
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4345 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
4346
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4347 # 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
4348 self.assertEqual(2, len(sopInstanceUids))
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4349
179
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 def test_merge(self):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4352 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
4353 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
4354 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
4355 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
4356 knee = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4357 t1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4358 brainix = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4359 flair = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4360
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4361 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4362 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4363
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4364 job = MonitorJob2(_REMOTE, lambda: DoPost
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4365 (_REMOTE, '/studies/%s/merge' % knee, {
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4366 'Resources' : [ brainix ],
181
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4367 'KeepSource' : True,
911070f790e3 more checks
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 179
diff changeset
4368 'Synchronous' : False
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4369 }))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4370
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4371 self.assertNotEqual(None, job)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4372
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4373 studies = set(DoGet(_REMOTE, '/studies'))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4374 self.assertEqual(2, len(studies))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4375 self.assertTrue(knee in studies)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4376 self.assertTrue(brainix in studies)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4377
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4378 series = set(DoGet(_REMOTE, '/studies/%s' % knee)['Series'])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4379 self.assertTrue(t1 in series)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4380 series.remove(t1)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4381 self.assertEqual(1, len(series))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4382
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4383 instances = DoGet(_REMOTE, '/series/%s' % list(series)[0])['Instances']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4384 self.assertEqual(1, len(instances))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4385 merged = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4386
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4387 instances = DoGet(_REMOTE, '/series/%s' % t1)['Instances']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4388 self.assertEqual(1, len(instances))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4389 a = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4390
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4391 instances = DoGet(_REMOTE, '/series/%s' % flair)['Instances']
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4392 self.assertEqual(1, len(instances))
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4393 b = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4394
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4395 tags = DoGet(_REMOTE, '/studies/%s' % knee)
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4396
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4397 for key in tags['PatientMainDicomTags']:
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4398 self.assertEqual(a[key], merged[key])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4399 if (key in b and key != 'PatientSex'):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4400 self.assertNotEqual(a[key], b[key])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4401
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4402 for key in tags['MainDicomTags']:
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4403 # Not in the patient/study module
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4404 if (not key in [ 'InstitutionName',
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4405 'RequestingPhysician',
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4406 'RequestedProcedureDescription', ]):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4407 self.assertEqual(a[key], merged[key])
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4408 if (key in b):
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4409 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
4410
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4411 sopInstanceUids = set()
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4412 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
4413 sopInstanceUids.add(i['MainDicomTags']['SOPInstanceUID'])
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4414
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4415 self.assertTrue(kneeSop in sopInstanceUids)
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4416 self.assertTrue(brainixSop in sopInstanceUids)
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4417
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4418 # Fails if Orthanc <= 1.5.7
05b77ade5e1d test generation of sopinstanceuid in split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 247
diff changeset
4419 # 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
4420 self.assertEqual(3, len(sopInstanceUids))
179
8a2dd77d4035 testing split/merge
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
4421
187
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 def test_async_archive(self):
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4424 # Testing the asynchronous generation of archives/medias (new
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4425 # in Orthanc 1.4.3)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4426 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4427 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4428
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4429 kneeT1 = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4430 kneeT2 = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4431
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4432 job = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4433 (_REMOTE, '/studies/%s/archive' % kneeT1, {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4434 'Synchronous' : False
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4435 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4436
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4437 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4438 self.assertEqual(1, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4439 self.assertFalse('DICOMDIR' in z.namelist())
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4440
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4441 info = DoGet(_REMOTE, '/jobs/%s' % job)
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4442 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
4443 self.assertEqual(1, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4444 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4445
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4446 job2 = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4447 (_REMOTE, '/studies/%s/media' % kneeT1, {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4448 'Synchronous' : False
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4449 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4450
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4451 # 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
4452 # archive from second job (as MediaArchiveSize == 1)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4453 self.assertRaises(Exception, lambda: GetArchive(_REMOTE, '/jobs/%s/archive' % job))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4454
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4455 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job2)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4456 self.assertEqual(2, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4457 self.assertTrue('DICOMDIR' in z.namelist())
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4458
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4459 info = DoGet(_REMOTE, '/jobs/%s' % job2)
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4460 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
4461 self.assertEqual(1, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4462 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4463
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4464 job = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4465 (_REMOTE, '/tools/create-archive', {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4466 'Synchronous' : False,
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4467 'Resources' : [ kneeT1, kneeT2 ],
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4468 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4469
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4470 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4471 self.assertEqual(2, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4472 self.assertFalse('DICOMDIR' in z.namelist())
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4473
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4474 info = DoGet(_REMOTE, '/jobs/%s' % job)
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4475 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
4476 self.assertEqual(2, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4477 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4478
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4479 job = MonitorJob2(_REMOTE, lambda: DoPost
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4480 (_REMOTE, '/tools/create-media', {
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4481 'Synchronous' : False,
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4482 'Resources' : [ kneeT1, kneeT2 ],
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4483 }))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4484
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4485 z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4486 self.assertEqual(3, len(z.namelist()))
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4487 self.assertTrue('DICOMDIR' in z.namelist())
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4488
354
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4489 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
4490 self.assertEqual(2, info['Content']['InstancesCount'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4491 self.assertEqual(0, info['Content']['UncompressedSizeMB'])
88f076b906ca test ArchiveSizeMB in archive jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 353
diff changeset
4492
187
770f6f5aea16 test_async_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 186
diff changeset
4493
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4494 def test_queries_hierarchy(self):
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4495 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4496 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
4497
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4498 tags = {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4499 'NumberOfPatientRelatedInstances' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4500 'NumberOfPatientRelatedSeries' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4501 'NumberOfPatientRelatedStudies' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4502 'NumberOfStudyRelatedInstances' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4503 'NumberOfStudyRelatedSeries' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4504 'NumberOfSeriesRelatedInstances' : '',
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4505 }
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4506
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4507 tags2 = copy.copy(tags)
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4508 tags2['PatientID'] = '887' # Only consider the "Knee" patient
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4509
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4510 patient = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4511 'Level' : 'Patient',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4512 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4513 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4514
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4515 study = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4516 'Level' : 'Study',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4517 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4518 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4519
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4520 series = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4521 'Level' : 'Series',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4522 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4523 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4524
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4525 instance = DoPost(_REMOTE, '/modalities/self/query', {
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4526 'Level' : 'Instance',
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4527 'Query' : tags2
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4528 }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4529
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4530 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
4531 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4532 self.assertEqual('887', p[0]['PatientID'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4533 self.assertEqual('1', p[0]['NumberOfPatientRelatedInstances'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4534 self.assertEqual('1', p[0]['NumberOfPatientRelatedSeries'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4535 self.assertEqual('1', p[0]['NumberOfPatientRelatedStudies'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4536 self.assertFalse('NumberOfStudyRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4537 self.assertFalse('NumberOfStudyRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4538 self.assertFalse('NumberOfSeriesRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4539
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4540 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
4541 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4542 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
4543 self.assertEqual('1', p[0]['NumberOfStudyRelatedInstances'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4544 self.assertEqual('1', p[0]['NumberOfStudyRelatedSeries'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4545 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4546 self.assertFalse('NumberOfPatientRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4547 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4548 self.assertFalse('NumberOfSeriesRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4549
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4550 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
4551 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4552 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
4553 self.assertEqual('1', p[0]['NumberOfSeriesRelatedInstances'])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4554 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4555 self.assertFalse('NumberOfPatientRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4556 self.assertFalse('NumberOfPatientRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4557 self.assertFalse('NumberOfStudyRelatedInstances' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4558 self.assertFalse('NumberOfStudyRelatedSeries' in p[0])
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4559
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4560 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
4561 self.assertEqual(1, len(p))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4562 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
4563
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4564 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
4565 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4566 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
4567 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % study))
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4568
188
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4569 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
4570 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4571 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
4572 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4573
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4574 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
4575 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4576 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
4577 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4578
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4579 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
4580 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4581 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
4582 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % series))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4583
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4584 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
4585 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4586 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
4587 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4588
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4589 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
4590 { 'Query' : tags }) ['ID']
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4591 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
4592 DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % instance))
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4593
7d585263808b new test: test_queries_hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 187
diff changeset
4594
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4595 def test_dicom_disk_size(self):
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4596 dicomSize = 0
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4597
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4598 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
4599 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
4600
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4601 for i in range(2):
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4602 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
4603 UploadInstance(_REMOTE, p)
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4604 dicomSize += os.path.getsize(GetDatabasePath(p))
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4605
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4606 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
4607 self.assertEqual(2, s['CountInstances'])
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4608 self.assertEqual(2, s['CountSeries'])
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4609 self.assertEqual(1, s['CountStudies'])
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4610
189
11719f19bd62 test_dicom_disk_size
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 188
diff changeset
4611 self.assertEqual(dicomSize, int(s['DicomUncompressedSize']))
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4612
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4613 if isCompressed:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4614 self.assertGreater(dicomSize, int(s['DicomDiskSize']))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4615 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
4616 self.assertLess(dicomSize, int(s['UncompressedSize']))
379
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4617 else:
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4618 self.assertEqual(dicomSize, int(s['DicomDiskSize']))
097329b67509 fix tests if StorageCompression is true
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 378
diff changeset
4619 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
4620 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
4621 if IsDicomUntilPixelDataStored(_REMOTE):
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
4622 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
4623 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
4624 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
4625 else:
b9adc7d06347 update tests following removal of dicom-as-json attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 379
diff changeset
4626 # 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
4627 # 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
4628 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
4629
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4630
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4631 def test_changes_2(self):
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4632 # 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
4633 # 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
4634
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4635 # 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
4636 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
4637 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
4638 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
4639 DoDelete(_REMOTE, '/instances/%s' % a)
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 # 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
4642 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
4643
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4644 c = DoGet(_REMOTE, '/changes')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4645 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
4646 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4647 seq = c['Last']
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4648
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4649 c = DoGet(_REMOTE, '/changes?last')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4650 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
4651 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4652 self.assertEqual(seq, c['Last'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4653
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4654 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
4655 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
4656 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4657 self.assertEqual(seq, c['Last'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4658
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4659 # Add one instance
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4660 UploadInstance(_REMOTE, 'DummyCT.dcm')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4661 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
4662
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4663 c = DoGet(_REMOTE, '/changes')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4664 self.assertEqual(4, len(c['Changes']))
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4665 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4666 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
4667
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4668 c = DoGet(_REMOTE, '/changes?last')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4669 self.assertEqual(1, len(c['Changes']))
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4670 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4671 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
4672
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4673 c = DoGet(_REMOTE, '/changes?since=%d' % (seq + 1000))
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4674 self.assertEqual(0, len(c['Changes']))
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4675 self.assertTrue(c['Done'])
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4676 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
4677
389
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4678 # Add, then delete, one user-defined metadata: This triggers 2
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4679 # changes of type "UpdatedMetadata"
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4680 i = DoGet(_REMOTE, '/instances') [0]
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4681 DoPut(_REMOTE, '/instances/%s/metadata/4000' % i, 'hello', 'text/plain')
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
4682
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
4683 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/4000' % i)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
4684 self.assertEqual('200', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
4685 self.assertEqual('hello', body)
389
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4686
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4687 c = DoGet(_REMOTE, '/changes?last')
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4688 self.assertEqual(1, len(c['Changes']))
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4689 self.assertTrue(c['Done'])
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4690 self.assertEqual(seq + 5, c['Last'])
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4691 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType'])
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4692
394
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4693 if IsOrthancVersionAbove(_REMOTE, 1, 9, 2):
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4694 DoDelete(_REMOTE, '/instances/%s/metadata/4000' % i, headers = {
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4695 'If-Match' : headers['etag']
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4696 })
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4697 else:
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4698 self.assertFalse('etag' in headers)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4699 DoDelete(_REMOTE, '/instances/%s/metadata/4000' % i)
e87d54a8a204 compatibility with 1.9.1
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
4700
389
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4701 c = DoGet(_REMOTE, '/changes?last')
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4702 self.assertEqual(1, len(c['Changes']))
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4703 self.assertTrue(c['Done'])
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4704 self.assertEqual(seq + 6, c['Last'])
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4705 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType'])
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4706
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4707 # Remove the uploaded instance
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4708 DoDelete(_REMOTE, '/instances/%s' % a)
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4709 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
4710
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4711 c = DoGet(_REMOTE, '/changes')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4712 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
4713 self.assertTrue(c['Done'])
389
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4714 self.assertEqual(seq + 6, c['Last'])
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4715
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4716 c = DoGet(_REMOTE, '/changes?last')
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4717 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
4718 self.assertTrue(c['Done'])
389
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4719 self.assertEqual(seq + 6, c['Last'])
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4720
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4721 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
4722 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
4723 self.assertTrue(c['Done'])
389
27e0a2fcdc85 test /changes of type UpdatedMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 384
diff changeset
4724 self.assertEqual(seq + 6, c['Last'])
202
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4725
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4726
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4727 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
4728 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
4729
f26f9ae9c599 test_changes_2 and test_bitbucket_issue_124
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 195
diff changeset
4730 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
4731 self.assertEqual(2, len(z.namelist()))
207
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4732
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4733
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4734 def test_invalid_findscp(self):
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4735 UploadInstance(_REMOTE, 'DummyCT.dcm')
a515eec74078 test_invalid_findscp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 202
diff changeset
4736 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
4737 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
4738
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4739
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4740 def test_bitbucket_issue_90(self):
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4741 def CountDicomResults(sex):
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4742 a = CallFindScu([ '-S', '-k', '8,52=STUDY', '-k', sex ])
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4743 return len(re.findall('\(0010,0040\)', a))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4744
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4745 def CountRestResults(sex):
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4746 a = DoPost(_REMOTE, '/tools/find',
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4747 { 'Level' : 'Study', 'Query' : { 'PatientSex' : sex } })
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4748 return len(a)
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4749
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4750 # 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
4751 # "DummyCT.dcm" has the tag PatientSex (0010,0040) unset
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4752 UploadInstance(_REMOTE, 'DummyCT.dcm')
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4753
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4754 # 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
4755
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4756 # 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
4757 self.assertEqual(0, CountDicomResults('PatientSex=*'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4758 self.assertEqual(0, CountRestResults('*'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4759
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4760 # 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
4761 self.assertEqual(0, CountDicomResults('PatientSex=F'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4762 self.assertEqual(0, CountDicomResults('PatientSex=M'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4763 self.assertEqual(0, CountRestResults('F'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4764 self.assertEqual(0, CountRestResults('M'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4765
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4766 # 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
4767 # 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
4768 # as a filter in such a situation.
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4769 self.assertEqual(1, CountDicomResults('PatientSex'))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4770 self.assertEqual(1, CountDicomResults('PatientSex='))
2444c9a7c422 test_bitbucket_issue_90
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 207
diff changeset
4771 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
4772
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4773
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4774 def test_rest_modalities_in_study(self):
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4775 # 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
4776 # 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
4777 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4778
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4779 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4780 'Query' : { 'ModalitiesInStudy' : 'US' }})
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4781 self.assertEqual(0, len(a))
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4782
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4783 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4784 'Query' : { 'ModalitiesInStudy' : 'US\\CT' }})
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4785 self.assertEqual(1, len(a))
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4786
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4787 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4788 'Query' : { 'ModalitiesInStudy' : 'CT' }})
2c50c8f340c2 test_rest_modalities_in_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 208
diff changeset
4789 self.assertEqual(1, len(a))
211
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4790
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4791
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4792 def test_series_status(self):
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4793 def HasCompletedInChanges():
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4794 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
4795 if c['ChangeType'] == 'CompletedSeries':
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4796 return True;
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4797
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4798 return False
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4799
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4800 UploadInstance(_REMOTE, 'Knix/Loc/IM-0001-0001.dcm')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4801 series = '8ea120d7-5057d919-837dfbcc-ccd04e0f-7f3a94aa'
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4802 self.assertEqual('Unknown', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4803 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4804
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4805 series = 'ce25ecb6-ed79d004-5ae43ca7-3fc89bc5-67511614'
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4806
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4807 for i in range(3):
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4808 UploadInstance(_REMOTE, 'Series/Lena-%d.dcm' % (i + 1))
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4809 self.assertEqual('Missing', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4810 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4811
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4812 UploadInstance(_REMOTE, 'Series/Lena-4.dcm')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4813 self.assertEqual('Complete', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4814 self.assertTrue(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4815
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4816 DoDelete(_REMOTE, '/changes')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4817 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4818
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4819 UploadInstance(_REMOTE, 'Series/Lena-5.dcm')
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4820 self.assertEqual('Inconsistent', DoGet(_REMOTE, '/series/%s' % series)['Status'])
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4821 self.assertFalse(HasCompletedInChanges())
a05cc24f84e5 test_series_status
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 210
diff changeset
4822
215
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4823
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4824 def test_dicomweb(self):
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4825 def Compare(dicom, reference):
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4826 a = UploadInstance(_REMOTE, dicom) ['ID']
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4827 b = DoGet(_REMOTE, '/instances/%s/file' % a,
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4828 headers = { 'Accept' : 'application/dicom+json' })
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4829 with open(GetDatabasePath(reference), 'rb') as c:
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4830 d = json.load(c)
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4831 AssertAlmostEqualRecursive(self, d, b)
215
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4832
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4833 Compare('DummyCT.dcm', 'DummyCT.json')
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4834 Compare('MarekLatin2.dcm', 'MarekLatin2.json')
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4835 Compare('HierarchicalAnonymization/StructuredReports/IM0',
d8fc62207ba3 test_dicomweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
4836 'HierarchicalAnonymization/StructuredReports/IM0.json')
217
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4837
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4838
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4839 def test_issue_95_encodings(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
4840 # https://bugs.orthanc-server.com/show_bug.cgi?id=95
217
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4841 # Check out image: "../Database/Encodings/DavidClunie/charsettests.screenshot.png"
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4842
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4843 # Very useful tool: "file2" from package "file-kanji"
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4844
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4845 def GetPatientName(dicom):
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4846 i = UploadInstance(_REMOTE, dicom) ['ID']
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4847 j = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4848 return j['PatientName']
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4849
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4850 def ComparePatientName(name, dicom):
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4851 self.assertEqual(name, GetPatientName(dicom))
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4852
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4853 # 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
4854 ComparePatientName(u'Buc^Jérôme', 'Encodings/DavidClunie/SCSFREN')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4855
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4856 # 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
4857 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
4858
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4859 # 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
4860 ComparePatientName(u'Wang^XiaoDong=王^小东=', 'Encodings/DavidClunie/SCSX2')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4861
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4862 # 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
4863 ComparePatientName(u'Wang^XiaoDong=王^小東=', 'Encodings/DavidClunie/SCSX1')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4864
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4865 # 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
4866 ComparePatientName(u'Yamada^Tarou=山田^太郎=やまだ^たろう', 'Encodings/DavidClunie/SCSH31')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4867
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4868 # 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
4869 ComparePatientName(u'Äneas^Rüdiger', 'Encodings/DavidClunie/SCSGERM')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4870
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4871 # 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
4872 ComparePatientName(u'Διονυσιος', 'Encodings/DavidClunie/SCSGREEK')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4873
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4874 # 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
4875 ComparePatientName(u'Люкceмбypг', 'Encodings/DavidClunie/SCSRUSS')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4876
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4877 # 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
4878 # NB: Hebrew is a right-to-left encoding, copying/pasting from
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4879 # Linux console into Emacs automatically reverse the string
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4880 ComparePatientName(u'שרון^דבורה', 'Encodings/DavidClunie/SCSHBRW')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4881
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4882 # 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
4883 # 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
4884 # characters by default, but copy/paste works with Emacs
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4885 ComparePatientName(u'قباني^لنزار', 'Encodings/DavidClunie/SCSARAB')
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4886
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4887 # SCSH32: This SpecificCharacterSet is composed of 2
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4888 # codepages: "ISO 2022 IR 13" (i.e. "SHIFT_JIS") until the
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4889 # 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
4890 # remainer. Orthanc only takes into consideration the first
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4891 # codepage: This is a limitation.
a491d5ec370a test encodings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 215
diff changeset
4892 # 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
4893 self.assertTrue(GetPatientName('Encodings/DavidClunie/SCSH32').startswith(u'ヤマダ^タロウ='))
218
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4894
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4895
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4896 def test_findscu_missing_tags(self):
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4897 # dcmodify -e Rows DummyCTInvalidRows.dcm -gst -gse -gin
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4898 UploadInstance(_REMOTE, 'DummyCT.dcm')
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4899 UploadInstance(_REMOTE, 'DummyCTInvalidRows.dcm')
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4900
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4901 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
4902
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4903 # We have 2 instances...
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4904 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4905 self.assertEqual(2, len(patientNames))
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4906 self.assertEqual('KNIX', patientNames[0])
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4907 self.assertEqual('KNIX', patientNames[1])
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4908
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4909 # ...but only 1 value for the "Rows" tag
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4910 rows = re.findall('\(0028,0010\) US ([0-9]+)', i)
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4911 self.assertEqual(1, len(rows))
70fba41776be test_findscu_missing_tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 217
diff changeset
4912 self.assertEqual('512', rows[0])
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4913
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4914
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4915
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4916 def test_bitbucket_issue_131(self):
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4917 # "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
4918 # StudyInstanceUID in it's database."
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
4919 # 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
4920
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4921 # Insert 2 instances, with the same StudyInstanceUID, but with
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4922 # different patient IDs. Orthanc will create 2 distincts
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4923 # patients, and the hierarchy of resources above the two
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4924 # instances will be fully disjoint.
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4925 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-a.dcm')
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4926 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-b.dcm')
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4927
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4928 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4929 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4930
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4931 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4932 'Level' : 'Study',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4933 'Query' : {"PatientID": "A" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4934
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4935 # 1 study is matched
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4936 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
4937
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4938 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4939 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4940 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4941 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4942
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4943 # 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
4944 # 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
4945 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4946
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4947
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4948 # Match the 2 studies
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4949 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4950 'Level' : 'Study',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4951 'Query' : {"StudyInstanceUID": "2.25.123" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4952 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
4953 DropOrthanc(_LOCAL)
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4954 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4955 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4956 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4957 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4958 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4959
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4960
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4961 # 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
4962 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4963 'Level' : 'Patient',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4964 'Query' : {"PatientID": "A" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4965 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
4966 DropOrthanc(_LOCAL)
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4967 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4968 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4969 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4970 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4971 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4972
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4973
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4974 # 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
4975 a = DoPost(_REMOTE, '/modalities/self/query', {
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4976 'Level' : 'Series',
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4977 'Query' : {"PatientID": "A" }})['ID']
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4978 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
4979 DropOrthanc(_LOCAL)
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4980 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
220
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4981 WaitAllNewJobsDone(_REMOTE, lambda: DoPost
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4982 (_REMOTE, '/queries/%s/retrieve' % a,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 219
diff changeset
4983 '{"TargetAet":"ORTHANCTEST","Synchronous":false}'))
219
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4984 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
00e5aeea33dd test_bitbucket_issue_131
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 218
diff changeset
4985
233
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4986
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4987 def test_bitbucket_issue_136(self):
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4988 UploadInstance(_REMOTE, 'Issue137.dcm')
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4989 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
4990 patientNames = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4991 self.assertEqual(1, len(patientNames))
ce0b19a2c807 test_bitbucket_issue_136
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 231
diff changeset
4992 self.assertEqual('John Doe', patientNames[0])
234
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4993
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4994
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4995 def test_anonymize_relationships_4(self):
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
4996 # 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
4997 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
4998 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
4999 study = '0c923249-d52121a9-2b7167f7-6b85534f-0943697e'
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5000
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5001 anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study, '{}',
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5002 'application/json')['ID']
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5003 series = DoGet(_REMOTE, '/studies/%s/series' % anonymized)
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5004 self.assertEqual(2, len(series))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5005
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5006 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
5007 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
5008 self.assertEqual(1, len(cr))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5009 self.assertEqual(1, len(pr))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5010 self.assertEqual(1, len(cr[0]['Instances']))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5011 self.assertEqual(1, len(pr[0]['Instances']))
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5012
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5013 crinstance = DoGet(_REMOTE, '/instances/%s' % cr[0]['Instances'][0])
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5014 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
5015
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5016 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
5017 crinstance['MainDicomTags']['SOPInstanceUID'])
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5018 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
5019 '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
5020
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5021 # This fails on Orthanc <= 1.5.6
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5022 self.assertEqual(tags['0008,1115'][0]['0020,000e'],
93cd4fdd4a67 test_anonymize_relationships_4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 233
diff changeset
5023 cr[0]['MainDicomTags']['SeriesInstanceUID'])
235
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5024
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5025
255
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5026 def test_anonymize_relationships_5(self):
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5027 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm')
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5028 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm')
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5029 oStudyId = ct1['ParentStudy']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5030 oCtInstanceId = ct1['ID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5031 oRtInstanceId = rt1['ID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5032
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5033 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5034 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5035
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5036 # first validate the relationships in the source data
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5037 oStudyUID = oCtTags['StudyInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5038 oRtSeriesUID = oRtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5039 oRtInstanceUID = oRtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5040 oRtFrameOfReferenceUID = oRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5041 oCtSeriesUID = oCtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5042 oCtInstanceUID = oCtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5043 oCtFrameOfReferenceUID = oCtTags['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5044
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5045 oContourSequenceCount = len(oRtTags['ROIContourSequence'][0]['ContourSequence'])
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5046 self.assertEqual(oCtFrameOfReferenceUID, oRtFrameOfReferenceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5047 self.assertEqual(oStudyUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID'])
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5048 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
5049 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
5050 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
5051
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5052 ### anonymize
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5053
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5054 aStudyId = DoPost(_REMOTE, '/studies/%s/anonymize' % oStudyId, '{}',
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5055 'application/json')['ID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5056
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5057 ### validate
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5058
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5059 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5060 self.assertEqual(2, len(aSeries))
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5061
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5062 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries))
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5063 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries))
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5064 aCtInstanceId = aCt[0]['Instances'][0]
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5065 aRtInstanceId = aRt[0]['Instances'][0]
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5066 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5067 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5068
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5069 # now validate the relationships in the anonymized data
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5070 aStudyUID = aCtTags['StudyInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5071 aRtSeriesUID = aRtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5072 aRtInstanceUID = aRtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5073 aRtFrameOfReferenceUID = aRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5074 aCtSeriesUID = aCtTags['SeriesInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5075 aCtInstanceUID = aCtTags['SOPInstanceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5076 aCtFrameOfReferenceUID = aCtTags['FrameOfReferenceUID']
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5077
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5078 aContourSequenceCount = len(aRtTags['ROIContourSequence'][0]['ContourSequence'])
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5079 # make sure all UIDs have been updated
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5080 self.assertNotEqual(oStudyUID, aStudyUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5081 self.assertNotEqual(oRtSeriesUID, aRtSeriesUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5082 self.assertNotEqual(oRtInstanceUID, aRtInstanceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5083 self.assertNotEqual(oRtFrameOfReferenceUID, aRtFrameOfReferenceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5084 self.assertNotEqual(oCtSeriesUID, aCtSeriesUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5085 self.assertNotEqual(oCtInstanceUID, aCtInstanceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5086 self.assertNotEqual(oCtFrameOfReferenceUID, aCtFrameOfReferenceUID)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5087
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5088 # validate the relationships
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5089 self.assertEqual(oContourSequenceCount, aContourSequenceCount)
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5090 self.assertEqual(aCtFrameOfReferenceUID, aRtFrameOfReferenceUID)
256
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5091 self.assertEqual(aStudyUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID'])
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5092 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
5093 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
5094 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
5095
256
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5096 def test_anonymize_relationships_5b(self):
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5097 # same test as previous one but, this time, we force the StudyInstanceUID
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5098 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm')
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5099 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm')
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5100 oStudyId = ct1['ParentStudy']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5101 oCtInstanceId = ct1['ID']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5102 oRtInstanceId = rt1['ID']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5103
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5104 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5105 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5106
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5107 ### anonymize while forcing the StudyInstanceUID
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5108
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5109 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
5110 'application/json')['ID']
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5111
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5112 ### validate
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5113
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5114 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5115 self.assertEqual(2, len(aSeries))
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5116
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5117 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries))
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5118 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries))
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5119 aCtInstanceId = aCt[0]['Instances'][0]
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5120 aRtInstanceId = aRt[0]['Instances'][0]
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5121 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5122 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId)
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5123
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5124 self.assertEqual("1.2.3.4", aCtTags['StudyInstanceUID'])
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5125 self.assertEqual("1.2.3.4", aRtTags['StudyInstanceUID'])
397bcd1d16b2 tests for RT-STRUCT anonymization
amazy
parents: 255
diff changeset
5126 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
5127
02c3d91b155c added anonymization test for RTH data (currently failing)
amazy
parents: 254
diff changeset
5128
235
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5129 def test_bitbucket_issue_140(self):
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
5130 # "Modifying private tags with REST API changes VR from LO to
267
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 266
diff changeset
5131 # 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
5132 # 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
5133 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5134 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5135
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5136 target = DoPost(_REMOTE, '/series/%s/modify' % series, {
266
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
5137 'Replace' : { 'RadioButton3' : 'aaabbbccc' },
b105bb2233c6 fix issue 140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
5138 'PrivateCreator' : 'RadioLogic', # <= the trick is here
235
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5139 }, 'application/json') ['ID']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5140
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5141 instances = DoGet(_REMOTE, '/series/%s/instances' % target)
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5142 self.assertEqual(1, len(instances))
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5143
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5144 tags = DoGet(_REMOTE, '/instances/%s/tags' % source)
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5145 t = tags['4321,1012']
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5146 self.assertEqual('String', t['Type'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5147 self.assertEqual('RadioButton3', t['Name'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5148 self.assertEqual('RadioLogic', t['PrivateCreator'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5149 self.assertEqual('jklmopq', t['Value'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5150
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5151 tags = DoGet(_REMOTE, '/instances/%s/tags' % instances[0]['ID'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5152 t = tags['4321,1012']
327
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 326
diff changeset
5153 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
5154 self.assertEqual('RadioButton3', t['Name'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5155 self.assertEqual('RadioLogic', t['PrivateCreator'])
9929e4af2b7a test_bitbucket_issue_140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 234
diff changeset
5156 self.assertEqual('aaabbbccc', t['Value'])
236
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5157
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5158
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5159 def test_find_normalize(self):
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5160 # https://groups.google.com/d/msg/orthanc-users/AIwooGjsh94/YL28MNY4AgAJ
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5161
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5162 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5163
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5164 a = DoPost(_REMOTE, '/modalities/self/query', {
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5165 'Level' : 'Instance',
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5166 'Query' : { 'Rows' : '42' }
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5167 }) ['ID']
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5168
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5169 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a)
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5170 self.assertEqual(1, len(b))
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5171 self.assertFalse('Rows' in b[0])
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5172
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5173 a = DoPost(_REMOTE, '/modalities/self/query', {
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5174 'Level' : 'Instance',
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5175 'Query' : { 'Rows' : '42' },
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5176 'Normalize' : False
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5177 }) ['ID']
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5178
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5179 b = DoGet(_REMOTE, '/queries/%s/answers' % a)
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5180 self.assertEqual(0, len(b))
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5181
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5182 a = DoPost(_REMOTE, '/modalities/self/query', {
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5183 'Level' : 'Instance',
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5184 'Query' : { 'Rows' : '512' },
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5185 'Normalize' : False
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5186 }) ['ID']
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5187
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5188 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a)
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5189 self.assertEqual(1, len(b))
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5190 self.assertTrue('Rows' in b[0])
2de1aec255ae test_find_normalize
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 235
diff changeset
5191 self.assertEqual('512', b[0]['Rows'])
237
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5193 a = DoPost(_REMOTE, '/modalities/self/query', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5194 'Level' : 'Instance',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5195 'Query' : { 'Rows' : '' },
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5196 'Normalize' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5197 }) ['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5198
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5199 b = DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5200 self.assertEqual(1, len(b))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5201 self.assertTrue('Rows' in b[0])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5202 self.assertEqual('512', b[0]['Rows'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5203
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5204 self.assertRaises(Exception, lambda: DoPost(
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5205 _REMOTE, '/modalities/self/query', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5206 'Level' : 'Instance',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5207 'Query' : { 'Rows' : '*' }, # Out-of-range value
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5208 'Normalize' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
5209 }))
243
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5210
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5211
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5212 def test_bitbucket_issue_141(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5213 # 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
5214 a = UploadInstance(_REMOTE, 'Issue141.dcm') ['ID']
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5215 study = '494c8037-b237f263-d8f15075-c8cb2280-daf39bd1'
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5216
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5217 with open(GetDatabasePath('HelloWorld.pdf'), 'rb') as f:
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5218 pdf = f.read()
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5219
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5220 b = DoPost(_REMOTE, '/tools/create-dicom', {
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5221 'Parent' : study,
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5222 'Tags' : {},
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5223 'Content' : 'data:application/pdf;base64,' + base64.b64encode(pdf)
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5224 }) ['ID']
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5225
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5226 tagsA = DoGet(_REMOTE, '/instances/%s/tags?short' % a)
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5227 tagsB = DoGet(_REMOTE, '/instances/%s/tags?short' % b)
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5228 self.assertEqual(tagsA['0008,0005'], tagsB['0008,0005'])
cccf697a4e13 test_bitbucket_issue_141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 237
diff changeset
5229 self.assertEqual(tagsA['0008,1030'], tagsB['0008,1030'])
247
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5230
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5231
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5232 def test_modifying_missing_patientid(self):
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5233 # 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
5234 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm')
1abdab0ba0e6 test_modifying_missing_patientid
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 243
diff changeset
5235 DoPost(_REMOTE, '/studies/0c4aca1d-c107a241-6659d6aa-594c674a-a468b94a/modify', {})
262
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5236
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5237
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5238 def test_log_level(self):
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5239 # 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
5240 original = DoGet(_REMOTE, '/tools/log-level')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5241
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5242 DoPut(_REMOTE, '/tools/log-level', 'default')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5243 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5244 DoGet(_REMOTE, '/system')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5245
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5246 DoPut(_REMOTE, '/tools/log-level', 'verbose')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5247 self.assertEqual('verbose', DoGet(_REMOTE, '/tools/log-level'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5248 DoGet(_REMOTE, '/system')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5249
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5250 DoPut(_REMOTE, '/tools/log-level', 'trace')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5251 self.assertEqual('trace', DoGet(_REMOTE, '/tools/log-level'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5252 DoGet(_REMOTE, '/system')
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5253
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5254 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/log-level', 'nope'))
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5255
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5256 # Switch back to the original log level
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5257 DoPut(_REMOTE, '/tools/log-level', original)
264
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5258
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5259
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5260 def test_upload_compressed(self):
265
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5261 # New in Orthanc 1.6.0
264
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5262 with open(GetDatabasePath('DummyCT.dcm.gz'), 'rb') as f:
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5263 d = f.read()
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5264
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5265 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/instances', d, 'application/dicom'))
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5266
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5267 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/instances', d, 'application/dicom',
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5268 headers = { 'Content-Encoding' : 'nope' }))
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5269
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5270 a = DoPost(_REMOTE, '/instances', d, 'application/dicom',
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5271 headers = { 'Content-Encoding' : 'gzip' })
445f498bc1d4 test_upload_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 263
diff changeset
5272 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', a['ID'])
262
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5273
045a45c3f945 test_log_level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 260
diff changeset
5274
263
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5275 def test_study_series_find_inconsistency(self):
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5276 # 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
5277
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5278 def CountAnswers(query):
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5279 a = DoPost(_REMOTE, 'modalities/self/query', query)
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5280 return len(DoGet(_REMOTE, '%s/answers' % a['Path']))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5281
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5282 # 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
5283 # "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
5284 # the "main DICOM tags" of Orthanc.
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5285 UploadInstance(_REMOTE, 'Issue137.dcm')
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5286
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 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5289 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5290 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5291
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5292 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5293 'Level' : 'Series',
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
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 ## "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
5299 ## 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
5300 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5301
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5302 # 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
5303 # is wiped out by the normalization
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5304 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5305 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5306 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5307 'SeriesDescription' : 'NOPE'
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 'Normalize' : False
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 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5312 # This test fails on Orthanc <= 1.5.8
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5313 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5314 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5315 '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
5316 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5317 'Normalize' : False
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5318 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5319 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5320 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5321 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5322 'SeriesDescription' : 'THIS^VALUE^IS^WIPED^OUT'
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 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5325 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5326 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5327 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5328 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5329 'SeriesDescription' : '*' # Matches, as wiped out by the normalization
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 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5332 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5333
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5334 for normalize in [ True, False ]:
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5335 # 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
5336 # normalization has no effect
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 # "Universal matching" will match all entities, including
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5339 # those with the missing tag
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5340 # 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
5341 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5342 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5343 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5344 'SeriesDescription' : '' # Universal matching
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 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5347 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5348 # "Universal matching" will match all entities, including
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5349 # those with the missing tag
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5350 # 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
5351 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5352 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5353 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5354 'SeriesDescription' : '*' # Wildcard matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5355 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5356 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5357 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5358 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5359 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5360 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5361 '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
5362 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5363 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5364 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5365 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5366 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5367 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5368 'SeriesDescription' : '*MISMATCHED^VALUE*'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5369 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5370 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5371 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5372
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5373 # Universal matching matches any instance, even if the
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5374 # 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
5375 # makes no sense
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5376 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5377 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5378 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5379 'SeriesDescription' : '' # Universal matching
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 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5382 }))
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
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5386 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5387 ## "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
5388 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5389
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5390 # 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
5391 # is wiped out by the normalization
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5392 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5393 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5394 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5395 'ProtocolName' : 'NOPE'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5396 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5397 'Normalize' : False
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5398 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5399 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5400 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5401 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5402 'ProtocolName' : '*' # 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
5403 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5404 'Normalize' : False
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 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5407 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5408 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5409 'ProtocolName' : 'THIS^VALUE^IS^WIPED^OUT'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5410 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5411 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5412 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5413 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5414 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5415 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5416 'ProtocolName' : '*' # Matches, as wiped out by the normalization
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5417 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5418 'Normalize' : True
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5419 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5420
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5421 for normalize in [ True, False ]:
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5422 # 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
5423 # normalization has no effect
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5424
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5425 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5426 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5427 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5428 'ProtocolName' : '' # Universal matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5429 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5430 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5431 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5432 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5433 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5434 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5435 '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
5436 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5437 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5438 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5439 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5440 'Level' : 'Series',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5441 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5442 'ProtocolName' : '*MISMATCHED^VALUE*'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5443 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5444 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5445 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5446
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5447 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5448 'Level' : 'Study',
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5449 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5450 'ProtocolName' : '' # Universal matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5451 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5452 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5453 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5454
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5455
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5456 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5457 ## "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
5458 ##
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5459
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5460 for level in [ 'Study', 'Series' ] :
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5461 for normalize in [ True, False ]:
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5462 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5463 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5464 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5465 'StudyInstanceUID' : '' # Universal matching
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5466 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5467 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5468 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5469 self.assertEqual(0, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5470 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5471 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5472 'StudyInstanceUID' : 'MISMATCHED^VALUE'
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5473 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5474 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5475 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5476 self.assertEqual(1, CountAnswers({
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5477 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5478 'Query' : {
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5479 '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
5480 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5481 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5482 }))
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5483
269
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 268
diff changeset
5484 # 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
5485 # This test fails on Orthanc <= 1.5.8
269
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 268
diff changeset
5486 self.assertRaises(Exception, lambda: CountAnswers({
263
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5487 'Level' : level,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5488 'Query' : {
269
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 268
diff changeset
5489 'StudyInstanceUID' : '*'
263
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5490 },
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5491 'Normalize' : normalize,
a2719263fd04 test_study_series_find_inconsistency
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 262
diff changeset
5492 }))
265
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
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5495 def test_rendered(self):
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5496 # New in Orthanc 1.6.0
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5497 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID']
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5498 im = GetImage(_REMOTE, '/instances/%s/rendered' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5499 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5500 self.assertEqual(41, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5501 self.assertEqual(41, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5502
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5503 # http://effbot.org/zone/pil-comparing-images.htm
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5504 truth = Image.open(GetDatabasePath('ColorTestMalaterre.png'))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5505 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None)
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 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5508 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5509 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5510 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5511
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5512 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5513 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5514 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5515 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5516
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5517 im = GetImage(_REMOTE, '/instances/%s/rendered?height=128' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5518 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5519 self.assertEqual(128, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5520 self.assertEqual(128, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5521
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5522 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10&smooth=0' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5523 self.assertEqual("RGB", 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(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5526
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5527 im = GetImage(_REMOTE, '/instances/%s/rendered?height=10&smooth=1' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5528 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5529 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5530 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5531
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5532 im = GetImage(_REMOTE, '/instances/%s/rendered?height=5&width=10' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5533 self.assertEqual("RGB", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5534 self.assertEqual(5, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5535 self.assertEqual(5, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5536
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5537
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5538 # Grayscale image
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5539 i = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5540 im = GetImage(_REMOTE, '/instances/%s/rendered' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5541 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5542 self.assertEqual(288, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5543 self.assertEqual(288, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5544 self.assertEqual(0, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5545
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5546 # Those are the original windowing parameters that are written
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5547 # inside the DICOM file
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5548 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
5549 self.assertEqual("L", im2.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5550 self.assertEqual(288, im2.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5551 self.assertEqual(288, im2.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5552 self.assertTrue(ImageChops.difference(im, im2).getbbox() is None)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5553
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5554 im = GetImage(_REMOTE, '/instances/%s/rendered?width=512&smooth=0' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5555 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5556 self.assertEqual(512, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5557 self.assertEqual(512, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5558
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5559 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&smooth=0' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5560 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5561 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5562 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5563
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5564 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&smooth=1' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5565 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5566 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5567 self.assertEqual(10, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5568
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5569 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
5570 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5571 self.assertEqual(1, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5572 self.assertEqual(1, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5573 self.assertEqual(255, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5574
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5575 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
5576 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5577 self.assertEqual(1, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5578 self.assertEqual(1, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5579 self.assertEqual(0, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5580
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5581
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5582 # Test monochrome 1
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5583 i = UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')['ID']
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5584 im = GetImage(_REMOTE, '/instances/%s/rendered' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5585 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5586 self.assertEqual(2010, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5587 self.assertEqual(2446, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5588 self.assertEqual(0, im.getpixel((0, 0)))
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5589 im = GetImage(_REMOTE, '/instances/%s/rendered?width=20' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5590 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5591 self.assertEqual(20, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5592 self.assertEqual(24, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5593 im = GetImage(_REMOTE, '/instances/%s/rendered?height=24' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5594 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5595 self.assertEqual(20, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5596 self.assertEqual(24, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5597 im = GetImage(_REMOTE, '/instances/%s/rendered?width=10&height=24' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5598 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5599 self.assertEqual(10, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5600 self.assertEqual(12, im.size[1])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5601 im = GetImage(_REMOTE, '/instances/%s/rendered?width=40&height=24' % i)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5602 self.assertEqual("L", im.mode)
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5603 self.assertEqual(20, im.size[0])
8d63d035b837 test_rendered
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 264
diff changeset
5604 self.assertEqual(24, im.size[1])
268
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5605
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5606
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5607 def test_bitbucket_issue_154(self):
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5608 # "Matching against list of UID-s by C-MOVE"
319
de6e73e4df60 leaving bitbucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 318
diff changeset
5609 # 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
5610 a = UploadInstance(_REMOTE, 'Issue154-d1.dcm') ['ID']
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5611 b = UploadInstance(_REMOTE, 'Issue154-d2.dcm') ['ID']
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5612
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5613 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
5614 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
5615 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
5616
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5617 # C-FIND is working on list of UIDs
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5618 i = CallFindScu([ '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5619 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5620 '-k', 'SeriesInstanceUID=%s\\%s' % (series1, series2) ])
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5621 series = re.findall('\(0020,000e\).*?\[(.*?)\]', i)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5622 self.assertEqual(2, len(series))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5623 self.assertTrue(series1 in series)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5624 self.assertTrue(series2 in series)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5625
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5626 # Individual retrieval is working in Orthanc < 1.6.0
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5627 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5628 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5629 '--study', '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5630 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5631 '-k', 'SeriesInstanceUID=%s' % series1,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5632 ])))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5633 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5634 '--study', '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5635 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5636 '-k', 'SeriesInstanceUID=%s' % series2,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5637 ])))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5638 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5639
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5640 DropOrthanc(_LOCAL)
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5641
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5642 # 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
5643 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5644 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5645 '--study', '-k', 'QueryRetrieveLevel=SERIES',
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5646 '-k', 'StudyInstanceUID=%s' % study,
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5647 '-k', 'SeriesInstanceUID=%s\\%s' % (series1, series2),
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5648 ])))
c8d79d8258cd test_bitbucket_issue_154
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 267
diff changeset
5649 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
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
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5652 def test_storage_commitment_api(self):
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5653 # 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
5654
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5655 def WaitTransaction(uid):
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5656 while True:
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5657 s = DoGet(_REMOTE, '/storage-commitment/%s' % uid)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5658 if s['Status'] != 'Pending':
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5659 return s
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5660 else:
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
5661 time.sleep(0.01)
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5662
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5663 instance = UploadInstance(_REMOTE, 'DummyCT.dcm')
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5664 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
5665 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
5666
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5667 # Against self
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5668 transaction = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5669 "DicomInstances" : [ [ sopClassUid, sopInstanceUid ] ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5670 }) ['ID']
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5671 self.assertTrue(transaction.startswith('2.25.'))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5672
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5673 result = WaitTransaction(transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5674 self.assertEqual('ORTHANC', result['RemoteAET'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5675 self.assertEqual('Success', result['Status'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5676 self.assertEqual(1, len(result['Success']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5677 self.assertEqual(0, len(result['Failures']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5678 self.assertEqual(sopClassUid, result['Success'][0]['SOPClassUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5679 self.assertEqual(sopInstanceUid, result['Success'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5680
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5681 tmp = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5682 "DicomInstances" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5683 { 'SOPClassUID' : sopClassUid,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5684 'SOPInstanceUID' : sopInstanceUid },
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5685 ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5686 })
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5687 self.assertEqual(tmp['Path'], '/storage-commitment/%s' % tmp['ID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5688 self.assertEqual(result, WaitTransaction(transaction))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5689
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5690 tmp = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5691 "Resources" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5692 instance['ID'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5693 instance['ParentSeries'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5694 instance['ParentStudy'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5695 instance['ParentPatient'],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5696 ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5697 })
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5698 self.assertEqual(tmp['Path'], '/storage-commitment/%s' % tmp['ID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5699 self.assertEqual(result, WaitTransaction(transaction))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5700
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5701
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5702 transaction = DoPost(_REMOTE, '/modalities/self/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5703 "DicomInstances" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5704 [ 'nope', 'nope2' ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5705 [ sopClassUid, sopInstanceUid ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5706 ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5707 }) ['ID']
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5708 self.assertTrue(transaction.startswith('2.25.'))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5709
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5710 result = WaitTransaction(transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5711 self.assertEqual('ORTHANC', result['RemoteAET'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5712 self.assertEqual('Failure', result['Status'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5713 self.assertEqual(1, len(result['Success']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5714 self.assertEqual(1, len(result['Failures']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5715 self.assertEqual(sopClassUid, result['Success'][0]['SOPClassUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5716 self.assertEqual(sopInstanceUid, result['Success'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5717 self.assertEqual('nope', result['Failures'][0]['SOPClassUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5718 self.assertEqual('nope2', result['Failures'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5719 self.assertEqual(274, result['Failures'][0]['FailureReason'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5720
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5721 # Cannot remove items from a failed storage commitment transaction
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5722 self.assertRaises(Exception, lambda:
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5723 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5724
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5725
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5726 # 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
5727 self.assertRaises(Exception, lambda:
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5728 DoPost(_REMOTE, '/modalities/orthanctest/storage-commitment', {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5729 "DicomInstances" : [
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5730 [ sopClassUid, sopInstanceUid ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5731 ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 280
diff changeset
5732 }))
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5733
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5734
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5735
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5736 def test_storage_commitment_store(self):
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5737 # 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
5738
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5739 def WaitTransaction(uid):
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5740 while True:
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5741 s = DoGet(_REMOTE, '/storage-commitment/%s' % uid)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5742 if s['Status'] != 'Pending':
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5743 return s
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5744 else:
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
5745 time.sleep(0.01)
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5746
279
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5747 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID']
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5748 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5749 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5750
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5751 # 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
5752 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
5753 'Resources' : [ i ],
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5754 'StorageCommitment' : True,
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5755 }))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5756
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5757 j = DoPost(_REMOTE, '/modalities/orthanctest/store', {
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5758 'Resources' : [ i ],
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5759 'StorageCommitment' : False,
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5760 })
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5761 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5762
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5763 j = DoPost(_REMOTE, '/modalities/self/store', {
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5764 'Resources' : [ i ],
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5765 'StorageCommitment' : True,
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5766 })
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5767
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5768 transaction = j['StorageCommitmentTransactionUID']
31e1e49df380 starting tests for storage commitment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 269
diff changeset
5769 self.assertTrue(transaction.startswith('2.25.'))
280
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5770
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5771 result = WaitTransaction(transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5772 self.assertEqual('ORTHANC', result['RemoteAET'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5773 self.assertEqual('Success', result['Status'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5774 self.assertEqual(1, len(result['Success']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5775 self.assertEqual(0, len(result['Failures']))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5776 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
5777 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
5778 result['Success'][0]['SOPInstanceUID'])
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5779
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5780 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5781 DoPost(_REMOTE, '/storage-commitment/%s/remove' % transaction)
5daa3896981c testing storage commitment reports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
5782 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
285
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5783
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5784
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5785 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
5786 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5787 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5788
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5789 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5790 dicom = f.read()
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5791
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5792 self.assertRaises(Exception, lambda: DoPost(
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5793 _REMOTE, '/modalities/orthanctest/store-straight', 'nope', 'nope'))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5794
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5795 answer = DoPost(_REMOTE, '/modalities/orthanctest/store-straight', dicom, 'nope')
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5796
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5797 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
5798 answer['SOPClassUID'])
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5799 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
5800 answer['SOPInstanceUID'])
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5801
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5802 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
281a32ecc5c1 test_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 281
diff changeset
5803 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
289
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5804
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5805
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5806 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
5807 # Add a RLE-encoded DICOM file
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5808 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
5809 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5810 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5811 rleSize = len(DoGet(_REMOTE, '/instances/%s/file' % i))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5812
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5813 # Export the instance, with transcoding: "_REMOTE" is the
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5814 # Orthanc server being tested
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5815 try:
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5816 DoDelete(_REMOTE, '/modalities/toto')
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5817 except:
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5818 pass
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5819
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5820 params = DoGet(_REMOTE, '/modalities?expand') ['orthanctest']
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5821 DoPut(_REMOTE, '/modalities/toto', params)
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5822 DoPost(_REMOTE, '/modalities/toto/store', str(i), 'text/plain')
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5823 j = DoGet(_LOCAL, '/instances')
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5824 self.assertEqual(1, len(j))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5825 uncompressedSize = len(DoGet(_LOCAL, '/instances/%s/file' % j[0]))
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5826 self.assertTrue(uncompressedSize > rleSize / 2)
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5827
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5828 # Export, with transcoding disabled => this fails
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5829 params['AllowTranscoding'] = False
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5830 DoPut(_REMOTE, '/modalities/toto', params)
4a70411ac9ad test_storescu_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 285
diff changeset
5831 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
5832 DoDelete(_REMOTE, '/modalities/toto')
290
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5833
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5834
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5835 def test_bitbucket_issue_169(self):
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5836 with open(GetDatabasePath('Issue169.dcm.bz2'), 'rb') as f:
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5837 dicom = bz2.decompress(f.read())
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5838
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5839 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
5840
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5841 self.assertEqual(44350560, len(dicom))
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5842 i = DoPost(_REMOTE, '/instances', dicom, 'application/dicom') ['ID']
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5843
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5844 tags = DoGet(_REMOTE, '/instances/%s/tags' % i)
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5845 self.assertEqual('NORMAL', tags['1337,1001']['Value'])
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5846
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5847 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5848 DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain')
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5849 j = DoGet(_LOCAL, '/instances')
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5850 self.assertEqual(1, len(j))
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5851
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5852 # 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
5853 # 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
5854 # Little Endian" (1.2.840.10008.1.2)
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5855 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5856 DoGet(_LOCAL, '/instances/%s/file' % j[0])))
290
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5857
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5858 # 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
5859 # because of this transcoding
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5860 tags = DoGet(_LOCAL, '/instances/%s/tags' % j[0])
b5333f87065b test_bitbucket_issue_169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
5861 self.assertEqual('NORMAL', tags['1337,1001']['Value'])
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5862
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5863
302
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
5864 def test_modify_transcode_instance(self):
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5865 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5866 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5867 DoGet(_REMOTE, '/instances/%s/file' % i)))
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5868
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5869 a = ExtractDicomTags(DoGet(_REMOTE, '/instances/%s/file' % i), [ 'SOPInstanceUID' ]) [0]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5870 self.assertTrue(len(a) > 20)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5871
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5872 SYNTAXES = [
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5873 '1.2.840.10008.1.2',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5874 '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
5875 #'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
5876 '1.2.840.10008.1.2.2',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5877 '1.2.840.10008.1.2.4.50',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5878 '1.2.840.10008.1.2.4.51',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5879 '1.2.840.10008.1.2.4.57',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5880 '1.2.840.10008.1.2.4.70',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5881 ]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5882
304
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 302
diff changeset
5883 if HasGdcmPlugin(_REMOTE):
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5884 SYNTAXES = SYNTAXES + [
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5885 '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
5886 '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
5887 '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
5888 '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
5889 ]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5890
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5891 for syntax in SYNTAXES:
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5892 transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, {
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5893 'Transcode' : syntax,
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5894 'Keep' : [ 'SOPInstanceUID' ],
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5895 'Force' : True,
291
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5896 })
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5897
cfa785074c64 test_modify_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 290
diff changeset
5898 self.assertEqual(syntax, GetTransferSyntax(transcoded))
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5899
299
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5900 b = ExtractDicomTags(transcoded, [ 'SOPInstanceUID' ]) [0]
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5901 self.assertTrue(len(b) > 20)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5902 if syntax in [ '1.2.840.10008.1.2.4.50',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5903 '1.2.840.10008.1.2.4.51',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5904 '1.2.840.10008.1.2.4.81',
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5905 '1.2.840.10008.1.2.4.91' ]:
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5906 # Lossy transcoding: The SOP instance UID must have changed
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5907 self.assertNotEqual(a, b)
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5908 else:
c2144cf4bd83 HasGdcmPlugin() test
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 293
diff changeset
5909 self.assertEqual(a, b)
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5910
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5911 def test_archive_transcode(self):
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5912 info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5913
293
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5914 # GET on "/media"
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5915 z = GetArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'])
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5916 self.assertEqual(2, len(z.namelist()))
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5917 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
5918
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5919 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
5920
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5921 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
5922 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
5923
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5924 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
5925 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
5926
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5927 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
5928 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
5929
293
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5930
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5931 # POST on "/media"
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5932 self.assertRaises(Exception, lambda: PostArchive(
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5933 _REMOTE, '/patients/%s/media' % info['ParentPatient'], { 'Transcode' : 'nope' }))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5934
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5935 z = PostArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5936 'Transcode' : '1.2.840.10008.1.2.4.50',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5937 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5938 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
5939
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5940 z = PostArchive(_REMOTE, '/studies/%s/media' % info['ParentStudy'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5941 'Transcode' : '1.2.840.10008.1.2.4.51',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5942 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5943 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
5944
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5945 z = PostArchive(_REMOTE, '/series/%s/media' % info['ParentSeries'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5946 'Transcode' : '1.2.840.10008.1.2.4.57',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5947 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5948 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
5949
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5950
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5951 # GET on "/archive"
292
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5952 z = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'])
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5953 self.assertEqual(1, len(z.namelist()))
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5954 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
5955
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5956 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
5957
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5958 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
5959 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
5960
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5961 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
5962 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
5963
e1827a4f5d3b test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 291
diff changeset
5964 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
5965 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
5966
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5967
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5968 # POST on "/archive"
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5969 self.assertRaises(Exception, lambda: PostArchive(
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5970 _REMOTE, '/patients/%s/archive' % info['ParentPatient'], { 'Transcode' : 'nope' }))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5971
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5972 z = PostArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5973 'Transcode' : '1.2.840.10008.1.2.4.50',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5974 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5975 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
5976
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5977 z = PostArchive(_REMOTE, '/studies/%s/archive' % info['ParentStudy'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5978 'Transcode' : '1.2.840.10008.1.2.4.51',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5979 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5980 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
5981
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5982 z = PostArchive(_REMOTE, '/series/%s/archive' % info['ParentSeries'], {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5983 'Transcode' : '1.2.840.10008.1.2.4.57',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5984 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5985 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
5986
293
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5987
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5988 # "/tools/create-*"
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5989 z = PostArchive(_REMOTE, '/tools/create-archive', {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5990 'Resources' : [ info['ParentStudy'] ],
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5991 'Transcode' : '1.2.840.10008.1.2.4.50',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5992 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5993 self.assertEqual(1, len(z.namelist()))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5994 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
5995
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5996 z = PostArchive(_REMOTE, '/tools/create-media', {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5997 'Resources' : [ info['ParentStudy'] ],
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5998 'Transcode' : '1.2.840.10008.1.2.4.51',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
5999 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6000 self.assertEqual(2, len(z.namelist()))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6001 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
6002
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6003 z = PostArchive(_REMOTE, '/tools/create-media-extended', {
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6004 'Resources' : [ info['ParentStudy'] ],
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6005 'Transcode' : '1.2.840.10008.1.2.4.57',
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6006 })
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6007 self.assertEqual(2, len(z.namelist()))
032722c3e919 extended test_archive_transcode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 292
diff changeset
6008 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
6009
308
2565d39dd36c integration mainline->c-get
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 307 305
diff changeset
6010
301
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6011 def test_modify_keep_source(self):
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6012 # 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
6013 i = UploadInstance(_REMOTE, 'DummyCT.dcm')
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6014 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6015
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6016 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6017 'Replace' : {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6018 'StationName' : 'TEST',
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6019 },
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6020 'KeepSource' : True,
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6021 })
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6022
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6023 s = DoGet(_REMOTE, '/studies')
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6024 self.assertEqual(2, len(s))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6025 self.assertTrue(i['ParentStudy'] in s)
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6026 self.assertTrue(j['ID'] in s)
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6027
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6028 DoDelete(_REMOTE, '/studies/%s' % j['ID'])
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6029 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6030
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6031 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6032 'Replace' : {
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6033 'StationName' : 'TEST',
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6034 },
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6035 'KeepSource' : False,
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6036 })
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6037
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6038 s = DoGet(_REMOTE, '/studies')
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6039 self.assertEqual(1, len(s))
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6040 self.assertFalse(i['ParentStudy'] in s)
6652d5720a45 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 300
diff changeset
6041 self.assertTrue(j['ID'] in s)
302
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6042
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6043
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6044 def test_modify_transcode_study(self):
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6045 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6046 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
6047 DoGet(_REMOTE, '/instances/%s/file' % i['ID'])))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6048
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6049 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6050 j = DoPost(_REMOTE, '/studies/%s/modify' % i['ParentStudy'], {
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6051 'Transcode' : '1.2.840.10008.1.2.4.50',
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6052 'KeepSource' : False
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6053 })
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6054
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6055 k = DoGet(_REMOTE, '/instances')
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6056 self.assertEqual(1, len(k))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6057 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
6058 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
6059 DoGet(_REMOTE, '/instances/%s/file' % k[0])))
22b6dd0f8c84 test_modify_transcode_study
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 301
diff changeset
6060
305
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6061
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6062 def test_store_peer_transcoding(self):
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6063 i = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')['ID']
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6064
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6065 SYNTAXES = [
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6066 '1.2.840.10008.1.2',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6067 '1.2.840.10008.1.2.1',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6068 #'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
6069 '1.2.840.10008.1.2.2',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6070 '1.2.840.10008.1.2.4.50',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6071 '1.2.840.10008.1.2.4.51',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6072 '1.2.840.10008.1.2.4.57',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6073 '1.2.840.10008.1.2.4.70',
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6074 ]
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6075
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6076 if HasGdcmPlugin(_REMOTE):
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6077 SYNTAXES = SYNTAXES + [
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6078 '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
6079 '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
6080 '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
6081 '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
6082 ]
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6083
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6084 for syntax in SYNTAXES:
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6085 body = {
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6086 'Resources' : [ i ],
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6087 }
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6088
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6089 if syntax != '1.2.840.10008.1.2.1':
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6090 body['Transcode'] = syntax
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6091
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6092 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6093 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6094 DoPost(_REMOTE, '/peers/peer/store', body, 'text/plain')
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6095 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6096 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6097 self.assertEqual(syntax, GetTransferSyntax(
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6098 DoGet(_LOCAL, '/instances/%s/file' % DoGet(_LOCAL, '/instances') [0])))
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6099
ed20ead1a8b6 test_store_peer_transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 304
diff changeset
6100 DropOrthanc(_LOCAL)
308
2565d39dd36c integration mainline->c-get
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 307 305
diff changeset
6101
2565d39dd36c integration mainline->c-get
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 307 305
diff changeset
6102
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6103 def test_getscu(self):
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6104 def CleanTarget():
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6105 if os.path.isdir('/tmp/GETSCU'):
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6106 shutil.rmtree('/tmp/GETSCU')
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6107 os.makedirs('/tmp/GETSCU')
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6108
306
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6109 env = {}
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6110 if _DOCKER:
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6111 # 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
6112 # and running in a GNU/Linux distribution running DCMTK
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6113 # 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
6114 env['DCMDICTPATH'] = '/usr/share/libdcmtk2/dicom.dic'
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6115
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6116 # no transcoding required
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6117 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6118
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6119 CleanTarget()
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6120
306
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6121 subprocess.check_call([
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6122 FindExecutable('getscu'),
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6123 _REMOTE['Server'],
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6124 str(_REMOTE['DicomPort']),
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6125 '-aec', 'ORTHANC',
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6126 '-aet', 'ORTHANCTEST', # pretend to be the other orthanc
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6127 '-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
6128 '-k', '0008,0052=STUDY',
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6129 '--output-directory', '/tmp/GETSCU/'
da2be3ff2db5 fix getscu binaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 296
diff changeset
6130 ], env = env)
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6131
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6132 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
6133 self.assertTrue(os.path.isfile(f1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6134 with open(f1, 'rb') as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6135 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read()))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6136
307
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6137 CleanTarget()
295
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6138
946b2199f481 added test for c-get
Alain Mazy <alain@mazy.be>
parents: 285
diff changeset
6139 # transcoding required
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6140 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
6141
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6142 subprocess.check_call([
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6143 FindExecutable('getscu'),
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6144 _REMOTE['Server'],
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6145 str(_REMOTE['DicomPort']),
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6146 '-aec', 'ORTHANC',
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6147 '-aet', 'ORTHANCTEST', # pretend to be the other orthanc
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6148 '-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
6149 '-k', '0008,0052=STUDY',
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6150 '--output-directory', '/tmp/GETSCU/'
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6151 ], env = env)
5be63aef39b1 fix test_getscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 306
diff changeset
6152
311
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6153 self.assertTrue(os.path.isfile(f1))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6154 with open(f1, 'rb') as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6155 self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read()))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6156
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6157 # 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
6158 # (LittleEndianExplicit is proposed by default by "getscu")
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6159 f2 = '/tmp/GETSCU/US.1.2.840.113663.1298.1.3.715.20000329.1115326'
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6160 self.assertTrue(os.path.isfile(f2))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6161 with open(f2, 'rb') as f:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 308
diff changeset
6162 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
6163
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6164
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6165 def test_findscu_truncation(self):
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6166 # https://groups.google.com/forum/#!msg/orthanc-users/FkckWAHvso8/UbRBAhQ5CwAJ
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6167 # Fixed by: https://hg.orthanc-server.com/orthanc/rev/2724977419fb
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6168 UploadInstance(_REMOTE, 'Multiframe.dcm')
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6169 UploadInstance(_REMOTE, 'ColorTestImageJ.dcm')
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6170
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6171 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
6172
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6173 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k', 'StudyInstanceUID' ])
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6174 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i)
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6175 self.assertEqual(2, len(result))
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6176
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6177 # 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
6178 # study, leading to a string of 249 characters
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6179 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k',
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6180 'StudyInstanceUID=%s\\%s\\%s\\%s\\%s' % (( study, ) * 5) ])
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6181 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i)
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6182 self.assertEqual(1, len(result))
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6183
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6184 # 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
6185 # study, leading to a string of 299 characters. In Orthanc <=
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6186 # 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
6187 # == 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
6188 # 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
6189 # "StudyInstanceUID" and returns all the available
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6190 # 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
6191 i = CallFindScu([ '-k', '0008,0052=STUDY', '-k',
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6192 'StudyInstanceUID=%s\\%s\\%s\\%s\\%s\\%s' % (( study, ) * 6) ])
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6193 result = re.findall('\(0020,000d\).*?\[(.*?)\]', i)
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6194 self.assertEqual(1, len(result))
328
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6195
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6196
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6197 def test_store_compressed(self):
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6198 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6199 dicom = f.read()
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6200 i = DoPost(_REMOTE, '/instances', dicom) ['ID']
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6201 sourceSize = len(dicom)
324
6164d39399ad test_findscu_truncation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 323
diff changeset
6202
328
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6203 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6204 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6205
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6206 # 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
6207 jobId = MonitorJob2(_REMOTE, lambda: DoPost(
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6208 _REMOTE, '/peers/peer/store', {
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6209 'Resources' : [ i ],
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6210 'Synchronous' : False,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6211 }))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6212
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6213 job = DoGet(_REMOTE, '/jobs/%s' % jobId)
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6214 self.assertFalse(job['Content']['Compress'])
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6215 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
6216 self.assertEqual(str(sourceSize), job['Content']['Size'])
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6217
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6218 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6219 DropOrthanc(_LOCAL)
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6220
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6221 # 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
6222 # Not supported by Orthanc 0.8.6 => failure
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6223 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/peers/peer/store', {
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6224 'Resources' : [ i ],
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6225 'Compress' : True,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6226 }))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6227 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6228
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6229 # Sending to the tested remote server, with compression: OK
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6230 jobId = MonitorJob2(_REMOTE, lambda: DoPost(
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6231 _REMOTE, '/peers/self/store', {
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6232 'Resources' : [ i ],
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6233 'Compress' : True,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6234 'Synchronous' : False,
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6235 }))
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6236
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6237 job = DoGet(_REMOTE, '/jobs/%s' % jobId)
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6238 self.assertTrue(job['Content']['Compress'])
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6239
8a462f9c5a97 test_store_compressed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 327
diff changeset
6240 # 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
6241 self.assertLess(int(job['Content']['Size']), sourceSize / 2)
332
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6242
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6243
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6244 def test_move_ambra(self):
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6245 # "Orthanc + Ambra: Query/Retrieve" (2020-08-25)
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6246 # 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
6247
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6248 UploadInstance(_REMOTE, '2019-06-17-VedranZdesic.dcm')
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6249
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6250 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6251 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6252 '-k', 'StudyInstanceUID='
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6253 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6254
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6255 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6256 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6257 '-k', 'AccessionNumber=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6258 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6259
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6260 self.assertFalse(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6261 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6262 '-k', 'AccessionNumber=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6263 '-k', 'StudyInstanceUID='
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6264 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6265
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6266 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6267 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6268 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6269 '-k', 'AccessionNumber=CT16000988',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6270 '-k', 'StudyInstanceUID=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6271 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6272 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6273 DropOrthanc(_LOCAL)
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6274
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6275 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6276 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6277 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6278 '-k', 'AccessionNumber=CT16000988',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6279 '-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
6280 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6281 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6282 DropOrthanc(_LOCAL)
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6283
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6284 # This fails on Orthanc <= 1.7.3
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6285 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6286 self.assertTrue(MonitorJob(_REMOTE, lambda: CallMoveScu([
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6287 '--study',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6288 '-k', 'AccessionNumber=',
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6289 '-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
6290 ])))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6291 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
dc41bfa4bda5 test_move_ambra
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 328
diff changeset
6292 DropOrthanc(_LOCAL)
333
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6293
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6294
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6295 def test_decode_elscint(self):
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6296 # 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
6297 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
6298 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
6299
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6300 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % a)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6301 self.assertEqual("L", im.mode)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6302 self.assertEqual(512, im.size[0])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6303 self.assertEqual(512, im.size[1])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6304
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6305 im = GetImage(_REMOTE, '/instances/%s/frames/0/preview' % b)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6306 self.assertEqual("L", im.mode)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6307 self.assertEqual(512, im.size[0])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6308 self.assertEqual(512, im.size[1])
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6309
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6310 # The two tests below fail on Orthanc <= 1.7.3
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6311 raw = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % a)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6312 self.assertEqual(512 * 512 * 2, len(raw))
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6313
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6314 raw = DoGet(_REMOTE, '/instances/%s/frames/0/raw' % b)
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6315 self.assertEqual(512 * 512 * 2, len(raw))
695be643b0f4 test_decode_elscint
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 332
diff changeset
6316
334
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6317
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6318 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
6319 # 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
6320 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
6321 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
6322
335
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6323 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
6324 modalitiesInStudy = re.findall('\(0008,0061\).*?\[(.*?)\]', i)
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6325 self.assertEqual(1, len(modalitiesInStudy))
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6326 self.assertEqual('CT\\PT ', modalitiesInStudy[0])
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6327
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6328 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
6329 # 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
6330 # 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
6331
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6332 if i in [ 'UX', 'UX\\MR' ]:
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6333 expected = 0
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6334 else:
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6335 expected = 1
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6336
334
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6337 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study',
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6338 'Query' : { 'ModalitiesInStudy' : i }})
335
96718de2f29c simplification and fix of test_incoming_findscu
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 334
diff changeset
6339 self.assertEqual(expected, len(a))
334
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6340
971ff285302b test_rest_modalities_in_study_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 333
diff changeset
6341 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
6342 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
6343 self.assertEqual(expected, len(studyInstanceUid))
337
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6344
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6345
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6346 def test_webdav(self):
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6347 self.assertRaises(Exception, lambda: DoPropFind(_REMOTE, '/webdav/', 2))
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6348
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6349 for suffix in [ '', '/' ]:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6350 f = DoPropFind(_REMOTE, '/webdav' + suffix, 0)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6351 self.assertEqual(1, len(f))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6352 self.assertTrue('/webdav/' in f.keys())
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6353 self.assertTrue(f['/webdav/']['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6354 self.assertEqual('webdav', f['/webdav/']['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6355
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6356 f = DoPropFind(_REMOTE, '/webdav' + suffix, 1)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6357 self.assertEqual(6, len(f))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6358 self.assertTrue(f['/webdav/']['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6359 self.assertEqual('webdav', f['/webdav/']['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6360
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6361 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
6362 self.assertTrue(f['/webdav/%s' % i]['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6363 self.assertEqual(i, f['/webdav/%s' % i]['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6364
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6365 for depth in [ 0, 1 ]:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6366 for suffix2 in [ '', '/' ]:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6367 g = DoPropFind(_REMOTE, '/webdav/%s%s' % (i, suffix2), depth)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6368
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6369 if i == 'uploads':
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6370 # Empty folders might still exist in "/uploads/"
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6371 self.assertTrue('/webdav/uploads/' in g)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6372 self.assertEqual('uploads', g['/webdav/uploads/']['displayname'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6373 for j in g.items():
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6374 self.assertTrue(g.items()[0][1]['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6375 else:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6376 self.assertEqual(1, len(g))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6377 self.assertEqual('/webdav/%s/' % i, g.items()[0][0])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6378 self.assertTrue(g.items()[0][1]['folder'])
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6379 self.assertEqual(i, g.items()[0][1]['displayname'])
341
66a36befb208 extending Toolbox.DoPropFind()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 337
diff changeset
6380
342
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6381 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6382 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6383 DoPut(_REMOTE, '/webdav/uploads/dummy', f.read(), 'text/plain')
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6384
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6385 while len(DoGet(_REMOTE, '/patients')) == 0:
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6386 time.sleep(0.01)
bf8369ea3ff1 more tests of webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 341
diff changeset
6387 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
337
ec13ace43bde trying webdav tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 335
diff changeset
6388
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6389
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6390 def test_log_categories(self):
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6391 original = DoGet(_REMOTE, '/tools/log-level-http')
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6392
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6393 DoPut(_REMOTE, '/tools/log-level-http', 'default')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6394 self.assertEqual('default', DoGet(_REMOTE, '/tools/log-level-http'))
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6395 DoGet(_REMOTE, '/system')
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6396
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6397 DoPut(_REMOTE, '/tools/log-level-http', 'verbose')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6398 self.assertEqual('verbose', DoGet(_REMOTE, '/tools/log-level-http'))
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6399 DoGet(_REMOTE, '/system')
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6400
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6401 DoPut(_REMOTE, '/tools/log-level-http', 'trace')
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6402 self.assertEqual('trace', DoGet(_REMOTE, '/tools/log-level-http'))
349
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6403 DoGet(_REMOTE, '/system')
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6404
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6405 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
6406
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6407 # Switch back to the original log level
350
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6408 DoPut(_REMOTE, '/tools/log-level-http', original)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6409
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 349
diff changeset
6410 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
6411 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
6412
698898a93a10 test_log_categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 348
diff changeset
6413 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
6414
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6415
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6416 def test_upload_zip(self):
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6417 f = StringIO()
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6418 with zipfile.ZipFile(f, 'w') as z:
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6419 z.writestr('hello/world/invalid.txt', 'Hello world')
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6420 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as g:
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6421 c = g.read()
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6422 z.writestr('hello/world/dicom1.dcm', c)
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6423 z.writestr('hello/world/dicom2.dcm', c)
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6424
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6425 f.seek(0)
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6426 i = DoPost(_REMOTE, '/instances', f.read())
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6427
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6428 self.assertEqual(2, len(i))
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6429 self.assertEqual(i[0], i[1])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6430 self.assertEqual(6, len(i[0]))
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6431 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', i[0]['ID'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6432 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', i[0]['ParentSeries'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6433 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', i[0]['ParentStudy'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6434 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', i[0]['ParentPatient'])
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6435 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
6436
18597ca05e48 test_upload_zip
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 355
diff changeset
6437 # 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
6438 self.assertEqual('Success', i[0]['Status'])
361
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6439
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6440
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6441 def test_transfer_syntax_no_metaheader(self):
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6442 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
6443 m = DoGet(_REMOTE, '/instances/%s/metadata?expand' % a)
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6444 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
6445
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6446 # This fails on Orthanc <= 1.8.1
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6447 self.assertTrue('TransferSyntax' in m)
6cf5cc4d0a99 test_transfer_syntax_no_metaheader
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
6448 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
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 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
6452 # 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
6453
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6454 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
6455 return (('--%s\r\n' +
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6456 '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
6457 '\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
6458
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6459 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
6460 dcm1 = f.read()
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 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
6463 dcm2 = f.read()
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6464
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6465 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
6466
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6467 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ'
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6468 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
6469 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
6470 '--' + boundary + '--'), headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6471 '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
6472 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6473 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6474
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6475 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
6476
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6477
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6478 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
6479 # 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
6480 # 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
6481 # "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
6482
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6483 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
6484 return (('--%s\r\n' +
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6485 '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
6486 '\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
6487
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6488 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
6489 dcm = f.read()
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6490
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6491 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
6492 dcm2 = f.read()
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6493
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6494 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ'
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6495
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6496 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
6497 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6498 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
6499 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6500 '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
6501 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6502 '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
6503 '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
6504 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6505
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6506 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
6507 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6508 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
6509 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6510 '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
6511 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6512 '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
6513 '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
6514 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6515 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
6516
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6517 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6518 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
6519 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6520 '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
6521 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6522 '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
6523 '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
6524 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6525
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6526 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
6527
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6528 # 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
6529 m = DoPost(_REMOTE, '/instances',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6530 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
6531 headers = {
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6532 '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
6533 'X-Requested-With' : 'XMLHttpRequest',
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6534 '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
6535 '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
6536 })
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6537
2cc40121c3a8 test_upload_multipart_1 and test_upload_multipart_2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 363
diff changeset
6538 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
377
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6539
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6540
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6541 def test_pixel_data_offset(self):
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6542 # New in Orthanc 1.9.1
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6543 def Check(path, offset):
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6544 i = UploadInstance(_REMOTE, path) ['ID']
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6545 metadata = DoGetRaw(_REMOTE, '/instances/%s/metadata/PixelDataOffset' % i) [1]
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6546 self.assertEqual(offset, metadata)
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6547
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6548 Check('ColorTestMalaterre.dcm', str(0x03a0))
cc79fa4945da test_pixel_data_offset
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 374
diff changeset
6549 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
6550 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
6551 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
6552 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
6553 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
6554 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
6555 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
6556 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
6557 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
6558 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
6559 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
6560 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
6561
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6562
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6563 def test_peer_store_straight(self):
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6564 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports']))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6565 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports']))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6566
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6567 peer = DoGet(_REMOTE, '/peers/peer/system')
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6568 self.assertEqual(3, len(peer))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6569 self.assertEqual(5, peer['DatabaseVersion'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6570 self.assertEqual('MyOrthanc', peer['Name'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6571 self.assertEqual('0.8.6', peer['Version'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6572
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6573 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6574 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
6575
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6576 # 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
6577 # "ParentStudy", "ParentSeries" are not reported
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6578 self.assertEqual(3, len(j))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6579 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
6580 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
6581 self.assertEqual('Success', j['Status'])
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6582
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6583 self.assertEqual(1, len(DoGet(_LOCAL, '/patients')))
a8dd562943a7 added test_peer_store_straight
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
6584 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
383
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6585
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6586
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6587 def test_cp246(self):
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6588 # This fails on Orthanc <= 1.9.0
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6589 a = UploadInstance(_REMOTE, '2021-02-19-MalaterreCP246.dcm')['ID']
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6590 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6591
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6592 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % a)
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6593 self.assertEqual('1.2.840.10008.5.1.4.1.1.128', tags['0008,0016'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6594 self.assertEqual('1.3.12.2.1107.5.1.4.36085.2.0.517715415141633', tags['0008,0018'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6595 self.assertEqual('1.2.840.113745.101000.1008000.38179.6792.6324567', tags['0020,000d'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6596 self.assertEqual('1.3.12.2.1107.5.1.4.36085.2.0.517714246252254', tags['0020,000e'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6597
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6598 study = DoGet(_REMOTE, '/instances/%s/study' % a)
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6599 self.assertEqual(tags['0020,000d'], study['MainDicomTags']['StudyInstanceUID'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6600
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6601 series = DoGet(_REMOTE, '/instances/%s/series' % a)
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6602 self.assertEqual(tags['0020,000e'], series['MainDicomTags']['SeriesInstanceUID'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6603
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6604 instance = DoGet(_REMOTE, '/instances/%s' % a)
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6605 self.assertEqual(tags['0008,0018'], instance['MainDicomTags']['SOPInstanceUID'])
05d0d0c2623c added test_cp246
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 382
diff changeset
6606
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6607
392
5cbcb4a83b41 fix for revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 391
diff changeset
6608 def test_revisions_metadata(self):
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6609 # This test fails on Orthanc <= 1.9.1 (support for revisions
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6610 # was introduced in 1.9.2), or if configuration option
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6611 # "CheckRevisions" is "False". Conventions for HTTP headers
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6612 # related to revisions mimic CouchDB:
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6613 # https://docs.couchdb.org/en/stable/api/document/common.html
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6614 i = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6615
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6616 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6617 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6618 self.assertEqual('"0-%s"' % ComputeMD5('1.2.840.10008.1.2.4.70'), headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6619 self.assertEqual('1.2.840.10008.1.2.4.70', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6620
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6621 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6622 'If-None-Match' : '"aaa"'
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6623 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6624 self.assertEqual('400', headers['status']) # Bad header format
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6625
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6626 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6627 'If-None-Match' : '"aaa-bbb"'
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6628 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6629 self.assertEqual('400', headers['status']) # Bad header format
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6630
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6631 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6632 'If-None-Match' : '"0-16de4d7060d0b9d102ef0fca8acc892a"'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6633 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6634 self.assertEqual('304', headers['status']) # Not modified
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6635 self.assertEqual('"0-16de4d7060d0b9d102ef0fca8acc892a"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6636 self.assertEqual('', body) # Body must be empty on 304 status
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6637
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6638 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6639 'If-None-Match' : '"1-16de4d7060d0b9d102ef0fca8acc892a"' # Bad revision, good MD5
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6640 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6641 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6642 self.assertEqual('"0-16de4d7060d0b9d102ef0fca8acc892a"', headers['etag'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6643 self.assertEqual('1.2.840.10008.1.2.4.70', body)
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6644
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6645 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6646 'If-None-Match' : '"0-aaa"' # Good revision, bad MD5
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6647 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6648 self.assertEqual('200', headers['status'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6649 self.assertEqual('"0-16de4d7060d0b9d102ef0fca8acc892a"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6650 self.assertEqual('1.2.840.10008.1.2.4.70', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6651
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6652 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6653 self.assertEqual('403', headers['status']) # Forbidden (system metadata)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6654
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6655 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, 'hello')
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6656 self.assertEqual('403', headers['status']) # Forbidden (system metadata)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6657
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6658 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello')
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6659 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6660 self.assertEqual('"0-%s"' % ComputeMD5('hello'), headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6661
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6662 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6663 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6664 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6665 self.assertEqual('hello', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6666
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6667 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6668 'If-None-Match' : '"0-5d41402abc4b2a76b9719d911017c592"'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6669 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6670 self.assertEqual('304', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6671 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6672 self.assertEqual('', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6673
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6674 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6675 'If-None-Match' : '"1-tata"'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6676 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6677 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6678 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6679 self.assertEqual('hello', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6680 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/metadata/1024' % i))
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6681
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6682 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6683 self.assertEqual('409', headers['status']) # No revision given, but "CheckRevisions" is True
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6684
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6685 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6686 'If-Match' : '45-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6687 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6688 self.assertEqual('409', headers['status']) # Conflict, as bad revision
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6689
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6690 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6691 'If-Match' : '0-tata'
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6692 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6693 self.assertEqual('409', headers['status']) # Conflict, as bad MD5
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6694
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6695 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6696 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6697 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6698 self.assertEqual('200', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6699
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6700 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6701 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6702 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6703 self.assertEqual('404', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6704
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6705 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6706 self.assertEqual('404', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6707
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6708 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata/1024' % i))
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6709
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6710 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello')
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6711 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6712 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6713
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6714 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello')
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6715 self.assertEqual('409', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6716
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6717 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6718 'If-None-Match' : '"0-5d41402abc4b2a76b9719d911017c592"'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6719 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6720 self.assertEqual('304', headers['status']) # Not modified
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6721 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6722 self.assertEqual('', body) # Body must be empty on 304 status
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6723
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6724 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6725 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6726 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6727 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6728 self.assertEqual('"1-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6729 self.assertEqual('', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6730
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6731 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = {
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6732 'If-None-Match' : headers['etag']
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6733 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6734
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6735 if headers['status'] == '200':
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6736 print("Your database backend doesn't store revisions")
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6737 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6738 'If-Match' : '1-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6739 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6740 self.assertEqual('409', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6741
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6742 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6743 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6744 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6745 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6746 self.assertEqual('"1-6e809cbda0732ac4845916a59016f954"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6747 self.assertEqual('', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6748
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6749 elif headers['status'] == '304': # Revisions are supported
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6750 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6751 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6752 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6753 self.assertEqual('409', headers['status'])
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6754
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6755 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6756 'If-Match' : '1-5d41402abc4b2a76b9719d911017c592'
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6757 })
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6758 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6759 self.assertEqual('"2-6e809cbda0732ac4845916a59016f954"', headers['etag'])
391
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6760 self.assertEqual('', body)
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6761
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6762 else:
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6763 raise Exception('Internal error')
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6764
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6765 self.assertEqual('hello2', DoGet(_REMOTE, '/instances/%s/metadata/1024' % i))
227d9a932467 testing revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 390
diff changeset
6766
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6767
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6768 def test_revisions_attachments(self):
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6769 # This test fails on Orthanc <= 1.9.1 (support for revisions
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6770 # was introduced in 1.9.2), or if configuration option
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6771 # "CheckRevisions" is "False". Conventions for HTTP headers
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6772 # related to revisions mimic CouchDB:
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6773 # https://docs.couchdb.org/en/stable/api/document/common.html
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6774 i = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6775
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6776 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6777 md5 = ComputeMD5(f.read())
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6778
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6779 # "/compress", "/uncompress" and "/verify-md5" are POST
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6780 # methods, and are not affected by revisions
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6781 for suffix in [ '', '/compressed-data', '/compressed-md5', '/compressed-size',
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6782 '/data', '/is-compressed', '/md5', '/size' ]:
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6783 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/%s' % (i, suffix))
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6784 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6785 self.assertEqual('"0-%s"' % md5, headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6786
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6787 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/%s' % (i, suffix), headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6788 'If-None-Match' : '"0-3e29b869978b6db4886355a2b1132124"',
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6789 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6790 self.assertEqual('304', headers['status']) # Not modified
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6791 self.assertEqual('"0-3e29b869978b6db4886355a2b1132124"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6792 self.assertEqual('', body) # Body must be empty on 304 status
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6793
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6794 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/%s' % (i, suffix), headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6795 'If-None-Match' : '"tata"', # Invalid header
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6796 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6797 self.assertEqual('400', headers['status'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6798
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6799 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/%s' % (i, suffix), headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6800 'If-None-Match' : '"1-%s"' % md5, # Bad revision, good MD5
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6801 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6802 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6803 self.assertEqual('"0-3e29b869978b6db4886355a2b1132124"', headers['etag'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6804
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6805 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/%s' % (i, suffix), headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6806 'If-None-Match' : '"0-tata"' # Good revision, bad MD5
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6807 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6808 self.assertEqual('200', headers['status'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6809 self.assertEqual('"0-3e29b869978b6db4886355a2b1132124"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6810
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6811 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/attachments/dicom' % i)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6812 self.assertEqual('403', headers['status']) # Forbidden (system metadata)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6813
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6814 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/dicom' % i, 'hello')
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6815 self.assertEqual('403', headers['status']) # Forbidden (system metadata)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6816
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6817 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello')
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6818 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6819 self.assertEqual('"0-%s"' % ComputeMD5('hello'), headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6820
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6821 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6822 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6823 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6824 self.assertEqual('hello', body)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6825
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6826 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6827 'If-None-Match' : '"0-5d41402abc4b2a76b9719d911017c592"'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6828 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6829 self.assertEqual('304', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6830 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6831 self.assertEqual('', body)
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6832
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6833 for h in [ '"1-5d41402abc4b2a76b9719d911017c592"', # Bad revision, good MD5
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6834 '"0-tata"']: # Good revision, bad MD5
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6835 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i, headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6836 'If-None-Match' : h
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6837 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6838 self.assertEqual('200', headers['status'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6839 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6840 self.assertEqual('hello', body)
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6841
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6842 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6843 'If-None-Match' : 'tata' # Bad header format
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6844 })
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6845 self.assertEqual('400', headers['status'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6846 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6847
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6848 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/attachments/1024/data' % i))
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6849
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6850 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/attachments/1024' % i)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6851 self.assertEqual('409', headers['status']) # No revision given, but "CheckRevisions" is True
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6852
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6853 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/attachments/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6854 'If-Match' : '45-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6855 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6856 self.assertEqual('409', headers['status']) # Conflict, as bad revision
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6857
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6858 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/attachments/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6859 'If-Match' : '0-tata'
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6860 })
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6861 self.assertEqual('409', headers['status']) # Conflict, as bad MD5
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6862
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6863 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/attachments/1024' % i, headers = {
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6864 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6865 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6866 self.assertEqual('200', headers['status'])
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6867
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6868 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/attachments/1024' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6869 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6870 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6871 self.assertEqual('404', headers['status'])
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6872
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6873 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6874 self.assertEqual('404', headers['status'])
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6875
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6876 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/attachments/1024' % i))
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6877
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6878 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello')
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6879 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6880 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6881
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6882 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello')
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6883 self.assertEqual('409', headers['status'])
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6884
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6885 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i, headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6886 'If-None-Match' : '"0-5d41402abc4b2a76b9719d911017c592"'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6887 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6888 self.assertEqual('304', headers['status']) # Not modified
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6889 self.assertEqual('"0-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6890 self.assertEqual('', body) # Body must be empty on 304 status
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6891
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6892 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6893 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6894 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6895 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6896 self.assertEqual('"1-5d41402abc4b2a76b9719d911017c592"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6897 self.assertEqual('{}', body)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6898
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6899 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/attachments/1024/data' % i, headers = {
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6900 'If-None-Match' : headers['etag']
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6901 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6902
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6903 if headers['status'] == '200':
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6904 print("Your database backend doesn't store revisions")
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6905 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6906 'If-Match' : '1-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6907 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6908 self.assertEqual('409', headers['status'])
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6909
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6910 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6911 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6912 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6913 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6914 self.assertEqual('"1-6e809cbda0732ac4845916a59016f954"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6915 self.assertEqual('{}', body)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6916
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6917 elif headers['status'] == '304': # Revisions are supported
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6918 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6919 'If-Match' : '0-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6920 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6921 self.assertEqual('409', headers['status'])
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6922
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6923 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/attachments/1024' % i, 'hello2', headers = {
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6924 'If-Match' : '1-5d41402abc4b2a76b9719d911017c592'
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6925 })
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6926 self.assertEqual('200', headers['status'])
397
eb87ec525b53 "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 394
diff changeset
6927 self.assertEqual('"2-6e809cbda0732ac4845916a59016f954"', headers['etag'])
393
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6928 self.assertEqual('{}', body)
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6929
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6930 else:
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6931 raise Exception('Internal error')
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6932
3019306499c5 test_revisions_attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 392
diff changeset
6933 self.assertEqual('hello2', DoGet(_REMOTE, '/instances/%s/attachments/1024/data' % i))
399
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6934
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6935
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6936 def test_issue_195(self):
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6937 # This fails on Orthanc <= 1.9.2
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6938 # https://bugs.orthanc-server.com/show_bug.cgi?id=195
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6939 a = UploadInstance(_REMOTE, 'Issue195.dcm')['ID']
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6940 b = DoGet(_REMOTE, '/instances/%s/file' % a,
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6941 headers = { 'Accept' : 'application/dicom+json' })
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6942
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6943 # The expected result can be found by typing "dcm2json Database/Issue195.dcm"
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6944 self.assertEqual(5, len(b))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6945 self.assertEqual(2, len(b["00080018"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6946 self.assertEqual("UI", b["00080018"]["vr"])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6947 self.assertEqual("1.2.276.0.7230010.3.1.4.8323329.13188.1620309604.848735",
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6948 b["00080018"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6949
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6950 self.assertEqual(2, len(b["0020000D"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6951 self.assertEqual("UI", b["0020000D"]["vr"])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6952 self.assertEqual("1.2.276.0.7230010.3.1.2.8323329.13188.1620309604.848733",
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6953 b["0020000D"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6954
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6955 self.assertEqual(2, len(b["0020000E"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6956 self.assertEqual("UI", b["0020000E"]["vr"])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6957 self.assertEqual("1.2.276.0.7230010.3.1.3.8323329.13188.1620309604.848734",
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6958 b["0020000E"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6959
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6960 self.assertEqual(1, len(b["00081030"])) # Case of an empty value
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6961 self.assertEqual("LO", b["00081030"]["vr"])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6962
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6963 self.assertEqual(2, len(b["0008103E"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6964 self.assertEqual("LO", b["0008103E"]["vr"])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6965 self.assertEqual("Hello1", b["0008103E"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6966
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6967 a = UploadInstance(_REMOTE, 'Issue195-bis.dcm')['ID']
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6968 b = DoGet(_REMOTE, '/instances/%s/file' % a,
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6969 headers = { 'Accept' : 'application/dicom+json' })
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6970
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6971 # The expected result can be found by typing "dcm2json Database/Issue195-bis.dcm"
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6972 self.assertEqual(5, len(b))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6973 self.assertEqual(2, len(b["00080018"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6974 self.assertEqual("UI", b["00080018"]["vr"])
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6975 self.assertEqual("1.2.276.0.7230010.3.1.4.8323329.6792.1625504071.652470",
399
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6976 b["00080018"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6977
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6978 self.assertEqual(2, len(b["0020000D"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6979 self.assertEqual("UI", b["0020000D"]["vr"])
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6980 self.assertEqual("1.2.276.0.7230010.3.1.2.8323329.6792.1625504071.652468",
399
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6981 b["0020000D"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6982
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6983 self.assertEqual(2, len(b["0020000E"]))
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6984 self.assertEqual("UI", b["0020000E"]["vr"])
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6985 self.assertEqual("1.2.276.0.7230010.3.1.3.8323329.6792.1625504071.652469",
399
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6986 b["0020000E"]["Value"][0])
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6987
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6988 self.assertEqual(2, len(b["00084567"]))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6989 self.assertEqual("UN", b["00084567"]["vr"])
399
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6990
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6991 # NB: "QgA=" corresponds to the base64 encoding of (uint16_t) 0x42 in little endian:
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6992 # $ echo -n 'QgA=' | base64 -d | hexdump -C
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6993 self.assertEqual("QgA=", b["00084567"]["InlineBinary"])
399
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6994
dd519677974d integration tests for issue 195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 397
diff changeset
6995 # Case of an empty value, fails in Orthanc <= 1.9.2 because of issue #195
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6996 self.assertEqual(1, len(b["00084565"]))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
6997 self.assertEqual("UN", b["00084565"]["vr"])
402
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
6998
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
6999
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7000 def test_modify_attribute(self):
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7001 # This fails on Orthanc <= 1.9.3 (not implemented)
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7002 # https://groups.google.com/g/orthanc-users/c/1pzCqT-ByXg/m/VyIGK5i5BgAJ
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7003 i = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7004
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7005 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % i)
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7006 self.assertFalse('0020,9165' in tags)
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7007
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7008 i = DoPost(_REMOTE, '/studies/b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0/modify', {
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7009 "Replace": {
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7010 "0020,9165": "0020,9056",
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7011 }
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7012 })
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7013 instances = DoGet(_REMOTE, '/studies/%s/instances' % i['ID'])
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7014 self.assertEqual(1, len(instances))
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7015
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7016 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % instances[0]['ID'])
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7017 self.assertTrue('0020,9165' in tags)
cc947ddc57c5 test_modify_attribute
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 399
diff changeset
7018 self.assertEqual('0020,9056', tags['0020,9165'])
405
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7019
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7020
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7021 def test_issue_146(self):
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7022 # "Update Anonyization to 2019c"
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7023 # https://bugs.orthanc-server.com/show_bug.cgi?id=146
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7024
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7025 def GetTags(study, params):
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7026 a = DoPost(_REMOTE, '/studies/%s/anonymize' % study, params) ['ID']
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7027 b = DoGet(_REMOTE, '/studies/%s/instances' % a)
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7028 self.assertEqual(1, len(b))
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7029 return DoGet(_REMOTE, '/instances/%s/tags?short' % b[0]['ID'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7030
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7031
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7032 UploadInstance(_REMOTE, 'Issue146.dcm')
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7033 study = '7c950970-321e4ab0-28446c5f-f94850f1-5c44634b'
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7034
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7035 self.assertRaises(Exception, lambda: GetTags(study, { 'DicomVersion' : 'nope' }))
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7036
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7037 tags2008 = GetTags(study, { 'DicomVersion' : '2008' })
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7038 tags2017c = GetTags(study, { 'DicomVersion' : '2017c' })
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7039 tags2021b = GetTags(study, { 'DicomVersion' : '2021b' })
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7040 tagsDefault = GetTags(study, {})
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7041
420
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 419
diff changeset
7042 orthancVersion = DoGet(_REMOTE, '/system') ['Version']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 419
diff changeset
7043 self.assertEqual('Orthanc %s - PS 3.15-2008 Table E.1-1' % orthancVersion, tags2008['0012,0063'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 419
diff changeset
7044 self.assertEqual('Orthanc %s - PS 3.15-2017c Table E.1-1 Basic Profile' % orthancVersion, tags2017c['0012,0063'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 419
diff changeset
7045 self.assertEqual('Orthanc %s - PS 3.15-2021b Table E.1-1 Basic Profile' % orthancVersion, tags2021b['0012,0063'])
405
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7046 self.assertEqual(tagsDefault['0012,0063'], tags2021b['0012,0063'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7047
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7048 for t in [ tags2008, tags2017c, tags2021b, tagsDefault ]:
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7049 self.assertTrue(t['0010,0010'].startswith('Anonymized'))
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7050 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', t['0008,0016'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7051 self.assertEqual(36, len(t['0010,0020'])) # Length of a UUID
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7052 self.assertEqual('YES', t['0012,0062'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7053
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7054 for t in [ tags2008 ]:
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7055 self.assertEqual('20200101', t['0008,0020'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7056
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7057 for t in [ tags2017c, tags2021b, tagsDefault ]:
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7058 self.assertEqual('', t['0008,0020']) # Study Date, anonymized between 2008 and 2017c
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7059
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7060 for t in [ tags2008, tags2017c ]:
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7061 self.assertEqual('HELLO^C', t['0050,0020'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7062 self.assertEqual('HELLO^D', t['3006,0002'])
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7063
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7064 for t in [ tags2021b, tagsDefault ]:
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7065 self.assertFalse('0050,0020' in t) # Device Description, anonymized between 2017c and 2019c
6bbc89c2c2d1 test_issue_146
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 403
diff changeset
7066 self.assertEqual('', t['3006,0002']) # StructureSetLabel, anonymized between 2019c and 2021b
406
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7067
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7068
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7069 def test_anonymize_relationships_6(self):
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7070 # 2020-10-20 (Salim Kanoun): "I think I have hit an
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7071 # anonymization issue for the tag 0008,1250. This tags is a
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7072 # sequence containing StudyUID / Series UID of related series.
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7073 # [After anonymization,] this tag keep a reference of the
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7074 # original Study/Series UID.
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7075 # https://groups.google.com/g/orthanc-users/c/T0IokiActrI/m/L9K0vfscAAAJ
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7076 UploadInstance(_REMOTE, '2020-11-16-SalimKanounAnonymization.dcm')
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7077
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7078 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % DoGet(_REMOTE, '/instances') [0])
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7079 self.assertEqual('1.2.840.113619.6.95.31.0.3.4.1.3175.13.6054282',
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7080 tags['0008,1250'][0]['0020,000d'])
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7081 self.assertEqual('1.3.12.2.1107.5.1.4.11047.30000019111306043635400005028',
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7082 tags['0008,1250'][0]['0020,000e'])
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7083
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7084 a = DoGet(_REMOTE, '/studies')
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7085 self.assertEqual(1, len(a))
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7086 b = DoPost(_REMOTE, '/studies/%s/anonymize' % a[0], {}) ['ID']
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7087
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7088 c = DoGet(_REMOTE, '/studies/%s/instances' % b)
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7089 self.assertEqual(1, len(c))
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7090 tags = DoGet(_REMOTE, '/instances/%s/tags?short' % c[0]['ID'])
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7091
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7092 # In Orthanc <= 1.9.3, the two tests below failed
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7093 self.assertNotEqual('1.2.840.113619.6.95.31.0.3.4.1.3175.13.6054282',
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7094 tags['0008,1250'][0]['0020,000d'])
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7095 self.assertNotEqual('1.3.12.2.1107.5.1.4.11047.30000019111306043635400005028',
62ee5e57ee05 test_anonymize_relationships_6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 405
diff changeset
7096 tags['0008,1250'][0]['0020,000e'])
407
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7097
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7098
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7099 def test_modify_subsequences(self):
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7100 # New in Orthanc 1.9.4 (cf. LSD-629)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7101 UploadInstance(_REMOTE, 'Issue22-NoPixelData.dcm')
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7102 studies = DoGet(_REMOTE, '/studies')
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7103 self.assertEqual(1, len(studies))
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7104
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7105 def GetTags(study):
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7106 instances = DoGet(_REMOTE, '/studies/%s/instances' % study)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7107 self.assertEqual(1, len(instances))
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7108 return DoGet(_REMOTE, '/instances/%s/tags?short' % instances[0]['ID'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7109
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7110 tags1 = GetTags(studies[0])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7111
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7112 a = DoPost(_REMOTE, '/studies/%s/modify' % studies[0], {
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7113 'Replace' : {
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7114 'PatientName' : 'Hello1',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7115 'DimensionIndexSequence[1].DimensionDescriptionLabel' : 'Hello2',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7116 'DimensionIndexSequence[*].PatientName' : 'Hello3',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7117 'ReferencedImageEvidenceSequence[2].ReferencedSeriesSequence[0].ReferencedSOPSequence[0].ReferencedSOPInstanceUID' : 'Hello4',
408
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7118 'DimensionOrganizationSequence[0].DimensionOrganizationUID' : '1.2.3.4',
407
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7119 },
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7120 'Remove' : [
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7121 'ReferencedPerformedProcedureStepSequence',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7122 'PerformedProtocolCodeSequence[0].CodeValue',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7123 'SharedFunctionalGroupsSequence[*].ReferencedImageSequence[*].ReferencedSOPInstanceUID',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7124 'SharedFunctionalGroupsSequence[*].ReferencedImageSequence[1].ReferencedSOPClassUID',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7125 'SharedFunctionalGroupsSequence[2].ReferencedImageSequence', # Inexistent tag
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7126 ]
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7127 })
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7128 tags2 = GetTags(a['ID'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7129
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7130 self.assertEqual('Anonymized1', tags1['0010,0010'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7131 self.assertEqual('Hello1', tags2['0010,0010'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7132
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7133 self.assertEqual('Stack ID', tags1['0020,9222'][0]['0020,9421'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7134 self.assertEqual('In-Stack Position Number', tags1['0020,9222'][1]['0020,9421'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7135 self.assertEqual('Stack ID', tags2['0020,9222'][0]['0020,9421'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7136 self.assertEqual('Hello2', tags2['0020,9222'][1]['0020,9421'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7137
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7138 for i in range(3):
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7139 self.assertFalse('0010,0010' in tags1['0020,9222'][i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7140 self.assertEqual('Hello3', tags2['0020,9222'][i]['0010,0010'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7141
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7142 self.assertEqual('1.3.46.670589.11.22237.5.20.1.1.7512.2014100814064168452',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7143 tags1['0008,9092'][2]['0008,1115'][0]['0008,1199'][0]['0008,1155'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7144 self.assertEqual('Hello4',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7145 tags2['0008,9092'][2]['0008,1115'][0]['0008,1199'][0]['0008,1155'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7146 self.assertEqual(tags1['0008,9092'][1]['0008,1115'][0]['0008,1199'][0]['0008,1155'],
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7147 tags2['0008,9092'][1]['0008,1115'][0]['0008,1199'][0]['0008,1155'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7148
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7149 self.assertTrue('0008,1111' in tags1)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7150 self.assertFalse('0008,1111' in tags2)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7151 self.assertTrue('0008,0100' in tags1['0040,0260'][0])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7152 self.assertFalse('0008,0100' in tags2['0040,0260'][0])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7153
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7154 for i in range(3):
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7155 self.assertTrue('0008,1155' in tags1['5200,9229'][0]['0008,1140'][i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7156 self.assertFalse('0008,1155' in tags2['5200,9229'][0]['0008,1140'][i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7157 self.assertTrue('0008,1150' in tags1['5200,9229'][0]['0008,1140'][i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7158
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7159 self.assertTrue('0008,1150' in tags2['5200,9229'][0]['0008,1140'][0])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7160 self.assertFalse('0008,1150' in tags2['5200,9229'][0]['0008,1140'][1])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7161 self.assertTrue('0008,1150' in tags2['5200,9229'][0]['0008,1140'][2])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7162
408
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7163 self.assertEqual('1.3.46.670589.11.22237.5.0.11272.2014100816243076000',
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7164 tags1['0020,9221'][0]['0020,9164'])
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7165 self.assertEqual('1.2.3.4', tags2['0020,9221'][0]['0020,9164'])
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7166
407
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7167 a = DoPost(_REMOTE, '/studies/%s/anonymize' % studies[0], {
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7168 'Replace' : {
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7169 'DimensionIndexSequence[1].DimensionDescriptionLabel' : 'Hello1',
408
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7170 'DimensionOrganizationSequence[0].DimensionOrganizationUID' : '1.2.3.4',
407
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7171 },
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7172 'Remove' : [
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7173 'SharedFunctionalGroupsSequence[*].ReferencedImageSequence[*].ReferencedSOPInstanceUID', # 5200,9229
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7174 ],
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7175 'Keep' : [
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7176 'ReferencedImageEvidenceSequence', # 0008,9092
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7177 'DimensionIndexSequence', # 0020,9222
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7178 'PerFrameFunctionalGroupsSequence[*].2005,140f[*].SOPInstanceUID', # 5200,9230
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7179 '(5200,9230)[*].2005,140f[*].(0008,0023)', # Compatibility with Orthanc 1.9.4
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7180 '(5200,9230)[*].2005,140f[*].(0008,0033)', # Compatibility with Orthanc 1.9.4
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7181 ],
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7182 'KeepPrivateTags' : True # Compatibility with Orthanc 1.9.4
407
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7183 })
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7184 tags3 = GetTags(a['ID'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7185
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7186 # UIDs
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7187 for i in [ '0008,0018',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7188 '0010,0020',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7189 '0008,0018',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7190 '0010,0020' ]:
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7191 self.assertNotEqual(tags1[i], tags3[i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7192
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7193 self.assertNotEqual(tags1['0020,9221'][0]['0020,9164'],
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7194 tags3['0020,9221'][0]['0020,9164'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7195
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7196 self.assertNotEqual(tags1['5200,9229'][0]['2005,140e'][0]['0008,0014'],
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7197 tags3['5200,9229'][0]['2005,140e'][0]['0008,0014'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7198
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7199 # http://dicom.nema.org/medical/dicom/current/output/chtml/part15/chapter_E.html#table_E.1-1
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7200 # Removals (X)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7201 for i in [ '0008,0021',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7202 '0008,002a',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7203 '0008,0031',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7204 '0008,1030',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7205 '0008,103e',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7206 '0008,1111',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7207 '0010,21c0',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7208 '0040,0006',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7209 '0040,0241',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7210 '0040,0244',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7211 '0040,0245',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7212 '0040,0250',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7213 '0040,0251',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7214 '0040,0253',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7215 '0040,0254',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7216 '0040,0555',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7217 ]:
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7218 self.assertTrue(i in tags1)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7219 self.assertFalse(i in tags3)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7220
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7221 # Clearings (Z)
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7222 for i in [ '0008,0020',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7223 '0008,0023',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7224 '0008,0030',
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7225 '0008,0033' ]:
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7226 self.assertNotEqual('', tags1[i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7227 self.assertEqual('', tags3[i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7228
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7229 # Replace
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7230 self.assertEqual('In-Stack Position Number', tags1['0020,9222'][1]['0020,9421'])
408
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7231 self.assertEqual('Hello1', tags3['0020,9222'][1]['0020,9421'])
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7232 self.assertEqual('1.2.3.4', tags3['0020,9221'][0]['0020,9164'])
4e0b9fddbc71 test "Replace" for UID in subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
7233
407
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7234 # "Keep" on DimensionIndexSequence
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7235 for i in range(3):
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7236 self.assertEqual(tags1['0020,9222'][i]['0020,9164'],
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7237 tags3['0020,9222'][i]['0020,9164'])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7238
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7239 # "Keep" on ReferencedImageEvidenceSequence
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7240 self.assertEqual(json.dumps(tags1['0008,9092']),
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7241 json.dumps(tags3['0008,9092']))
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7242
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7243 # "Keep" on PerFrameFunctionalGroupsSequence
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7244 self.assertEqual(json.dumps(tags1['5200,9230']),
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7245 json.dumps(tags3['5200,9230']))
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7246
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7247 # "Remove" on SharedFunctionalGroupsSequence
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7248 for i in range(3):
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7249 self.assertTrue('0008,1155' in tags1['5200,9229'][0]['0008,1140'][i])
ad98466353c6 test_modify_subsequences
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 406
diff changeset
7250 self.assertFalse('0008,1155' in tags3['5200,9229'][0]['0008,1140'][i])
410
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7251
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7252
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7253 def test_bulk_modify(self):
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7254 # New in Orthanc 1.9.4
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7255
411
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7256 def GetModified(lst, resourceType, expectedCount = None):
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7257 m = map(lambda x: x['ID'], filter(lambda x: x['Type'] == resourceType, lst['Resources']))
410
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7258 if expectedCount != None:
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7259 self.assertEqual(expectedCount, len(m))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7260 return m
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7261
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7262 instance = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7263 series = DoGet(_REMOTE, '/series') [0]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7264 study = DoGet(_REMOTE, '/studies') [0]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7265 patient = DoGet(_REMOTE, '/patients') [0]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7266
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7267 a = DoPost(_REMOTE, '/tools/bulk-modify', {
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7268 'Resources' : [ instance ]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7269 })
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7270
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7271 self.assertNotEqual(instance, GetModified(a, 'Instance', 1) [0])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7272 self.assertEqual(series, GetModified(a, 'Series', 1) [0])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7273 self.assertEqual(study, GetModified(a, 'Study', 1) [0])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7274 self.assertEqual(patient, GetModified(a, 'Patient', 1) [0])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7275
411
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7276 b = DoPost(_REMOTE, '/tools/bulk-anonymize', {
410
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7277 'Resources' : [ instance ]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7278 })
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7279
411
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7280 self.assertNotEqual(instance, GetModified(b, 'Instance', 1) [0])
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7281 self.assertNotEqual(series, GetModified(b, 'Series', 1) [0])
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7282 self.assertNotEqual(study, GetModified(b, 'Study', 1) [0])
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7283 self.assertNotEqual(patient, GetModified(b, 'Patient', 1) [0])
410
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7284
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7285 self.assertEqual(3, len(DoGet(_REMOTE, '/instances')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7286 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7287 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7288 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
411
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7289
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7290 DoPost(_REMOTE, '/tools/bulk-delete', {
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7291 'Resources' : GetModified(b, 'Patient', 1) + GetModified(a, 'Instance', 1)
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7292 })
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7293
410
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7294 knee1 = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') ['ID']
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7295 knee2 = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') ['ID']
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7296 brainix = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID']
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7297
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7298 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7299 self.assertEqual(4, len(DoGet(_REMOTE, '/series')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7300 self.assertEqual(3, len(DoGet(_REMOTE, '/studies')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7301 self.assertEqual(3, len(DoGet(_REMOTE, '/patients')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7302
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7303 a = DoPost(_REMOTE, '/tools/bulk-modify', {
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7304 'Resources' : [ knee1, brainix ]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7305 })
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7306
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7307 self.assertEqual(6, len(DoGet(_REMOTE, '/instances')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7308 self.assertEqual(4, len(DoGet(_REMOTE, '/series')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7309 self.assertEqual(3, len(DoGet(_REMOTE, '/studies')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7310 self.assertEqual(3, len(DoGet(_REMOTE, '/patients')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7311
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7312 for i in GetModified(a, 'Instance', 2):
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7313 self.assertTrue(not i in [ instance, knee1, knee2, brainix ])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7314 self.assertTrue(DoGet(_REMOTE, '/instances/%s/metadata/ModifiedFrom' % i) in [ knee1, brainix ])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7315
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7316 b = GetModified(a, 'Series', 2)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7317 self.assertTrue(DoGet(_REMOTE, '/instances/%s/series' % knee1) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7318 self.assertTrue(DoGet(_REMOTE, '/instances/%s/series' % brainix) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7319 self.assertFalse(DoGet(_REMOTE, '/instances/%s/series' % knee2) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7320 self.assertFalse(DoGet(_REMOTE, '/instances/%s/series' % instance) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7321
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7322 b = GetModified(a, 'Study', 2)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7323 self.assertTrue(DoGet(_REMOTE, '/instances/%s/study' % knee1) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7324 self.assertTrue(DoGet(_REMOTE, '/instances/%s/study' % brainix) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7325 self.assertTrue(DoGet(_REMOTE, '/instances/%s/study' % knee2) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7326 self.assertFalse(DoGet(_REMOTE, '/instances/%s/study' % instance) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7327
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7328 b = GetModified(a, 'Patient', 2)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7329 self.assertTrue(DoGet(_REMOTE, '/instances/%s/patient' % knee1) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7330 self.assertTrue(DoGet(_REMOTE, '/instances/%s/patient' % brainix) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7331 self.assertTrue(DoGet(_REMOTE, '/instances/%s/patient' % knee2) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7332 self.assertFalse(DoGet(_REMOTE, '/instances/%s/patient' % instance) ['ID'] in b)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7333
411
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7334 DoPost(_REMOTE, '/tools/bulk-delete', {
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7335 'Resources' : GetModified(a, 'Instance', 2)
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7336 })
410
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7337
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7338 sourceInstances = DoGet(_REMOTE, '/instances')
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7339 sourceSeries = DoGet(_REMOTE, '/series')
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7340 sourceStudies = DoGet(_REMOTE, '/studies')
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7341 sourcePatients = DoGet(_REMOTE, '/patients')
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7342 self.assertEqual(4, len(sourceInstances))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7343 self.assertEqual(4, len(sourceSeries))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7344 self.assertEqual(3, len(sourceStudies))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7345 self.assertEqual(3, len(sourcePatients))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7346
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7347 a = DoPost(_REMOTE, '/tools/bulk-anonymize', {
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7348 'Resources' : [ knee1, brainix ]
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7349 })
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7350
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7351 self.assertEqual(6, len(DoGet(_REMOTE, '/instances')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7352 self.assertEqual(6, len(DoGet(_REMOTE, '/series')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7353 self.assertEqual(5, len(DoGet(_REMOTE, '/studies')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7354 self.assertEqual(5, len(DoGet(_REMOTE, '/patients')))
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7355
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7356 for i in GetModified(a, 'Instance', 2):
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7357 self.assertFalse(i in sourceInstances)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7358 self.assertTrue(DoGet(_REMOTE, '/instances/%s/metadata/AnonymizedFrom' % i) in [ knee1, brainix ])
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7359
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7360 for i in GetModified(a, 'Series', 2):
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7361 self.assertFalse(i in sourceSeries)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7362 self.assertTrue(DoGet(_REMOTE, '/series/%s/metadata/AnonymizedFrom' % i) in sourceSeries)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7363
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7364 for i in GetModified(a, 'Study', 2):
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7365 self.assertFalse(i in sourceStudies)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7366 self.assertTrue(DoGet(_REMOTE, '/studies/%s/metadata/AnonymizedFrom' % i) in sourceStudies)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7367
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7368 for i in GetModified(a, 'Patient', 2):
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7369 self.assertFalse(i in sourcePatients)
d0c6afc1ff68 test_bulk_modify
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 408
diff changeset
7370 self.assertTrue(DoGet(_REMOTE, '/patients/%s/metadata/AnonymizedFrom' % i) in sourcePatients)
411
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7371
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7372 DoPost(_REMOTE, '/tools/bulk-delete', {
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7373 'Resources' : GetModified(a, 'Patient', 2)
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7374 })
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7375
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7376 self.assertEqual(4, len(DoGet(_REMOTE, '/instances')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7377 self.assertEqual(4, len(DoGet(_REMOTE, '/series')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7378 self.assertEqual(3, len(DoGet(_REMOTE, '/studies')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7379 self.assertEqual(3, len(DoGet(_REMOTE, '/patients')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7380
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7381 DoPost(_REMOTE, '/tools/bulk-delete', {
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7382 'Resources' : [ instance,
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7383 DoGet(_REMOTE, '/instances/%s/patient' % knee1) ['ID'],
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7384 DoGet(_REMOTE, '/instances/%s/series' % brainix) ['ID'] ]
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7385 })
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7386
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7387 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7388 self.assertEqual(0, len(DoGet(_REMOTE, '/series')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7389 self.assertEqual(0, len(DoGet(_REMOTE, '/studies')))
8cf866641fa7 testing bulk deletion
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 410
diff changeset
7390 self.assertEqual(0, len(DoGet(_REMOTE, '/patients')))
412
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7391
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7392
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7393 def test_dicom_to_json_format(self):
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7394 # Test new output formats for DICOM tags introduced in 1.9.4
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7395 instance = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7396 patient = DoGet(_REMOTE, '/instances/%s/patient' % instance) ['ID']
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7397 study = DoGet(_REMOTE, '/instances/%s/study' % instance) ['ID']
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7398 series = DoGet(_REMOTE, '/instances/%s/series' % instance) ['ID']
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7399
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7400 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/tags' % instance) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7401 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/tags?simplify' % instance) ['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7402 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/tags?short' % instance) ['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7403 self.assertEqual('PatientName', DoGet(_REMOTE, '/instances/%s/tags?full' % instance) ['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7404 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/tags?full' % instance) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7405 self.assertEqual('String', DoGet(_REMOTE, '/instances/%s/tags?full' % instance) ['0010,0010']['Type'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7406
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7407 # Test "GetInstanceHeader()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7408 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header' % instance) ['0002,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7409 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header?simplify' % instance) ['TransferSyntaxUID'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7410 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header?short' % instance) ['0002,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7411 self.assertEqual('TransferSyntaxUID', DoGet(_REMOTE, '/instances/%s/header?full' % instance) ['0002,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7412 self.assertEqual('1.2.840.10008.1.2.4.70', DoGet(_REMOTE, '/instances/%s/header?full' % instance) ['0002,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7413 self.assertEqual('String', DoGet(_REMOTE, '/instances/%s/header?full' % instance) ['0002,0010']['Type'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7414
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7415 # Test "ListResources()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7416 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients?expand') [0]['MainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7417 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients?expand&short') [0]['MainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7418 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients?expand&full') [0]['MainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7419 self.assertEqual('PatientName', DoGet(_REMOTE, '/patients?expand&full') [0]['MainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7420
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7421 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies?expand') [0]['PatientMainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7422 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies?expand&short') [0]['PatientMainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7423 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies?expand&full') [0]['PatientMainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7424 self.assertEqual('PatientName', DoGet(_REMOTE, '/studies?expand&full') [0]['PatientMainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7425
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7426 self.assertEqual('20070101', DoGet(_REMOTE, '/studies?expand') [0]['MainDicomTags']['StudyDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7427 self.assertEqual('20070101', DoGet(_REMOTE, '/studies?expand&short') [0]['MainDicomTags']['0008,0020'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7428 self.assertEqual('20070101', DoGet(_REMOTE, '/studies?expand&full') [0]['MainDicomTags']['0008,0020']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7429 self.assertEqual('StudyDate', DoGet(_REMOTE, '/studies?expand&full') [0]['MainDicomTags']['0008,0020']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7430
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7431 self.assertEqual('20070101', DoGet(_REMOTE, '/series?expand') [0]['MainDicomTags']['SeriesDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7432 self.assertEqual('20070101', DoGet(_REMOTE, '/series?expand&short') [0]['MainDicomTags']['0008,0021'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7433 self.assertEqual('20070101', DoGet(_REMOTE, '/series?expand&full') [0]['MainDicomTags']['0008,0021']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7434 self.assertEqual('SeriesDate', DoGet(_REMOTE, '/series?expand&full') [0]['MainDicomTags']['0008,0021']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7435
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7436 self.assertEqual('20070101', DoGet(_REMOTE, '/instances?expand') [0]['MainDicomTags']['InstanceCreationDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7437 self.assertEqual('20070101', DoGet(_REMOTE, '/instances?expand&short') [0]['MainDicomTags']['0008,0012'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7438 self.assertEqual('20070101', DoGet(_REMOTE, '/instances?expand&full') [0]['MainDicomTags']['0008,0012']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7439 self.assertEqual('InstanceCreationDate', DoGet(_REMOTE, '/instances?expand&full') [0]['MainDicomTags']['0008,0012']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7440
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7441 # Test "GetSingleResource()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7442 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s' % patient) ['MainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7443 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s?short' % patient) ['MainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7444 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s?full' % patient) ['MainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7445 self.assertEqual('PatientName', DoGet(_REMOTE, '/patients/%s?full' % patient) ['MainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7446
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7447 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s' % study) ['PatientMainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7448 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s?short' % study) ['PatientMainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7449 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s?full' % study) ['PatientMainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7450 self.assertEqual('PatientName', DoGet(_REMOTE, '/studies/%s?full' % study) ['PatientMainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7451
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7452 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s' % study) ['MainDicomTags']['StudyDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7453 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s?short' % study) ['MainDicomTags']['0008,0020'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7454 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s?full' % study) ['MainDicomTags']['0008,0020']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7455 self.assertEqual('StudyDate', DoGet(_REMOTE, '/studies/%s?full' % study) ['MainDicomTags']['0008,0020']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7456
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7457 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s' % series) ['MainDicomTags']['SeriesDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7458 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s?short' % series) ['MainDicomTags']['0008,0021'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7459 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s?full' % series) ['MainDicomTags']['0008,0021']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7460 self.assertEqual('SeriesDate', DoGet(_REMOTE, '/series/%s?full' % series) ['MainDicomTags']['0008,0021']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7461
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7462 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s' % instance) ['MainDicomTags']['InstanceCreationDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7463 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s?short' % instance) ['MainDicomTags']['0008,0012'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7464 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s?full' % instance) ['MainDicomTags']['0008,0012']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7465 self.assertEqual('InstanceCreationDate', DoGet(_REMOTE, '/instances/%s?full' % instance) ['MainDicomTags']['0008,0012']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7466
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7467 # Test "Find()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7468 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', 'Query' : {}, 'Expand' : True })
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7469 self.assertEqual('20070101', a[0]['MainDicomTags']['StudyDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7470 self.assertEqual('KNIX', a[0]['PatientMainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7471
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7472 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', 'Query' : {}, 'Expand' : True, 'Short' : True })
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7473 self.assertEqual('20070101', a[0]['MainDicomTags']['0008,0020'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7474 self.assertEqual('KNIX', a[0]['PatientMainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7475
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7476 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Study', 'Query' : {}, 'Expand' : True, 'Full' : True })
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7477 self.assertEqual('20070101', a[0]['MainDicomTags']['0008,0020']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7478 self.assertEqual('KNIX', a[0]['PatientMainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7479 self.assertEqual('StudyDate', a[0]['MainDicomTags']['0008,0020']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7480 self.assertEqual('PatientName', a[0]['PatientMainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7481
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7482 # Test "GetChildResources()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7483 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/studies' % patient) [0]['MainDicomTags']['StudyDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7484 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/studies?short' % patient) [0]['MainDicomTags']['0008,0020'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7485 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/studies?full' % patient) [0]['MainDicomTags']['0008,0020']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7486 self.assertEqual('StudyDate', DoGet(_REMOTE, '/patients/%s/studies?full' % patient) [0]['MainDicomTags']['0008,0020']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7487
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7488 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/series' % patient) [0]['MainDicomTags']['SeriesDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7489 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/series?short' % patient) [0]['MainDicomTags']['0008,0021'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7490 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/series?full' % patient) [0]['MainDicomTags']['0008,0021']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7491 self.assertEqual('SeriesDate', DoGet(_REMOTE, '/patients/%s/series?full' % patient) [0]['MainDicomTags']['0008,0021']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7492
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7493 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/instances' % patient) [0]['MainDicomTags']['InstanceCreationDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7494 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/instances?short' % patient) [0]['MainDicomTags']['0008,0012'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7495 self.assertEqual('20070101', DoGet(_REMOTE, '/patients/%s/instances?full' % patient) [0]['MainDicomTags']['0008,0012']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7496 self.assertEqual('InstanceCreationDate', DoGet(_REMOTE, '/patients/%s/instances?full' % patient) [0]['MainDicomTags']['0008,0012']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7497
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7498 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s/series' % study) [0]['MainDicomTags']['SeriesDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7499 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s/series?short' % study) [0]['MainDicomTags']['0008,0021'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7500 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s/series?full' % study) [0]['MainDicomTags']['0008,0021']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7501 self.assertEqual('SeriesDate', DoGet(_REMOTE, '/studies/%s/series?full' % study) [0]['MainDicomTags']['0008,0021']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7502
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7503 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s/instances' % study) [0]['MainDicomTags']['InstanceCreationDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7504 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s/instances?short' % study) [0]['MainDicomTags']['0008,0012'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7505 self.assertEqual('20070101', DoGet(_REMOTE, '/studies/%s/instances?full' % study) [0]['MainDicomTags']['0008,0012']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7506 self.assertEqual('InstanceCreationDate', DoGet(_REMOTE, '/studies/%s/instances?full' % study) [0]['MainDicomTags']['0008,0012']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7507
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7508 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s/instances' % series) [0]['MainDicomTags']['InstanceCreationDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7509 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s/instances?short' % series) [0]['MainDicomTags']['0008,0012'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7510 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s/instances?full' % series) [0]['MainDicomTags']['0008,0012']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7511 self.assertEqual('InstanceCreationDate', DoGet(_REMOTE, '/series/%s/instances?full' % series) [0]['MainDicomTags']['0008,0012']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7512
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7513 # Test "GetParentResource()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7514 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/patient' % instance) ['MainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7515 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/patient?short' % instance) ['MainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7516 self.assertEqual('KNIX', DoGet(_REMOTE, '/instances/%s/patient?full' % instance) ['MainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7517 self.assertEqual('PatientName', DoGet(_REMOTE, '/instances/%s/patient?full' % instance) ['MainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7518
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7519 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s/study' % instance) ['MainDicomTags']['StudyDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7520 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s/study?short' % instance) ['MainDicomTags']['0008,0020'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7521 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s/study?full' % instance) ['MainDicomTags']['0008,0020']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7522 self.assertEqual('StudyDate', DoGet(_REMOTE, '/instances/%s/study?full' % instance) ['MainDicomTags']['0008,0020']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7523
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7524 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s/series' % instance) ['MainDicomTags']['SeriesDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7525 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s/series?short' % instance) ['MainDicomTags']['0008,0021'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7526 self.assertEqual('20070101', DoGet(_REMOTE, '/instances/%s/series?full' % instance) ['MainDicomTags']['0008,0021']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7527 self.assertEqual('SeriesDate', DoGet(_REMOTE, '/instances/%s/series?full' % instance) ['MainDicomTags']['0008,0021']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7528
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7529 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/patient' % series) ['MainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7530 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/patient?short' % series) ['MainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7531 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/patient?full' % series) ['MainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7532 self.assertEqual('PatientName', DoGet(_REMOTE, '/series/%s/patient?full' % series) ['MainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7533
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7534 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s/study' % series) ['MainDicomTags']['StudyDate'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7535 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s/study?short' % series) ['MainDicomTags']['0008,0020'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7536 self.assertEqual('20070101', DoGet(_REMOTE, '/series/%s/study?full' % series) ['MainDicomTags']['0008,0020']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7537 self.assertEqual('StudyDate', DoGet(_REMOTE, '/series/%s/study?full' % series) ['MainDicomTags']['0008,0020']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7538
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7539 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/patient' % study) ['MainDicomTags']['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7540 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/patient?short' % study) ['MainDicomTags']['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7541 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/patient?full' % study) ['MainDicomTags']['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7542 self.assertEqual('PatientName', DoGet(_REMOTE, '/studies/%s/patient?full' % study) ['MainDicomTags']['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7543
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7544 # Test "GetChildInstancesTags()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7545 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/instances-tags?simplify' % patient) [instance]['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7546 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/instances-tags?short' % patient) [instance]['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7547 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/instances-tags' % patient) [instance]['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7548 self.assertEqual('PatientName', DoGet(_REMOTE, '/patients/%s/instances-tags' % patient) [instance]['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7549
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7550 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/instances-tags?simplify' % study) [instance]['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7551 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/instances-tags?short' % study) [instance]['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7552 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/instances-tags' % study) [instance]['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7553 self.assertEqual('PatientName', DoGet(_REMOTE, '/studies/%s/instances-tags' % study) [instance]['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7554
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7555 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/instances-tags?simplify' % series) [instance]['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7556 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/instances-tags?short' % series) [instance]['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7557 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/instances-tags' % series) [instance]['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7558 self.assertEqual('PatientName', DoGet(_REMOTE, '/series/%s/instances-tags' % series) [instance]['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7559
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7560 # Test "GetSharedTags()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7561 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/shared-tags?simplify' % patient) ['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7562 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/shared-tags?short' % patient) ['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7563 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/shared-tags' % patient) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7564 self.assertEqual('PatientName', DoGet(_REMOTE, '/patients/%s/shared-tags' % patient) ['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7565
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7566 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/shared-tags?simplify' % study) ['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7567 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/shared-tags?short' % study) ['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7568 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/shared-tags' % study) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7569 self.assertEqual('PatientName', DoGet(_REMOTE, '/studies/%s/shared-tags' % study) ['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7570
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7571 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/shared-tags?simplify' % series) ['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7572 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/shared-tags?short' % series) ['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7573 self.assertEqual('KNIX', DoGet(_REMOTE, '/series/%s/shared-tags' % series) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7574 self.assertEqual('PatientName', DoGet(_REMOTE, '/series/%s/shared-tags' % series) ['0010,0010']['Name'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7575
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7576 # Test "GetModule()" in "OrthancRestResources.cpp"
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7577 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/module' % patient) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7578 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/module?simplify' % patient) ['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7579 self.assertEqual('KNIX', DoGet(_REMOTE, '/patients/%s/module?short' % patient) ['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7580
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7581 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/module-patient' % study) ['0010,0010']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7582 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/module-patient?simplify' % study) ['PatientName'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7583 self.assertEqual('KNIX', DoGet(_REMOTE, '/studies/%s/module-patient?short' % study) ['0010,0010'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7584
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7585 self.assertEqual('Knee (R)', DoGet(_REMOTE, '/studies/%s/module' % study) ['0008,1030']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7586 self.assertEqual('Knee (R)', DoGet(_REMOTE, '/studies/%s/module?simplify' % study) ['StudyDescription'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7587 self.assertEqual('Knee (R)', DoGet(_REMOTE, '/studies/%s/module?short' % study) ['0008,1030'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7588
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7589 self.assertEqual('AX. FSE PD', DoGet(_REMOTE, '/series/%s/module' % series) ['0008,103e']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7590 self.assertEqual('AX. FSE PD', DoGet(_REMOTE, '/series/%s/module?simplify' % series) ['SeriesDescription'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7591 self.assertEqual('AX. FSE PD', DoGet(_REMOTE, '/series/%s/module?short' % series) ['0008,103e'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7592
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7593 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7594 DoGet(_REMOTE, '/instances/%s/module' % instance) ['0008,0018']['Value'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7595 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7596 DoGet(_REMOTE, '/instances/%s/module?simplify' % instance) ['SOPInstanceUID'])
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7597 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
cd9da28451cc test_dicom_to_json_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 411
diff changeset
7598 DoGet(_REMOTE, '/instances/%s/module?short' % instance) ['0008,0018'])
413
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7599
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7600 # Test "ListQueryAnswers()" in "OrthancRestModalities.cpp"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7601 a = DoPost(_REMOTE, '/modalities/self/query', { 'Level' : 'Study',
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7602 'Query' : { 'PatientID' : '*' }}) ['ID']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7603
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7604 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7605 self.assertEqual('ozp00SjY2xG', DoGet(_REMOTE, '/queries/%s/answers?expand' % a) [0]['0010,0020']['Value'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7606 self.assertEqual('PatientID', DoGet(_REMOTE, '/queries/%s/answers?expand' % a) [0]['0010,0020']['Name'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7607 self.assertEqual('ozp00SjY2xG', DoGet(_REMOTE, '/queries/%s/answers?expand&simplify' % a) [0]['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7608 self.assertEqual('ozp00SjY2xG', DoGet(_REMOTE, '/queries/%s/answers?expand&short' % a) [0]['0010,0020'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7609
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7610 # Test "GetQueryOneAnswer()" in "OrthancRestModalities.cpp"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7611 self.assertEqual('ozp00SjY2xG', DoGet(_REMOTE, '/queries/%s/answers/0/content' % a) ['0010,0020']['Value'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7612 self.assertEqual('PatientID', DoGet(_REMOTE, '/queries/%s/answers/0/content' % a) ['0010,0020']['Name'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7613 self.assertEqual('ozp00SjY2xG', DoGet(_REMOTE, '/queries/%s/answers/0/content?simplify' % a) ['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7614 self.assertEqual('ozp00SjY2xG', DoGet(_REMOTE, '/queries/%s/answers/0/content?short' % a) ['0010,0020'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7615
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7616 # Test "GetQueryArguments()" in "OrthancRestModalities.cpp"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7617 self.assertEqual('*', DoGet(_REMOTE, '/queries/%s/query' % a) ['0010,0020']['Value'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7618 self.assertEqual('PatientID', DoGet(_REMOTE, '/queries/%s/query' % a) ['0010,0020']['Name'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7619 self.assertEqual('*', DoGet(_REMOTE, '/queries/%s/query?simplify' % a) ['PatientID'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7620 self.assertEqual('*', DoGet(_REMOTE, '/queries/%s/query?short' % a) ['0010,0020'])
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 412
diff changeset
7621
414
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7622 # Test "BulkContent()" in "OrthancRestResources.cpp"
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7623 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ patient, study, series, instance ] })
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7624 self.assertEqual(4, len(a))
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7625 self.assertEqual('ozp00SjY2xG', a[0]['MainDicomTags']['PatientID'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7626 self.assertEqual('Knee (R)', a[1]['MainDicomTags']['StudyDescription'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7627 self.assertEqual('KNIX', a[1]['PatientMainDicomTags']['PatientName'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7628 self.assertEqual('AX. FSE PD', a[2]['MainDicomTags']['SeriesDescription'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7629 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7630 a[3]['MainDicomTags']['SOPInstanceUID'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7631
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7632 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ patient, study, series, instance ],
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7633 'Short': True })
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7634 self.assertEqual(4, len(a))
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7635 self.assertEqual('ozp00SjY2xG', a[0]['MainDicomTags']['0010,0020'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7636 self.assertEqual('Knee (R)', a[1]['MainDicomTags']['0008,1030'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7637 self.assertEqual('KNIX', a[1]['PatientMainDicomTags']['0010,0010'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7638 self.assertEqual('AX. FSE PD', a[2]['MainDicomTags']['0008,103e'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7639 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7640 a[3]['MainDicomTags']['0008,0018'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7641
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7642 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ patient, study, series, instance ],
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7643 'Full': True })
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7644 self.assertEqual(4, len(a))
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7645 self.assertEqual('ozp00SjY2xG', a[0]['MainDicomTags']['0010,0020']['Value'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7646 self.assertEqual('PatientID', a[0]['MainDicomTags']['0010,0020']['Name'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7647 self.assertEqual('Knee (R)', a[1]['MainDicomTags']['0008,1030']['Value'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7648 self.assertEqual('StudyDescription', a[1]['MainDicomTags']['0008,1030']['Name'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7649 self.assertEqual('KNIX', a[1]['PatientMainDicomTags']['0010,0010']['Value'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7650 self.assertEqual('PatientName', a[1]['PatientMainDicomTags']['0010,0010']['Name'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7651 self.assertEqual('AX. FSE PD', a[2]['MainDicomTags']['0008,103e']['Value'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7652 self.assertEqual('SeriesDescription', a[2]['MainDicomTags']['0008,103e']['Name'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7653 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109',
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7654 a[3]['MainDicomTags']['0008,0018']['Value'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7655 self.assertEqual('SOPInstanceUID', a[3]['MainDicomTags']['0008,0018']['Name'])
a2beea45a53d test /tools/bulk-content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 413
diff changeset
7656
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7657
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7658 def test_bulk_content(self):
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7659 # New in Orthanc 1.9.4
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7660 knee1 = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') ['ID']
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7661 knee2 = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') ['ID']
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7662 brainix = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID']
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7663
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7664 brainixHierarchy = [
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7665 DoGet(_REMOTE, '/instances/%s/patient' % brainix) ['ID'],
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7666 DoGet(_REMOTE, '/instances/%s/study' % brainix) ['ID'],
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7667 DoGet(_REMOTE, '/instances/%s/series' % brainix) ['ID'],
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7668 brainix,
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7669 ]
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7670
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7671 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : brainixHierarchy })
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7672 self.assertEqual(4, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7673 b = map(lambda x: x['ID'], a)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7674 for i in range(4):
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7675 self.assertEqual(brainixHierarchy[i], b[i])
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7676 self.assertTrue('Metadata' in a[i])
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7677
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7678 for (level, index) in [
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7679 ('Patient', 0),
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7680 ('Study', 1),
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7681 ('Series', 2),
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7682 ('Instance', 3),
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7683 ]:
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7684 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : brainixHierarchy,
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7685 'Level' : level })
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7686 self.assertEqual(1, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7687 self.assertEqual(level, a[0]['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7688 self.assertEqual(brainixHierarchy[index], a[0]['ID'])
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7689 self.assertTrue('Metadata' in a[0])
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7690
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7691 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ brainix ],
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7692 'Level' : level,
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7693 'Metadata' : False })
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7694 self.assertEqual(1, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7695 self.assertEqual(level, a[0]['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7696 self.assertEqual(brainixHierarchy[index], a[0]['ID'])
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7697 self.assertFalse('Metadata' in a[0])
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7698
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7699 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ knee1, knee2, brainix ] })
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7700 self.assertEqual(3, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7701 for item in a:
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7702 self.assertEqual('Instance', item['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7703 b = map(lambda x: x['ID'], a)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7704 self.assertTrue(knee1 in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7705 self.assertTrue(knee2 in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7706 self.assertTrue(brainix in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7707
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7708 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ knee1, knee2 ],
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7709 'Level' : 'Series' })
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7710 self.assertEqual(2, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7711 for item in a:
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7712 self.assertEqual('Series', item['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7713 b = map(lambda x: x['ID'], a)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7714 self.assertTrue(DoGet(_REMOTE, '/instances/%s' % knee1) ['ParentSeries'] in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7715 self.assertTrue(DoGet(_REMOTE, '/instances/%s' % knee2) ['ParentSeries'] in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7716
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7717 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ knee1, knee2 ],
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7718 'Level' : 'Study',
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7719 'Metadata' : False })
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7720 self.assertEqual(1, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7721 self.assertEqual(DoGet(_REMOTE, '/instances/%s/study' % knee1) ['ID'], a[0]['ID'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7722 self.assertEqual('Study', a[0]['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7723 self.assertEqual('KNEE', a[0]['PatientMainDicomTags']['PatientName'])
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7724 self.assertFalse('Metadata' in a[0])
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7725
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7726 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ knee1, knee2 ],
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7727 'Level' : 'Patient',
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7728 'Metadata' : True })
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7729 self.assertEqual(1, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7730 self.assertEqual(DoGet(_REMOTE, '/instances/%s/patient' % knee1) ['ID'], a[0]['ID'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7731 self.assertEqual('Patient', a[0]['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7732 self.assertEqual('KNEE', a[0]['MainDicomTags']['PatientName'])
418
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7733 self.assertTrue('Metadata' in a[0])
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7734 self.assertEqual(1, len(a[0]['Metadata']))
8a3d67a40083 test "Metadata" in "/tools/bulk-content"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 417
diff changeset
7735 self.assertTrue('LastUpdate' in a[0]['Metadata'])
415
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7736
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7737 for level in [ 'Instance', 'Series', 'Study', 'Patient' ]:
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7738 a = DoPost(_REMOTE, '/tools/bulk-content', { 'Resources' : [ knee1, brainix ],
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7739 'Level' : level })
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7740 self.assertEqual(2, len(a))
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7741 for item in a:
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7742 self.assertEqual(level, item['Type'])
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7743 b = map(lambda x: x['ID'], a)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7744 if level == 'Instance':
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7745 self.assertTrue(knee1 in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7746 self.assertTrue(brainix in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7747 else:
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7748 self.assertTrue(DoGet(_REMOTE, '/instances/%s/%s' % (knee1, level.lower())) ['ID'] in b)
fa6c4b82c027 test_bulk_content
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 414
diff changeset
7749 self.assertTrue(DoGet(_REMOTE, '/instances/%s/%s' % (brainix, level.lower())) ['ID'] in b)
416
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7750
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7751
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7752 def test_split_instances(self):
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7753 # New in 1.9.4
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7754 knee1 = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') ['ID']
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7755 knee2 = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0002.dcm') ['ID']
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7756 study = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7757 series = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7758
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7759 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7760 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7761 self.assertEqual(1, len(DoGet(_REMOTE, '/series')))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7762
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7763 instances = DoGet(_REMOTE, '/instances')
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7764 self.assertEqual(2, len(instances))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7765 self.assertEqual('1', DoGet(_REMOTE, '/instances/%s/tags?simplify' % knee1) ['InstanceNumber'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7766 self.assertEqual('2', DoGet(_REMOTE, '/instances/%s/tags?simplify' % knee2) ['InstanceNumber'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7767 for i in [ knee1, knee2 ]:
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7768 self.assertEqual(series, DoGet(_REMOTE, '/instances/%s/series' % i) ['ID'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7769 self.assertEqual(study, DoGet(_REMOTE, '/instances/%s/study' % i) ['ID'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7770
417
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7771 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/studies/%s/split' % study, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7772 'KeepSource' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7773 })) # Neither "Instances", nor "Series"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7774
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7775 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/studies/%s/split' % study, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7776 'KeepSource' : False,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7777 'Instances' : [ ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7778 'Series' : [ ]
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7779 })) # Empty "Instances" and "Series"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7780
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7781 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/studies/%s/split' % study, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7782 'Instances' : [ 'nope' ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7783 'KeepSource' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7784 }))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7785
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7786 self.assertRaises(Exception, lambda: DoPost(_REMOTE, '/studies/%s/split' % study, {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7787 'Series' : [ 'nope' ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7788 'KeepSource' : False
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7789 }))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 416
diff changeset
7790
416
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7791 result = DoPost(_REMOTE, '/studies/%s/split' % study, {
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7792 'Instances' : [ knee1 ],
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7793 'KeepSource' : False
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7794 })
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7795
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7796 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7797 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7798 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7799
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7800 instances = DoGet(_REMOTE, '/instances')
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7801 self.assertEqual(2, len(instances))
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7802
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7803 self.assertFalse(knee1 in instances)
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7804 self.assertTrue(knee2 in instances)
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7805 instances.remove(knee2)
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7806 self.assertEqual(series, DoGet(_REMOTE, '/instances/%s/series' % knee2) ['ID'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7807 self.assertEqual(study, DoGet(_REMOTE, '/instances/%s/study' % knee2) ['ID'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7808 self.assertNotEqual(series, DoGet(_REMOTE, '/instances/%s/series' % instances[0]) ['ID'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7809 self.assertNotEqual(study, DoGet(_REMOTE, '/instances/%s/study' % instances[0]) ['ID'])
80164728c038 test_split_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
7810 self.assertEqual('1', DoGet(_REMOTE, '/instances/%s/tags?simplify' % instances[0]) ['InstanceNumber'])
419
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7811
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7812
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7813 def test_merge_instances(self):
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7814 # New in Orthanc 1.9.4
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7815 knee = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') ['ID']
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7816 brainix = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm') ['ID']
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7817 brainixStudy = DoGet(_REMOTE, '/instances/%s/study' % brainix) ['ID']
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7818
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7819 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7820 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7821 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7822 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7823
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7824 instances = DoGet(_REMOTE, '/instances')
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7825 self.assertEqual(2, len(instances))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7826 self.assertTrue(brainix in instances)
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7827 self.assertTrue(knee in instances)
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7828
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7829 result = DoPost(_REMOTE, '/studies/%s/merge' % brainixStudy, {
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7830 'Resources' : [ knee ]
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7831 })
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7832
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7833 self.assertEqual(1, len(DoGet(_REMOTE, '/patients')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7834 self.assertEqual(1, len(DoGet(_REMOTE, '/studies')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7835 self.assertEqual(2, len(DoGet(_REMOTE, '/series')))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7836 self.assertEqual(brainixStudy, DoGet(_REMOTE, '/studies')[0])
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7837
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7838 instances = DoGet(_REMOTE, '/instances')
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7839 self.assertEqual(2, len(instances))
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7840 self.assertTrue(brainix in instances)
6a57c4efe38a test_merge_instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 418
diff changeset
7841 self.assertFalse(knee in instances)
423
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7842
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7843
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7844 def test_query_retrieve_format(self):
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7845 # New in Orthanc 1.9.5
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7846 # https://groups.google.com/g/orthanc-users/c/1KC4d-0K8s0/m/hfYYz1-tAgAJ
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7847 i = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') ['ID']
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7848 study = DoGet(_REMOTE, '/instances/%s/study' % i) ['MainDicomTags']['StudyInstanceUID']
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7849
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7850 a = DoPost(_REMOTE, '/modalities/self/query', {
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7851 'Level' : 'Study',
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7852 'Query' : {}
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7853 })
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7854
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7855 b = DoGet(_REMOTE, a['Path'] + '/answers')
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7856 self.assertEqual(1, len(b))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7857 self.assertEqual('0', b[0])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7858
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7859 b = DoGet(_REMOTE, a['Path'] + '/answers?expand')
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7860 self.assertEqual(1, len(b))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7861 self.assertEqual(6, len(b[0]))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7862 self.assertEqual('ISO_IR 100', b[0]['0008,0005']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7863 self.assertEqual('SpecificCharacterSet', b[0]['0008,0005']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7864 self.assertEqual('A10003245599', b[0]['0008,0050']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7865 self.assertEqual('AccessionNumber', b[0]['0008,0050']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7866 self.assertEqual('STUDY', b[0]['0008,0052']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7867 self.assertEqual('QueryRetrieveLevel', b[0]['0008,0052']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7868 self.assertEqual('ORTHANC', b[0]['0008,0054']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7869 self.assertEqual('RetrieveAETitle', b[0]['0008,0054']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7870 self.assertEqual('887', b[0]['0010,0020']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7871 self.assertEqual('PatientID', b[0]['0010,0020']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7872 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b[0]['0020,000d']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7873 self.assertEqual('StudyInstanceUID', b[0]['0020,000d']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7874
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7875 for (key, value) in b[0].items():
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7876 self.assertEqual('String', value['Type'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7877
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7878 self.assertEqual(json.dumps(b[0]),
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7879 json.dumps(DoGet(_REMOTE, a['Path'] + '/answers/0/content')))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7880
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7881 # What is below this point didn't work on Orthanc <= 1.9.3
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7882
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7883 b = DoGet(_REMOTE, a['Path'] + '/answers?expand&short')
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7884 self.assertEqual(1, len(b))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7885 self.assertEqual(6, len(b[0]))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7886 self.assertEqual('ISO_IR 100', b[0]['0008,0005'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7887 self.assertEqual('A10003245599', b[0]['0008,0050'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7888 self.assertEqual('STUDY', b[0]['0008,0052'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7889 self.assertEqual('ORTHANC', b[0]['0008,0054'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7890 self.assertEqual('887', b[0]['0010,0020'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7891 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b[0]['0020,000d'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7892 self.assertEqual(json.dumps(b[0]),
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7893 json.dumps(DoGet(_REMOTE, a['Path'] + '/answers/0/content?short')))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7894
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7895 b = DoGet(_REMOTE, a['Path'] + '/answers?expand&simplify')
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7896 self.assertEqual(1, len(b))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7897 self.assertEqual(6, len(b[0]))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7898 self.assertEqual('ISO_IR 100', b[0]['SpecificCharacterSet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7899 self.assertEqual('A10003245599', b[0]['AccessionNumber'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7900 self.assertEqual('STUDY', b[0]['QueryRetrieveLevel'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7901 self.assertEqual('ORTHANC', b[0]['RetrieveAETitle'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7902 self.assertEqual('887', b[0]['PatientID'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7903 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b[0]['StudyInstanceUID'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7904 self.assertEqual(json.dumps(b[0]),
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7905 json.dumps(DoGet(_REMOTE, a['Path'] + '/answers/0/content?simplify')))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7906
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7907 b = DoPost(_REMOTE, '/queries/%s/retrieve' % a['ID'], {})
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7908 self.assertEqual('REST API', b['Description'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7909 self.assertEqual('ORTHANC', b['LocalAet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7910 self.assertEqual('ORTHANC', b['RemoteAet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7911 self.assertEqual(1, len(b['Query']))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7912 self.assertEqual(4, len(b['Query'][0]))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7913 self.assertEqual('A10003245599', b['Query'][0]['0008,0050'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7914 self.assertEqual('STUDY', b['Query'][0]['0008,0052'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7915 self.assertEqual('887', b['Query'][0]['0010,0020'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7916 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b['Query'][0]['0020,000d'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7917
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7918 # What is below this point didn't work on Orthanc <= 1.9.4
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7919
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7920 b = DoPost(_REMOTE, '/queries/%s/retrieve' % a['ID'], { 'Full' : True })
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7921 self.assertEqual('REST API', b['Description'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7922 self.assertEqual('ORTHANC', b['LocalAet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7923 self.assertEqual('ORTHANC', b['RemoteAet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7924 self.assertEqual(1, len(b['Query']))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7925 self.assertEqual(4, len(b['Query'][0]))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7926 self.assertEqual('A10003245599', b['Query'][0]['0008,0050']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7927 self.assertEqual('STUDY', b['Query'][0]['0008,0052']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7928 self.assertEqual('887', b['Query'][0]['0010,0020']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7929 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b['Query'][0]['0020,000d']['Value'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7930 self.assertEqual('AccessionNumber', b['Query'][0]['0008,0050']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7931 self.assertEqual('QueryRetrieveLevel', b['Query'][0]['0008,0052']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7932 self.assertEqual('PatientID', b['Query'][0]['0010,0020']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7933 self.assertEqual('StudyInstanceUID', b['Query'][0]['0020,000d']['Name'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7934
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7935 b = DoPost(_REMOTE, '/queries/%s/retrieve' % a['ID'], { 'Simplify' : True })
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7936 self.assertEqual('REST API', b['Description'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7937 self.assertEqual('ORTHANC', b['LocalAet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7938 self.assertEqual('ORTHANC', b['RemoteAet'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7939 self.assertEqual(1, len(b['Query']))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7940 self.assertEqual(4, len(b['Query'][0]))
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7941 self.assertEqual('A10003245599', b['Query'][0]['AccessionNumber'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7942 self.assertEqual('STUDY', b['Query'][0]['QueryRetrieveLevel'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7943 self.assertEqual('887', b['Query'][0]['PatientID'])
cef3847dc8af test_query_retrieve_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 420
diff changeset
7944 self.assertEqual('2.16.840.1.113669.632.20.121711.10000160881', b['Query'][0]['StudyInstanceUID'])
424
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7945
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7946
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7947 def test_anonymize_nested(self):
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7948 # New in Orthanc 1.9.5
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7949
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7950 tags = {
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7951 'MappingResourceIdentificationSequence' : [
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7952 {
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7953 # Test "DicomModification::RelationshipsVisitor::GetDefaultAction()"
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7954 '0009,1002' : 'ABCD', # Private tag not registered in dictionary
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7955 '0016,0071' : '-12', # "GPS Latitude" whose VR is DS in "removals_"
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7956 '0034,0005' : '13', # VR is OB, and in "clearings_" (only in DCMTK 3.6.2)
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7957
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7958 # Test "DicomModification::RelationshipsVisitor::VisitString()"
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7959 'StudyDescription' : 'Hello', # Removed
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7960 'StudyDate' : '20210705', # Cleared
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7961 '0009,1001' : '-1234', # Private tag whose VR is DS
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7962
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7963 # Test anonymization of nested sequences
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7964 'ReferencedStudySequence' : [
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7965 {
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7966 'PatientID' : 'HELLO'
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7967 }
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7968 ],
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7969
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7970 # Non-anonymized tags
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7971 'CodeMeaning' : 'MEANING1',
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7972 'EquivalentCodeSequence' : [
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7973 {
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7974 'CodeMeaning' : 'MEANING2',
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7975 }
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7976 ],
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7977 }
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7978 ],
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7979 }
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7980
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7981 a = DoPost(_REMOTE, '/tools/create-dicom',
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7982 json.dumps({
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7983 'Tags' : tags,
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7984 'PrivateCreator' : 'Lunit',
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7985 })) ['ID']
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7986
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7987 study = DoGet(_REMOTE, '/instances/%s/study' % a) ['ID']
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7988 b = DoPost(_REMOTE, '/studies/%s/anonymize' % study, {}) ['ID']
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7989 c = DoGet(_REMOTE, '/studies/%s/instances' % b)
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7990 self.assertEqual(1, len(c))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7991
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7992 tags1 = DoGet(_REMOTE, '/instances/%s/tags?short' % a)
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7993 tags2 = DoGet(_REMOTE, '/instances/%s/tags?short' % c[0]['ID'])
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7994
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7995 # Only "StudyDate" must be present in
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7996 # "MappingResourceIdentificationSequence" after anonymization
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7997 self.assertEqual(1, len(tags1['0008,0124']))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7998 self.assertEqual(1, len(tags2['0008,0124']))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
7999 self.assertEqual(9, len(tags1['0008,0124'][0]))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8000 self.assertEqual(3, len(tags2['0008,0124'][0]))
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8001 self.assertEqual('', tags2['0008,0124'][0]['0008,0020'])
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8002 self.assertEqual('MEANING1', tags2['0008,0124'][0]['0008,0104'])
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8003 self.assertEqual('MEANING2', tags2['0008,0124'][0]['0008,0121'][0]['0008,0104'])
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8004
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8005 self.assertTrue('0008,1110' in tags1['0008,0124'][0])
934f505677da test_anonymize_nested
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 423
diff changeset
8006 self.assertFalse('0008,1110' in tags2['0008,0124'][0])
427
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8007
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8008
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8009 def test_issue_200(self):
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8010 # https://groups.google.com/g/orthanc-users/c/9CTLsL-JqDw/m/2I0xgyYHBAAJ
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8011 # https://bugs.orthanc-server.com/show_bug.cgi?id=200
428
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8012 self.assertEqual(0, len(DoGet(_REMOTE, '/changes') ['Changes']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8013 self.assertEqual(0, len(DoGet(_REMOTE, '/changes?last') ['Changes']))
429
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8014 u = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
427
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8015
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8016 for change in DoGet(_REMOTE, '/changes') ['Changes']:
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8017 self.assertTrue(re.match('[0-9]{8}T[0-9]{6}', change['Date']))
77455e156112 integration test for issue 200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 424
diff changeset
8018 self.assertTrue(re.match('[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}', change['ID']))
428
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8019
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8020 last = DoGet(_REMOTE, '/changes?last') ['Changes']
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8021 self.assertEqual(1, len(last))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8022 self.assertTrue(re.match('[0-9]{8}T[0-9]{6}', last[0]['Date']))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 427
diff changeset
8023 self.assertTrue(re.match('[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}', last[0]['ID']))
429
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8024
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8025 self.assertEqual(0, len(DoGet(_REMOTE, '/exports') ['Exports']))
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8026 self.assertEqual(0, len(DoGet(_REMOTE, '/exports?last') ['Exports']))
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8027 DoPost(_REMOTE, '/modalities/self/store', [ u ])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8028
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8029 for change in DoGet(_REMOTE, '/exports') ['Exports']:
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8030 self.assertTrue(re.match('[0-9]{8}T[0-9]{6}', change['Date']))
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8031 self.assertTrue(re.match('[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}', change['ID']))
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8032
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8033 last = DoGet(_REMOTE, '/exports?last') ['Exports']
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8034 self.assertEqual(1, len(last))
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8035 self.assertEqual('ozp00SjY2xG', last[0]['PatientID'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8036 self.assertEqual('self', last[0]['RemoteModality'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8037 self.assertEqual('Instance', last[0]['ResourceType'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8038 self.assertEqual('/instances/%s' % last[0]['ID'], last[0]['Path'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8039 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', last[0]['StudyInstanceUID'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8040 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', last[0]['SeriesInstanceUID'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8041 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', last[0]['SOPInstanceUID'])
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8042 self.assertTrue(re.match('[0-9]{8}T[0-9]{6}', last[0]['Date']))
f42c610234b0 test exports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 428
diff changeset
8043 self.assertTrue(re.match('[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}-[0-9a-z]{8}', last[0]['ID']))
431
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8044
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8045
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8046 def test_upload_dicomdir_archive(self):
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8047 # This test fails on Orthanc <= 1.9.6
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8048 # https://groups.google.com/g/orthanc-users/c/sgBU89o4nhU/m/kbRAYiQUAAAJ
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8049
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8050 # Create a ZIP archive with a DICOMDIR
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8051 instance = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8052 study = DoGet(_REMOTE, '/instances/%s/study' % instance) ['ID']
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8053 media = DoGet(_REMOTE, '/studies/%s/media' % study)
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8054 DoDelete(_REMOTE, '/instances/%s' % instance)
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8055
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8056 result = DoPost(_REMOTE, '/instances', media)
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8057 self.assertEqual(1, len(result))
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8058 self.assertEqual(instance, result[0]['ID'])
e665c493e23e test_upload_dicomdir_archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 429
diff changeset
8059 self.assertEqual('Success', result[0]['Status'])
432
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8060
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8061
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8062 def test_modify_keep_source(self):
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8063 # https://groups.google.com/g/orthanc-users/c/1lvlBTs2WUY/m/HmYsc2CPBQAJ
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8064 instance = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8065 study = DoGet(_REMOTE, '/instances/%s/study' % instance) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8066 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8067
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8068 a = DoPost(_REMOTE, '/studies/%s/anonymize' % study, {}) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8069 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8070 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8071 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8072
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8073 a = DoPost(_REMOTE, '/studies/%s/anonymize' % study, { 'KeepSource' : True }) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8074 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8075 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8076 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8077
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8078 a = DoPost(_REMOTE, '/studies/%s/anonymize' % study, { 'KeepSource' : False }) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8079 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8080 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8081 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8082
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8083 UploadInstance(_REMOTE, 'DummyCT.dcm')
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8084 a = DoPost(_REMOTE, '/studies/%s/modify' % study, { 'Replace' : { } }) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8085 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8086 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8087 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8088
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8089 a = DoPost(_REMOTE, '/studies/%s/modify' % study, { 'KeepSource' : True }) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8090 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8091 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8092 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8093
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8094 a = DoPost(_REMOTE, '/studies/%s/modify' % study, { 'KeepSource' : False }) ['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8095 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8096 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8097 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8098
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8099 def GetStudy(a):
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8100 b = filter(lambda x: x['Type'] == 'Study', a['Resources'])
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8101 if len(b) == 1:
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8102 return b[0]['ID']
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8103 else:
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8104 raise Exception()
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8105
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8106 UploadInstance(_REMOTE, 'DummyCT.dcm')
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8107 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-anonymize', { 'Resources' : [ study ]}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8108 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8109 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8110 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8111
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8112 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-anonymize', { 'Resources' : [ study ], 'KeepSource' : True}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8113 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8114 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8115 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8116
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8117 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-anonymize', { 'Resources' : [ study ], 'KeepSource' : False}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8118 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8119 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8120 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8121
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8122 UploadInstance(_REMOTE, 'DummyCT.dcm')
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8123 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-modify', { 'Resources' : [ study ], 'Replace' : { }}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8124 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8125 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8126 # No more studies, because "bulk-modify" was not given a
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8127 # level, so the modified instance belongs to the same study as
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8128 # the original instance
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8129 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8130
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8131 # The following fails on Orthanc <= 1.9.6 because "Level" was
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8132 # introduced in 1.9.7
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8133
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8134 UploadInstance(_REMOTE, 'DummyCT.dcm')
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8135 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-modify', { 'Level' : 'Study', 'Resources' : [ study ], 'Replace' : { }}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8136 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8137 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8138 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8139
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8140 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-modify', { 'Level' : 'Study', 'Resources' : [ study ], 'KeepSource' : True}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8141 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8142 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8143 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8144
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8145 a = GetStudy(DoPost(_REMOTE, '/tools/bulk-modify', { 'Level' : 'Study', 'Resources' : [ study ], 'KeepSource' : False}))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8146 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8147 DoDelete(_REMOTE, '/studies/%s' % a)
f4609c97e995 test_modify_keep_source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 431
diff changeset
8148 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
433
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8149
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8150
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8151 def test_multiframe_windowing(self):
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8152 # Fixed in Orthanc 1.9.7
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8153 a = UploadInstance(_REMOTE, 'MultiframeWindowing.dcm') ['ID']
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8154
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8155 im = GetImage(_REMOTE, '/instances/%s/frames/0/rendered?window-center=127&window-width=256' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8156 self.assertEqual(0x00, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8157 self.assertEqual(0x10, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8158 self.assertEqual(0x20, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8159 self.assertEqual(0x30, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8160
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8161 # Center the window on value "16 == 0x10", thus it has the
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8162 # mid-level value (i.e. 127)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8163 im = GetImage(_REMOTE, '/instances/%s/frames/0/rendered?window-center=16&window-width=128' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8164 self.assertEqual(127 - 2 * 16, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8165 self.assertEqual(127, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8166 self.assertEqual(127 + 2 * 16, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8167 self.assertEqual(127 + 2 * 32, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8168
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8169 # Window center and window width are burned in FrameVOILUTSequence for frame 0
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8170 im = GetImage(_REMOTE, '/instances/%s/frames/0/rendered' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8171 self.assertEqual(127 - 2 * 16, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8172 self.assertEqual(127, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8173 self.assertEqual(127 + 2 * 16, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8174 self.assertEqual(127 + 2 * 32, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8175
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8176 im = GetImage(_REMOTE, '/instances/%s/frames/1/rendered?window-center=127&window-width=256' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8177 self.assertEqual(100, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8178 self.assertEqual(116, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8179 self.assertEqual(132, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8180 self.assertEqual(148, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8181
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8182 im = GetImage(_REMOTE, '/instances/%s/frames/2/rendered?window-center=127&window-width=256' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8183 self.assertEqual(0, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8184 self.assertEqual(32, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8185 self.assertEqual(64, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8186 self.assertEqual(96, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8187
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8188 im = GetImage(_REMOTE, '/instances/%s/frames/3/rendered?window-center=127&window-width=256' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8189 self.assertEqual(100, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8190 self.assertEqual(132, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8191 self.assertEqual(164, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8192 self.assertEqual(196, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8193
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8194 im = GetImage(_REMOTE, '/instances/%s/frames/0/rendered?window-center=16&window-width=128' % a)
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8195 self.assertEqual(127 - 2 * 16, im.getpixel((0, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8196 self.assertEqual(127, im.getpixel((1, 0)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8197 self.assertEqual(127 + 2 * 16, im.getpixel((0, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8198 self.assertEqual(127 + 2 * 32, im.getpixel((1, 1)))
cb579ad96a6c test_multiframe_windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 432
diff changeset
8199
436
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8200
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8201 def test_dicom_seg(self):
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8202 # This test fails in Orthanc <= 1.9.7
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8203 a = UploadInstance(_REMOTE, 'DicomSeg.dcm') ['ID']
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8204
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8205 self.assertEqual(96, len(DoGet(_REMOTE, '/instances/%s/frames' % a)))
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8206 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/frames/96/preview' % a))
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8207
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8208 nonEmptyFrames = [ 11, 12, 13, 14, 15, 16, 39, 40, 42, 43, 44, 45,
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8209 46, 47, 48, 49, 75, 76, 77, 78, 79, 80, 81 ]
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8210
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8211 for i in range(96):
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8212 im = GetImage(_REMOTE, '/instances/%s/frames/%d/preview' % (a, i))
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8213 self.assertEqual('L', im.mode)
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8214 self.assertEqual(256, im.size[0])
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8215 self.assertEqual(256, im.size[1])
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8216
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8217 e = im.getextrema()
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8218 self.assertEqual(0, e[0])
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8219
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8220 if e[1] == 0:
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8221 self.assertFalse(i in nonEmptyFrames)
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8222 else:
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8223 self.assertTrue(i in nonEmptyFrames)
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8224
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8225 im1 = GetImage(_REMOTE, '/instances/%s/frames/44/preview' % a)
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8226
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8227 # Generated by "dcm2pnm +F 45 DicomSeg.dcm DicomSeg-Frame45.pgm"
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8228 im2 = Image.open(GetDatabasePath('DicomSeg-Frame45.pgm'))
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8229 im2 = im2.point(lambda p: 255 if p == 128 else 0)
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8230
9f87d5b2b382 added test_dicom_seg
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 433
diff changeset
8231 self.assertTrue(ImageChops.difference(im1, im2).getbbox() is None)