comparison Tests/Tests.py @ 368:2cc40121c3a8

test_upload_multipart_1 and test_upload_multipart_2
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 19 Jan 2021 12:04:03 +0100
parents 79ce0f7a9714
children 24d93b42873a
comparison
equal deleted inserted replaced
367:9d2a63afdb73 368:2cc40121c3a8
6165 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', m['SopClassUid']) 6165 self.assertEqual('1.2.840.10008.5.1.4.1.1.4', m['SopClassUid'])
6166 6166
6167 # This fails on Orthanc <= 1.8.1 6167 # This fails on Orthanc <= 1.8.1
6168 self.assertTrue('TransferSyntax' in m) 6168 self.assertTrue('TransferSyntax' in m)
6169 self.assertEqual('1.2.840.10008.1.2', m['TransferSyntax']) 6169 self.assertEqual('1.2.840.10008.1.2', m['TransferSyntax'])
6170
6171
6172 def test_upload_multipart_1(self):
6173 # This tests the "Upload" button in Orthanc Explorer
6174
6175 def EncodeChunk(data, boundary, filename):
6176 return (('--%s\r\n' +
6177 'Content-Disposition : form-data ; name ="files[]" ; filename = "%s" \r\n' +
6178 '\r\n%s\r\n') % (boundary, filename, data))
6179
6180 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
6181 dcm1 = f.read()
6182
6183 with open(GetDatabasePath('ColorTestMalaterre.dcm'), 'rb') as f:
6184 dcm2 = f.read()
6185
6186 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
6187
6188 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ'
6189 m = DoPost(_REMOTE, '/instances', (EncodeChunk(dcm1, boundary, 'DummyCT.dcm') +
6190 EncodeChunk(dcm2, boundary, 'ColorTestMalaterre.dcm') +
6191 '--' + boundary + '--'), headers = {
6192 'Content-Type' : 'multipart/form-data ; boundary = %s ' % boundary,
6193 'X-Requested-With' : 'XMLHttpRequest',
6194 })
6195
6196 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))
6197
6198
6199 def test_upload_multipart_2(self):
6200 # This tests the "maxChunkSize" option of "jQuery File Upload
6201 # 5.12", whose source code can be found in:
6202 # "OrthancServer/OrthancExplorer/libs/jquery-file-upload/"
6203
6204 def EncodeBody(data, boundary, filename):
6205 return (('--%s\r\n' +
6206 'Content-Disposition: form-data; name="files[]"; filename="%s"\r\n' +
6207 '\r\n%s\r\n--%s') % (boundary, filename, data, boundary))
6208
6209 with open(GetDatabasePath('DummyCT.dcm'), 'rb') as f:
6210 dcm = f.read()
6211
6212 with open(GetDatabasePath('ColorTestMalaterre.dcm'), 'rb') as f:
6213 dcm2 = f.read()
6214
6215 boundary = '----WebKitFormBoundarypJDNQqJPoXiorRmQ'
6216
6217 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
6218 m = DoPost(_REMOTE, '/instances',
6219 EncodeBody(dcm[0:1000], boundary, 'DummyCT.dcm'),
6220 headers = {
6221 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary,
6222 'X-Requested-With' : 'XMLHttpRequest',
6223 'X-File-Name' : 'DummyCT.dcm',
6224 'X-File-Size' : str(len(dcm)),
6225 })
6226
6227 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
6228 m = DoPost(_REMOTE, '/instances',
6229 EncodeBody(dcm[1000:2000], boundary, 'DummyCT.dcm'),
6230 headers = {
6231 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary,
6232 'X-Requested-With' : 'XMLHttpRequest',
6233 'X-File-Name' : 'DummyCT.dcm',
6234 'X-File-Size' : str(len(dcm)),
6235 })
6236 self.assertEqual(0, len(DoGet(_REMOTE, '/instances')))
6237
6238 m = DoPost(_REMOTE, '/instances',
6239 EncodeBody(dcm2, boundary, 'ColorTestMalaterre.dcm'),
6240 headers = {
6241 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary,
6242 'X-Requested-With' : 'XMLHttpRequest',
6243 'X-File-Name' : 'ColorTestMalaterre.dcm',
6244 'X-File-Size' : str(len(dcm2)),
6245 })
6246
6247 self.assertEqual(1, len(DoGet(_REMOTE, '/instances')))
6248
6249 # Upload the last chunk => the file is now entirely available
6250 m = DoPost(_REMOTE, '/instances',
6251 EncodeBody(dcm[2000:len(dcm)], boundary, 'DummyCT.dcm'),
6252 headers = {
6253 'Content-Type' : 'multipart/form-data; boundary=%s' % boundary,
6254 'X-Requested-With' : 'XMLHttpRequest',
6255 'X-File-Name' : 'DummyCT.dcm',
6256 'X-File-Size' : str(len(dcm)),
6257 })
6258
6259 self.assertEqual(2, len(DoGet(_REMOTE, '/instances')))