Back to home page

Project CMSSW displayed by LXR

 
 

    


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     //empty catalog
0020     edm::CatalogAttributes tmp_cat;
0021     //use the first catalog provided by site local config
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     //empty catalog
0029     edm::CatalogAttributes tmp_cat;
0030     //use the second catalog provided by site local config
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     //empty catalog
0048     edm::CatalogAttributes tmp_cat;
0049     //use the third catalog provided by site local config above
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     //one level chain between "root" and "second" protocols (see storage.json)
0059     CHECK("root://host.domain//pnfs/cms/store/group/bha/bho" ==
0060           fl.pfn("/store/group/bha/bho", edm::CatalogType::RucioCatalog));
0061     //two levels chain between "root", "second" and "first" (see storage.json)
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   //create the services
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   //make the services available
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 }