Mercurial > hg > orthanc-databases
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 } |