Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-07-04 00:49:06

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