comparison Framework/Plugins/IndexUnitTests.h @ 312:117cf247c086

added unit test
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 14 Jul 2021 14:31:12 +0200
parents 5f0d5f849944
children 8bb2eb006e21
comparison
equal deleted inserted replaced
311:5f0d5f849944 312:117cf247c086
599 db.DeleteResource(*output, *manager, p1); 599 db.DeleteResource(*output, *manager, p1);
600 db.DeleteResource(*output, *manager, p3); 600 db.DeleteResource(*output, *manager, p3);
601 601
602 for (size_t level = 0; level < 4; level++) 602 for (size_t level = 0; level < 4; level++)
603 { 603 {
604 // Test cascade up to the "patient" level 604 for (size_t attachmentLevel = 0; attachmentLevel < 4; attachmentLevel++)
605 ASSERT_EQ(0u, db.GetAllResourcesCount(*manager)); 605 {
606 606 // Test cascade up to the "patient" level
607 std::vector<int64_t> resources; 607 ASSERT_EQ(0u, db.GetAllResourcesCount(*manager));
608 resources.push_back(db.CreateResource(*manager, "patient", OrthancPluginResourceType_Patient)); 608
609 resources.push_back(db.CreateResource(*manager, "study", OrthancPluginResourceType_Study)); 609 std::vector<int64_t> resources;
610 resources.push_back(db.CreateResource(*manager, "series", OrthancPluginResourceType_Series)); 610 resources.push_back(db.CreateResource(*manager, "patient", OrthancPluginResourceType_Patient));
611 resources.push_back(db.CreateResource(*manager, "instance", OrthancPluginResourceType_Instance)); 611 resources.push_back(db.CreateResource(*manager, "study", OrthancPluginResourceType_Study));
612 612 resources.push_back(db.CreateResource(*manager, "series", OrthancPluginResourceType_Series));
613 OrthancPluginAttachment a; 613 resources.push_back(db.CreateResource(*manager, "instance", OrthancPluginResourceType_Instance));
614 a.uuid = "attachment"; 614
615 a.contentType = Orthanc::FileContentType_DicomAsJson; 615 OrthancPluginAttachment a;
616 a.uncompressedSize = 4242; 616 a.uuid = "attachment";
617 a.uncompressedHash = "md5"; 617 a.contentType = Orthanc::FileContentType_DicomAsJson;
618 a.compressionType = Orthanc::CompressionType_None; 618 a.uncompressedSize = 4242;
619 a.compressedSize = 4242; 619 a.uncompressedHash = "md5";
620 a.compressedHash = "md5"; 620 a.compressionType = Orthanc::CompressionType_None;
621 db.AddAttachment(*manager, resources[2], a, 42); 621 a.compressedSize = 4242;
622 622 a.compressedHash = "md5";
623 db.AttachChild(*manager, resources[0], resources[1]); 623 db.AddAttachment(*manager, resources[attachmentLevel], a, 42);
624 db.AttachChild(*manager, resources[1], resources[2]); 624
625 db.AttachChild(*manager, resources[2], resources[3]); 625 db.AttachChild(*manager, resources[0], resources[1]);
626 ASSERT_EQ(4u, db.GetAllResourcesCount(*manager)); 626 db.AttachChild(*manager, resources[1], resources[2]);
627 627 db.AttachChild(*manager, resources[2], resources[3]);
628 deletedAttachments.clear(); 628 ASSERT_EQ(4u, db.GetAllResourcesCount(*manager));
629 deletedResources.clear(); 629
630 remainingAncestor.reset(); 630 deletedAttachments.clear();
631 631 deletedResources.clear();
632 db.DeleteResource(*output, *manager, resources[level]); 632 remainingAncestor.reset();
633 633
634 ASSERT_EQ(1u, deletedAttachments.size()); 634 db.DeleteResource(*output, *manager, resources[level]);
635 ASSERT_EQ("attachment", *deletedAttachments.begin()); 635
636 ASSERT_EQ(4u, deletedResources.size()); 636 ASSERT_EQ(1u, deletedAttachments.size());
637 ASSERT_EQ(OrthancPluginResourceType_Patient, deletedResources["patient"]); 637 ASSERT_EQ("attachment", *deletedAttachments.begin());
638 ASSERT_EQ(OrthancPluginResourceType_Study, deletedResources["study"]); 638 ASSERT_EQ(4u, deletedResources.size());
639 ASSERT_EQ(OrthancPluginResourceType_Series, deletedResources["series"]); 639 ASSERT_EQ(OrthancPluginResourceType_Patient, deletedResources["patient"]);
640 ASSERT_EQ(OrthancPluginResourceType_Instance, deletedResources["instance"]); 640 ASSERT_EQ(OrthancPluginResourceType_Study, deletedResources["study"]);
641 ASSERT_TRUE(remainingAncestor.get() == NULL); 641 ASSERT_EQ(OrthancPluginResourceType_Series, deletedResources["series"]);
642 ASSERT_EQ(OrthancPluginResourceType_Instance, deletedResources["instance"]);
643 ASSERT_TRUE(remainingAncestor.get() == NULL);
644 }
642 } 645 }
643 646
644 for (size_t level = 1; level < 4; level++) 647 for (size_t level = 1; level < 4; level++)
645 { 648 {
646 // Test remaining ancestor 649 for (size_t attachmentLevel = 0; attachmentLevel < 4; attachmentLevel++)
647 ASSERT_EQ(0u, db.GetAllResourcesCount(*manager));
648
649 std::vector<int64_t> resources;
650 resources.push_back(db.CreateResource(*manager, "patient", OrthancPluginResourceType_Patient));
651 resources.push_back(db.CreateResource(*manager, "study", OrthancPluginResourceType_Study));
652 resources.push_back(db.CreateResource(*manager, "series", OrthancPluginResourceType_Series));
653 resources.push_back(db.CreateResource(*manager, "instance", OrthancPluginResourceType_Instance));
654
655 int64_t unrelated = db.CreateResource(*manager, "unrelated", OrthancPluginResourceType_Patient);
656 int64_t remaining = db.CreateResource(*manager, "remaining", static_cast<OrthancPluginResourceType>(level));
657
658 db.AttachChild(*manager, resources[0], resources[1]);
659 db.AttachChild(*manager, resources[1], resources[2]);
660 db.AttachChild(*manager, resources[2], resources[3]);
661 db.AttachChild(*manager, resources[level - 1], remaining);
662 ASSERT_EQ(6u, db.GetAllResourcesCount(*manager));
663
664 deletedAttachments.clear();
665 deletedResources.clear();
666 remainingAncestor.reset();
667
668 db.DeleteResource(*output, *manager, resources[3]); // delete instance
669
670 ASSERT_EQ(0u, deletedAttachments.size());
671 ASSERT_EQ(OrthancPluginResourceType_Instance, deletedResources["instance"]);
672
673 ASSERT_TRUE(remainingAncestor.get() != NULL);
674
675 switch (level)
676 { 650 {
677 case 1: 651 // Test remaining ancestor
678 ASSERT_EQ(3u, deletedResources.size()); 652 ASSERT_EQ(0u, db.GetAllResourcesCount(*manager));
679 ASSERT_EQ(OrthancPluginResourceType_Study, deletedResources["study"]); 653
680 ASSERT_EQ(OrthancPluginResourceType_Series, deletedResources["series"]); 654 std::vector<int64_t> resources;
681 ASSERT_EQ("patient", remainingAncestor->first); 655 resources.push_back(db.CreateResource(*manager, "patient", OrthancPluginResourceType_Patient));
682 ASSERT_EQ(OrthancPluginResourceType_Patient, remainingAncestor->second); 656 resources.push_back(db.CreateResource(*manager, "study", OrthancPluginResourceType_Study));
683 break; 657 resources.push_back(db.CreateResource(*manager, "series", OrthancPluginResourceType_Series));
684 658 resources.push_back(db.CreateResource(*manager, "instance", OrthancPluginResourceType_Instance));
685 case 2: 659
686 ASSERT_EQ(2u, deletedResources.size()); 660 int64_t unrelated = db.CreateResource(*manager, "unrelated", OrthancPluginResourceType_Patient);
687 ASSERT_EQ(OrthancPluginResourceType_Series, deletedResources["series"]); 661 int64_t remaining = db.CreateResource(*manager, "remaining", static_cast<OrthancPluginResourceType>(level));
688 ASSERT_EQ("study", remainingAncestor->first); 662
689 ASSERT_EQ(OrthancPluginResourceType_Study, remainingAncestor->second); 663 db.AttachChild(*manager, resources[0], resources[1]);
690 break; 664 db.AttachChild(*manager, resources[1], resources[2]);
691 665 db.AttachChild(*manager, resources[2], resources[3]);
692 case 3: 666 db.AttachChild(*manager, resources[level - 1], remaining);
693 ASSERT_EQ(1u, deletedResources.size()); 667 ASSERT_EQ(6u, db.GetAllResourcesCount(*manager));
694 ASSERT_EQ("series", remainingAncestor->first); 668
695 ASSERT_EQ(OrthancPluginResourceType_Series, remainingAncestor->second); 669 OrthancPluginAttachment a;
696 break; 670 a.uuid = "attachment";
697 671 a.contentType = Orthanc::FileContentType_DicomAsJson;
698 default: 672 a.uncompressedSize = 4242;
699 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); 673 a.uncompressedHash = "md5";
674 a.compressionType = Orthanc::CompressionType_None;
675 a.compressedSize = 4242;
676 a.compressedHash = "md5";
677 db.AddAttachment(*manager, resources[attachmentLevel], a, 42);
678
679 deletedAttachments.clear();
680 deletedResources.clear();
681 remainingAncestor.reset();
682
683 db.DeleteResource(*output, *manager, resources[3]); // delete instance
684
685 if (attachmentLevel < level)
686 {
687 ASSERT_EQ(0u, deletedAttachments.size());
688 }
689 else
690 {
691 ASSERT_EQ(1u, deletedAttachments.size());
692 ASSERT_EQ("attachment", *deletedAttachments.begin());
693 }
694
695 ASSERT_EQ(OrthancPluginResourceType_Instance, deletedResources["instance"]);
696
697 ASSERT_TRUE(remainingAncestor.get() != NULL);
698
699 switch (level)
700 {
701 case 1:
702 ASSERT_EQ(3u, deletedResources.size());
703 ASSERT_EQ(OrthancPluginResourceType_Study, deletedResources["study"]);
704 ASSERT_EQ(OrthancPluginResourceType_Series, deletedResources["series"]);
705 ASSERT_EQ("patient", remainingAncestor->first);
706 ASSERT_EQ(OrthancPluginResourceType_Patient, remainingAncestor->second);
707 break;
708
709 case 2:
710 ASSERT_EQ(2u, deletedResources.size());
711 ASSERT_EQ(OrthancPluginResourceType_Series, deletedResources["series"]);
712 ASSERT_EQ("study", remainingAncestor->first);
713 ASSERT_EQ(OrthancPluginResourceType_Study, remainingAncestor->second);
714 break;
715
716 case 3:
717 ASSERT_EQ(1u, deletedResources.size());
718 ASSERT_EQ("series", remainingAncestor->first);
719 ASSERT_EQ(OrthancPluginResourceType_Series, remainingAncestor->second);
720 break;
721
722 default:
723 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
724 }
725
726 db.DeleteResource(*output, *manager, resources[0]);
727 db.DeleteResource(*output, *manager, unrelated);
700 } 728 }
701
702 db.DeleteResource(*output, *manager, resources[0]);
703 db.DeleteResource(*output, *manager, unrelated);
704 } 729 }
705 730
706 manager->Close(); 731 manager->Close();
707 } 732 }