File indexing completed on 2025-04-24 01:27:56
0001 #include "FWCore/Catalog/interface/FileLocator.h"
0002 #include "FWCore/Catalog/interface/SiteLocalConfig.h"
0003 #include "FWCore/Utilities/interface/Exception.h"
0004 #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h"
0005
0006 #include "TestSiteLocalConfig.h"
0007
0008 #include <filesystem>
0009 #include <string>
0010
0011 #define CATCH_CONFIG_MAIN
0012 #include "catch.hpp"
0013
0014 TEST_CASE("FileLocator with Rucio data catalog", "[FWCore/Catalog]") {
0015 edm::ServiceToken tempToken = edmtest::catalog::makeTestSiteLocalConfigToken();
0016
0017 SECTION("prefix") {
0018 edm::ServiceRegistry::Operate operate(tempToken);
0019
0020 edm::CatalogAttributes tmp_cat;
0021
0022 edm::FileLocator fl(tmp_cat, 0);
0023 CHECK("root://cmsxrootd.fnal.gov/store/group/bha/bho" ==
0024 fl.pfn("/store/group/bha/bho", edm::CatalogType::RucioCatalog));
0025 }
0026 SECTION("rule") {
0027 edm::ServiceRegistry::Operate operate(tempToken);
0028
0029 edm::CatalogAttributes tmp_cat;
0030
0031 edm::FileLocator fl(tmp_cat, 1);
0032 const std::array<const char*, 7> lfn = {{"/bha/bho",
0033 "bha",
0034 "file:bha",
0035 "file:/bha/bho",
0036 "/castor/cern.ch/cms/bha/bho",
0037 "someprotocol:/castor/cern.ch/cms/bha/bho",
0038 "someprotocol:/bha/bho"}};
0039 CHECK("root://cmsdcadisk.fnal.gov//dcache/uscmsdisk/store/group/bha/bho" ==
0040 fl.pfn("/store/group/bha/bho", edm::CatalogType::RucioCatalog));
0041 for (auto file : lfn) {
0042 CHECK("" == fl.pfn(file, edm::CatalogType::RucioCatalog));
0043 }
0044 }
0045 SECTION("chainedrule") {
0046 edm::ServiceRegistry::Operate operate(tempToken);
0047
0048 edm::CatalogAttributes tmp_cat;
0049
0050 edm::FileLocator fl(tmp_cat, 2);
0051 const std::array<const char*, 7> lfn = {{"/bha/bho",
0052 "bha",
0053 "file:bha",
0054 "file:/bha/bho",
0055 "/castor/cern.ch/cms/bha/bho",
0056 "someprotocol:/castor/cern.ch/cms/bha/bho",
0057 "someprotocol:/bha/bho"}};
0058
0059 CHECK("root://host.domain//pnfs/cms/store/group/bha/bho" ==
0060 fl.pfn("/store/group/bha/bho", edm::CatalogType::RucioCatalog));
0061
0062 CHECK("root://host.domain//pnfs/cms/store/user/AAA/bho" ==
0063 fl.pfn("/store/user/aaa/bho", edm::CatalogType::RucioCatalog));
0064 for (auto file : lfn) {
0065 CHECK("" == fl.pfn(file, edm::CatalogType::RucioCatalog));
0066 }
0067 }
0068 }
0069
0070 TEST_CASE("FileLocator with TrivialFileCatalog", "[FWCore/Catalog]") {
0071 std::string CMSSW_BASE(std::getenv("CMSSW_BASE"));
0072 std::string CMSSW_RELEASE_BASE(std::getenv("CMSSW_RELEASE_BASE"));
0073 std::string file_name("/src/FWCore/Catalog/test/simple_catalog.xml");
0074 std::string full_file_name = std::filesystem::exists((CMSSW_BASE + file_name).c_str())
0075 ? CMSSW_BASE + file_name
0076 : CMSSW_RELEASE_BASE + file_name;
0077
0078
0079 std::vector<std::string> tmp{std::string("trivialcatalog_file:") + full_file_name + "?protocol=xrd"};
0080 edm::ServiceToken tempToken(edm::ServiceRegistry::createContaining(
0081 std::unique_ptr<edm::SiteLocalConfig>(std::make_unique<edmtest::catalog::TestSiteLocalConfig>(tmp))));
0082
0083
0084 SECTION("standard") {
0085 edm::ServiceRegistry::Operate operate(tempToken);
0086 edm::FileLocator fl("");
0087
0088 const std::array<const char*, 7> lfn = {{"/bha/bho",
0089 "bha",
0090 "file:bha",
0091 "file:/bha/bho",
0092 "/castor/cern.ch/cms/bha/bho",
0093 "someprotocol:/castor/cern.ch/cms/bha/bho",
0094 "someprotocol:/bha/bho"}};
0095
0096 CHECK("/storage/path/store/group/bha/bho" == fl.pfn("/store/group/bha/bho", edm::CatalogType::TrivialCatalog));
0097 for (auto file : lfn) {
0098 CHECK("" == fl.pfn(file, edm::CatalogType::TrivialCatalog));
0099 }
0100 }
0101
0102 SECTION("override") {
0103 edm::ServiceRegistry::Operate operate(tempToken);
0104
0105 std::string override_file_name("/src/FWCore/Catalog/test/override_catalog.xml");
0106 std::string override_full_file_name = std::filesystem::exists((CMSSW_BASE + override_file_name).c_str())
0107 ? CMSSW_BASE + override_file_name
0108 : CMSSW_RELEASE_BASE + override_file_name;
0109
0110 edm::FileLocator fl(("trivialcatalog_file:" + override_full_file_name + "?protocol=override").c_str());
0111
0112 std::array<const char*, 8> lfn = {{"/store/group/bha/bho",
0113 "/bha/bho",
0114 "bha",
0115 "file:bha",
0116 "file:/bha/bho",
0117 "/castor/cern.ch/cms/bha/bho",
0118 "someprotocol:/castor/cern.ch/cms/bha/bho",
0119 "someprotocol:/bha/bho"}};
0120
0121 auto const overriden_file =
0122 "/store/unmerged/relval/CMSSW_3_8_0_pre3/RelValZTT/GEN-SIM-DIGI-RAW-HLTDEBUG/START38_V2-v1/0666/"
0123 "80EC0BCD-D279-DF11-B1DB-0030487C90EE.root";
0124
0125 CHECK("/FULL_PATH_TO_THE_FIRST_STEP_ROOT_FILE/80EC0BCD-D279-DF11-B1DB-0030487C90EE.root" ==
0126 fl.pfn(overriden_file, edm::CatalogType::TrivialCatalog));
0127
0128 for (auto f : lfn) {
0129 CHECK("" == fl.pfn(f, edm::CatalogType::TrivialCatalog));
0130 }
0131 }
0132 }