CMS 3D CMS Logo

QTestConfigurationParser.cc
Go to the documentation of this file.
4 #include <cstring>
5 #include <stdexcept>
12 using namespace xercesc;
13 
15 
16 
18 
19  qtestParamNames=new QTestParameterNames();
20 
21  try {
22  if (s_numberOfInstances==0)
24  }
25  catch (const XMLException& e) {
26  throw(std::runtime_error("Standard pool exception : Fatal Error on pool::TrivialFileCatalog"));
27  }
28 
29  ++s_numberOfInstances;
30 }
31 
33  delete qtestParamNames;
34  qtestParamNames = nullptr;
35 }
36 
38  testsToDisable.clear();
39  testsRequested.clear();
40  mapMonitorElementTests.clear();
41  bool qtErrors= this->qtestsConfig();
42  bool meErrors= this->monitorElementTestsMap();
43  return (qtErrors||meErrors);
44 
45 }
46 
48 
49  std::string testActivationOFF="false";
50 
51  unsigned int qtestTagsNum =
52  doc()->getElementsByTagName(qtxml::_toDOMS("QTEST"))->getLength();
53 
54  for (unsigned int i=0; i<qtestTagsNum; ++i){
56  DOMNode* qtestNode =
57  doc()->getElementsByTagName(qtxml::_toDOMS("QTEST"))->item(i);
58 
59 
61  if (! qtestNode){
62  return true;
63  }
64  DOMElement* qtestElement = static_cast<DOMElement *>(qtestNode);
65  if (! qtestElement){
66  return true;
67  }
68  std::string qtestName = qtxml::_toString (qtestElement->getAttribute (qtxml::_toDOMS ("name")));
69  std::string activate = qtxml::_toString (qtestElement->getAttribute (qtxml::_toDOMS ("activate")));
70  if(!std::strcmp(activate.c_str(),testActivationOFF.c_str())) {
71  testsToDisable.push_back(qtestName);
72  }else{
73 
75  DOMNodeList *typeNodePrefix
76  = qtestElement->getElementsByTagName (qtxml::_toDOMS ("TYPE"));
77 
78  if (typeNodePrefix->getLength () != 1)return true;
79 
80 
81  DOMElement *prefixNode = dynamic_cast <DOMElement *> (typeNodePrefix->item (0));
82  if (!prefixNode)return true;
83 
84  DOMText *prefixText = dynamic_cast <DOMText *> (prefixNode->getFirstChild());
85  if (!prefixText)return true;
86 
87  std::string qtestType = qtxml::_toString (prefixText->getData ());
88 
89  testsRequested[qtestName]= this->getParams(qtestElement, qtestType);
90 
91  if( this->checkParameters(qtestName, qtestType)) return true;
92  }
93 
94  } //loop on qtestTagsNum
95 
96  return false;
97 
98 }
99 
100 std::map<std::string, std::string> QTestConfigurationParser::getParams(DOMElement* qtestElement, std::string qtestType){
101 
102  std::map<std::string, std::string> paramNamesValues;
103  paramNamesValues["type"]=qtestType;
104 
105  DOMNodeList *arguments = qtestElement->getElementsByTagName (qtxml::_toDOMS ("PARAM"));
106 
107  for (unsigned int i=0; i<arguments->getLength(); ++i){
108  DOMElement *argNode = dynamic_cast <DOMElement *> ( arguments ->item(i));
109  std::string regExp = qtxml::_toString (argNode->getAttribute (qtxml::_toDOMS ("name")));
110  DOMText *argText = dynamic_cast <DOMText *> (argNode->getFirstChild());
111  if (!argText){
112  break;
113  }
114 
115  std::string regExpValue = qtxml::_toString (argText->getData());
116  paramNamesValues[regExp]=regExpValue;
117  }
118 
119  return paramNamesValues;
120 
121 }
122 
124 
125  std::vector<std::string> paramNames=qtestParamNames->getTestParamNames(qtestType);
126  // commenting out as does not seem to be logical SDutta 22/3/2013
127  /*if(paramNames.size() == 0) {
128 
129  return true;
130  }*/
131 
132  paramNames.push_back("error");
133  paramNames.push_back("warning");
134 
135  std::map<std::string, std::string> namesMap=testsRequested[qtestName];
136 
137  for(std::vector<std::string>::iterator namesItr=paramNames.begin(); namesItr!=paramNames.end(); ++namesItr){
138  if(namesMap.find(*namesItr)==namesMap.end()){
139  return true;
140  }
141  }
142 
143  return false;
144 }
145 
147 
148  std::string testON="true";
149  std::string testOFF="false";
150 
151  unsigned int linkTagsNum =
152  doc()->getElementsByTagName(qtxml::_toDOMS("LINK"))->getLength();
153 
154 
155  for (unsigned int i=0; i<linkTagsNum; ++i){
156 
157  DOMNode* linkNode =
158  doc()->getElementsByTagName(qtxml::_toDOMS("LINK"))->item(i);
160  if (! linkNode){
161  return true;
162  }
163  DOMElement* linkElement = static_cast<DOMElement *>(linkNode);
164  if (! linkElement){
165  return true;
166  }
167  std::string linkName = qtxml::_toString (linkElement->getAttribute (qtxml::_toDOMS ("name")));
168 
169  DOMNodeList *testList = linkElement->getElementsByTagName (qtxml::_toDOMS ("TestName"));
170  unsigned int numberOfTests=testList->getLength();
171 
172  std::vector<std::string> qualityTestList;
173  for(unsigned int tt=0; tt<numberOfTests; ++tt){
174  DOMElement * testElement = dynamic_cast <DOMElement *> ( testList ->item(tt));
175  if (!testElement ){
176  return true;
177  }
178 
179  std::string activate = qtxml::_toString (testElement ->getAttribute (qtxml::_toDOMS ("activate")));
180 
181  DOMText *argText = dynamic_cast <DOMText *> (testElement ->getFirstChild());
182 
183  if(!std::strcmp(activate.c_str(),testON.c_str())) {
184  if (!argText){
185  return true;
186  }else{
187  std::string regExpValue = qtxml::_toString (argText->getData());
188  qualityTestList.push_back(regExpValue);
189  }
190  }
191  if(!std::strcmp(activate.c_str(),testOFF.c_str())) {
192  if (argText) {
193  std::string regExpValue = qtxml::_toString (argText->getData());
194  // Create List of QTests to unattach from current ME
195  }
196  }
197 
198  }
199 
200 
201  if(!qualityTestList.empty()) mapMonitorElementTests[linkName]=qualityTestList;
202  }
203 
204 
205  return false;
206 
207 
208 
209 }
210 
211 
std::map< std::string, std::string > getParams(xercesc::DOMElement *qtestElement, std::string test)
~QTestConfigurationParser() override
Destructor.
bool parseQTestsConfiguration()
Methor that parses the xml file configFile, returns false if no errors are encountered.
std::string _toString(const XMLCh *toTranscode)
bool checkParameters(std::string qtestName, std::string qtestType)
void xercesInitialize()
Definition: Xerces.cc:18
const T & getParams(const std::vector< T > &params, size_t index)
Definition: LHCInfo.cc:123
XMLCh * _toDOMS(std::string temp)