Mercurial > hg > orthanc-tests
comparison Tests/Tests.py @ 11:c660a64ce2dd
cont
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 18 Jun 2015 14:18:49 +0200 |
parents | 5f73008bb873 |
children | 15c166240dfb |
comparison
equal
deleted
inserted
replaced
10:5f73008bb873 | 11:c660a64ce2dd |
---|---|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 16 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
17 | 17 |
18 | 18 |
19 import unittest | 19 import unittest |
20 | 20 |
21 from PIL import ImageChops | |
21 from Toolbox import * | 22 from Toolbox import * |
22 | 23 |
23 _LOCAL = None | 24 _LOCAL = None |
24 _REMOTE = None | 25 _REMOTE = None |
25 | 26 |
533 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']) | 534 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries']) |
534 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries']) | 535 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries']) |
535 | 536 |
536 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip()) | 537 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip()) |
537 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip()) | 538 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip()) |
539 | |
540 | |
541 | |
542 def test_storescu(self): | |
543 # Check emptiness | |
544 e = DoGet(_REMOTE, '/exports') | |
545 self.assertEqual(0, len(e['Exports'])) | |
546 self.assertEqual(0, e['Last']) | |
547 self.assertTrue(e['Done']) | |
548 e = DoGet(_REMOTE, '/exports?last') | |
549 self.assertEqual(0, len(e['Exports'])) | |
550 self.assertEqual(0, e['Last']) | |
551 self.assertTrue(e['Done']) | |
552 | |
553 # Add 1 instance | |
554 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
555 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
556 | |
557 # Export the instance | |
558 j = DoPost(_REMOTE, '/modalities/orthanctest/store', str(i), 'text/plain') # instance | |
559 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
560 self.assertEqual(1, len(DoGet(_LOCAL, '/studies'))) | |
561 self.assertEqual(1, len(DoGet(_LOCAL, '/series'))) | |
562 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
563 | |
564 e = DoGet(_REMOTE, '/exports') | |
565 self.assertEqual(1, len(e['Exports'])) | |
566 self.assertTrue(e['Done']) | |
567 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
568 e = DoGet(_REMOTE, '/exports?limit=1') | |
569 self.assertEqual(1, len(e['Exports'])) | |
570 self.assertTrue(e['Done']) | |
571 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
572 e = DoGet(_REMOTE, '/exports?last') | |
573 self.assertEqual(1, len(e['Exports'])) | |
574 self.assertTrue(e['Done']) | |
575 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
576 seqInstance = e['Last'] | |
577 | |
578 # Export the series | |
579 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', 'text/plain') | |
580 | |
581 e = DoGet(_REMOTE, '/exports') | |
582 self.assertEqual(2, len(e['Exports'])) | |
583 self.assertTrue(e['Done']) | |
584 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
585 seqSeries = e['Last'] | |
586 self.assertNotEqual(seqInstance, seqSeries) | |
587 e = DoGet(_REMOTE, '/exports?limit=1&since=0') | |
588 self.assertEqual(1, len(e['Exports'])) | |
589 self.assertFalse(e['Done']) | |
590 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance) | |
591 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance)) | |
592 self.assertEqual(1, len(e['Exports'])) | |
593 self.assertTrue(e['Done']) | |
594 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries) | |
595 e = DoGet(_REMOTE, '/exports?last') | |
596 self.assertEqual(1, len(e['Exports'])) | |
597 self.assertTrue(e['Done']) | |
598 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries) | |
599 | |
600 # Export the study | |
601 j = DoPost(_REMOTE, '/modalities/orthanctest/store', 'b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', 'text/plain') | |
602 seqStudy = DoGet(_REMOTE, '/exports')['Last'] | |
603 | |
604 # Export the patient | |
605 j = DoPost(_REMOTE, '/modalities/orthanctest/store', '6816cb19-844d5aee-85245eba-28e841e6-2414fae2', 'text/plain') | |
606 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
607 self.assertEqual(1, len(DoGet(_LOCAL, '/studies'))) | |
608 self.assertEqual(1, len(DoGet(_LOCAL, '/series'))) | |
609 self.assertEqual(1, len(DoGet(_LOCAL, '/instances'))) | |
610 | |
611 e = DoGet(_REMOTE, '/exports') | |
612 self.assertEqual(4, len(e['Exports'])) | |
613 self.assertTrue(e['Done']) | |
614 self.assertEqual(e['Exports'][-1]['Seq'], e['Last']) | |
615 seqPatient = e['Last'] | |
616 self.assertNotEqual(seqInstance, seqSeries) | |
617 self.assertNotEqual(seqSeries, seqStudy) | |
618 self.assertNotEqual(seqStudy, seqPatient) | |
619 self.assertTrue(seqInstance < seqSeries) | |
620 self.assertTrue(seqSeries < seqStudy) | |
621 self.assertTrue(seqStudy < seqPatient) | |
622 e = DoGet(_REMOTE, '/exports?limit=1&since=0') | |
623 self.assertEqual(1, len(e['Exports'])) | |
624 self.assertFalse(e['Done']) | |
625 self.assertEqual(e['Exports'][-1]['Seq'], seqInstance) | |
626 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqInstance)) | |
627 self.assertEqual(1, len(e['Exports'])) | |
628 self.assertFalse(e['Done']) | |
629 self.assertEqual(e['Exports'][-1]['Seq'], seqSeries) | |
630 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqSeries)) | |
631 self.assertEqual(1, len(e['Exports'])) | |
632 self.assertFalse(e['Done']) | |
633 self.assertEqual(e['Exports'][-1]['Seq'], seqStudy) | |
634 e = DoGet(_REMOTE, '/exports?limit=1&since=' + str(seqStudy)) | |
635 self.assertEqual(1, len(e['Exports'])) | |
636 self.assertTrue(e['Done']) | |
637 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient) | |
638 e = DoGet(_REMOTE, '/exports?last') | |
639 self.assertEqual(1, len(e['Exports'])) | |
640 self.assertTrue(e['Done']) | |
641 self.assertEqual(e['Exports'][-1]['Seq'], seqPatient) | |
642 | |
643 | |
644 # Check the content of the logged information | |
645 e = DoGet(_REMOTE, '/exports')['Exports'] | |
646 | |
647 if 'PatientID' in e[0]: | |
648 # Since Orthanc 0.8.6 | |
649 patient = 'PatientID' | |
650 study = 'StudyInstanceUID' | |
651 series = 'SeriesInstanceUID' | |
652 instance = 'SOPInstanceUID' | |
653 else: | |
654 # Up to Orthanc 0.8.5 | |
655 patient = 'PatientId' | |
656 study = 'StudyInstanceUid' | |
657 series = 'SeriesInstanceUid' | |
658 instance = 'SopInstanceUid' | |
659 | |
660 for k in range(4): | |
661 self.assertTrue('Date' in e[k]) | |
662 self.assertTrue('Seq' in e[k]) | |
663 self.assertEqual('orthanctest', e[k]['RemoteModality']) | |
664 | |
665 self.assertEqual(10, len(e[0])) | |
666 self.assertEqual('Instance', e[0]['ResourceType']) | |
667 self.assertEqual('66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['ID']) | |
668 self.assertEqual('/instances/66a662ce-7430e543-bad44d47-0dc5a943-ec7a538d', e[0]['Path']) | |
669 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7040.1171286242.109', e[0][instance]) | |
670 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', e[0][series]) | |
671 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[0][study]) | |
672 self.assertEqual('ozp00SjY2xG', e[0][patient]) | |
673 | |
674 self.assertEqual(9, len(e[1])) | |
675 self.assertEqual('Series', e[1]['ResourceType']) | |
676 self.assertEqual('f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['ID']) | |
677 self.assertEqual('/series/f2635388-f01d497a-15f7c06b-ad7dba06-c4c599fe', e[1]['Path']) | |
678 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.394', e[1][series]) | |
679 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[1][study]) | |
680 self.assertEqual('ozp00SjY2xG', e[1][patient]) | |
681 | |
682 self.assertEqual(8, len(e[2])) | |
683 self.assertEqual('Study', e[2]['ResourceType']) | |
684 self.assertEqual('b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['ID']) | |
685 self.assertEqual('/studies/b9c08539-26f93bde-c81ab0d7-bffaf2cb-a4d0bdd0', e[2]['Path']) | |
686 self.assertEqual('1.2.840.113619.2.176.2025.1499492.7391.1171285944.390', e[2][study]) | |
687 self.assertEqual('ozp00SjY2xG', e[2][patient]) | |
688 | |
689 self.assertEqual(7, len(e[3])) | |
690 self.assertEqual('Patient', e[3]['ResourceType']) | |
691 self.assertEqual('6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['ID']) | |
692 self.assertEqual('/patients/6816cb19-844d5aee-85245eba-28e841e6-2414fae2', e[3]['Path']) | |
693 self.assertEqual('ozp00SjY2xG', e[3][patient]) | |
694 | |
695 DropOrthanc(_REMOTE) | |
696 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
697 | |
698 | |
699 def test_store_peer(self): | |
700 self.assertEqual(0, len(DoGet(_LOCAL, '/exports')['Exports'])) | |
701 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
702 | |
703 i = UploadInstance(_REMOTE, 'DummyCT.dcm')['ID'] | |
704 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
705 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
706 | |
707 j = DoPost(_REMOTE, '/peers/peer/store', str(i), 'text/plain') | |
708 self.assertEqual(1, len(DoGet(_LOCAL, '/patients'))) | |
709 self.assertEqual(1, len(DoGet(_REMOTE, '/patients'))) | |
710 | |
711 self.assertEqual(1, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
712 | |
713 DropOrthanc(_REMOTE) | |
714 self.assertEqual(0, len(DoGet(_REMOTE, '/exports')['Exports'])) | |
715 | |
716 | |
717 def test_bulk_storescu(self): | |
718 self.assertEqual(0, len(DoGet(_LOCAL, '/patients'))) | |
719 | |
720 a = UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm') | |
721 b = UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm') | |
722 | |
723 j = DoPost(_REMOTE, '/modalities/orthanctest/store', [ a['ID'], b['ID'] ], 'application/json') | |
724 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) | |
725 | |
726 DropOrthanc(_LOCAL) | |
727 | |
728 # Send using patient's UUID | |
729 self.assertEqual(0, len(DoGet(_LOCAL, '/instances'))) | |
730 j = DoPost(_REMOTE, '/modalities/orthanctest/store', | |
731 [ 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17' ], 'application/json') | |
732 self.assertEqual(2, len(DoGet(_LOCAL, '/instances'))) | |
733 | |
734 | |
735 def test_color(self): | |
736 i = UploadInstance(_REMOTE, 'ColorTestMalaterre.dcm')['ID'] | |
737 im = GetImage(_REMOTE, '/instances/%s/preview' % i) | |
738 self.assertEqual("RGB", im.mode) | |
739 self.assertEqual(41, im.size[0]) | |
740 self.assertEqual(41, im.size[1]) | |
741 | |
742 # http://effbot.org/zone/pil-comparing-images.htm | |
743 truth = Image.open(os.path.join(os.path.dirname(__file__), '..', 'Database', 'ColorTestMalaterre.png')) | |
744 self.assertTrue(ImageChops.difference(im, truth).getbbox() is None) | |
745 | |
746 |