File indexing completed on 2025-04-22 06:27:24
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010 #include "FWCore/TestProcessor/interface/TestProcessor.h"
0011
0012 #include "DataFormats/TestObjects/interface/ToyProducts.h"
0013 #include "DataFormats/TestObjects/interface/ThingCollection.h"
0014
0015 #include "FWCore/Integration/interface/ESTestData.h"
0016 #include "FWCore/Integration/interface/ESTestRecords.h"
0017
0018 #include <cppunit/extensions/HelperMacros.h>
0019
0020 #include <memory>
0021
0022 #include <iostream>
0023 #include <sstream>
0024 #include <stdexcept>
0025 #include <string>
0026 #include <vector>
0027 #include <algorithm>
0028 #include <set>
0029
0030 class testTestProcessor : public CppUnit::TestFixture {
0031 CPPUNIT_TEST_SUITE(testTestProcessor);
0032 CPPUNIT_TEST(simpleProcessTest);
0033 CPPUNIT_TEST(addProductTest);
0034 CPPUNIT_TEST(missingProductTest);
0035 CPPUNIT_TEST(filterTest);
0036 CPPUNIT_TEST(outputModuleTest);
0037 CPPUNIT_TEST(extraProcessTest);
0038 CPPUNIT_TEST(eventSetupTest);
0039 CPPUNIT_TEST(eventSetupPutTest);
0040 CPPUNIT_TEST(lumiTest);
0041 CPPUNIT_TEST(taskTest);
0042 CPPUNIT_TEST(emptyProcessBlockTest);
0043 CPPUNIT_TEST(emptyRunTest);
0044 CPPUNIT_TEST(emptyLumiTest);
0045 CPPUNIT_TEST(processBlockProductTest);
0046 CPPUNIT_TEST(processBlockEndProductTest);
0047 CPPUNIT_TEST(runProductTest);
0048 CPPUNIT_TEST(lumiProductTest);
0049 CPPUNIT_TEST(runStreamAnalyzerTest);
0050 CPPUNIT_TEST(lumiStreamAnalyzerTest);
0051
0052 CPPUNIT_TEST_SUITE_END();
0053
0054 public:
0055 void setUp() {}
0056 void tearDown() {}
0057 void simpleProcessTest();
0058 void addProductTest();
0059 void missingProductTest();
0060 void filterTest();
0061 void outputModuleTest();
0062 void extraProcessTest();
0063 void eventSetupTest();
0064 void eventSetupPutTest();
0065 void lumiTest();
0066 void taskTest();
0067 void emptyProcessBlockTest();
0068 void emptyRunTest();
0069 void emptyLumiTest();
0070 void processBlockProductTest();
0071 void processBlockEndProductTest();
0072 void runProductTest();
0073 void lumiProductTest();
0074 void runStreamAnalyzerTest();
0075 void lumiStreamAnalyzerTest();
0076
0077 private:
0078 };
0079
0080
0081 CPPUNIT_TEST_SUITE_REGISTRATION(testTestProcessor);
0082
0083 void testTestProcessor::simpleProcessTest() {
0084 char const* kTest =
0085 "from FWCore.TestProcessor.TestProcess import *\n"
0086 "process = TestProcess()\n"
0087 "process.foo = cms.EDProducer('IntProducer', ivalue=cms.int32(1))\n"
0088 "process.moduleToTest(process.foo)\n";
0089 edm::test::TestProcessor::Config config(kTest);
0090 edm::test::TestProcessor tester(config);
0091 CPPUNIT_ASSERT(tester.labelOfTestModule() == "foo");
0092
0093 auto event = tester.test();
0094
0095 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 1);
0096
0097 CPPUNIT_ASSERT(not event.get<edmtest::IntProduct>("doesNotExist"));
0098 CPPUNIT_ASSERT_THROW(*event.get<edmtest::IntProduct>("doesNotExist"), cms::Exception);
0099 }
0100
0101 void testTestProcessor::addProductTest() {
0102 char const* kTest =
0103 "from FWCore.TestProcessor.TestProcess import *\n"
0104 "process = TestProcess()\n"
0105 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0106 "process.moduleToTest(process.add)\n";
0107 edm::test::TestProcessor::Config config(kTest);
0108 auto token = config.produces<edmtest::IntProduct>("in");
0109
0110 edm::test::TestProcessor tester(config);
0111
0112 {
0113 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0114
0115 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 1);
0116 }
0117
0118 {
0119 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(2)));
0120
0121 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 2);
0122 }
0123
0124
0125 CPPUNIT_ASSERT_THROW(tester.test(), cms::Exception);
0126 }
0127
0128 void testTestProcessor::missingProductTest() {
0129 char const* kTest =
0130 "from FWCore.TestProcessor.TestProcess import *\n"
0131 "process = TestProcess()\n"
0132 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0133 "process.moduleToTest(process.add)\n";
0134 edm::test::TestProcessor::Config config(kTest);
0135
0136 edm::test::TestProcessor tester(config);
0137
0138 CPPUNIT_ASSERT_THROW(tester.test(), cms::Exception);
0139 }
0140
0141 void testTestProcessor::filterTest() {
0142 char const* kTest =
0143 "from FWCore.TestProcessor.TestProcess import *\n"
0144 "process = TestProcess()\n"
0145 "process.foo = cms.EDFilter('TestFilterModule', acceptValue=cms.untracked.int32(2),\n"
0146 " onlyOne = cms.untracked.bool(True))\n"
0147 "process.moduleToTest(process.foo)\n";
0148 edm::test::TestProcessor::Config config(kTest);
0149 edm::test::TestProcessor tester(config);
0150 CPPUNIT_ASSERT(tester.labelOfTestModule() == "foo");
0151
0152 CPPUNIT_ASSERT(not tester.test().modulePassed());
0153 CPPUNIT_ASSERT(tester.test().modulePassed());
0154 CPPUNIT_ASSERT(not tester.test().modulePassed());
0155 CPPUNIT_ASSERT(tester.test().modulePassed());
0156 }
0157
0158 void testTestProcessor::outputModuleTest() {
0159 char const* kTest =
0160 "from FWCore.TestProcessor.TestProcess import *\n"
0161 "process = TestProcess()\n"
0162 "process.MessageLogger.cerr.INFO.limit=10000\n"
0163 "process.foo = cms.OutputModule('GetProductCheckerOutputModule', verbose=cms.untracked.bool(True),"
0164 " outputCommands = cms.untracked.vstring('drop *','keep edmtestIntProduct_in__TEST'),\n"
0165 " crosscheck = cms.untracked.vstring('edmtestIntProduct_in__TEST'))\n"
0166 "process.moduleToTest(process.foo)\n";
0167 edm::test::TestProcessor::Config config(kTest);
0168 auto token = config.produces<edmtest::IntProduct>("in");
0169 edm::test::TestProcessor tester(config);
0170 tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0171 }
0172 void testTestProcessor::extraProcessTest() {
0173 char const* kTest =
0174 "from FWCore.TestProcessor.TestProcess import *\n"
0175 "process = TestProcess()\n"
0176 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0177 "process.moduleToTest(process.add)\n";
0178 edm::test::TestProcessor::Config config(kTest);
0179 auto processToken = config.addExtraProcess("HLT");
0180 auto token = config.produces<edmtest::IntProduct>("in", "", processToken);
0181
0182 edm::test::TestProcessor tester(config);
0183
0184 {
0185 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0186
0187 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 1);
0188 }
0189 }
0190
0191 void testTestProcessor::eventSetupTest() {
0192 char const* kTest =
0193 "from FWCore.TestProcessor.TestProcess import *\n"
0194 "process = TestProcess()\n"
0195 "process.emptyESSourceA1 = cms.ESSource('EmptyESSource',"
0196 "recordName = cms.string('ESTestRecordA'),"
0197 "firstValid = cms.vuint32(1,2),"
0198 "iovIsRunNotTime = cms.bool(True)"
0199 ")\n"
0200
0201 "process.add_(cms.ESProducer('ESTestProducerA') )\n"
0202 "process.add = cms.EDAnalyzer('ESTestAnalyzerA', runsToGetDataFor = cms.vint32(1,2), "
0203 "expectedValues=cms.untracked.vint32(1,2))\n"
0204 "process.moduleToTest(process.add)\n";
0205 edm::test::TestProcessor::Config config(kTest);
0206
0207 edm::test::TestProcessor tester(config);
0208
0209 (void)tester.test();
0210
0211 tester.setRunNumber(2);
0212 (void)tester.test();
0213 }
0214
0215 void testTestProcessor::eventSetupPutTest() {
0216 char const* kTest =
0217 "from FWCore.TestProcessor.TestProcess import *\n"
0218 "process = TestProcess()\n"
0219 "process.add = cms.EDAnalyzer('ESTestAnalyzerA', runsToGetDataFor = cms.vint32(1,2,3), "
0220 "expectedValues=cms.untracked.vint32(1,2,2))\n"
0221 "process.moduleToTest(process.add)\n";
0222 edm::test::TestProcessor::Config config(kTest);
0223 auto estoken = config.esProduces<ESTestRecordA, edmtest::ESTestDataA>();
0224
0225 edm::test::TestProcessor tester(config);
0226
0227 (void)tester.test(std::make_pair(estoken, std::make_unique<edmtest::ESTestDataA>(1)));
0228
0229 tester.setRunNumber(2);
0230 (void)tester.test(std::make_pair(estoken, std::make_unique<edmtest::ESTestDataA>(2)));
0231
0232 tester.setRunNumber(3);
0233 CPPUNIT_ASSERT_THROW(tester.test(), cms::Exception);
0234 }
0235
0236 void testTestProcessor::lumiTest() {
0237 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0238 process = TestProcess()
0239 process.toTest = cms.EDProducer('ThingProducer')
0240 process.moduleToTest(process.toTest)
0241 )_";
0242 edm::test::TestProcessor::Config config(kTest);
0243
0244 edm::test::TestProcessor tester(config);
0245 (void)tester.test();
0246 tester.setLuminosityBlockNumber(2);
0247 (void)tester.test();
0248 }
0249
0250 void testTestProcessor::taskTest() {
0251 char const* kTest =
0252 "from FWCore.TestProcessor.TestProcess import *\n"
0253 "process = TestProcess()\n"
0254 "process.mid = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0255 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('mid','in'))\n"
0256 "process.moduleToTest(process.add,cms.Task(process.mid))\n";
0257 edm::test::TestProcessor::Config config(kTest);
0258 auto token = config.produces<edmtest::IntProduct>("in");
0259
0260 edm::test::TestProcessor tester(config);
0261
0262 {
0263 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0264
0265 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 2);
0266 }
0267 }
0268
0269 void testTestProcessor::emptyProcessBlockTest() {
0270 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0271 process = TestProcess()
0272 process.toTest = cms.EDAnalyzer('RunLumiEventChecker',
0273 eventSequence = cms.untracked.VEventID()
0274 )
0275 process.moduleToTest(process.toTest)
0276 )_";
0277 edm::test::TestProcessor::Config config(kTest);
0278 edm::test::TestProcessor tester(config);
0279
0280 tester.testWithNoRuns();
0281 }
0282 void testTestProcessor::emptyRunTest() {
0283 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0284 process = TestProcess()
0285 process.toTest = cms.EDAnalyzer('RunLumiEventChecker',
0286 eventSequence = cms.untracked.VEventID(cms.EventID(1,0,0), cms.EventID(1,0,0))
0287 )
0288 process.moduleToTest(process.toTest)
0289 )_";
0290 edm::test::TestProcessor::Config config(kTest);
0291
0292 edm::test::TestProcessor tester(config);
0293
0294 tester.testRunWithNoLuminosityBlocks();
0295 }
0296 void testTestProcessor::emptyLumiTest() {
0297 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0298 process = TestProcess()
0299 process.toTest = cms.EDAnalyzer('RunLumiEventChecker',
0300 eventSequence = cms.untracked.VEventID(cms.EventID(1,0,0), cms.EventID(1,1,0),
0301 cms.EventID(1,1,0), cms.EventID(1,0,0))
0302 )
0303 process.moduleToTest(process.toTest)
0304 )_";
0305 edm::test::TestProcessor::Config config(kTest);
0306
0307 edm::test::TestProcessor tester(config);
0308
0309 tester.testLuminosityBlockWithNoEvents();
0310 }
0311
0312 void testTestProcessor::processBlockProductTest() {
0313 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0314 process = TestProcess()
0315 process.intProducerBeginProcessBlock = cms.EDProducer("IntProducerBeginProcessBlock", ivalue = cms.int32(10000))
0316 process.moduleToTest(process.intProducerBeginProcessBlock)
0317 )_";
0318 edm::test::TestProcessor::Config config(kTest);
0319
0320 edm::test::TestProcessor tester(config);
0321 {
0322 auto processBlock = tester.testBeginProcessBlock();
0323 CPPUNIT_ASSERT(processBlock.get<edmtest::IntProduct>()->value == 10000);
0324 }
0325 {
0326 auto processBlock = tester.testEndProcessBlock();
0327 CPPUNIT_ASSERT(processBlock.get<edmtest::IntProduct>()->value == 10000);
0328 }
0329 }
0330
0331 void testTestProcessor::processBlockEndProductTest() {
0332 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0333 process = TestProcess()
0334 process.intProducerEndProcessBlock = cms.EDProducer("IntProducerEndProcessBlock", ivalue = cms.int32(10001))
0335 process.moduleToTest(process.intProducerEndProcessBlock)
0336 )_";
0337 edm::test::TestProcessor::Config config(kTest);
0338
0339 edm::test::TestProcessor tester(config);
0340 {
0341 auto processBlock = tester.testBeginProcessBlock();
0342 CPPUNIT_ASSERT_THROW(*processBlock.get<edmtest::IntProduct>(), cms::Exception);
0343 }
0344 {
0345 auto processBlock = tester.testEndProcessBlock();
0346 CPPUNIT_ASSERT(processBlock.get<edmtest::IntProduct>()->value == 10001);
0347 }
0348 }
0349
0350 void testTestProcessor::runProductTest() {
0351 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0352 process = TestProcess()
0353 process.toTest = cms.EDProducer('ThingProducer')
0354 process.moduleToTest(process.toTest)
0355 )_";
0356 edm::test::TestProcessor::Config config(kTest);
0357
0358 edm::test::TestProcessor tester(config);
0359 {
0360 auto run = tester.testBeginRun(1);
0361 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("beginRun")->size() == 20);
0362 }
0363
0364 {
0365 auto run = tester.testEndRun();
0366 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("beginRun")->size() == 20);
0367 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("endRun")->size() == 20);
0368 }
0369
0370 {
0371 auto run = tester.testBeginRun(2);
0372 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("beginRun")->size() == 20);
0373 }
0374 }
0375
0376 void testTestProcessor::lumiProductTest() {
0377 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0378 process = TestProcess()
0379 process.toTest = cms.EDProducer('ThingProducer')
0380 process.moduleToTest(process.toTest)
0381 )_";
0382 edm::test::TestProcessor::Config config(kTest);
0383
0384 edm::test::TestProcessor tester(config);
0385 {
0386 auto lumi = tester.testBeginLuminosityBlock(1);
0387 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("beginLumi")->size() == 20);
0388 }
0389
0390 {
0391 auto lumi = tester.testEndLuminosityBlock();
0392 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("beginLumi")->size() == 20);
0393 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("endLumi")->size() == 20);
0394 }
0395
0396 {
0397 auto lumi = tester.testBeginLuminosityBlock(2);
0398 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("beginLumi")->size() == 20);
0399 }
0400 }
0401
0402 void testTestProcessor::runStreamAnalyzerTest() {
0403 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0404 process = TestProcess()
0405 process.toTest = cms.EDAnalyzer('edmtest::stream::RunIntAnalyzer',
0406 transitions = cms.int32(2)
0407 ,cachevalue = cms.int32(0)
0408 )
0409
0410 process.moduleToTest(process.toTest)
0411 )_";
0412 edm::test::TestProcessor::Config config(kTest);
0413 edm::test::TestProcessor tester(config);
0414 tester.testBeginLuminosityBlock(1);
0415 tester.testEndLuminosityBlock();
0416 tester.testBeginLuminosityBlock(2);
0417 }
0418
0419 void testTestProcessor::lumiStreamAnalyzerTest() {
0420 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0421 process = TestProcess()
0422 process.toTest = cms.EDAnalyzer('edmtest::stream::LumiIntAnalyzer',
0423 transitions = cms.int32(4)
0424 ,cachevalue = cms.int32(0)
0425 ,moduleLabel = cms.InputTag("")
0426 )
0427
0428 process.moduleToTest(process.toTest)
0429 )_";
0430 edm::test::TestProcessor::Config config(kTest);
0431 edm::test::TestProcessor tester(config);
0432 tester.testBeginLuminosityBlock(1);
0433 tester.testEndLuminosityBlock();
0434 tester.testBeginLuminosityBlock(2);
0435 }
0436
0437 #include <Utilities/Testing/interface/CppUnit_testdriver.icpp>