Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-09-22 02:39:37

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