# HG changeset patch # User Sebastien Jodogne # Date 1592835331 -7200 # Node ID bac7cc80f240264af111c73c836f7c44e09ceff8 # Parent 5ea07ecade93bb1628a6bff9718fef7075cb97f8 dicomweb: test_wado_transcoding diff -r 5ea07ecade93 -r bac7cc80f240 Plugins/DicomWeb/Run.py --- a/Plugins/DicomWeb/Run.py Wed May 27 09:55:57 2020 +0200 +++ b/Plugins/DicomWeb/Run.py Mon Jun 22 16:15:31 2020 +0200 @@ -1156,7 +1156,7 @@ headers = { 'accept' : 'application/json' }))) - def test_transcoding(self): + def test_frames_transcoding(self): ACCEPT = { '1.2.840.10008.1.2' : 'multipart/related; type=application/octet-stream; transfer-syntax=1.2.840.10008.1.2', '1.2.840.10008.1.2.1' : 'multipart/related; type=application/octet-stream; transfer-syntax=1.2.840.10008.1.2.1', @@ -1285,7 +1285,45 @@ self.assertEqual(a[0], b[0]) self.assertEqual(a[0], b[1]) + + def test_wado_transcoding(self): + uri = '/dicom-web%s' % UploadAndGetWadoPath('TransferSyntaxes/1.2.840.10008.1.2.4.50.dcm') + + self.assertRaises(Exception, lambda: DoGetMultipart(ORTHANC, '%s' % uri, + headers = { 'Accept' : 'nope' })) + + a = DoGetMultipart(ORTHANC, '%s' % uri, + headers = { }) + self.assertEqual(1, len(a)) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(a[0])) + s = len(a[0]) + a = DoGetMultipart(ORTHANC, '%s' % uri, + headers = { 'Accept' : 'multipart/related' }) + self.assertEqual(1, len(a)) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(a[0])) + + a = DoGetMultipart(ORTHANC, '%s' % uri, + headers = { 'Accept' : 'multipart/related; type=application/dicom' }) + self.assertEqual(1, len(a)) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(a[0])) + + a = DoGetMultipart(ORTHANC, '%s' % uri, + headers = { 'Accept' : 'multipart/related; type=application/dicom; transfer-syntax=*' }) + self.assertEqual(1, len(a)) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(a[0])) + self.assertEqual(s, len(a[0])) + + a = DoGetMultipart(ORTHANC, '%s' % uri, + headers = { 'Accept' : 'multipart/related; type=application/dicom; transfer-syntax=1.2.840.10008.1.2.4.50' }) + self.assertEqual(1, len(a)) + self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(a[0])) + + a = DoGetMultipart(ORTHANC, '%s' % uri, + headers = { 'Accept' : 'multipart/related; type=application/dicom; transfer-syntax=1.2.840.10008.1.2.1' }) + self.assertEqual(1, len(a)) + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(a[0])) + self.assertTrue(10 * s < len(a[0])) try: print('\nStarting the tests...') diff -r 5ea07ecade93 -r bac7cc80f240 Tests/Tests.py --- a/Tests/Tests.py Wed May 27 09:55:57 2020 +0200 +++ b/Tests/Tests.py Mon Jun 22 16:15:31 2020 +0200 @@ -111,7 +111,7 @@ def CallMoveScu(args): try: subprocess.check_call(GetMoveScuCommand() + args, - stderr=subprocess.PIPE) + stderr = subprocess.PIPE) except subprocess.CalledProcessError as e: # The error code "69" corresponds to "EXITCODE_CMOVE_ERROR", # that has been introduced in DCMTK 3.6.2. This error code is diff -r 5ea07ecade93 -r bac7cc80f240 Tests/Toolbox.py --- a/Tests/Toolbox.py Wed May 27 09:55:57 2020 +0200 +++ b/Tests/Toolbox.py Mon Jun 22 16:15:31 2020 +0200 @@ -342,14 +342,15 @@ class ExternalCommandThread: @staticmethod def ExternalCommandFunction(arg, stop_event, command, env): - external = subprocess.Popen(command, env = env) + with open(os.devnull, 'w') as devnull: + external = subprocess.Popen(command, env = env, stderr = devnull) - while (not stop_event.is_set()): - error = external.poll() - if error != None: - # http://stackoverflow.com/a/1489838/881731 - os._exit(-1) - stop_event.wait(0.1) + while (not stop_event.is_set()): + error = external.poll() + if error != None: + # http://stackoverflow.com/a/1489838/881731 + os._exit(-1) + stop_event.wait(0.1) print('Stopping the external command') external.terminate() @@ -389,7 +390,10 @@ with tempfile.NamedTemporaryFile(delete = True) as f: f.write(dicom) f.flush() - data = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ]) + + with open(os.devnull, 'w') as devnull: + data = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ], + stderr = devnull) return re.search('