File indexing completed on 2024-07-12 02:41:42
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
0050 CPPUNIT_TEST_SUITE_END();
0051
0052 public:
0053 void setUp() {}
0054 void tearDown() {}
0055 void simpleProcessTest();
0056 void addProductTest();
0057 void missingProductTest();
0058 void filterTest();
0059 void outputModuleTest();
0060 void extraProcessTest();
0061 void eventSetupTest();
0062 void eventSetupPutTest();
0063 void lumiTest();
0064 void taskTest();
0065 void emptyProcessBlockTest();
0066 void emptyRunTest();
0067 void emptyLumiTest();
0068 void processBlockProductTest();
0069 void processBlockEndProductTest();
0070 void runProductTest();
0071 void lumiProductTest();
0072
0073 private:
0074 };
0075
0076
0077 CPPUNIT_TEST_SUITE_REGISTRATION(testTestProcessor);
0078
0079 void testTestProcessor::simpleProcessTest() {
0080 char const* kTest =
0081 "from FWCore.TestProcessor.TestProcess import *\n"
0082 "process = TestProcess()\n"
0083 "process.foo = cms.EDProducer('IntProducer', ivalue=cms.int32(1))\n"
0084 "process.moduleToTest(process.foo)\n";
0085 edm::test::TestProcessor::Config config(kTest);
0086 edm::test::TestProcessor tester(config);
0087 CPPUNIT_ASSERT(tester.labelOfTestModule() == "foo");
0088
0089 auto event = tester.test();
0090
0091 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 1);
0092
0093 CPPUNIT_ASSERT(not event.get<edmtest::IntProduct>("doesNotExist"));
0094 CPPUNIT_ASSERT_THROW(*event.get<edmtest::IntProduct>("doesNotExist"), cms::Exception);
0095 }
0096
0097 void testTestProcessor::addProductTest() {
0098 char const* kTest =
0099 "from FWCore.TestProcessor.TestProcess import *\n"
0100 "process = TestProcess()\n"
0101 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0102 "process.moduleToTest(process.add)\n";
0103 edm::test::TestProcessor::Config config(kTest);
0104 auto token = config.produces<edmtest::IntProduct>("in");
0105
0106 edm::test::TestProcessor tester(config);
0107
0108 {
0109 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0110
0111 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 1);
0112 }
0113
0114 {
0115 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(2)));
0116
0117 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 2);
0118 }
0119
0120
0121 CPPUNIT_ASSERT_THROW(tester.test(), cms::Exception);
0122 }
0123
0124 void testTestProcessor::missingProductTest() {
0125 char const* kTest =
0126 "from FWCore.TestProcessor.TestProcess import *\n"
0127 "process = TestProcess()\n"
0128 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0129 "process.moduleToTest(process.add)\n";
0130 edm::test::TestProcessor::Config config(kTest);
0131
0132 edm::test::TestProcessor tester(config);
0133
0134 CPPUNIT_ASSERT_THROW(tester.test(), cms::Exception);
0135 }
0136
0137 void testTestProcessor::filterTest() {
0138 char const* kTest =
0139 "from FWCore.TestProcessor.TestProcess import *\n"
0140 "process = TestProcess()\n"
0141 "process.foo = cms.EDFilter('TestFilterModule', acceptValue=cms.untracked.int32(2),\n"
0142 " onlyOne = cms.untracked.bool(True))\n"
0143 "process.moduleToTest(process.foo)\n";
0144 edm::test::TestProcessor::Config config(kTest);
0145 edm::test::TestProcessor tester(config);
0146 CPPUNIT_ASSERT(tester.labelOfTestModule() == "foo");
0147
0148 CPPUNIT_ASSERT(not tester.test().modulePassed());
0149 CPPUNIT_ASSERT(tester.test().modulePassed());
0150 CPPUNIT_ASSERT(not tester.test().modulePassed());
0151 CPPUNIT_ASSERT(tester.test().modulePassed());
0152 }
0153
0154 void testTestProcessor::outputModuleTest() {
0155 char const* kTest =
0156 "from FWCore.TestProcessor.TestProcess import *\n"
0157 "process = TestProcess()\n"
0158 "process.MessageLogger.cerr.INFO.limit=10000\n"
0159 "process.foo = cms.OutputModule('GetProductCheckerOutputModule', verbose=cms.untracked.bool(True),"
0160 " outputCommands = cms.untracked.vstring('drop *','keep edmtestIntProduct_in__TEST'),\n"
0161 " crosscheck = cms.untracked.vstring('edmtestIntProduct_in__TEST'))\n"
0162 "process.moduleToTest(process.foo)\n";
0163 edm::test::TestProcessor::Config config(kTest);
0164 auto token = config.produces<edmtest::IntProduct>("in");
0165 edm::test::TestProcessor tester(config);
0166 tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0167 }
0168 void testTestProcessor::extraProcessTest() {
0169 char const* kTest =
0170 "from FWCore.TestProcessor.TestProcess import *\n"
0171 "process = TestProcess()\n"
0172 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0173 "process.moduleToTest(process.add)\n";
0174 edm::test::TestProcessor::Config config(kTest);
0175 auto processToken = config.addExtraProcess("HLT");
0176 auto token = config.produces<edmtest::IntProduct>("in", "", processToken);
0177
0178 edm::test::TestProcessor tester(config);
0179
0180 {
0181 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0182
0183 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 1);
0184 }
0185 }
0186
0187 void testTestProcessor::eventSetupTest() {
0188 char const* kTest =
0189 "from FWCore.TestProcessor.TestProcess import *\n"
0190 "process = TestProcess()\n"
0191 "process.emptyESSourceA1 = cms.ESSource('EmptyESSource',"
0192 "recordName = cms.string('ESTestRecordA'),"
0193 "firstValid = cms.vuint32(1,2),"
0194 "iovIsRunNotTime = cms.bool(True)"
0195 ")\n"
0196
0197 "process.add_(cms.ESProducer('ESTestProducerA') )\n"
0198 "process.add = cms.EDAnalyzer('ESTestAnalyzerA', runsToGetDataFor = cms.vint32(1,2), "
0199 "expectedValues=cms.untracked.vint32(1,2))\n"
0200 "process.moduleToTest(process.add)\n";
0201 edm::test::TestProcessor::Config config(kTest);
0202
0203 edm::test::TestProcessor tester(config);
0204
0205 (void)tester.test();
0206
0207 tester.setRunNumber(2);
0208 (void)tester.test();
0209 }
0210
0211 void testTestProcessor::eventSetupPutTest() {
0212 char const* kTest =
0213 "from FWCore.TestProcessor.TestProcess import *\n"
0214 "process = TestProcess()\n"
0215 "process.add = cms.EDAnalyzer('ESTestAnalyzerA', runsToGetDataFor = cms.vint32(1,2,3), "
0216 "expectedValues=cms.untracked.vint32(1,2,2))\n"
0217 "process.moduleToTest(process.add)\n";
0218 edm::test::TestProcessor::Config config(kTest);
0219 auto estoken = config.esProduces<ESTestRecordA, edmtest::ESTestDataA>();
0220
0221 edm::test::TestProcessor tester(config);
0222
0223 (void)tester.test(std::make_pair(estoken, std::make_unique<edmtest::ESTestDataA>(1)));
0224
0225 tester.setRunNumber(2);
0226 (void)tester.test(std::make_pair(estoken, std::make_unique<edmtest::ESTestDataA>(2)));
0227
0228 tester.setRunNumber(3);
0229 CPPUNIT_ASSERT_THROW(tester.test(), cms::Exception);
0230 }
0231
0232 void testTestProcessor::lumiTest() {
0233 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0234 process = TestProcess()
0235 process.toTest = cms.EDProducer('ThingProducer')
0236 process.moduleToTest(process.toTest)
0237 )_";
0238 edm::test::TestProcessor::Config config(kTest);
0239
0240 edm::test::TestProcessor tester(config);
0241 (void)tester.test();
0242 tester.setLuminosityBlockNumber(2);
0243 (void)tester.test();
0244 }
0245
0246 void testTestProcessor::taskTest() {
0247 char const* kTest =
0248 "from FWCore.TestProcessor.TestProcess import *\n"
0249 "process = TestProcess()\n"
0250 "process.mid = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('in'))\n"
0251 "process.add = cms.EDProducer('AddIntsProducer', labels=cms.VInputTag('mid','in'))\n"
0252 "process.moduleToTest(process.add,cms.Task(process.mid))\n";
0253 edm::test::TestProcessor::Config config(kTest);
0254 auto token = config.produces<edmtest::IntProduct>("in");
0255
0256 edm::test::TestProcessor tester(config);
0257
0258 {
0259 auto event = tester.test(std::make_pair(token, std::make_unique<edmtest::IntProduct>(1)));
0260
0261 CPPUNIT_ASSERT(event.get<edmtest::IntProduct>()->value == 2);
0262 }
0263 }
0264
0265 void testTestProcessor::emptyProcessBlockTest() {
0266 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0267 process = TestProcess()
0268 process.toTest = cms.EDAnalyzer('RunLumiEventChecker',
0269 eventSequence = cms.untracked.VEventID()
0270 )
0271 process.moduleToTest(process.toTest)
0272 )_";
0273 edm::test::TestProcessor::Config config(kTest);
0274 edm::test::TestProcessor tester(config);
0275
0276 tester.testWithNoRuns();
0277 }
0278 void testTestProcessor::emptyRunTest() {
0279 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0280 process = TestProcess()
0281 process.toTest = cms.EDAnalyzer('RunLumiEventChecker',
0282 eventSequence = cms.untracked.VEventID(cms.EventID(1,0,0), cms.EventID(1,0,0))
0283 )
0284 process.moduleToTest(process.toTest)
0285 )_";
0286 edm::test::TestProcessor::Config config(kTest);
0287
0288 edm::test::TestProcessor tester(config);
0289
0290 tester.testRunWithNoLuminosityBlocks();
0291 }
0292 void testTestProcessor::emptyLumiTest() {
0293 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0294 process = TestProcess()
0295 process.toTest = cms.EDAnalyzer('RunLumiEventChecker',
0296 eventSequence = cms.untracked.VEventID(cms.EventID(1,0,0), cms.EventID(1,1,0),
0297 cms.EventID(1,1,0), cms.EventID(1,0,0))
0298 )
0299 process.moduleToTest(process.toTest)
0300 )_";
0301 edm::test::TestProcessor::Config config(kTest);
0302
0303 edm::test::TestProcessor tester(config);
0304
0305 tester.testLuminosityBlockWithNoEvents();
0306 }
0307
0308 void testTestProcessor::processBlockProductTest() {
0309 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0310 process = TestProcess()
0311 process.intProducerBeginProcessBlock = cms.EDProducer("IntProducerBeginProcessBlock", ivalue = cms.int32(10000))
0312 process.moduleToTest(process.intProducerBeginProcessBlock)
0313 )_";
0314 edm::test::TestProcessor::Config config(kTest);
0315
0316 edm::test::TestProcessor tester(config);
0317 {
0318 auto processBlock = tester.testBeginProcessBlock();
0319 CPPUNIT_ASSERT(processBlock.get<edmtest::IntProduct>()->value == 10000);
0320 }
0321 {
0322 auto processBlock = tester.testEndProcessBlock();
0323 CPPUNIT_ASSERT(processBlock.get<edmtest::IntProduct>()->value == 10000);
0324 }
0325 }
0326
0327 void testTestProcessor::processBlockEndProductTest() {
0328 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0329 process = TestProcess()
0330 process.intProducerEndProcessBlock = cms.EDProducer("IntProducerEndProcessBlock", ivalue = cms.int32(10001))
0331 process.moduleToTest(process.intProducerEndProcessBlock)
0332 )_";
0333 edm::test::TestProcessor::Config config(kTest);
0334
0335 edm::test::TestProcessor tester(config);
0336 {
0337 auto processBlock = tester.testBeginProcessBlock();
0338 CPPUNIT_ASSERT_THROW(*processBlock.get<edmtest::IntProduct>(), cms::Exception);
0339 }
0340 {
0341 auto processBlock = tester.testEndProcessBlock();
0342 CPPUNIT_ASSERT(processBlock.get<edmtest::IntProduct>()->value == 10001);
0343 }
0344 }
0345
0346 void testTestProcessor::runProductTest() {
0347 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0348 process = TestProcess()
0349 process.toTest = cms.EDProducer('ThingProducer')
0350 process.moduleToTest(process.toTest)
0351 )_";
0352 edm::test::TestProcessor::Config config(kTest);
0353
0354 edm::test::TestProcessor tester(config);
0355 {
0356 auto run = tester.testBeginRun(1);
0357 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("beginRun")->size() == 20);
0358 }
0359
0360 {
0361 auto run = tester.testEndRun();
0362 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("beginRun")->size() == 20);
0363 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("endRun")->size() == 20);
0364 }
0365
0366 {
0367 auto run = tester.testBeginRun(2);
0368 CPPUNIT_ASSERT(run.get<edmtest::ThingCollection>("beginRun")->size() == 20);
0369 }
0370 }
0371
0372 void testTestProcessor::lumiProductTest() {
0373 auto const kTest = R"_(from FWCore.TestProcessor.TestProcess import *
0374 process = TestProcess()
0375 process.toTest = cms.EDProducer('ThingProducer')
0376 process.moduleToTest(process.toTest)
0377 )_";
0378 edm::test::TestProcessor::Config config(kTest);
0379
0380 edm::test::TestProcessor tester(config);
0381 {
0382 auto lumi = tester.testBeginLuminosityBlock(1);
0383 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("beginLumi")->size() == 20);
0384 }
0385
0386 {
0387 auto lumi = tester.testEndLuminosityBlock();
0388 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("beginLumi")->size() == 20);
0389 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("endLumi")->size() == 20);
0390 }
0391
0392 {
0393 auto lumi = tester.testBeginLuminosityBlock(2);
0394 CPPUNIT_ASSERT(lumi.get<edmtest::ThingCollection>("beginLumi")->size() == 20);
0395 }
0396 }
0397
0398 #include <Utilities/Testing/interface/CppUnit_testdriver.icpp>