File indexing completed on 2024-04-06 12:12:26
0001
0002
0003
0004
0005 #include "cppunit/extensions/HelperMacros.h"
0006 #include "DataFormats/Provenance/interface/ParameterSetID.h"
0007 #include "FWCore/Framework/interface/EventSetupProvider.h"
0008 #include "FWCore/Framework/interface/EventSetupsController.h"
0009 #include "FWCore/Framework/interface/ParameterSetIDHolder.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "FWCore/Framework/test/DummyFinder.h"
0012 #include "FWCore/Framework/test/DummyESProductResolverProvider.h"
0013 #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
0014 #include "FWCore/Utilities/interface/Exception.h"
0015
0016 #include <memory>
0017 #include <string>
0018 #include <vector>
0019
0020 namespace {
0021 edm::ActivityRegistry activityRegistry;
0022 }
0023
0024 class TestEventSetupsController : public CppUnit::TestFixture {
0025 CPPUNIT_TEST_SUITE(TestEventSetupsController);
0026
0027 CPPUNIT_TEST(constructorTest);
0028 CPPUNIT_TEST(esProducerGetAndPutTest);
0029 CPPUNIT_TEST(esSourceGetAndPutTest);
0030
0031 CPPUNIT_TEST_SUITE_END();
0032
0033 public:
0034 void setUp() {}
0035 void tearDown() {}
0036
0037 void constructorTest();
0038 void esProducerGetAndPutTest();
0039 void esSourceGetAndPutTest();
0040 };
0041
0042
0043 CPPUNIT_TEST_SUITE_REGISTRATION(TestEventSetupsController);
0044
0045 void TestEventSetupsController::constructorTest() {
0046 edm::eventsetup::EventSetupsController esController;
0047
0048 CPPUNIT_ASSERT(esController.providers().empty());
0049 CPPUNIT_ASSERT(esController.esproducers().empty());
0050 CPPUNIT_ASSERT(esController.essources().empty());
0051 CPPUNIT_ASSERT(esController.mustFinishConfiguration() == true);
0052
0053 edm::ParameterSet pset;
0054 std::vector<std::string> emptyVStrings;
0055 pset.addParameter<std::vector<std::string> >("@all_esprefers", emptyVStrings);
0056 pset.addParameter<std::vector<std::string> >("@all_essources", emptyVStrings);
0057 pset.addParameter<std::vector<std::string> >("@all_esmodules", emptyVStrings);
0058
0059 esController.makeProvider(pset, &activityRegistry);
0060 esController.makeProvider(pset, &activityRegistry);
0061 esController.makeProvider(pset, &activityRegistry);
0062
0063 CPPUNIT_ASSERT(esController.providers().size() == 3);
0064 CPPUNIT_ASSERT(esController.providers()[0]->subProcessIndex() == 0);
0065 CPPUNIT_ASSERT(esController.providers()[1]->subProcessIndex() == 1);
0066 CPPUNIT_ASSERT(esController.providers()[2]->subProcessIndex() == 2);
0067 }
0068
0069 void TestEventSetupsController::esProducerGetAndPutTest() {
0070 edm::eventsetup::EventSetupsController esController;
0071
0072 edm::ParameterSet pset1;
0073 pset1.registerIt();
0074 std::shared_ptr<edm::eventsetup::test::DummyESProductResolverProvider> resolverProvider1 =
0075 std::make_shared<edm::eventsetup::test::DummyESProductResolverProvider>();
0076
0077 edm::ParameterSet pset2;
0078 pset2.addUntrackedParameter<int>("p1", 1);
0079 pset2.registerIt();
0080 std::shared_ptr<edm::eventsetup::test::DummyESProductResolverProvider> resolverProvider2 =
0081 std::make_shared<edm::eventsetup::test::DummyESProductResolverProvider>();
0082 CPPUNIT_ASSERT(pset2.id() == pset1.id());
0083
0084 edm::ParameterSet pset3;
0085 pset3.addUntrackedParameter<int>("p1", 2);
0086 pset3.registerIt();
0087 std::shared_ptr<edm::eventsetup::test::DummyESProductResolverProvider> resolverProvider3 =
0088 std::make_shared<edm::eventsetup::test::DummyESProductResolverProvider>();
0089 CPPUNIT_ASSERT(pset3.id() == pset1.id());
0090
0091 edm::ParameterSet pset4;
0092 pset4.addParameter<int>("p1", 1);
0093 pset4.registerIt();
0094 std::shared_ptr<edm::eventsetup::test::DummyESProductResolverProvider> resolverProvider4 =
0095 std::make_shared<edm::eventsetup::test::DummyESProductResolverProvider>();
0096 CPPUNIT_ASSERT(pset4.id() != pset1.id());
0097
0098 edm::eventsetup::ParameterSetIDHolder psetIDHolder1(pset1.id());
0099 edm::eventsetup::ParameterSetIDHolder psetIDHolder1a(pset1.id());
0100 edm::eventsetup::ParameterSetIDHolder psetIDHolder4(pset4.id());
0101 CPPUNIT_ASSERT(pset1.id() == psetIDHolder1.psetID());
0102 CPPUNIT_ASSERT(psetIDHolder1 == psetIDHolder1a);
0103 CPPUNIT_ASSERT(!(psetIDHolder1 == psetIDHolder4));
0104 CPPUNIT_ASSERT((pset1.id() < pset4.id()) == (psetIDHolder1 < psetIDHolder4));
0105
0106 std::shared_ptr<edm::eventsetup::ESProductResolverProvider> ptrFromGet =
0107 esController.getESProducerAndRegisterProcess(pset1, 0);
0108 CPPUNIT_ASSERT(!ptrFromGet);
0109 esController.putESProducer(pset1, resolverProvider1, 0);
0110
0111 ptrFromGet = esController.getESProducerAndRegisterProcess(pset2, 0);
0112 CPPUNIT_ASSERT(!ptrFromGet);
0113 esController.putESProducer(pset2, resolverProvider2, 0);
0114
0115 ptrFromGet = esController.getESProducerAndRegisterProcess(pset3, 0);
0116 CPPUNIT_ASSERT(!ptrFromGet);
0117 esController.putESProducer(pset3, resolverProvider3, 0);
0118
0119 ptrFromGet = esController.getESProducerAndRegisterProcess(pset4, 0);
0120 CPPUNIT_ASSERT(!ptrFromGet);
0121 esController.putESProducer(pset4, resolverProvider4, 0);
0122
0123 ptrFromGet = esController.getESProducerAndRegisterProcess(pset1, 1);
0124 CPPUNIT_ASSERT(ptrFromGet);
0125 CPPUNIT_ASSERT(ptrFromGet == resolverProvider1);
0126
0127 ptrFromGet = esController.getESProducerAndRegisterProcess(pset2, 2);
0128 CPPUNIT_ASSERT(ptrFromGet);
0129 CPPUNIT_ASSERT(ptrFromGet == resolverProvider2);
0130
0131 ptrFromGet = esController.getESProducerAndRegisterProcess(pset3, 3);
0132 CPPUNIT_ASSERT(ptrFromGet);
0133 CPPUNIT_ASSERT(ptrFromGet == resolverProvider3);
0134
0135 ptrFromGet = esController.getESProducerAndRegisterProcess(pset4, 4);
0136 CPPUNIT_ASSERT(ptrFromGet);
0137 CPPUNIT_ASSERT(ptrFromGet == resolverProvider4);
0138
0139 ptrFromGet = esController.getESProducerAndRegisterProcess(pset4, 5);
0140 CPPUNIT_ASSERT(ptrFromGet);
0141 CPPUNIT_ASSERT(ptrFromGet == resolverProvider4);
0142
0143 std::multimap<edm::ParameterSetID, edm::eventsetup::ESProducerInfo> const& esproducers = esController.esproducers();
0144 bool isPresent1 = false;
0145 bool isPresent2 = false;
0146 bool isPresent3 = false;
0147 bool isPresent4 = false;
0148
0149 CPPUNIT_ASSERT(esproducers.size() == 4);
0150 for (auto const& esproducer : esproducers) {
0151 if (esproducer.second.pset() == &pset1) {
0152 isPresent1 = true;
0153 CPPUNIT_ASSERT(esproducer.first == pset1.id());
0154 CPPUNIT_ASSERT(esproducer.second.providerGet() ==
0155 static_cast<edm::eventsetup::ESProductResolverProvider*>(resolverProvider1.get()));
0156 edm::eventsetup::ESProducerInfo const& info = esproducer.second;
0157 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 2);
0158 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0159 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 1);
0160 }
0161 if (esproducer.second.pset() == &pset2) {
0162 isPresent2 = true;
0163 CPPUNIT_ASSERT(esproducer.first == pset1.id());
0164 CPPUNIT_ASSERT(esproducer.second.providerGet() ==
0165 static_cast<edm::eventsetup::ESProductResolverProvider*>(resolverProvider2.get()));
0166 edm::eventsetup::ESProducerInfo const& info = esproducer.second;
0167 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 2);
0168 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0169 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 2);
0170 }
0171 if (esproducer.second.pset() == &pset3) {
0172 isPresent3 = true;
0173 CPPUNIT_ASSERT(esproducer.first == pset3.id());
0174 CPPUNIT_ASSERT(esproducer.second.providerGet() ==
0175 static_cast<edm::eventsetup::ESProductResolverProvider*>(resolverProvider3.get()));
0176 edm::eventsetup::ESProducerInfo const& info = esproducer.second;
0177 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 2);
0178 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0179 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 3);
0180 }
0181 if (esproducer.second.pset() == &pset4) {
0182 isPresent4 = true;
0183 CPPUNIT_ASSERT(esproducer.first == pset4.id());
0184 CPPUNIT_ASSERT(esproducer.second.providerGet() ==
0185 static_cast<edm::eventsetup::ESProductResolverProvider*>(resolverProvider4.get()));
0186 edm::eventsetup::ESProducerInfo const& info = esproducer.second;
0187 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 3);
0188 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0189 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 4);
0190 CPPUNIT_ASSERT(info.subProcessIndexes()[2] == 5);
0191 }
0192 }
0193 CPPUNIT_ASSERT(isPresent1 && isPresent2 && isPresent3 && isPresent4);
0194
0195 bool firstProcessWithThisPSet = false;
0196 bool precedingHasMatchingPSet = false;
0197
0198 esController.lookForMatches(pset4.id(), 0, 0, firstProcessWithThisPSet, precedingHasMatchingPSet);
0199 CPPUNIT_ASSERT(firstProcessWithThisPSet == true);
0200 CPPUNIT_ASSERT(precedingHasMatchingPSet == false);
0201
0202 esController.lookForMatches(pset4.id(), 4, 0, firstProcessWithThisPSet, precedingHasMatchingPSet);
0203 CPPUNIT_ASSERT(firstProcessWithThisPSet == false);
0204 CPPUNIT_ASSERT(precedingHasMatchingPSet == true);
0205
0206 esController.lookForMatches(pset4.id(), 4, 1, firstProcessWithThisPSet, precedingHasMatchingPSet);
0207 CPPUNIT_ASSERT(firstProcessWithThisPSet == false);
0208 CPPUNIT_ASSERT(precedingHasMatchingPSet == false);
0209
0210 CPPUNIT_ASSERT_THROW(
0211 esController.lookForMatches(pset4.id(), 6, 0, firstProcessWithThisPSet, precedingHasMatchingPSet),
0212 cms::Exception);
0213
0214 CPPUNIT_ASSERT(esController.isFirstMatch(pset4.id(), 5, 0));
0215 CPPUNIT_ASSERT(!esController.isFirstMatch(pset4.id(), 5, 4));
0216 CPPUNIT_ASSERT_THROW(esController.isFirstMatch(pset4.id(), 6, 4), cms::Exception);
0217 CPPUNIT_ASSERT_THROW(esController.isFirstMatch(pset4.id(), 5, 1), cms::Exception);
0218
0219 CPPUNIT_ASSERT(!esController.isLastMatch(pset4.id(), 5, 0));
0220 CPPUNIT_ASSERT(esController.isLastMatch(pset4.id(), 5, 4));
0221 CPPUNIT_ASSERT_THROW(esController.isLastMatch(pset4.id(), 6, 4), cms::Exception);
0222 CPPUNIT_ASSERT_THROW(esController.isLastMatch(pset4.id(), 5, 1), cms::Exception);
0223
0224 CPPUNIT_ASSERT(esController.isMatchingESProducer(pset4.id(), 5, 0));
0225 CPPUNIT_ASSERT(esController.isMatchingESProducer(pset4.id(), 5, 4));
0226 CPPUNIT_ASSERT(!esController.isMatchingESProducer(pset4.id(), 5, 2));
0227 CPPUNIT_ASSERT_THROW(esController.isMatchingESProducer(pset4.id(), 6, 4), cms::Exception);
0228
0229 CPPUNIT_ASSERT(&esController.getESProducerPSet(pset1.id(), 0) == &pset1);
0230 CPPUNIT_ASSERT(&esController.getESProducerPSet(pset2.id(), 2) == &pset2);
0231 CPPUNIT_ASSERT(&esController.getESProducerPSet(pset3.id(), 3) == &pset3);
0232 CPPUNIT_ASSERT(&esController.getESProducerPSet(pset4.id(), 5) == &pset4);
0233 CPPUNIT_ASSERT_THROW(esController.getESProducerPSet(pset4.id(), 6), cms::Exception);
0234
0235 esController.clearComponents();
0236 CPPUNIT_ASSERT(esController.esproducers().empty());
0237 CPPUNIT_ASSERT(esController.essources().empty());
0238 }
0239
0240 void TestEventSetupsController::esSourceGetAndPutTest() {
0241 edm::eventsetup::EventSetupsController esController;
0242
0243 edm::ParameterSet pset1;
0244 pset1.registerIt();
0245 std::shared_ptr<DummyFinder> finder1 = std::make_shared<DummyFinder>();
0246
0247 edm::ParameterSet pset2;
0248 pset2.addUntrackedParameter<int>("p1", 1);
0249 pset2.registerIt();
0250 std::shared_ptr<DummyFinder> finder2 = std::make_shared<DummyFinder>();
0251 CPPUNIT_ASSERT(pset2.id() == pset1.id());
0252
0253 edm::ParameterSet pset3;
0254 pset3.addUntrackedParameter<int>("p1", 2);
0255 pset3.registerIt();
0256 std::shared_ptr<DummyFinder> finder3 = std::make_shared<DummyFinder>();
0257 CPPUNIT_ASSERT(pset3.id() == pset1.id());
0258
0259 edm::ParameterSet pset4;
0260 pset4.addParameter<int>("p1", 1);
0261 pset4.registerIt();
0262 std::shared_ptr<DummyFinder> finder4 = std::make_shared<DummyFinder>();
0263 CPPUNIT_ASSERT(pset4.id() != pset1.id());
0264
0265 std::shared_ptr<edm::EventSetupRecordIntervalFinder> ptrFromGet =
0266 esController.getESSourceAndRegisterProcess(pset1, 0);
0267 CPPUNIT_ASSERT(!ptrFromGet);
0268 esController.putESSource(pset1, finder1, 0);
0269
0270 ptrFromGet = esController.getESSourceAndRegisterProcess(pset2, 0);
0271 CPPUNIT_ASSERT(!ptrFromGet);
0272 esController.putESSource(pset2, finder2, 0);
0273
0274 ptrFromGet = esController.getESSourceAndRegisterProcess(pset3, 0);
0275 CPPUNIT_ASSERT(!ptrFromGet);
0276 esController.putESSource(pset3, finder3, 0);
0277
0278 ptrFromGet = esController.getESSourceAndRegisterProcess(pset4, 0);
0279 CPPUNIT_ASSERT(!ptrFromGet);
0280 esController.putESSource(pset4, finder4, 0);
0281
0282 ptrFromGet = esController.getESSourceAndRegisterProcess(pset1, 1);
0283 CPPUNIT_ASSERT(ptrFromGet);
0284 CPPUNIT_ASSERT(ptrFromGet == finder1);
0285
0286 ptrFromGet = esController.getESSourceAndRegisterProcess(pset2, 2);
0287 CPPUNIT_ASSERT(ptrFromGet);
0288 CPPUNIT_ASSERT(ptrFromGet == finder2);
0289
0290 ptrFromGet = esController.getESSourceAndRegisterProcess(pset3, 3);
0291 CPPUNIT_ASSERT(ptrFromGet);
0292 CPPUNIT_ASSERT(ptrFromGet == finder3);
0293
0294 ptrFromGet = esController.getESSourceAndRegisterProcess(pset4, 4);
0295 CPPUNIT_ASSERT(ptrFromGet);
0296 CPPUNIT_ASSERT(ptrFromGet == finder4);
0297
0298 ptrFromGet = esController.getESSourceAndRegisterProcess(pset4, 5);
0299 CPPUNIT_ASSERT(ptrFromGet);
0300 CPPUNIT_ASSERT(ptrFromGet == finder4);
0301
0302 std::multimap<edm::ParameterSetID, edm::eventsetup::ESSourceInfo> const& essources = esController.essources();
0303 bool isPresent1 = false;
0304 bool isPresent2 = false;
0305 bool isPresent3 = false;
0306 bool isPresent4 = false;
0307
0308 CPPUNIT_ASSERT(essources.size() == 4);
0309 for (auto const& essource : essources) {
0310 if (essource.second.pset() == &pset1) {
0311 isPresent1 = true;
0312 CPPUNIT_ASSERT(essource.first == pset1.id());
0313 CPPUNIT_ASSERT(essource.second.finderGet() ==
0314 static_cast<edm::EventSetupRecordIntervalFinder const*>(finder1.get()));
0315 edm::eventsetup::ESSourceInfo const& info = essource.second;
0316 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 2);
0317 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0318 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 1);
0319 }
0320 if (essource.second.pset() == &pset2) {
0321 isPresent2 = true;
0322 CPPUNIT_ASSERT(essource.first == pset1.id());
0323 CPPUNIT_ASSERT(essource.second.finderGet() ==
0324 static_cast<edm::EventSetupRecordIntervalFinder const*>(finder2.get()));
0325 edm::eventsetup::ESSourceInfo const& info = essource.second;
0326 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 2);
0327 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0328 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 2);
0329 }
0330 if (essource.second.pset() == &pset3) {
0331 isPresent3 = true;
0332 CPPUNIT_ASSERT(essource.first == pset3.id());
0333 CPPUNIT_ASSERT(essource.second.finderGet() ==
0334 static_cast<edm::EventSetupRecordIntervalFinder const*>(finder3.get()));
0335 edm::eventsetup::ESSourceInfo const& info = essource.second;
0336 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 2);
0337 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0338 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 3);
0339 }
0340 if (essource.second.pset() == &pset4) {
0341 isPresent4 = true;
0342 CPPUNIT_ASSERT(essource.first == pset4.id());
0343 CPPUNIT_ASSERT(essource.second.finderGet() ==
0344 static_cast<edm::EventSetupRecordIntervalFinder const*>(finder4.get()));
0345 edm::eventsetup::ESSourceInfo const& info = essource.second;
0346 CPPUNIT_ASSERT(info.subProcessIndexes().size() == 3);
0347 CPPUNIT_ASSERT(info.subProcessIndexes()[0] == 0);
0348 CPPUNIT_ASSERT(info.subProcessIndexes()[1] == 4);
0349 CPPUNIT_ASSERT(info.subProcessIndexes()[2] == 5);
0350 }
0351 }
0352 CPPUNIT_ASSERT(isPresent1 && isPresent2 && isPresent3 && isPresent4);
0353
0354 CPPUNIT_ASSERT(esController.isMatchingESSource(pset4.id(), 5, 0));
0355 CPPUNIT_ASSERT(esController.isMatchingESSource(pset4.id(), 5, 4));
0356 CPPUNIT_ASSERT(!esController.isMatchingESSource(pset4.id(), 5, 2));
0357 CPPUNIT_ASSERT_THROW(esController.isMatchingESSource(pset4.id(), 6, 4), cms::Exception);
0358
0359 esController.clearComponents();
0360 CPPUNIT_ASSERT(esController.esproducers().empty());
0361 CPPUNIT_ASSERT(esController.essources().empty());
0362 }