Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-30 23:27:57

0001 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0002 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0004 #include "FWCore/Utilities/interface/InputTag.h"
0005 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/global/EDProducer.h"
0006 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0007 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0008 #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h"
0009 #include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h"
0010 
0011 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0012   /**
0013    * This class tests various ways of a device ESProduct being missing
0014    */
0015   class TestAlpakaGlobalProducerNullES : public global::EDProducer<> {
0016   public:
0017     TestAlpakaGlobalProducerNullES(edm::ParameterSet const& config)
0018         : EDProducer<>(config),
0019           esTokenA_(esConsumes(config.getParameter<edm::ESInputTag>("eventSetupSource"))),
0020           esTokenC_(esConsumes(config.getParameter<edm::ESInputTag>("eventSetupSource"))),
0021           esTokenCNotExist_(esConsumes(edm::ESInputTag("", "doesNotExist"))) {}
0022 
0023     void produce(edm::StreamID, device::Event& iEvent, device::EventSetup const& iSetup) const override {
0024       bool threw = false;
0025       try {
0026         [[maybe_unused]] auto handleA = iSetup.getHandle(esTokenA_);
0027       } catch (cms::Exception& e) {
0028         threw = true;
0029       }
0030       if (not threw) {
0031         throw cms::Exception("Assert") << "Getting AlpakaESTestDataADevice ESProduct did not throw";
0032       }
0033 
0034       threw = false;
0035       try {
0036         [[maybe_unused]] auto const& prodC = iSetup.getData(esTokenC_);
0037       } catch (cms::Exception& e) {
0038         threw = true;
0039       }
0040       if (not threw) {
0041         throw cms::Exception("Assert") << "Getting AlpakaESTestDataCDevice ESProduct did not throw";
0042       }
0043 
0044       auto handleC = iSetup.getHandle(esTokenCNotExist_);
0045       if (handleC.isValid()) {
0046         throw cms::Exception("Assert") << "Getting non-existing AlpakaESTestDataCDevice succeeded, should have failed";
0047       }
0048       threw = false;
0049       try {
0050         [[maybe_unused]] auto const& prodC = *handleC;
0051       } catch (cms::Exception& e) {
0052         threw = true;
0053       }
0054       if (not threw) {
0055         throw cms::Exception("Assert")
0056             << "De-referencing ESHandle of non-existentAlpakaESTestDataADevice did not throw";
0057       }
0058     }
0059 
0060     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0061       edm::ParameterSetDescription desc;
0062       desc.add("eventSetupSource", edm::ESInputTag{});
0063       descriptions.addWithDefaultLabel(desc);
0064     }
0065 
0066   private:
0067     const device::ESGetToken<AlpakaESTestDataADevice, AlpakaESTestRecordA> esTokenA_;
0068     const device::ESGetToken<AlpakaESTestDataCDevice, AlpakaESTestRecordA> esTokenC_;
0069     const device::ESGetToken<AlpakaESTestDataCDevice, AlpakaESTestRecordA> esTokenCNotExist_;
0070   };
0071 
0072 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0073 
0074 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0075 DEFINE_FWK_ALPAKA_MODULE(TestAlpakaGlobalProducerNullES);