Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-31 22:26:48

0001 // -*- C++ -*-
0002 //
0003 // Package:     Framework
0004 // Class  :     eventsetup_plugin_t
0005 //
0006 // Implementation:
0007 //     <Notes on implementation>
0008 //
0009 // Author:      Chris Jones
0010 // Created:     Thu May 26 11:01:19 EDT 2005
0011 // Changed:     Viji Sundararajan 28-Jun-2005
0012 //
0013 
0014 // system include files
0015 #include "cppunit/extensions/HelperMacros.h"
0016 // user include files
0017 #include "FWCore/PluginManager/interface/PluginManager.h"
0018 #include "FWCore/PluginManager/interface/standard.h"
0019 #include "FWCore/Version/interface/GetReleaseVersion.h"
0020 #include "FWCore/Framework/interface/SourceFactory.h"
0021 #include "FWCore/Framework/interface/ModuleFactory.h"
0022 #include "FWCore/Framework/interface/EventSetupProvider.h"
0023 #include "FWCore/Framework/interface/EventSetupsController.h"
0024 #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
0025 
0026 #include "DummyFinder.h"
0027 #include "DummyESProductResolverProvider.h"
0028 #include "TestTypeResolvers.h"
0029 
0030 using namespace edm::eventsetup;
0031 
0032 namespace {
0033   edm::ActivityRegistry activityRegistry;
0034 }
0035 
0036 namespace edm::test {
0037   namespace other {
0038     class LoadableDummyFinderA : public DummyFinder {
0039     public:
0040       LoadableDummyFinderA(const edm::ParameterSet&) { ++count_; }
0041       static int count_;
0042     };
0043     int LoadableDummyFinderA::count_ = 0;
0044 
0045     class LoadableDummyProviderA : public edm::eventsetup::test::DummyESProductResolverProvider {
0046     public:
0047       LoadableDummyProviderA(const edm::ParameterSet& iPSet)
0048           : DummyESProductResolverProvider(
0049                 edm::eventsetup::test::DummyData(iPSet.getUntrackedParameter<int>("value", 1))) {
0050         ++count_;
0051       }
0052       static int count_;
0053     };
0054     int LoadableDummyProviderA::count_ = 0;
0055 
0056     class LoadableDummyESSourceA : public edm::eventsetup::test::DummyESProductResolverProvider, public DummyFinder {
0057     public:
0058       LoadableDummyESSourceA(const edm::ParameterSet& iPSet)
0059           : DummyESProductResolverProvider(
0060                 edm::eventsetup::test::DummyData(iPSet.getUntrackedParameter<int>("value", 2))) {
0061         setInterval(edm::ValidityInterval(edm::IOVSyncValue(edm::EventID(1, 0, 0)), edm::IOVSyncValue::endOfTime()));
0062         ++count_;
0063       }
0064       static int count_;
0065     };
0066     int LoadableDummyESSourceA::count_ = 0;
0067   }  // namespace other
0068   namespace cpu {
0069     class LoadableDummyFinderA : public DummyFinder {
0070     public:
0071       LoadableDummyFinderA(const edm::ParameterSet&) { ++count_; }
0072       static int count_;
0073     };
0074     int LoadableDummyFinderA::count_ = 0;
0075 
0076     class LoadableDummyProviderA : public edm::eventsetup::test::DummyESProductResolverProvider {
0077     public:
0078       LoadableDummyProviderA(const edm::ParameterSet& iPSet)
0079           : DummyESProductResolverProvider(
0080                 edm::eventsetup::test::DummyData(iPSet.getUntrackedParameter<int>("value", 1))) {
0081         ++count_;
0082       }
0083       static int count_;
0084     };
0085     int LoadableDummyProviderA::count_ = 0;
0086     using LoadableDummyProviderB = LoadableDummyProviderA;
0087 
0088     class LoadableDummyESSourceA : public edm::eventsetup::test::DummyESProductResolverProvider, public DummyFinder {
0089     public:
0090       LoadableDummyESSourceA(const edm::ParameterSet& iPSet)
0091           : DummyESProductResolverProvider(
0092                 edm::eventsetup::test::DummyData(iPSet.getUntrackedParameter<int>("value", 2))) {
0093         setInterval(edm::ValidityInterval(edm::IOVSyncValue(edm::EventID(1, 0, 0)), edm::IOVSyncValue::endOfTime()));
0094         ++count_;
0095       }
0096       static int count_;
0097     };
0098     int LoadableDummyESSourceA::count_ = 0;
0099     using LoadableDummyESSourceB = LoadableDummyESSourceA;
0100   }  // namespace cpu
0101 }  // namespace edm::test
0102 
0103 DEFINE_FWK_EVENTSETUP_SOURCE(edm::test::other::LoadableDummyFinderA);
0104 DEFINE_FWK_EVENTSETUP_SOURCE(edm::test::cpu::LoadableDummyFinderA);
0105 DEFINE_FWK_EVENTSETUP_SOURCE(edm::test::other::LoadableDummyESSourceA);
0106 DEFINE_FWK_EVENTSETUP_SOURCE(edm::test::cpu::LoadableDummyESSourceA);
0107 DEFINE_FWK_EVENTSETUP_SOURCE(edm::test::cpu::LoadableDummyESSourceB);
0108 DEFINE_FWK_EVENTSETUP_MODULE(edm::test::other::LoadableDummyProviderA);
0109 DEFINE_FWK_EVENTSETUP_MODULE(edm::test::cpu::LoadableDummyProviderA);
0110 DEFINE_FWK_EVENTSETUP_MODULE(edm::test::cpu::LoadableDummyProviderB);
0111 
0112 class testEventsetupplugin : public CppUnit::TestFixture {
0113   CPPUNIT_TEST_SUITE(testEventsetupplugin);
0114 
0115   CPPUNIT_TEST(finderTest);
0116   CPPUNIT_TEST(simpleResolverTest);
0117   CPPUNIT_TEST(complexResolverTest);
0118 
0119   CPPUNIT_TEST_SUITE_END();
0120 
0121 public:
0122   void setUp() {}
0123   void tearDown() {}
0124 
0125   void finderTest();
0126   void simpleResolverTest();
0127   void complexResolverTest();
0128   void configurableResolverTest();
0129 };
0130 
0131 ///registration of the test so that the runner can find it
0132 CPPUNIT_TEST_SUITE_REGISTRATION(testEventsetupplugin);
0133 
0134 static void doInit() {
0135   static bool firstTime = true;
0136   if (firstTime) {
0137     if (not edmplugin::PluginManager::isAvailable()) {
0138       edmplugin::PluginManager::configure(edmplugin::standard::config());
0139     }
0140     firstTime = false;
0141   }
0142 }
0143 
0144 void testEventsetupplugin::finderTest()
0145 
0146 {
0147   doInit();
0148   EventSetupsController esController;
0149   EventSetupProvider provider(&activityRegistry);
0150   edm::ModuleTypeResolverMaker const* resolverMaker = nullptr;
0151 
0152   edm::ParameterSet dummyFinderPSet;
0153   dummyFinderPSet.addParameter("@module_type", std::string("LoadableDummyFinder"));
0154   dummyFinderPSet.addParameter("@module_label", std::string(""));
0155   dummyFinderPSet.registerIt();
0156   SourceFactory::get()->addTo(esController, provider, dummyFinderPSet, resolverMaker);
0157 
0158   ComponentDescription descFinder("LoadableDummyFinder", "", ComponentDescription::unknownID(), true);
0159   std::set<ComponentDescription> descriptions(provider.resolverProviderDescriptions());
0160   //should not be found since not a provider
0161   CPPUNIT_ASSERT(descriptions.find(descFinder) == descriptions.end());
0162 
0163   edm::ParameterSet dummyProviderPSet;
0164   dummyProviderPSet.addParameter("@module_type", std::string("LoadableDummyProvider"));
0165   dummyProviderPSet.addParameter("@module_label", std::string(""));
0166   dummyProviderPSet.registerIt();
0167   ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, resolverMaker);
0168 
0169   ComponentDescription desc("LoadableDummyProvider", "", ComponentDescription::unknownID(), false);
0170   descriptions = provider.resolverProviderDescriptions();
0171   CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0172   CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0173 
0174   edm::ParameterSet dummySourcePSet;
0175   dummySourcePSet.addParameter("@module_type", std::string("LoadableDummyESSource"));
0176   dummySourcePSet.addParameter("@module_label", std::string(""));
0177   dummySourcePSet.registerIt();
0178   SourceFactory::get()->addTo(esController, provider, dummySourcePSet, resolverMaker);
0179 
0180   ComponentDescription descSource("LoadableDummyESSource", "", ComponentDescription::unknownID(), true);
0181   descriptions = provider.resolverProviderDescriptions();
0182   CPPUNIT_ASSERT(descriptions.find(descSource) != descriptions.end());
0183   CPPUNIT_ASSERT(*(descriptions.find(descSource)) == descSource);
0184 }
0185 
0186 void testEventsetupplugin::simpleResolverTest() {
0187   doInit();
0188 
0189   edm::test::SimpleTestTypeResolverMaker resolverMaker;
0190   EventSetupsController esController(&resolverMaker);
0191   EventSetupProvider provider(&activityRegistry);
0192 
0193   edm::ParameterSet dummyFinderPSet;
0194   dummyFinderPSet.addParameter("@module_type", std::string("LoadableDummyFinder"));
0195   dummyFinderPSet.addParameter("@module_label", std::string(""));
0196   dummyFinderPSet.registerIt();
0197   SourceFactory::get()->addTo(esController, provider, dummyFinderPSet, &resolverMaker);
0198 
0199   ComponentDescription descFinder("LoadableDummyFinder", "", ComponentDescription::unknownID(), true);
0200   std::set<ComponentDescription> descriptions(provider.resolverProviderDescriptions());
0201   //should not be found since not a provider
0202   CPPUNIT_ASSERT(descriptions.find(descFinder) == descriptions.end());
0203 
0204   edm::ParameterSet dummyProviderPSet;
0205   dummyProviderPSet.addParameter("@module_type", std::string("LoadableDummyProvider"));
0206   dummyProviderPSet.addParameter("@module_label", std::string(""));
0207   dummyProviderPSet.registerIt();
0208   ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, &resolverMaker);
0209 
0210   ComponentDescription desc("LoadableDummyProvider", "", ComponentDescription::unknownID(), false);
0211   descriptions = provider.resolverProviderDescriptions();
0212   CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0213   CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0214 
0215   edm::ParameterSet dummySourcePSet;
0216   dummySourcePSet.addParameter("@module_type", std::string("LoadableDummyESSource"));
0217   dummySourcePSet.addParameter("@module_label", std::string(""));
0218   dummySourcePSet.registerIt();
0219   SourceFactory::get()->addTo(esController, provider, dummySourcePSet, &resolverMaker);
0220 
0221   ComponentDescription descSource("LoadableDummyESSource", "", ComponentDescription::unknownID(), true);
0222   descriptions = provider.resolverProviderDescriptions();
0223   CPPUNIT_ASSERT(descriptions.find(descSource) != descriptions.end());
0224   CPPUNIT_ASSERT(*(descriptions.find(descSource)) == descSource);
0225 }
0226 
0227 void testEventsetupplugin::complexResolverTest() {
0228   doInit();
0229 
0230   edm::test::ComplexTestTypeResolverMaker resolverMaker;
0231   EventSetupsController esController(&resolverMaker);
0232   EventSetupProvider provider(&activityRegistry);
0233 
0234   edm::ParameterSet dummyFinderPSet;
0235   dummyFinderPSet.addParameter("@module_type", std::string("generic::LoadableDummyFinderA"));
0236   dummyFinderPSet.addParameter("@module_label", std::string(""));
0237   dummyFinderPSet.registerIt();
0238   SourceFactory::get()->addTo(esController, provider, dummyFinderPSet, &resolverMaker);
0239 
0240   ComponentDescription descFinder("generic::LoadableDummyFinderA", "", ComponentDescription::unknownID(), true);
0241   std::set<ComponentDescription> descriptions(provider.resolverProviderDescriptions());
0242   //should not be found since not a provider
0243   CPPUNIT_ASSERT(descriptions.find(descFinder) == descriptions.end());
0244 
0245   // find other
0246   {
0247     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0248     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 0);
0249     edm::ParameterSet dummyProviderPSet;
0250     dummyProviderPSet.addParameter("@module_type", std::string("generic::LoadableDummyProviderA"));
0251     dummyProviderPSet.addParameter("@module_label", std::string(""));
0252     dummyProviderPSet.registerIt();
0253     ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, &resolverMaker);
0254 
0255     ComponentDescription desc("generic::LoadableDummyProviderA", "", ComponentDescription::unknownID(), false);
0256     descriptions = provider.resolverProviderDescriptions();
0257     CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0258     CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0259     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0260     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 1);
0261     edm::test::other::LoadableDummyProviderA::count_ = 0;
0262   }
0263 
0264   // find cpu
0265   {
0266     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderB::count_ == 0);
0267     edm::ParameterSet dummyProviderPSet;
0268     dummyProviderPSet.addParameter("@module_type", std::string("generic::LoadableDummyProviderB"));
0269     dummyProviderPSet.addParameter("@module_label", std::string(""));
0270     dummyProviderPSet.registerIt();
0271     ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, &resolverMaker);
0272 
0273     ComponentDescription desc("generic::LoadableDummyProviderB", "", ComponentDescription::unknownID(), false);
0274     descriptions = provider.resolverProviderDescriptions();
0275     CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0276     CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0277     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderB::count_ == 1);
0278     edm::test::cpu::LoadableDummyProviderB::count_ = 0;
0279   }
0280 
0281   // find other
0282   {
0283     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyESSourceA::count_ == 0);
0284     CPPUNIT_ASSERT(edm::test::other::LoadableDummyESSourceA::count_ == 0);
0285     edm::ParameterSet dummySourcePSet;
0286     dummySourcePSet.addParameter("@module_type", std::string("generic::LoadableDummyESSourceA"));
0287     dummySourcePSet.addParameter("@module_label", std::string(""));
0288     dummySourcePSet.registerIt();
0289     SourceFactory::get()->addTo(esController, provider, dummySourcePSet, &resolverMaker);
0290 
0291     ComponentDescription descSource("generic::LoadableDummyESSourceA", "", ComponentDescription::unknownID(), true);
0292     descriptions = provider.resolverProviderDescriptions();
0293     CPPUNIT_ASSERT(descriptions.find(descSource) != descriptions.end());
0294     CPPUNIT_ASSERT(*(descriptions.find(descSource)) == descSource);
0295     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyESSourceA::count_ == 0);
0296     CPPUNIT_ASSERT(edm::test::other::LoadableDummyESSourceA::count_ == 1);
0297     edm::test::other::LoadableDummyESSourceA::count_ = 0;
0298   }
0299 
0300   // find cpu
0301   {
0302     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyESSourceB::count_ == 0);
0303     edm::ParameterSet dummySourcePSet;
0304     dummySourcePSet.addParameter("@module_type", std::string("generic::LoadableDummyESSourceB"));
0305     dummySourcePSet.addParameter("@module_label", std::string(""));
0306     dummySourcePSet.registerIt();
0307     SourceFactory::get()->addTo(esController, provider, dummySourcePSet, &resolverMaker);
0308 
0309     ComponentDescription descSource("generic::LoadableDummyESSourceB", "", ComponentDescription::unknownID(), true);
0310     descriptions = provider.resolverProviderDescriptions();
0311     CPPUNIT_ASSERT(descriptions.find(descSource) != descriptions.end());
0312     CPPUNIT_ASSERT(*(descriptions.find(descSource)) == descSource);
0313     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyESSourceB::count_ == 1);
0314     edm::test::cpu::LoadableDummyESSourceB::count_ = 0;
0315   }
0316 }
0317 
0318 void testEventsetupplugin::configurableResolverTest() {
0319   doInit();
0320 
0321   edm::test::ConfigurableTestTypeResolverMaker resolverMaker;
0322   EventSetupsController esController(&resolverMaker);
0323   EventSetupProvider provider(&activityRegistry);
0324 
0325   edm::ParameterSet dummyFinderPSet;
0326   dummyFinderPSet.addParameter("@module_type", std::string("generic::LoadableDummyFinderA"));
0327   dummyFinderPSet.addParameter("@module_label", std::string(""));
0328   dummyFinderPSet.addUntrackedParameter("variant", std::string(""));
0329   dummyFinderPSet.registerIt();
0330   SourceFactory::get()->addTo(esController, provider, dummyFinderPSet, &resolverMaker);
0331 
0332   ComponentDescription descFinder("generic::LoadableDummyFinderA", "", ComponentDescription::unknownID(), true);
0333   std::set<ComponentDescription> descriptions(provider.resolverProviderDescriptions());
0334   //should not be found since not a provider
0335   CPPUNIT_ASSERT(descriptions.find(descFinder) == descriptions.end());
0336 
0337   // default behavior
0338   {
0339     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0340     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 0);
0341     edm::ParameterSet dummyProviderPSet;
0342     dummyProviderPSet.addParameter("@module_type", std::string("generic::LoadableDummyProviderA"));
0343     dummyProviderPSet.addParameter("@module_label", std::string(""));
0344     dummyProviderPSet.addUntrackedParameter("variant", std::string(""));
0345     dummyProviderPSet.registerIt();
0346     ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, &resolverMaker);
0347 
0348     ComponentDescription desc("generic::LoadableDummyProviderA", "", ComponentDescription::unknownID(), false);
0349     descriptions = provider.resolverProviderDescriptions();
0350     CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0351     CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0352     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0353     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 1);
0354     edm::test::other::LoadableDummyProviderA::count_ = 0;
0355   }
0356 
0357   // set variant to cpu
0358   {
0359     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0360     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 0);
0361     edm::ParameterSet dummyProviderPSet;
0362     dummyProviderPSet.addParameter("@module_type", std::string("generic::LoadableDummyProviderA"));
0363     dummyProviderPSet.addParameter("@module_label", std::string(""));
0364     dummyProviderPSet.addUntrackedParameter("variant", std::string("cpu"));
0365     dummyProviderPSet.registerIt();
0366     ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, &resolverMaker);
0367 
0368     ComponentDescription desc("generic::LoadableDummyProviderA", "", ComponentDescription::unknownID(), false);
0369     descriptions = provider.resolverProviderDescriptions();
0370     CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0371     CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0372     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 1);
0373     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 0);
0374     edm::test::cpu::LoadableDummyProviderA::count_ = 0;
0375   }
0376 
0377   // set variant to other
0378   {
0379     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0380     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 0);
0381     edm::ParameterSet dummyProviderPSet;
0382     dummyProviderPSet.addParameter("@module_type", std::string("generic::LoadableDummyProviderA"));
0383     dummyProviderPSet.addParameter("@module_label", std::string(""));
0384     dummyProviderPSet.addUntrackedParameter("variant", std::string("other"));
0385     dummyProviderPSet.registerIt();
0386     ModuleFactory::get()->addTo(esController, provider, dummyProviderPSet, &resolverMaker);
0387 
0388     ComponentDescription desc("generic::LoadableDummyProviderA", "", ComponentDescription::unknownID(), false);
0389     descriptions = provider.resolverProviderDescriptions();
0390     CPPUNIT_ASSERT(descriptions.find(desc) != descriptions.end());
0391     CPPUNIT_ASSERT(*(descriptions.find(desc)) == desc);
0392     CPPUNIT_ASSERT(edm::test::cpu::LoadableDummyProviderA::count_ == 0);
0393     CPPUNIT_ASSERT(edm::test::other::LoadableDummyProviderA::count_ == 1);
0394     edm::test::other::LoadableDummyProviderA::count_ = 0;
0395   }
0396 }