File indexing completed on 2024-04-06 12:13:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "FWCore/Framework/interface/global/EDAnalyzer.h"
0014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0015 #include "FWCore/ServiceRegistry/interface/Service.h"
0016 #include "FWCore/Catalog/interface/SiteLocalConfig.h"
0017 #include "FWCore/Framework/interface/MakerMacros.h"
0018 #include "FWCore/Utilities/interface/Exception.h"
0019
0020 #include <string>
0021
0022 namespace edmtest {
0023 class SiteLocalConfigServiceTester : public edm::global::EDAnalyzer<> {
0024 public:
0025 SiteLocalConfigServiceTester(const edm::ParameterSet& iPSet);
0026
0027 void analyze(edm::StreamID, const edm::Event&, const edm::EventSetup&) const override;
0028
0029 private:
0030 std::string m_cacheHint;
0031 std::string m_readHint;
0032 std::string m_tempDir;
0033 unsigned int m_ttreeCacheSize;
0034 std::vector<std::string> m_nativeProtocols;
0035 bool m_valuesSet;
0036 bool m_expectedUseLocalConnectString;
0037 std::string m_expectedLocalConnectPrefix;
0038 std::string m_expectedLocalConnectSuffix;
0039 };
0040 }
0041
0042 using namespace edmtest;
0043
0044 SiteLocalConfigServiceTester::SiteLocalConfigServiceTester(const edm::ParameterSet& iPSet)
0045 : m_cacheHint(iPSet.getUntrackedParameter<std::string>("sourceCacheHint")),
0046 m_readHint(iPSet.getUntrackedParameter<std::string>("sourceReadHint")),
0047 m_tempDir(iPSet.getUntrackedParameter<std::string>("sourceTempDir")),
0048 m_ttreeCacheSize(iPSet.getUntrackedParameter<unsigned int>("sourceTTreeCacheSize")),
0049 m_nativeProtocols(iPSet.getUntrackedParameter<std::vector<std::string> >("sourceNativeProtocols")),
0050 m_valuesSet(iPSet.getUntrackedParameter<bool>("sourceValuesSet", true)),
0051 m_expectedUseLocalConnectString(iPSet.getUntrackedParameter<bool>("expectedUseLocalConnectString")),
0052 m_expectedLocalConnectPrefix(iPSet.getUntrackedParameter<std::string>("expectedLocalConnectPrefix")),
0053 m_expectedLocalConnectSuffix(iPSet.getUntrackedParameter<std::string>("expectedLocalConnectSuffix")) {}
0054
0055 static void throwNotSet(const char* iName) {
0056 throw cms::Exception("TestFailure") << "The value " << iName << " should have been set but was not";
0057 }
0058
0059 template <typename T>
0060 static void throwWrongValue(const char* iName, const T& iExpected, const T& iRetrieved) {
0061 throw cms::Exception("TestFailure") << "The value " << iName << " should have been " << iExpected
0062 << " but instead was " << iRetrieved;
0063 }
0064
0065 namespace {
0066 template <typename T>
0067 void testValue(const char* iName, const T& iExpected, const T* iRetrieved) {
0068 if (nullptr == iRetrieved) {
0069 throwNotSet(iName);
0070 } else if (*iRetrieved != iExpected) {
0071 throwWrongValue(iName, iExpected, *iRetrieved);
0072 }
0073 }
0074
0075 template <typename T>
0076 void checkNotSet(const char* iName, const T* iRetrieved) {
0077 if (nullptr != iRetrieved) {
0078 throw cms::Exception("TestFailure")
0079 << "The value " << iName << " should not have been set but was set to " << *iRetrieved;
0080 }
0081 }
0082
0083 void checkNotSet(const char* iName, const std::vector<std::string>* iRetrieved) {
0084 if (nullptr != iRetrieved) {
0085 throw cms::Exception("TestFailure") << "The value " << iName << " should not have been set but was set";
0086 }
0087 }
0088
0089 }
0090
0091 void SiteLocalConfigServiceTester::analyze(edm::StreamID, const edm::Event&, const edm::EventSetup&) const {
0092 edm::Service<edm::SiteLocalConfig> pConfig;
0093 if (m_valuesSet) {
0094 testValue("sourceCacheTempDir", m_tempDir, pConfig->sourceCacheTempDir());
0095 testValue("sourceCacheHint", m_cacheHint, pConfig->sourceCacheHint());
0096 testValue("sourceReadHint", m_readHint, pConfig->sourceReadHint());
0097 testValue("sourceTTreeCacheSize", m_ttreeCacheSize, pConfig->sourceTTreeCacheSize());
0098 const std::vector<std::string>* protocols = pConfig->sourceNativeProtocols();
0099 if (nullptr == protocols) {
0100 throwNotSet("sourceNativeProtocols");
0101 }
0102 if (protocols->size() != m_nativeProtocols.size()) {
0103 throw cms::Exception("TestFailure") << "The value sourceNativeProtocols has size " << protocols->size()
0104 << " but should have had size " << m_nativeProtocols.size();
0105 }
0106 for (std::vector<std::string>::const_iterator it = protocols->begin(),
0107 itEnd = protocols->end(),
0108 itExpect = m_nativeProtocols.begin();
0109 it != itEnd;
0110 ++it, ++itExpect) {
0111 testValue("sourceNativeProtocols", *itExpect, &(*it));
0112 }
0113 } else {
0114 checkNotSet("sourceCacheTempDir", pConfig->sourceCacheTempDir());
0115 checkNotSet("sourceCacheHint", pConfig->sourceCacheHint());
0116 checkNotSet("sourceReadHint", pConfig->sourceReadHint());
0117 checkNotSet("sourceTTreeCacheSize", pConfig->sourceTTreeCacheSize());
0118 checkNotSet("sourceNativeProtocols", pConfig->sourceNativeProtocols());
0119 }
0120
0121 if (pConfig->useLocalConnectString() != m_expectedUseLocalConnectString) {
0122 throw cms::Exception("TestFailure") << "The value of useLocalConnectString is \""
0123 << (pConfig->useLocalConnectString() ? std::string("true")
0124 : std::string("false"))
0125 << "\" but we expected the value \""
0126 << (m_expectedUseLocalConnectString ? std::string("true")
0127 : std::string("false"))
0128 << "\"";
0129 }
0130 if (pConfig->localConnectPrefix() != m_expectedLocalConnectPrefix) {
0131 throw cms::Exception("TestFailure") << "The value of localConnectPrefix is \"" << pConfig->localConnectPrefix()
0132 << "\" but we expected the value \"" << m_expectedLocalConnectPrefix << "\"";
0133 }
0134 if (pConfig->localConnectSuffix() != m_expectedLocalConnectSuffix) {
0135 throw cms::Exception("TestFailure") << "The value of localConnectSuffix is \"" << pConfig->localConnectSuffix()
0136 << "\" but we expected the value \"" << m_expectedLocalConnectSuffix << "\"";
0137 }
0138 }
0139
0140 DEFINE_FWK_MODULE(SiteLocalConfigServiceTester);