comparison Tests/Tests.py @ 219:00e5aeea33dd

test_bitbucket_issue_131
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sun, 24 Feb 2019 08:50:02 +0100
parents 70fba41776be
children 7b1c976caa9b
comparison
equal deleted inserted replaced
218:70fba41776be 219:00e5aeea33dd
4518 4518
4519 # ...but only 1 value for the "Rows" tag 4519 # ...but only 1 value for the "Rows" tag
4520 rows = re.findall('\(0028,0010\) US ([0-9]+)', i) 4520 rows = re.findall('\(0028,0010\) US ([0-9]+)', i)
4521 self.assertEqual(1, len(rows)) 4521 self.assertEqual(1, len(rows))
4522 self.assertEqual('512', rows[0]) 4522 self.assertEqual('512', rows[0])
4523
4524
4525
4526 def test_bitbucket_issue_131(self):
4527 # "Orthanc PACS silently fails to C-MOVE due to duplicate
4528 # StudyInstanceUID in it's database."
4529 # https://bitbucket.org/sjodogne/orthanc/issues/131/orthanc-pacs-silently-fails-to-c-move-due
4530
4531 # Insert 2 instances, with the same StudyInstanceUID, but with
4532 # different patient IDs. Orthanc will create 2 distincts
4533 # patients, and the hierarchy of resources above the two
4534 # instances will be fully disjoint.
4535 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-a.dcm')
4536 UploadInstance(_REMOTE, 'PatientIdsCollision/Issue131-b.dcm')
4537
4538 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
4539 self.assertEqual(2, len(DoGet(_REMOTE, '/studies')))
4540
4541 a = DoPost(_REMOTE, '/modalities/self/query', {
4542 'Level' : 'Study',
4543 'Query' : {"PatientID": "A" }})['ID']
4544
4545 # 1 study is matched
4546 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
4547
4548 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
4549 self.assertTrue(MonitorJob(_REMOTE, lambda: DoPost
4550 (_REMOTE, '/queries/%s/retrieve' % a,
4551 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')))
4552
4553 # The two studies are matched, as we made the request at the
4554 # Study level, thus the shared StudyInstanceUID is used as the key
4555 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
4556
4557
4558 # Match the 2 studies
4559 a = DoPost(_REMOTE, '/modalities/self/query', {
4560 'Level' : 'Study',
4561 'Query' : {"StudyInstanceUID": "2.25.123" }})['ID']
4562 self.assertEqual(2, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
4563 DropOrthanc(_LOCAL)
4564 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
4565 self.assertTrue(MonitorJob(_REMOTE, lambda: DoPost
4566 (_REMOTE, '/queries/%s/retrieve' % a,
4567 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')))
4568 self.assertEqual(2, len(DoGet(_LOCAL, '/instances')))
4569
4570
4571 # Same test, at the patient level => only 1 instance is transfered
4572 a = DoPost(_REMOTE, '/modalities/self/query', {
4573 'Level' : 'Patient',
4574 'Query' : {"PatientID": "A" }})['ID']
4575 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
4576 DropOrthanc(_LOCAL)
4577 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
4578 self.assertTrue(MonitorJob(_REMOTE, lambda: DoPost
4579 (_REMOTE, '/queries/%s/retrieve' % a,
4580 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')))
4581 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
4582
4583
4584 # Same test, at the series level => only 1 instance is transfered
4585 a = DoPost(_REMOTE, '/modalities/self/query', {
4586 'Level' : 'Series',
4587 'Query' : {"PatientID": "A" }})['ID']
4588 self.assertEqual(1, len(DoGet(_REMOTE, '/queries/%s/answers' % a)))
4589 DropOrthanc(_LOCAL)
4590 self.assertEqual(0, len(DoGet(_LOCAL, '/instances')))
4591 self.assertTrue(MonitorJob(_REMOTE, lambda: DoPost
4592 (_REMOTE, '/queries/%s/retrieve' % a,
4593 '{"TargetAet":"ORTHANCTEST","Synchronous":false}')))
4594 self.assertEqual(1, len(DoGet(_LOCAL, '/instances')))
4595