diff --git a/HeterogeneousCore/CUDATest/interface/MissingDictionaryCUDAObject.h b/HeterogeneousCore/CUDATest/interface/MissingDictionaryCUDAObject.h new file mode 100644 index 0000000000000..b1c116e168075 --- /dev/null +++ b/HeterogeneousCore/CUDATest/interface/MissingDictionaryCUDAObject.h @@ -0,0 +1,23 @@ +#ifndef HeterogeneousCore_CUDATest_interface_MissingDictionaryCUDAObject_h +#define HeterogeneousCore_CUDATest_interface_MissingDictionaryCUDAObject_h + +#include + +namespace edmtest { + + // A simple data product used to test that the framework handles correctly the case of + // edm::Wrapper where + // - T has a dictionary + // - edm::Wrapper does not have a dictionary + // - the corresponding classes.h file includes CUDA headers + + struct MissingDictionaryCUDAObject { + MissingDictionaryCUDAObject() {}; + MissingDictionaryCUDAObject(std::string s) : value(std::move(s)) {} + + std::string value; + }; + +} // namespace edmtest + +#endif // HeterogeneousCore_CUDATest_interface_MissingDictionaryCUDAObject_h diff --git a/HeterogeneousCore/CUDATest/plugins/MissingDictionaryCUDAProducer.cc b/HeterogeneousCore/CUDATest/plugins/MissingDictionaryCUDAProducer.cc new file mode 100644 index 0000000000000..4d462023cbba6 --- /dev/null +++ b/HeterogeneousCore/CUDATest/plugins/MissingDictionaryCUDAProducer.cc @@ -0,0 +1,24 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "HeterogeneousCore/CUDATest/interface/MissingDictionaryCUDAObject.h" + +namespace edmtest { + + class MissingDictionaryCUDAProducer : public edm::global::EDProducer<> { + public: + explicit MissingDictionaryCUDAProducer(edm::ParameterSet const& config) : token_(produces()) {} + + void produce(edm::StreamID sid, edm::Event& event, edm::EventSetup const& setup) const final { + event.emplace(token_); + } + + private: + const edm::EDPutTokenT token_; + }; + +} // namespace edmtest + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(edmtest::MissingDictionaryCUDAProducer); diff --git a/HeterogeneousCore/CUDATest/src/classes.h b/HeterogeneousCore/CUDATest/src/classes.h index 9cd0cf05bdf04..57ad4cf679733 100644 --- a/HeterogeneousCore/CUDATest/src/classes.h +++ b/HeterogeneousCore/CUDATest/src/classes.h @@ -1,3 +1,6 @@ -#include "DataFormats/Common/interface/Wrapper.h" +#include + #include "CUDADataFormats/Common/interface/Product.h" +#include "DataFormats/Common/interface/Wrapper.h" +#include "HeterogeneousCore/CUDATest/interface/MissingDictionaryCUDAObject.h" #include "HeterogeneousCore/CUDATest/interface/Thing.h" diff --git a/HeterogeneousCore/CUDATest/src/classes_def.xml b/HeterogeneousCore/CUDATest/src/classes_def.xml index 74760047caf99..fa11949429242 100644 --- a/HeterogeneousCore/CUDATest/src/classes_def.xml +++ b/HeterogeneousCore/CUDATest/src/classes_def.xml @@ -1,4 +1,16 @@ + + + + diff --git a/HeterogeneousCore/CUDATest/test/BuildFile.xml b/HeterogeneousCore/CUDATest/test/BuildFile.xml index 0faf0245bbe78..fab761c23181a 100644 --- a/HeterogeneousCore/CUDATest/test/BuildFile.xml +++ b/HeterogeneousCore/CUDATest/test/BuildFile.xml @@ -12,4 +12,12 @@ + + + diff --git a/HeterogeneousCore/CUDATest/test/testMissingDictionaryCUDA.sh b/HeterogeneousCore/CUDATest/test/testMissingDictionaryCUDA.sh new file mode 100755 index 0000000000000..19296dc09caea --- /dev/null +++ b/HeterogeneousCore/CUDATest/test/testMissingDictionaryCUDA.sh @@ -0,0 +1,12 @@ +#! /bin/bash + +function die { + echo -e "$1" + exit 1 +} + +LOCAL_TEST_DIR=${SCRAM_TEST_PATH:-$CMSSW_BASE/src/HeterogeneousCore/CUDATest/test} + +cmsRun ${LOCAL_TEST_DIR}/testMissingDictionaryCUDA_cfg.py >& testMissingDictionaryCUDA.log && die "The cmsRun test job succeeded unexpectedly" +grep -q "An exception of category 'DictionaryNotFound' occurred" testMissingDictionaryCUDA.log || die "Cannot find the following string in the exception message:\nAn exception of category 'DictionaryNotFound' occurred" +grep -q "edm::Wrapper" testMissingDictionaryCUDA.log || die "Cannot find the following string in the exception message:\nedm::Wrapper" diff --git a/HeterogeneousCore/CUDATest/test/testMissingDictionaryCUDA_cfg.py b/HeterogeneousCore/CUDATest/test/testMissingDictionaryCUDA_cfg.py new file mode 100644 index 0000000000000..d0e1a41cf249a --- /dev/null +++ b/HeterogeneousCore/CUDATest/test/testMissingDictionaryCUDA_cfg.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TEST") + +process.source = cms.Source("EmptySource") +process.maxEvents.input = 10 + +process.producer = cms.EDProducer("edmtest::MissingDictionaryCUDAProducer") + +process.path = cms.Path(process.producer)