Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:13:00

0001 /*
0002  *  makeprocess_t.cc
0003  *  EDMProto
0004  *
0005  *  Created by Chris Jones on 5/18/05.
0006  *
0007  */
0008 
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010 #include "FWCore/PythonParameterSet/interface/PyBind11ProcessDesc.h"
0011 #include "FWCore/Utilities/interface/EDMException.h"
0012 
0013 #include <cppunit/extensions/HelperMacros.h>
0014 
0015 #include <memory>
0016 
0017 #include <iostream>
0018 #include <sstream>
0019 #include <stdexcept>
0020 #include <string>
0021 #include <vector>
0022 #include <algorithm>
0023 #include <set>
0024 
0025 class testmakeprocess : public CppUnit::TestFixture {
0026   CPPUNIT_TEST_SUITE(testmakeprocess);
0027   CPPUNIT_TEST(simpleProcessTest);
0028   CPPUNIT_TEST(usingTest);
0029   CPPUNIT_TEST(pathTest);
0030   CPPUNIT_TEST(moduleTest);
0031   CPPUNIT_TEST(emptyModuleTest);
0032   CPPUNIT_TEST(taskTest);
0033   CPPUNIT_TEST(taskTestWithEmptySchedule);
0034   CPPUNIT_TEST(taskTestWithSchedule);
0035   CPPUNIT_TEST(edmException);
0036   //CPPUNIT_TEST(windowsLineEndingTest);
0037   //CPPUNIT_TEST_EXCEPTION(emptyPsetTest,edm::Exception);
0038   CPPUNIT_TEST_SUITE_END();
0039 
0040 public:
0041   void setUp() {}
0042   void tearDown() {}
0043   void simpleProcessTest();
0044   void usingTest();
0045   void pathTest();
0046   void moduleTest();
0047   void emptyModuleTest();
0048   void taskTest();
0049   void taskTestWithEmptySchedule();
0050   void taskTestWithSchedule();
0051   void edmException();
0052   //void windowsLineEndingTest();
0053 private:
0054   typedef std::shared_ptr<edm::ParameterSet> ParameterSetPtr;
0055   ParameterSetPtr pSet(char const* c) {
0056     //ParameterSetPtr result( new edm::ProcessDesc(std::string(c)) );
0057     ParameterSetPtr result = PyBind11ProcessDesc(std::string(c), false).parameterSet();
0058     CPPUNIT_ASSERT(result->getParameter<std::string>("@process_name") == "test");
0059     return result;
0060   }
0061   //  void emptyPsetTest();
0062 };
0063 
0064 ///registration of the test so that the runner can find it
0065 CPPUNIT_TEST_SUITE_REGISTRATION(testmakeprocess);
0066 
0067 void testmakeprocess::simpleProcessTest() {
0068   char const* kTest =
0069       "import FWCore.ParameterSet.Config as cms\n"
0070       "process = cms.Process('test')\n"
0071       "dummy =  cms.PSet(b = cms.bool(True))\n";
0072   ParameterSetPtr test = pSet(kTest);
0073 }
0074 
0075 void testmakeprocess::usingTest() {
0076   char const* kTest =
0077       "import FWCore.ParameterSet.Config as cms\n"
0078       "process = cms.Process('test')\n"
0079       "process.dummy = cms.PSet(\n"
0080       "    b = cms.bool(True)\n"
0081       ")\n"
0082       "process.dummy2 = cms.PSet(\n"
0083       "    d = cms.bool(True)\n"
0084       ")\n"
0085       "process.m1 = cms.EDFilter('Dummy',\n"
0086       "    process.dummy\n"
0087       ")\n"
0088       "process.m2 = cms.EDFilter('Dummy2',\n"
0089       "    process.dummy2\n"
0090       ")\n"
0091       "process.p = cms.Path(process.m1+process.m2)\n";
0092 
0093   ParameterSetPtr test = pSet(kTest);
0094 
0095   //CPPUNIT_ASSERT(test->getParameterSet("dummy").getBool("b") == true);
0096   CPPUNIT_ASSERT(test->getParameterSet("m1").getParameter<bool>("b") == true);
0097   CPPUNIT_ASSERT(test->getParameterSet("m2").getParameter<bool>("d") == true);
0098 }
0099 
0100 void testmakeprocess::pathTest() {
0101   char const* kTest =
0102       "import FWCore.ParameterSet.Config as cms\n"
0103       "process = cms.Process('test')\n"
0104       "process.cone5 = cms.EDFilter('PhonyConeJet',\n"
0105       "    i = cms.int32(5)\n"
0106       ")\n"
0107       "process.cone7 = cms.EDFilter('PhonyConeJet',\n"
0108       "    i = cms.int32(7)\n"
0109       ")\n"
0110       "process.jtanalyzer = cms.EDAnalyzer('jtanalyzer')\n"
0111       "process.writer = cms.OutputModule('Writer')\n"
0112       "process.cones = cms.Sequence(process.cone5*process.cone7)\n"
0113       "process.term1 = cms.Path(process.cones+process.jtanalyzer)\n"
0114       "process.atEnd = cms.EndPath(process.writer)\n";
0115 
0116   ParameterSetPtr test = pSet(kTest);
0117   //CPPUNIT_ASSERT(test->pathFragments().size() == 5);
0118 
0119   edm::ParameterSet& myparams = *(test);
0120   myparams.registerIt();
0121   std::string rep = myparams.toString();
0122   edm::ParameterSet copy(rep);
0123   CPPUNIT_ASSERT(copy == myparams);
0124 }
0125 
0126 edm::ParameterSet modulePSet(std::string const& iLabel, std::string const& iType, std::string const& iCppType) {
0127   edm::ParameterSet temp;
0128   temp.addParameter("s", 1);
0129   temp.addParameter("@module_label", iLabel);
0130   temp.addParameter("@module_type", iType);
0131   temp.addParameter("@module_edm_type", iCppType);
0132   return temp;
0133 }
0134 
0135 void testmakeprocess::moduleTest() {
0136   char const* kTest =
0137       "import FWCore.ParameterSet.Config as cms\n"
0138       "process = cms.Process('test')\n"
0139       "process.cones = cms.EDFilter('Module',\n"
0140       "    s = cms.int32(1)\n"
0141       ")\n"
0142       "process.NoLabelModule = cms.ESProducer('NoLabelModule',\n"
0143       "    s = cms.int32(1)\n"
0144       ")\n"
0145       "process.labeled = cms.ESProducer('LabelModule',\n"
0146       "    s = cms.int32(1)\n"
0147       ")\n"
0148       "process.source = cms.Source('InputSource',\n"
0149       "    s = cms.int32(1)\n"
0150       ")\n"
0151       "process.NoLabelRetriever = cms.ESSource('NoLabelRetriever',\n"
0152       "    s = cms.int32(1)\n"
0153       ")\n"
0154       "process.label = cms.ESSource('LabelRetriever',\n"
0155       "    s = cms.int32(1)\n"
0156       ")\n"
0157       "process.p = cms.Path(process.cones)\n";
0158 
0159   ParameterSetPtr test = pSet(kTest);
0160 
0161   static edm::ParameterSet const kEmpty;
0162   edm::ParameterSet const kCone(modulePSet("cones", "Module", "EDFilter"));
0163   std::ostringstream out;
0164   out << kCone.toString() << std::endl;
0165   out << test->getParameterSet("cones").toString() << std::endl;
0166 
0167   edm::ParameterSet const kMainInput(modulePSet("@main_input", "InputSource", "Source"));
0168 
0169   edm::ParameterSet const kNoLabelModule(modulePSet("", "NoLabelModule", "ESProducer"));
0170   edm::ParameterSet const kLabelModule(modulePSet("labeled", "LabelModule", "ESProducer"));
0171   edm::ParameterSet const kNoLabelRetriever(modulePSet("", "NoLabelRetriever", "ESSource"));
0172   edm::ParameterSet const kLabelRetriever(modulePSet("label", "LabelRetriever", "ESSource"));
0173 
0174   CPPUNIT_ASSERT(kEmpty != (test->getParameterSet("cones")));
0175   CPPUNIT_ASSERT(kCone == test->getParameterSet("cones"));
0176 
0177   CPPUNIT_ASSERT(kEmpty != (test->getParameterSet("@main_input")));
0178   CPPUNIT_ASSERT(kMainInput == (test->getParameterSet("@main_input")));
0179 
0180   CPPUNIT_ASSERT(kEmpty != (test->getParameterSet("NoLabelModule@")));
0181   CPPUNIT_ASSERT(kNoLabelModule == test->getParameterSet("NoLabelModule@"));
0182 
0183   CPPUNIT_ASSERT(kEmpty != (test->getParameterSet("LabelModule@labeled")));
0184   CPPUNIT_ASSERT(kLabelModule == test->getParameterSet("LabelModule@labeled"));
0185 
0186   CPPUNIT_ASSERT(kEmpty != (test->getParameterSet("NoLabelRetriever@")));
0187   CPPUNIT_ASSERT(kNoLabelRetriever == test->getParameterSet("NoLabelRetriever@"));
0188 
0189   CPPUNIT_ASSERT(kEmpty != (test->getParameterSet("LabelRetriever@label")));
0190   CPPUNIT_ASSERT(kLabelRetriever == test->getParameterSet("LabelRetriever@label"));
0191 }
0192 
0193 void testmakeprocess::emptyModuleTest() {
0194   char const* kTest =
0195       "import FWCore.ParameterSet.Config as cms\n"
0196       "process = cms.Process('test')\n"
0197       "process.thing = cms.EDFilter('XX')\n"
0198       "process.p = cms.Path(process.thing)\n";
0199 
0200   ParameterSetPtr test = pSet(kTest);
0201 
0202   edm::ParameterSet& myparams = *(test);
0203   myparams.registerIt();
0204   std::string rep = myparams.toString();
0205   edm::ParameterSet copy(rep);
0206   CPPUNIT_ASSERT(copy == myparams);
0207 }
0208 
0209 void testmakeprocess::taskTest() {
0210   char const* kTest =
0211       "import FWCore.ParameterSet.Config as cms\n"
0212       "process = cms.Process('test')\n"
0213       "process.load(\"FWCore.PythonParameterSet.test.testTask_cff\")\n"
0214       "t10 = cms.Task(process.m29, process.m30, process.f29, process.f30,"
0215       "process.ess27, process.ess28, process.esp27, process.esp28,"
0216       "process.serv27, process.serv28)\n";
0217 
0218   ParameterSetPtr test = pSet(kTest);
0219 
0220   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("m1") && !test->existsAs<edm::ParameterSet>("m2") &&
0221                  test->existsAs<edm::ParameterSet>("m3") && test->existsAs<edm::ParameterSet>("m4") &&
0222                  test->existsAs<edm::ParameterSet>("m5") && test->existsAs<edm::ParameterSet>("m6") &&
0223                  test->existsAs<edm::ParameterSet>("m7") && test->existsAs<edm::ParameterSet>("m8") &&
0224                  test->existsAs<edm::ParameterSet>("m9") && test->existsAs<edm::ParameterSet>("m10") &&
0225                  test->existsAs<edm::ParameterSet>("m11") && test->existsAs<edm::ParameterSet>("m12") &&
0226                  test->existsAs<edm::ParameterSet>("m13") && test->existsAs<edm::ParameterSet>("m14") &&
0227                  test->existsAs<edm::ParameterSet>("m15") && test->existsAs<edm::ParameterSet>("m16") &&
0228                  test->existsAs<edm::ParameterSet>("m17") && test->existsAs<edm::ParameterSet>("m18") &&
0229                  test->existsAs<edm::ParameterSet>("m19") && test->existsAs<edm::ParameterSet>("m20") &&
0230                  test->existsAs<edm::ParameterSet>("m21") && test->existsAs<edm::ParameterSet>("m22") &&
0231                  test->existsAs<edm::ParameterSet>("m23") && test->existsAs<edm::ParameterSet>("m24") &&
0232                  test->existsAs<edm::ParameterSet>("m25") && test->existsAs<edm::ParameterSet>("m26") &&
0233                  !test->existsAs<edm::ParameterSet>("m27") && !test->existsAs<edm::ParameterSet>("m28") &&
0234                  !test->existsAs<edm::ParameterSet>("m29") && !test->existsAs<edm::ParameterSet>("m30"));
0235 
0236   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("f1") && !test->existsAs<edm::ParameterSet>("f2") &&
0237                  test->existsAs<edm::ParameterSet>("f3") && test->existsAs<edm::ParameterSet>("f4") &&
0238                  test->existsAs<edm::ParameterSet>("f5") && test->existsAs<edm::ParameterSet>("f6") &&
0239                  test->existsAs<edm::ParameterSet>("f7") && test->existsAs<edm::ParameterSet>("f8") &&
0240                  test->existsAs<edm::ParameterSet>("f9") && test->existsAs<edm::ParameterSet>("f10") &&
0241                  test->existsAs<edm::ParameterSet>("f11") && test->existsAs<edm::ParameterSet>("f12") &&
0242                  test->existsAs<edm::ParameterSet>("f13") && test->existsAs<edm::ParameterSet>("f14") &&
0243                  test->existsAs<edm::ParameterSet>("f15") && test->existsAs<edm::ParameterSet>("f16") &&
0244                  test->existsAs<edm::ParameterSet>("f17") && test->existsAs<edm::ParameterSet>("f18") &&
0245                  test->existsAs<edm::ParameterSet>("f19") && test->existsAs<edm::ParameterSet>("f20") &&
0246                  test->existsAs<edm::ParameterSet>("f21") && test->existsAs<edm::ParameterSet>("f22") &&
0247                  test->existsAs<edm::ParameterSet>("f23") && test->existsAs<edm::ParameterSet>("f24") &&
0248                  test->existsAs<edm::ParameterSet>("f25") && test->existsAs<edm::ParameterSet>("f26") &&
0249                  !test->existsAs<edm::ParameterSet>("f27") && !test->existsAs<edm::ParameterSet>("f28") &&
0250                  !test->existsAs<edm::ParameterSet>("f29") && !test->existsAs<edm::ParameterSet>("f30"));
0251 
0252   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("a1") && !test->existsAs<edm::ParameterSet>("a2") &&
0253                  test->existsAs<edm::ParameterSet>("a3") && test->existsAs<edm::ParameterSet>("a4") &&
0254                  test->existsAs<edm::ParameterSet>("a5") && test->existsAs<edm::ParameterSet>("a6") &&
0255                  test->existsAs<edm::ParameterSet>("a7") && test->existsAs<edm::ParameterSet>("a8") &&
0256                  test->existsAs<edm::ParameterSet>("a9") && test->existsAs<edm::ParameterSet>("a10"));
0257 
0258   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("o1") && !test->existsAs<edm::ParameterSet>("o2") &&
0259                  test->existsAs<edm::ParameterSet>("o7") && test->existsAs<edm::ParameterSet>("o8") &&
0260                  test->existsAs<edm::ParameterSet>("o9") && test->existsAs<edm::ParameterSet>("o10"));
0261 
0262   CPPUNIT_ASSERT(test->existsAs<edm::ParameterSet>("ess@ess1") && test->existsAs<edm::ParameterSet>("ess2@") &&
0263                  !test->existsAs<edm::ParameterSet>("ess@ess3") && !test->existsAs<edm::ParameterSet>("ess4@") &&
0264                  test->existsAs<edm::ParameterSet>("ess@ess11") && test->existsAs<edm::ParameterSet>("ess12@") &&
0265                  test->existsAs<edm::ParameterSet>("ess@ess13") && test->existsAs<edm::ParameterSet>("ess14@") &&
0266                  test->existsAs<edm::ParameterSet>("ess@ess15") && test->existsAs<edm::ParameterSet>("ess16@") &&
0267                  test->existsAs<edm::ParameterSet>("ess@ess17") && test->existsAs<edm::ParameterSet>("ess18@") &&
0268                  test->existsAs<edm::ParameterSet>("ess@ess19") && test->existsAs<edm::ParameterSet>("ess20@") &&
0269                  test->existsAs<edm::ParameterSet>("ess@ess21") && test->existsAs<edm::ParameterSet>("ess22@") &&
0270                  test->existsAs<edm::ParameterSet>("ess@ess23") && test->existsAs<edm::ParameterSet>("ess24@") &&
0271                  test->existsAs<edm::ParameterSet>("ess@ess25") && test->existsAs<edm::ParameterSet>("ess26@") &&
0272                  test->existsAs<edm::ParameterSet>("ess@ess27") && test->existsAs<edm::ParameterSet>("ess28@"));
0273 
0274   CPPUNIT_ASSERT(test->existsAs<edm::ParameterSet>("esp@esp1") && test->existsAs<edm::ParameterSet>("esp2@") &&
0275                  !test->existsAs<edm::ParameterSet>("esp@esp3") && !test->existsAs<edm::ParameterSet>("esp4@") &&
0276                  test->existsAs<edm::ParameterSet>("esp@esp11") && test->existsAs<edm::ParameterSet>("esp12@") &&
0277                  test->existsAs<edm::ParameterSet>("esp@esp13") && test->existsAs<edm::ParameterSet>("esp14@") &&
0278                  test->existsAs<edm::ParameterSet>("esp@esp15") && test->existsAs<edm::ParameterSet>("esp16@") &&
0279                  test->existsAs<edm::ParameterSet>("esp@esp17") && test->existsAs<edm::ParameterSet>("esp18@") &&
0280                  test->existsAs<edm::ParameterSet>("esp@esp19") && test->existsAs<edm::ParameterSet>("esp20@") &&
0281                  test->existsAs<edm::ParameterSet>("esp@esp21") && test->existsAs<edm::ParameterSet>("esp22@") &&
0282                  test->existsAs<edm::ParameterSet>("esp@esp23") && test->existsAs<edm::ParameterSet>("esp24@") &&
0283                  test->existsAs<edm::ParameterSet>("esp@esp25") && test->existsAs<edm::ParameterSet>("esp26@") &&
0284                  test->existsAs<edm::ParameterSet>("esp@esp27") && test->existsAs<edm::ParameterSet>("esp28@"));
0285 
0286   std::vector<edm::ParameterSet> const& vpsetServices = test->getUntrackedParameterSetVector("services");
0287   // Note that the vector<ParameterSet> is not sorted. The order
0288   // depends on the order of a python iteration through a dictionary
0289   // which could be anything.
0290   std::set<std::string> serviceNames;
0291   for (auto const& pset : vpsetServices) {
0292     serviceNames.insert(pset.getParameter<std::string>("@service_type"));
0293   }
0294   std::vector<std::string> expectedServiceNames{"MessageLogger", "serv1",  "serv2",  "serv11", "serv12", "serv13",
0295                                                 "serv14",        "serv15", "serv16", "serv17", "serv18", "serv19",
0296                                                 "serv20",        "serv21", "serv22", "serv23", "serv24", "serv25",
0297                                                 "serv26",        "serv27", "serv28"};
0298   bool result = true;
0299   for (auto const& name : expectedServiceNames) {
0300     if (serviceNames.find(name) == serviceNames.end()) {
0301       result = false;
0302     }
0303   }
0304   if (serviceNames.size() != expectedServiceNames.size()) {
0305     result = false;
0306   }
0307   CPPUNIT_ASSERT(result);
0308 }
0309 
0310 void testmakeprocess::taskTestWithEmptySchedule() {
0311   char const* kTest =
0312       "import FWCore.ParameterSet.Config as cms\n"
0313       "process = cms.Process('test')\n"
0314       "process.load(\"FWCore.PythonParameterSet.test.testTask_cff\")\n"
0315       "t10 = cms.Task(process.m29, process.m30, process.f29, process.f30,"
0316       "process.ess27, process.ess28, process.esp27, process.esp28,"
0317       "process.serv27, process.serv28)\n"
0318       "process.schedule = cms.Schedule()\n";
0319 
0320   ParameterSetPtr test = pSet(kTest);
0321 
0322   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("m1") && !test->existsAs<edm::ParameterSet>("m2") &&
0323                  !test->existsAs<edm::ParameterSet>("m3") && !test->existsAs<edm::ParameterSet>("m4") &&
0324                  !test->existsAs<edm::ParameterSet>("m5") && !test->existsAs<edm::ParameterSet>("m6") &&
0325                  !test->existsAs<edm::ParameterSet>("m7") && !test->existsAs<edm::ParameterSet>("m8") &&
0326                  !test->existsAs<edm::ParameterSet>("m9") && !test->existsAs<edm::ParameterSet>("m10") &&
0327                  !test->existsAs<edm::ParameterSet>("m11") && !test->existsAs<edm::ParameterSet>("m12") &&
0328                  !test->existsAs<edm::ParameterSet>("m13") && !test->existsAs<edm::ParameterSet>("m14") &&
0329                  !test->existsAs<edm::ParameterSet>("m15") && !test->existsAs<edm::ParameterSet>("m16") &&
0330                  !test->existsAs<edm::ParameterSet>("m17") && !test->existsAs<edm::ParameterSet>("m18") &&
0331                  !test->existsAs<edm::ParameterSet>("m19") && !test->existsAs<edm::ParameterSet>("m20") &&
0332                  !test->existsAs<edm::ParameterSet>("m21") && !test->existsAs<edm::ParameterSet>("m22") &&
0333                  !test->existsAs<edm::ParameterSet>("m23") && !test->existsAs<edm::ParameterSet>("m24") &&
0334                  !test->existsAs<edm::ParameterSet>("m25") && !test->existsAs<edm::ParameterSet>("m26") &&
0335                  !test->existsAs<edm::ParameterSet>("m27") && !test->existsAs<edm::ParameterSet>("m28") &&
0336                  !test->existsAs<edm::ParameterSet>("m29") && !test->existsAs<edm::ParameterSet>("m30"));
0337 
0338   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("f1") && !test->existsAs<edm::ParameterSet>("f2") &&
0339                  !test->existsAs<edm::ParameterSet>("f3") && !test->existsAs<edm::ParameterSet>("f4") &&
0340                  !test->existsAs<edm::ParameterSet>("f5") && !test->existsAs<edm::ParameterSet>("f6") &&
0341                  !test->existsAs<edm::ParameterSet>("f7") && !test->existsAs<edm::ParameterSet>("f8") &&
0342                  !test->existsAs<edm::ParameterSet>("f9") && !test->existsAs<edm::ParameterSet>("f10") &&
0343                  !test->existsAs<edm::ParameterSet>("f11") && !test->existsAs<edm::ParameterSet>("f12") &&
0344                  !test->existsAs<edm::ParameterSet>("f13") && !test->existsAs<edm::ParameterSet>("f14") &&
0345                  !test->existsAs<edm::ParameterSet>("f15") && !test->existsAs<edm::ParameterSet>("f16") &&
0346                  !test->existsAs<edm::ParameterSet>("f17") && !test->existsAs<edm::ParameterSet>("f18") &&
0347                  !test->existsAs<edm::ParameterSet>("f19") && !test->existsAs<edm::ParameterSet>("f20") &&
0348                  !test->existsAs<edm::ParameterSet>("f21") && !test->existsAs<edm::ParameterSet>("f22") &&
0349                  !test->existsAs<edm::ParameterSet>("f23") && !test->existsAs<edm::ParameterSet>("f24") &&
0350                  !test->existsAs<edm::ParameterSet>("f25") && !test->existsAs<edm::ParameterSet>("f26") &&
0351                  !test->existsAs<edm::ParameterSet>("f27") && !test->existsAs<edm::ParameterSet>("f28") &&
0352                  !test->existsAs<edm::ParameterSet>("f29") && !test->existsAs<edm::ParameterSet>("f30"));
0353 
0354   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("a1") && !test->existsAs<edm::ParameterSet>("a2") &&
0355                  !test->existsAs<edm::ParameterSet>("a3") && !test->existsAs<edm::ParameterSet>("a4") &&
0356                  !test->existsAs<edm::ParameterSet>("a5") && !test->existsAs<edm::ParameterSet>("a6") &&
0357                  !test->existsAs<edm::ParameterSet>("a7") && !test->existsAs<edm::ParameterSet>("a8") &&
0358                  !test->existsAs<edm::ParameterSet>("a9") && !test->existsAs<edm::ParameterSet>("a10"));
0359 
0360   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("o1") && !test->existsAs<edm::ParameterSet>("o2") &&
0361                  !test->existsAs<edm::ParameterSet>("o7") && !test->existsAs<edm::ParameterSet>("o8") &&
0362                  !test->existsAs<edm::ParameterSet>("o9") && !test->existsAs<edm::ParameterSet>("o10"));
0363 
0364   CPPUNIT_ASSERT(test->existsAs<edm::ParameterSet>("ess@ess1") && test->existsAs<edm::ParameterSet>("ess2@") &&
0365                  !test->existsAs<edm::ParameterSet>("ess@ess3") && !test->existsAs<edm::ParameterSet>("ess4@") &&
0366                  !test->existsAs<edm::ParameterSet>("ess@ess11") && !test->existsAs<edm::ParameterSet>("ess12@") &&
0367                  !test->existsAs<edm::ParameterSet>("ess@ess13") && !test->existsAs<edm::ParameterSet>("ess14@") &&
0368                  !test->existsAs<edm::ParameterSet>("ess@ess15") && !test->existsAs<edm::ParameterSet>("ess16@") &&
0369                  !test->existsAs<edm::ParameterSet>("ess@ess17") && !test->existsAs<edm::ParameterSet>("ess18@") &&
0370                  !test->existsAs<edm::ParameterSet>("ess@ess19") && !test->existsAs<edm::ParameterSet>("ess20@") &&
0371                  !test->existsAs<edm::ParameterSet>("ess@ess21") && !test->existsAs<edm::ParameterSet>("ess22@") &&
0372                  !test->existsAs<edm::ParameterSet>("ess@ess23") && !test->existsAs<edm::ParameterSet>("ess24@") &&
0373                  !test->existsAs<edm::ParameterSet>("ess@ess25") && !test->existsAs<edm::ParameterSet>("ess26@") &&
0374                  test->existsAs<edm::ParameterSet>("ess@ess27") && test->existsAs<edm::ParameterSet>("ess28@"));
0375 
0376   CPPUNIT_ASSERT(test->existsAs<edm::ParameterSet>("esp@esp1") && test->existsAs<edm::ParameterSet>("esp2@") &&
0377                  !test->existsAs<edm::ParameterSet>("esp@esp3") && !test->existsAs<edm::ParameterSet>("esp4@") &&
0378                  !test->existsAs<edm::ParameterSet>("esp@esp11") && !test->existsAs<edm::ParameterSet>("esp12@") &&
0379                  !test->existsAs<edm::ParameterSet>("esp@esp13") && !test->existsAs<edm::ParameterSet>("esp14@") &&
0380                  !test->existsAs<edm::ParameterSet>("esp@esp15") && !test->existsAs<edm::ParameterSet>("esp16@") &&
0381                  !test->existsAs<edm::ParameterSet>("esp@esp17") && !test->existsAs<edm::ParameterSet>("esp18@") &&
0382                  !test->existsAs<edm::ParameterSet>("esp@esp19") && !test->existsAs<edm::ParameterSet>("esp20@") &&
0383                  !test->existsAs<edm::ParameterSet>("esp@esp21") && !test->existsAs<edm::ParameterSet>("esp22@") &&
0384                  !test->existsAs<edm::ParameterSet>("esp@esp23") && !test->existsAs<edm::ParameterSet>("esp24@") &&
0385                  !test->existsAs<edm::ParameterSet>("esp@esp25") && !test->existsAs<edm::ParameterSet>("esp26@") &&
0386                  test->existsAs<edm::ParameterSet>("esp@esp27") && test->existsAs<edm::ParameterSet>("esp28@"));
0387 
0388   std::vector<edm::ParameterSet> const& vpsetServices = test->getUntrackedParameterSetVector("services");
0389   // Note that the vector<ParameterSet> is not sorted. The order
0390   // depends on the order of a python iteration through a dictionary
0391   // which could be anything.
0392   std::set<std::string> serviceNames;
0393   for (auto const& pset : vpsetServices) {
0394     serviceNames.insert(pset.getParameter<std::string>("@service_type"));
0395   }
0396   std::vector<std::string> expectedServiceNames{"MessageLogger", "serv1", "serv2", "serv27", "serv28"};
0397   bool result = true;
0398   for (auto const& name : expectedServiceNames) {
0399     if (serviceNames.find(name) == serviceNames.end()) {
0400       result = false;
0401     }
0402   }
0403   if (serviceNames.size() != expectedServiceNames.size()) {
0404     result = false;
0405   }
0406   CPPUNIT_ASSERT(result);
0407 }
0408 
0409 void testmakeprocess::taskTestWithSchedule() {
0410   char const* kTest =
0411       "import FWCore.ParameterSet.Config as cms\n"
0412       "process = cms.Process('test')\n"
0413       "process.load(\"FWCore.PythonParameterSet.test.testTask_cff\")\n"
0414       "t10 = cms.Task(process.m29, process.m30, process.f29, process.f30,"
0415       "process.ess27, process.ess28, process.esp27, process.esp28,"
0416       "process.serv27, process.serv28)\n"
0417       "process.schedule = cms.Schedule(process.p1, process.p2, process.e1, process.e2,"
0418       "process.pf1, process.pf2, process.ef1, process.ef2,"
0419       "process.pa1, process.pa2, process.ea1, process.ea2,"
0420       "process.eo1, process.eo2, process.pess2, process.eess2,"
0421       "process.pesp2, process.eesp2, process.pserv2, process.eserv2,"
0422       "tasks=[process.t9, process.tf9, process.tess10,process.tesp10,"
0423       "process.tserv10])\n";
0424 
0425   ParameterSetPtr test = pSet(kTest);
0426 
0427   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("m1") && !test->existsAs<edm::ParameterSet>("m2") &&
0428                  test->existsAs<edm::ParameterSet>("m3") && test->existsAs<edm::ParameterSet>("m4") &&
0429                  test->existsAs<edm::ParameterSet>("m5") && test->existsAs<edm::ParameterSet>("m6") &&
0430                  test->existsAs<edm::ParameterSet>("m7") && test->existsAs<edm::ParameterSet>("m8") &&
0431                  test->existsAs<edm::ParameterSet>("m9") && test->existsAs<edm::ParameterSet>("m10") &&
0432                  test->existsAs<edm::ParameterSet>("m11") && test->existsAs<edm::ParameterSet>("m12") &&
0433                  test->existsAs<edm::ParameterSet>("m13") && test->existsAs<edm::ParameterSet>("m14") &&
0434                  test->existsAs<edm::ParameterSet>("m15") && test->existsAs<edm::ParameterSet>("m16") &&
0435                  test->existsAs<edm::ParameterSet>("m17") && test->existsAs<edm::ParameterSet>("m18") &&
0436                  test->existsAs<edm::ParameterSet>("m19") && test->existsAs<edm::ParameterSet>("m20") &&
0437                  test->existsAs<edm::ParameterSet>("m21") && test->existsAs<edm::ParameterSet>("m22") &&
0438                  test->existsAs<edm::ParameterSet>("m23") && test->existsAs<edm::ParameterSet>("m24") &&
0439                  test->existsAs<edm::ParameterSet>("m25") && test->existsAs<edm::ParameterSet>("m26") &&
0440                  test->existsAs<edm::ParameterSet>("m27") && test->existsAs<edm::ParameterSet>("m28") &&
0441                  !test->existsAs<edm::ParameterSet>("m29") && !test->existsAs<edm::ParameterSet>("m30"));
0442 
0443   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("f1") && !test->existsAs<edm::ParameterSet>("f2") &&
0444                  test->existsAs<edm::ParameterSet>("f3") && test->existsAs<edm::ParameterSet>("f4") &&
0445                  test->existsAs<edm::ParameterSet>("f5") && test->existsAs<edm::ParameterSet>("f6") &&
0446                  test->existsAs<edm::ParameterSet>("f7") && test->existsAs<edm::ParameterSet>("f8") &&
0447                  test->existsAs<edm::ParameterSet>("f9") && test->existsAs<edm::ParameterSet>("f10") &&
0448                  test->existsAs<edm::ParameterSet>("f11") && test->existsAs<edm::ParameterSet>("f12") &&
0449                  test->existsAs<edm::ParameterSet>("f13") && test->existsAs<edm::ParameterSet>("f14") &&
0450                  test->existsAs<edm::ParameterSet>("f15") && test->existsAs<edm::ParameterSet>("f16") &&
0451                  test->existsAs<edm::ParameterSet>("f17") && test->existsAs<edm::ParameterSet>("f18") &&
0452                  test->existsAs<edm::ParameterSet>("f19") && test->existsAs<edm::ParameterSet>("f20") &&
0453                  test->existsAs<edm::ParameterSet>("f21") && test->existsAs<edm::ParameterSet>("f22") &&
0454                  test->existsAs<edm::ParameterSet>("f23") && test->existsAs<edm::ParameterSet>("f24") &&
0455                  test->existsAs<edm::ParameterSet>("f25") && test->existsAs<edm::ParameterSet>("f26") &&
0456                  test->existsAs<edm::ParameterSet>("f27") && test->existsAs<edm::ParameterSet>("f28") &&
0457                  !test->existsAs<edm::ParameterSet>("f29") && !test->existsAs<edm::ParameterSet>("f30"));
0458 
0459   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("a1") && !test->existsAs<edm::ParameterSet>("a2") &&
0460                  test->existsAs<edm::ParameterSet>("a3") && test->existsAs<edm::ParameterSet>("a4") &&
0461                  test->existsAs<edm::ParameterSet>("a5") && test->existsAs<edm::ParameterSet>("a6") &&
0462                  test->existsAs<edm::ParameterSet>("a7") && test->existsAs<edm::ParameterSet>("a8") &&
0463                  test->existsAs<edm::ParameterSet>("a9") && test->existsAs<edm::ParameterSet>("a10"));
0464 
0465   CPPUNIT_ASSERT(!test->existsAs<edm::ParameterSet>("o1") && !test->existsAs<edm::ParameterSet>("o2") &&
0466                  test->existsAs<edm::ParameterSet>("o7") && test->existsAs<edm::ParameterSet>("o8") &&
0467                  test->existsAs<edm::ParameterSet>("o9") && test->existsAs<edm::ParameterSet>("o10"));
0468 
0469   CPPUNIT_ASSERT(test->existsAs<edm::ParameterSet>("ess@ess1") && test->existsAs<edm::ParameterSet>("ess2@") &&
0470                  test->existsAs<edm::ParameterSet>("ess@ess3") && test->existsAs<edm::ParameterSet>("ess4@") &&
0471                  test->existsAs<edm::ParameterSet>("ess@ess11") && test->existsAs<edm::ParameterSet>("ess12@") &&
0472                  test->existsAs<edm::ParameterSet>("ess@ess13") && test->existsAs<edm::ParameterSet>("ess14@") &&
0473                  test->existsAs<edm::ParameterSet>("ess@ess15") && test->existsAs<edm::ParameterSet>("ess16@") &&
0474                  test->existsAs<edm::ParameterSet>("ess@ess17") && test->existsAs<edm::ParameterSet>("ess18@") &&
0475                  test->existsAs<edm::ParameterSet>("ess@ess19") && test->existsAs<edm::ParameterSet>("ess20@") &&
0476                  test->existsAs<edm::ParameterSet>("ess@ess21") && test->existsAs<edm::ParameterSet>("ess22@") &&
0477                  test->existsAs<edm::ParameterSet>("ess@ess23") && test->existsAs<edm::ParameterSet>("ess24@") &&
0478                  test->existsAs<edm::ParameterSet>("ess@ess25") && test->existsAs<edm::ParameterSet>("ess26@") &&
0479                  test->existsAs<edm::ParameterSet>("ess@ess27") && test->existsAs<edm::ParameterSet>("ess28@"));
0480 
0481   CPPUNIT_ASSERT(test->existsAs<edm::ParameterSet>("esp@esp1") && test->existsAs<edm::ParameterSet>("esp2@") &&
0482                  test->existsAs<edm::ParameterSet>("esp@esp3") && test->existsAs<edm::ParameterSet>("esp4@") &&
0483                  test->existsAs<edm::ParameterSet>("esp@esp11") && test->existsAs<edm::ParameterSet>("esp12@") &&
0484                  test->existsAs<edm::ParameterSet>("esp@esp13") && test->existsAs<edm::ParameterSet>("esp14@") &&
0485                  test->existsAs<edm::ParameterSet>("esp@esp15") && test->existsAs<edm::ParameterSet>("esp16@") &&
0486                  test->existsAs<edm::ParameterSet>("esp@esp17") && test->existsAs<edm::ParameterSet>("esp18@") &&
0487                  test->existsAs<edm::ParameterSet>("esp@esp19") && test->existsAs<edm::ParameterSet>("esp20@") &&
0488                  test->existsAs<edm::ParameterSet>("esp@esp21") && test->existsAs<edm::ParameterSet>("esp22@") &&
0489                  test->existsAs<edm::ParameterSet>("esp@esp23") && test->existsAs<edm::ParameterSet>("esp24@") &&
0490                  test->existsAs<edm::ParameterSet>("esp@esp25") && test->existsAs<edm::ParameterSet>("esp26@") &&
0491                  test->existsAs<edm::ParameterSet>("esp@esp27") && test->existsAs<edm::ParameterSet>("esp28@"));
0492 
0493   std::vector<edm::ParameterSet> const& vpsetServices = test->getUntrackedParameterSetVector("services");
0494   // Note that the vector<ParameterSet> is not sorted. The order
0495   // depends on the order of a python iteration through a dictionary
0496   // which could be anything.
0497   std::set<std::string> serviceNames;
0498   for (auto const& pset : vpsetServices) {
0499     serviceNames.insert(pset.getParameter<std::string>("@service_type"));
0500   }
0501   std::vector<std::string> expectedServiceNames{"MessageLogger", "serv1",  "serv2",  "serv3",  "serv4",  "serv11",
0502                                                 "serv12",        "serv13", "serv14", "serv15", "serv16", "serv17",
0503                                                 "serv18",        "serv19", "serv20", "serv21", "serv22", "serv23",
0504                                                 "serv24",        "serv25", "serv26", "serv27", "serv28"};
0505   bool result = true;
0506   for (auto const& name : expectedServiceNames) {
0507     if (serviceNames.find(name) == serviceNames.end()) {
0508       result = false;
0509     }
0510   }
0511   if (serviceNames.size() != expectedServiceNames.size()) {
0512     result = false;
0513   }
0514   CPPUNIT_ASSERT(result);
0515 }
0516 
0517 void testmakeprocess::edmException() {
0518   {
0519     char const* const kTest =
0520         "import FWCore.ParameterSet.Config as cms\n"
0521         "raise cms.EDMException(cms.edm.errors.Configuration,'test message')\n";
0522 
0523     bool exceptionHappened = false;
0524     try {
0525       (void)pSet(kTest);
0526     } catch (edm::Exception const& e) {
0527       exceptionHappened = true;
0528       CPPUNIT_ASSERT(e.categoryCode() == edm::errors::Configuration);
0529     } catch (std::exception const& e) {
0530       std::cout << "wrong error " << e.what() << std::endl;
0531       exceptionHappened = true;
0532       CPPUNIT_ASSERT(false);
0533     }
0534     CPPUNIT_ASSERT(exceptionHappened);
0535   }
0536 
0537   {
0538     char const* const kTest =
0539         "import FWCore.ParameterSet.Config as cms\n"
0540         "raise cms.EDMException(cms.edm.errors.UnavailableAccelerator,'test message')\n";
0541 
0542     bool exceptionHappened = false;
0543     try {
0544       (void)pSet(kTest);
0545     } catch (edm::Exception const& e) {
0546       exceptionHappened = true;
0547       CPPUNIT_ASSERT(e.categoryCode() == edm::errors::UnavailableAccelerator);
0548     } catch (std::exception const& e) {
0549       std::cout << "wrong error " << e.what() << std::endl;
0550       exceptionHappened = true;
0551       CPPUNIT_ASSERT(false);
0552     }
0553     CPPUNIT_ASSERT(exceptionHappened);
0554   }
0555 }
0556 
0557 /*
0558 void testmakeprocess::windowsLineEndingTest() {
0559 
0560   std::ostringstream oss;
0561   char const ret = '\r';
0562   char const nl = '\n';
0563   char const dquote = '"';
0564   char const backsl = '\\';
0565 
0566   oss << ret << nl
0567       << "import FWCore.ParameterSet.Config as cms" << ret << nl
0568       << "process = cms.Process('test')" << ret << nl
0569       << "  source = cms.Source('InputSource'," << ret << nl
0570       << "    i=cms.int32(1)" << ret << nl
0571       << "    s1 = cms.string(" << dquote << ret << dquote <<  ')' <<ret << nl
0572       << "    s2 = cms.string(" << dquote << backsl << backsl << 'r' << dquote << ')' << ret << nl
0573       << "  )" << ret << nl;
0574   char const* kTest = oss.str().c_str();
0575   std::cerr << "\n------------------------------\n";
0576   std::cerr << "s1 will look funky because of the embedded return\n";
0577   std::cerr << "s2 shows how to get the chars backslash-r into a string\n";
0578   std::cerr << kTest;
0579   std::cerr << "\n------------------------------\n";
0580 
0581    ParameterSetPtr test = pSet(kTest);
0582 
0583    edm::ParameterSet const& p = *(test->getProcessPSet());
0584 
0585    edm::ParameterSet src = p.getParameterSet("@main_input");
0586    CPPUNIT_ASSERT(src.getParameter<int>("i") == 1);
0587    std::string s1 = src.getParameter<std::string>("s1");
0588    std::string s2 = src.getParameter<std::string>("s2");
0589 
0590    std::cerr << "\nsize of s1 is: " << s1.size();
0591    std::cerr << "\nsize of s2 is: " << s2.size() << '\n';
0592 
0593    CPPUNIT_ASSERT(s1.size() == 1);
0594    CPPUNIT_ASSERT(s1[0] == ret);
0595 
0596    CPPUNIT_ASSERT(s2.size() == 2);
0597    CPPUNIT_ASSERT(s2[0] == backsl);
0598    CPPUNIT_ASSERT(s2[1] == 'r');
0599 }
0600 */