comparison Tests/Tests.py @ 677:599ff47f609d large-queries

updated extended /changes tests
author Alain Mazy <am@orthanc.team>
date Thu, 05 Sep 2024 18:46:25 +0200
parents 5806bd442a37
children 72f186c739d0
comparison
equal deleted inserted replaced
650:c76a8c783996 677:599ff47f609d
625 self.assertEqual(2, countSeries) 625 self.assertEqual(2, countSeries)
626 self.assertEqual(0, completed) 626 self.assertEqual(0, completed)
627 627
628 628
629 def test_changes_extended(self): 629 def test_changes_extended(self):
630 if IsOrthancVersionAbove(_REMOTE, 1, 13, 0) and DoGet(_REMOTE, '/system').get("HasExtendedApiV1"): 630 if IsOrthancVersionAbove(_REMOTE, 1, 12, 5) and DoGet(_REMOTE, '/system').get("Capabilities").get("HasExtendedChanges"):
631 # Check emptiness 631 # Check emptiness
632 c = DoGet(_REMOTE, '/extended-api-v1/changes') 632 c = DoGet(_REMOTE, '/changes')
633 self.assertEqual(0, len(c['Changes'])) 633 self.assertEqual(0, len(c['Changes']))
634 #self.assertEqual(0, c['Last']) # Not true anymore for Orthanc >= 1.5.2 634 #self.assertEqual(0, c['Last']) # Not true anymore for Orthanc >= 1.5.2
635 self.assertTrue(c['Done']) 635 self.assertTrue(c['Done'])
636 c = DoGet(_REMOTE, '/extended-api-v1/changes?last') 636 c = DoGet(_REMOTE, '/changes?last')
637 self.assertEqual(0, len(c['Changes'])) 637 self.assertEqual(0, len(c['Changes']))
638 #self.assertEqual(0, c['Last']) # Not true anymore for Orthanc >= 1.5.2 638 #self.assertEqual(0, c['Last']) # Not true anymore for Orthanc >= 1.5.2
639 self.assertTrue(c['Done']) 639 self.assertTrue(c['Done'])
640 640
641 # Add 1 instance 641 # Add 1 instance
642 i = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID'] 642 i = UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')['ID']
643 c = DoGet(_REMOTE, '/extended-api-v1/changes') 643 c = DoGet(_REMOTE, '/changes')
644 begin = c['Last'] 644 begin = c['Last']
645 self.assertEqual(4, len(c['Changes'])) 645 self.assertEqual(4, len(c['Changes']))
646 self.assertTrue(c['Done']) 646 self.assertTrue(c['Done'])
647 self.assertEqual(c['Changes'][-1]['Seq'], c['Last']) 647 self.assertEqual(c['Changes'][-1]['Seq'], c['Last'])
648 648
650 self.assertEqual(c['Changes'][0]['ChangeType'], 'NewInstance') 650 self.assertEqual(c['Changes'][0]['ChangeType'], 'NewInstance')
651 self.assertEqual(c['Changes'][1]['ChangeType'], 'NewSeries') 651 self.assertEqual(c['Changes'][1]['ChangeType'], 'NewSeries')
652 self.assertEqual(c['Changes'][2]['ChangeType'], 'NewStudy') 652 self.assertEqual(c['Changes'][2]['ChangeType'], 'NewStudy')
653 self.assertEqual(c['Changes'][3]['ChangeType'], 'NewPatient') 653 self.assertEqual(c['Changes'][3]['ChangeType'], 'NewPatient')
654 654
655 c = DoGet(_REMOTE, '/extended-api-v1/changes?type=NewInstance') 655 c = DoGet(_REMOTE, '/changes?type=NewInstance')
656 self.assertEqual(1, len(c['Changes'])) 656 self.assertEqual(1, len(c['Changes']))
657 self.assertEqual(begin-3, c['Last']) 657 self.assertEqual(begin-3, c['Last'])
658 658
659 c = DoGet(_REMOTE, '/extended-api-v1/changes?type=NewPatient') 659 c = DoGet(_REMOTE, '/changes?type=NewPatient')
660 self.assertEqual(1, len(c['Changes'])) 660 self.assertEqual(1, len(c['Changes']))
661 self.assertEqual(begin, c['Last']) 661 self.assertEqual(begin, c['Last'])
662 662
663 UploadFolder(_REMOTE, 'Knee/T1') 663 UploadFolder(_REMOTE, 'Knee/T1')
664 UploadFolder(_REMOTE, 'Knee/T2') 664 UploadFolder(_REMOTE, 'Knee/T2')
665 665
666 # 1000 New Instance changes -> all 50 shall be reported 666 # Request the 1000 first NewInstance changes -> all 50 shall be reported
667 c = DoGet(_REMOTE, '/extended-api-v1/changes', { 'type': 'NewInstance', 'since' : begin, 'limit' : 1000 }) 667 c = DoGet(_REMOTE, '/changes', { 'type': 'NewInstance', 'since' : begin, 'limit' : 1000 })
668 self.assertEqual(50, len(c['Changes'])) 668 self.assertEqual(50, len(c['Changes']))
669 self.assertLess(begin, c['Changes'][0]['Seq']) 669 self.assertLess(begin, c['Changes'][0]['Seq'])
670 self.assertTrue(c['Done']) 670 self.assertTrue(c['Done']) #w e have got them all so it's DONE
671 lastFromAll = c['Last'] 671 lastFrom1000NewInstances = c['Last']
672 672 firstFrom1000NewInstances = c['First']
673 # Only 10 New Instance changes -> only 10 shall be reported 673 self.assertLess(firstFrom1000NewInstances, lastFrom1000NewInstances)
674 c = DoGet(_REMOTE, '/extended-api-v1/changes', { 'type': 'NewInstance', 'since' : begin, 'limit' : 10 }) 674
675 # Only the 10 first NewInstance changes -> only 10 shall be reported
676 c = DoGet(_REMOTE, '/changes', { 'type': 'NewInstance', 'since' : begin, 'limit' : 10 })
675 self.assertEqual(10, len(c['Changes'])) 677 self.assertEqual(10, len(c['Changes']))
676 self.assertFalse(c['Done']) 678 self.assertFalse(c['Done'])
677 lastFrom10 = c['Last'] 679 lastFrom10firstNewInstances = c['Last']
678 self.assertLess(lastFrom10, lastFromAll) 680 firstFrom10firstNewInstances = c['First']
681 self.assertLess(firstFrom10firstNewInstances, lastFrom10firstNewInstances)
682 self.assertLess(lastFrom10firstNewInstances, lastFrom1000NewInstances)
683 self.assertEqual(firstFrom10firstNewInstances, firstFrom1000NewInstances)
679 684
680 # between begin and begin+10 with a max of 10 and a filter -> less than 10 NewInstance since there are other changes in this range 685 # between begin and begin+10 with a max of 10 and a filter -> less than 10 NewInstance since there are other changes in this range
681 c = DoGet(_REMOTE, '/extended-api-v1/changes', { 'type': 'NewInstance', 'since' : begin, 'to': begin+10, 'limit' : 10 }) 686 c = DoGet(_REMOTE, '/changes', { 'type': 'NewInstance', 'since' : begin, 'to': begin+10, 'limit' : 10 })
682 self.assertLess(len(c['Changes']), 10) 687 self.assertLess(len(c['Changes']), 10)
683 self.assertTrue(c['Done']) # we have received ALL NewInstance that are between since and to so we consider it's done 688 self.assertTrue(c['Done']) # we have received ALL NewInstance that are between since and to so we consider it's done
684 lastFrom10 = c['Last'] 689 lastFrom10SubsetNewInstances = c['Last']
685 self.assertLess(lastFrom10, lastFromAll) 690 firstFrom10SubsetNewInstances = c['First']
686 691 self.assertLess(firstFrom10SubsetNewInstances, lastFrom10SubsetNewInstances)
687 # test with only 'to' -> all 50 shall be reported 692 self.assertLess(lastFrom10SubsetNewInstances, lastFrom10firstNewInstances)
688 c = DoGet(_REMOTE, '/extended-api-v1/changes', { 'type': 'NewInstance', 'to': lastFromAll, 'limit' : 50 }) 693 self.assertEqual(firstFrom10SubsetNewInstances, firstFrom1000NewInstances)
689 self.assertEqual(lastFromAll, c['Changes'][-1]['Seq']) 694
695 # test with only 'to' -> all 50 NewInstance shall be reported
696 c = DoGet(_REMOTE, '/changes', { 'type': 'NewInstance', 'to': lastFrom1000NewInstances, 'limit' : 50 })
697 self.assertEqual(lastFrom1000NewInstances, c['Changes'][-1]['Seq'])
690 self.assertEqual(50, len(c['Changes'])) 698 self.assertEqual(50, len(c['Changes']))
691 self.assertFalse(c['Done']) 699 self.assertFalse(c['Done']) # Done can not be used when working in reverse direction
692 lastFromTo = c['Last'] 700 lastFrom50Reverse = c['Last']
693 self.assertLess(lastFrom10, lastFromTo) 701 firstFrom50Reverse = c['First']
702 self.assertLess(firstFrom50Reverse, lastFrom50Reverse)
703 self.assertEqual(lastFrom50Reverse, lastFrom1000NewInstances)
704 self.assertEqual(firstFrom50Reverse, firstFrom1000NewInstances)
705
706 # test with only 'to' and limit to 10 NewInstance changes
707 c = DoGet(_REMOTE, '/changes', { 'type': 'NewInstance', 'to': lastFrom1000NewInstances, 'limit' : 10 })
708 self.assertEqual(lastFrom1000NewInstances, c['Changes'][-1]['Seq'])
709 self.assertEqual(10, len(c['Changes']))
710 self.assertFalse(c['Done']) # Done can not be used when working in reverse direction
711 lastFrom10Reverse = c['Last']
712 firstFrom10Reverse = c['First']
713 self.assertLess(firstFrom10Reverse, lastFrom10Reverse)
714 self.assertEqual(lastFrom10Reverse, lastFrom1000NewInstances)
715 self.assertLessEqual(firstFrom50Reverse, firstFrom10Reverse)
694 716
695 717
696 def test_archive(self): 718 def test_archive(self):
697 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') 719 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
698 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') 720 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')