Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-14 03:16:37

0001 // -*- C++ -*-
0002 //
0003 // Package:    FWCore/Integration
0004 // Class:      MayConsumeWhatsIt
0005 //
0006 /**\class edmtest::MayConsumeWhatsIt
0007 
0008  Description:
0009      Consumes and produces EventSetup products.
0010      This test module is similar to ConsumesWhatsIt,
0011      but is focused on the "may consumes" variants
0012      of the the consumes interface.
0013      This is used to test the printout from the Tracer
0014      module related to EventSetup module dependencies.
0015 */
0016 //
0017 // Original Author:  W. David Dagenhart
0018 //         Created:  27 December 2024
0019 
0020 #include <memory>
0021 
0022 #include "Doodad.h"
0023 #include "GadgetRcd.h"
0024 #include "WhatsIt.h"
0025 
0026 #include "FWCore/Framework/interface/es_Label.h"
0027 #include "FWCore/Framework/interface/ESProducer.h"
0028 #include "FWCore/Framework/interface/ESTagGetter.h"
0029 #include "FWCore/Framework/interface/ESTransientHandle.h"
0030 #include "FWCore/Framework/interface/ModuleFactory.h"
0031 #include "FWCore/Integration/interface/ESTestData.h"
0032 #include "FWCore/Integration/interface/IOVTestInfo.h"
0033 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0034 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0035 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0036 #include "FWCore/Utilities/interface/ESGetToken.h"
0037 #include "FWCore/Utilities/interface/ESProductTag.h"
0038 
0039 namespace edmtest {
0040 
0041   class MayConsumeWhatsIt : public edm::ESProducer {
0042   public:
0043     MayConsumeWhatsIt(edm::ParameterSet const&);
0044 
0045     using ReturnType = std::unique_ptr<IOVTestInfo>;
0046 
0047     ReturnType produce(const GadgetRcd&);
0048     ReturnType produceMayConsumeTestDataA(const GadgetRcd&);
0049 
0050     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0051 
0052   private:
0053     edm::ESGetToken<WhatsIt, GadgetRcd> token_for_produce_;
0054     edm::ESGetToken<ESTestDataA, GadgetRcd> token_for_produceMayConsumeTestDataA_;
0055   };
0056 
0057   MayConsumeWhatsIt::MayConsumeWhatsIt(edm::ParameterSet const& pset) {
0058     auto collector = setWhatProduced(this, edm::es::Label("DependsOnMayConsume"));
0059     collector.setMayConsume(
0060         token_for_produce_,
0061         [](edm::ESTagGetter get, edm::ESTransientHandle<Doodad> handle) { return get("", "DR"); },
0062         edm::ESProductTag<Doodad, GadgetRcd>("", ""));
0063 
0064     auto collector2 = setWhatProduced(
0065         this, &edmtest::MayConsumeWhatsIt::produceMayConsumeTestDataA, edm::es::Label("DependsOnMayConsume2"));
0066     collector2.setMayConsume(
0067         token_for_produceMayConsumeTestDataA_,
0068         [](edm::ESTagGetter get, edm::ESTransientHandle<Doodad> handle) { return get.nothing(); },
0069         edm::ESProductTag<Doodad, GadgetRcd>("", ""));
0070   }
0071 
0072   MayConsumeWhatsIt::ReturnType MayConsumeWhatsIt::produce(const GadgetRcd& iRecord) {
0073     auto handle = iRecord.getHandle(token_for_produce_);
0074     if (!handle.isValid()) {
0075       throw cms::Exception("TestFailure") << "MayConsumeWhatsIt::produceMayConsumeTestDataA, expected valid handle";
0076     }
0077 
0078     auto product = std::make_unique<IOVTestInfo>();
0079     return product;
0080   }
0081 
0082   MayConsumeWhatsIt::ReturnType MayConsumeWhatsIt::produceMayConsumeTestDataA(const GadgetRcd& iRecord) {
0083     // In the test, there will not be an ESProducer or ESSource that
0084     // produces ESTestDataA. The purpose is test the output from the
0085     // Tracer in that case.
0086 
0087     auto handle = iRecord.getHandle(token_for_produceMayConsumeTestDataA_);
0088     if (handle.isValid()) {
0089       throw cms::Exception("TestFailure") << "MayConsumeWhatsIt::produceMayConsumeTestDataA, expected invalid handle";
0090     }
0091 
0092     auto product = std::make_unique<IOVTestInfo>();
0093     return product;
0094   }
0095 
0096   void MayConsumeWhatsIt::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0097     edm::ParameterSetDescription desc;
0098     descriptions.addDefault(desc);
0099   }
0100 
0101 }  // namespace edmtest
0102 using namespace edmtest;
0103 DEFINE_FWK_EVENTSETUP_MODULE(MayConsumeWhatsIt);