def verifyData(self, testConf, retData, adv=False, advValue=False): dataKey = testConf.incidentType + '@' + testConf.reptDevIpAddr incidentId = '' resObj = getClassObj('TestCaseResult', module='autoTest') if adv: resObj.name = testConf.name + '-' + adv + '(' + testConf.incidentType + ')' else: resObj.name = testConf.name + '(' + testConf.incidentType + ')' if retData: if dataKey in retData.keys(): resObj.status = 'Pass' incidentId = retData[dataKey][0].attributes['incidentId'] if adv and advValue: for key in advValue.keys(): map = {} map['param'] = key map['actValue'] = retData[dataKey][0].attributes[key] map['expectValue'] = advValue[key] if advValue[key] != retData[dataKey][0].attributes[key]: resObj.status = 'Fail' resObj.Fail.append(map) else: resObj.Pass.append(map) else: resObj.status = 'NoReturn' else: resObj.status = 'NoReturn' return resObj, incidentId
def __translate(self, obj, newObj, index=False): mainMap = self.__getMap(classUtility.getType(obj)) if mainMap: for attr in classUtility.getAttrList(obj): subObj = getattr(obj, attr) objType = classUtility.getType(subObj) if objType == 'dict': newObj = self.__transDict2Attr(attr, subObj, newObj, mainMap) elif objType == 'list': myObjList = self.__transList(subObj) setattr(newObj, self.__newType(attr), myObjList) elif objType in ['unicode', 'str']: if self.__isTranslable(attr, mainMap): newKey = mainMap[attr] if '->' in newKey: exName, exAttr = newKey.split('->') extraObj = getClassObj(exName) setattr(extraObj, exName, subObj) else: setattr(newObj, newKey, subObj) else: if self.__isTranslable(objType, Mapping): newType = self.__newType(objType) if newType: subNewObj = self.__getNewObj(objType) subNewObj = self.__translate(subObj, subNewObj) else: newObj = self.__translate(subObj, newObj) else: for attr in classUtility.getAttrList(obj): setattr(newObj, attr, getattr(obj, attr)) return newObj
def listToClass(key, list, objModule): objList = [] if key in create_device_wrap: objName = create_device_wrap[key] else: objName = key[0:-1] for item in list: if classUtility.getType(item) == 'dict': subObj = getClassObj(objName, module=objModule) subObj = hashToClass(item, subObj) objList.append(subObj) return objList
def getDataFromFile(type, path, keyAttrs, orderAttrs, asCsv=True): """This method will read data from a CSV file.""" if asCsv: if '.csv' not in path: path += '.csv' objData = {} reader = csv.DictReader(open(path), fieldnames=orderAttrs, restkey='Extra', restval='Miss') keyword = [] for line in reader: if not orderAttrs: orderAttrs = line.keys() if 'Extra' in orderAttrs: orderAttrs.remove('Extra') if 'Miss' in orderAttrs: orderAttrs.remove('Miss') if 'Extra' in line.keys(): line[orderAttrs[-1]] += ', ' + ','.join(line['Extra']) del line['Extra'] if __metCondition(line): if '$' in line[orderAttrs[0]]: keyword = [] keyword.append(line[orderAttrs[0]].split('$')[-1]) elif line[orderAttrs[0]] in csv_device_info: keyword.append(line[orderAttrs[1]]) else: obj = getClassObj(type) for key in line.keys(): if key in classUtility.getAttrList(obj): setattr(obj, key, line[key]) map = {} if keyAttrs and keyword: if classUtility.getType(keyAttrs) == 'list': map = testUtility.listToHash(keyAttrs, keyword) elif len(keyword) > 1: keyVal = '-'.join(keyword) map[keyAttrs] = keyVal else: map[keyAttrs] = keyword[0] if map: for newKey in map.keys(): setattr(obj, newKey, map[newKey]) indexKey = testUtility.getKey(type, file=True) indexValue = classUtility.getIndexValue(obj, indexKey) objData[indexValue] = obj return objData
def hashToClass(hash, obj, objModule=False): attrKeys = hash.keys() for key in attrKeys: subType = classUtility.getType(hash[key]) if subType == 'list': objList = listToClass(key, hash[key], objModule) setattr(obj, key, objList) elif subType == 'dict': if key == 'attribute': setattr(obj, 'attribute', hash[key]) else: subObj = hashToClass(hash[key], getClassObj(key, module=objModule)) setattr(obj, key, subObj) elif subType == 'str': setattr(obj, key, hash[key]) return obj
def __createDevice(self, deviceData, perfObj): myDeviceList=[] for device in deviceData: if device['type'] in create_device_types: myDevice=self.__createDeviceType(device['type'], device['name'], device['ip'], device['custId']) else: print "Device Type %s is not supported now. Created a Linux type" % device['type'] myDevice=self.__createDeviceType('linux', device['name'], device['ip'], device['custId']) myDeviceList.append(myDevice) myObj=getClassObj('discoveryResult', module='device') for key in myObj.attribute.keys(): myObj.attribute[key]=device['custId'] myObj.success=myDeviceList inXml=XmlHandler.XmlHandler().XmlObjToString(myObj) myMon=Template(monitors) myMonitors=myMon.substitute(perfObj) myTemp=Template(inXml) map={'monitors':myMonitors} outXml=myTemp.substitute(map) return outXml
def __createDeviceType(self, type, deviceName, deviceIp, custId): oldMap=create_device_info[type] if type in create_device_addon: base, addon=create_device_addon[type].split('->') tmpMap=create_device_info[base] if addon=='base': for mapKey in oldMap.keys(): tmpMap[mapKey]=oldMap[mapKey] else: tmpMap[addon].append(oldMap) infoMap=tmpMap else: infoMap=oldMap myDevice=getClassObj('device', module='device') myDevice=hashToClassHelper.hashToClass(infoMap, myDevice, objModule='device') myDevice.name=deviceName myDevice.accessIp=deviceIp myDevice.interfaces[0].ipv4Addr=deviceIp if hasattr(myDevice, 'attribute'): myDevice.attribute['custId']=custId else: map={'custId':custId} setattr(myDevice, 'attribute', map) for key in ['processors', 'storages', 'interfaces', 'installedSoftware', 'runningSoftware', 'swServices']: if hasattr(myDevice, key): subobjs=getattr(myDevice, key) for sub in subobjs: if key=='interfaces': if not getattr(sub, 'ipv4Addr'): setattr(sub, 'ipv4Addr', randomGen.getRandomIPAddr()) if hasattr(sub, 'attribute'): sub.attribute['custId']=custId else: map={'custId':custId} setattr(sub, 'attribute', map) return myDevice
def __getNewObj(self, type): return getClassObj(self.__newType(type))
def run(self, ruleType, testKey): fb_type = ruleType.filterOperators.type sleeper = 0 if fb_type == 'FOLLOWED_BY': sleeper = 5 incidentType = ruleType.incidentType.split('$')[-1] ruleId = ruleType.attribute['id'] if incidentType not in self.testConfig.commonData.keys(): print 'Incidnet Name %s Incident Type %s is NOT implemented.' % ( ruleType.name, incidentType) testRet = None else: testConf = self.testConfig.commonData[incidentType] if testConf.reptDevIpAddr == '$localhost': testConf.reptDevIpAddr = self.testConfig.localhost elif testConf.reptDevIpAddr == '$appServer': testConf.reptDevIpAddr = self.appServer allDevices = self.testConfig.globalData['devices'] approvedDevices = self.testConfig.globalData['applicableDevices'] perfObj = self.testConfig.globalData['perfObj'] #create device if needed if not allDevices or ( testConf.createDevice and not testConf.reptDevIpAddr in allDevices.keys()): if testConf.domainController: print 'create domain controller %s' % testConf.reptDevIpAddr self.deviceHandler.createDevice( testConf.reptDevIpAddr, testConf.deviceName, testConf.deviceType, perfObj, dataCollector=self.testConfig.testServer.dataCollector) else: print 'create %s device %s' % (testConf.deviceType, testConf.reptDevIpAddr) self.deviceHandler.createDevice(testConf.reptDevIpAddr, testConf.deviceName, testConf.deviceType, perfObj) else: print 'device %s is already exist.' % testConf.reptDevIpAddr #in case to make it domain controller if testConf.domainController: print 'make domain controller %s' % testConf.reptDevIpAddr self.deviceHandler.createDevice( testConf.reptDevIpAddr, testConf.deviceName, testConf.deviceType, perfObj, dataCollector=self.testConfig.testServer.dataCollector) #get raw data myData = datFileHandler.getData( self.path + '/' + incident_data_path + '/' + incidentType + '.dat', incident_data_keys) #send raw event to trigger incident if not myData.dataMap: print 'Fail to get test data. Exit.' exit() rept = {} rept['$localhost'] = self.testConfig.localhost rept['$dataCollector'] = self.testConfig.testServer.dataCollector eventMsgs = myData.dataMap['default'].eventMsg if eventMsgs is None: print '%s: No eventMsg exist.' % incidentType exit() rawSend = False if self.posix and testConf.reptDevIpAddr != self.testConfig.localhost: rawSend = True if rawSend: mySendEvent = rawUdpSendHandler.rawUdpSendHandler( self.testConfig.testServer.dataCollector, PORTS[testConf.method]) else: mySendEvent = sendEventHandler( testConf.method, self.testConfig.testServer.dataCollector) sendSleep = 0 randomIPs = [] randomNums = [] ip = '' num = '' now, sendTime, utcnow, utcsendTime = timeUtility.getTimeNow() for i in range(int(testConf.count)): for line in eventMsgs: msg = generalUtility.multiReplace(line, rept) if '$reporter' in line: msg = msg.replace('$reporter', testConf.reptDevIpAddr) if '$randomIP' in line: repeat = True while repeat: ip = randomGen.getRandomIPAddr() if ip not in randomIPs: if testConf.incidentType not in ip_in_privatenet: msg = msg.replace('$randomIP', ip) randomIPs.append(ip) repeat = False else: if ip.split('.')[0] in ['10']: msg = msg.replace('$randomIP', ip) randomIPs.append(ip) repeat = False if '$randomNum' in line: num_repeat = True while num_repeat: num = randomGen.getRandomNum(1, 1000) if num not in randomNums: msg = msg.replace('$randomNum', num) randomNums.append(num) num_repeat = False if '$group_' in line: groupName = line.split('$group_')[-1].split('@')[0] groupItem = self.restApiHandler.getData( group_name_key[groupName], module='namedValue') value = '' if groupItem: rawValue = groupItem[ group_name_key[groupName]].namedValues[0] if '-' in rawValue: temp = rawValue.split('-')[0].split('.') temp[-1] = '100' value = '.'.join(temp) else: value = rawValue msg = msg.replace('$group_' + groupName + '@', value) temp_msg = '' if testConf.method == 'netflow': temp_msg = GenerateNetFlow.getNetFlowPacket(msg) else: temp_msg = msg.strip() send_msg = '' if rawSend: if testConf.method == 'syslog': temp_msg = temp_msg.encode('ascii', 'ignore') send_msg = GenerateRawIPData.getRawIpPacket( temp_msg, testConf.reptDevIpAddr, self.testConfig.testServer.dataCollector, PORTS[testConf.method]) else: send_msg = msg time.sleep(sleeper) if not self.sendNoEvent: mySendEvent.sendoutEvent(send_msg, utf_8=False) else: print 'No event sent being configured.' self.msgList.append(msg) #retrieve incident sendSleep = 120 time.sleep(sendSleep) timeout = int(ruleType.triggerWindow) + 180 myParams = {} myParams['constr'] = incident_query_params['SingleEvtConstr'] % ( testConf.reptDevIpAddr, incidentType) if self.sendNoEvent: print 'Query:,', myParams['constr'] condition, oriRet, incidentId, failDetail, veriData, debugInfo = self.retriveIncident( incidentType, testConf, timeout, myParams) incident_id_sql = None if not condition: #check CMDB for incident rawResult = self.psql.execute( incident_sql_cmd % (incidentType, testConf.reptDevIpAddr, sendTime * 1000)) if rawResult: incident_id_sql = rawResult[0][0] condition = True failDetail = 'Incident Id found in SQL but not from query.' else: print 'no id in SQL' if not condition and not self.sendNoEvent: failDetail = "need debug" #self.eventDebug(testConf.method, self.testConfig.testServer.appServer, testConf.reptDevIpAddr, ruleType, sendTime, utcsendTime, approvedDevices) testRet = getClassObj('TestSuiteResult', module='autoTest') testRet.name = testConf.name testRet.type = incidentType testRet.ruleId = ruleId testRet.queryString = myParams['constr'] testRet.rawMsg = self.msgList testRet.testMethod = testConf.method testRet.reptDevIpAddr = testConf.reptDevIpAddr testRet.taskName = 'Incident' testRet.totalRun = 1 testRet.debugInfo = debugInfo setattr(testRet, 'total' + oriRet.status, 1) testRet.caseList.append(oriRet) if incidentId: print '%s: incident triggered with id: %s' % (incidentType, incidentId) testRet.info = 'incidentId: ' + incidentId elif incident_id_sql: print '%s: incident triggered with id from sql: %s' % ( incidentType, incident_id_sql) testRet.info = 'incidentId from SQL: ' + incident_id_sql setattr(oriRet, 'reasons', failDetail) else: print '%s(%s): no incident triggered' % (testRet.name, incidentType) testRet.info = 'incidentId: None' setattr(oriRet, 'reasons', failDetail) aggmsgList = [] if self.advance in ['aggregate', 'both']: if oriRet.status != 'NoReturn' and incidentId and incidentId.strip( ): #aggregate test for i in range(int(testConf.count)): for m in self.msgList: mySendEvent.sendoutEvent(m, utf_8=False) time.sleep(60) aggParams = {} aggParams['constr'] = incident_query_advance[ 'SingleEvtConstr'] % (incidentId, '0') condition, aggRet, inId, failDetail, aggVeriData, aggData = self.retriveIncident( incidentType, testConf, timeout, aggParams, agg=veriData) if not condition: failDetail = self.eventDebug( testConf.method, self.testConfig.testServer.appServer, testConf.reptDevIpAddr, ruleType, sendTime, utcsendTime, approvedDevices) if failDetail: setattr(aggRet, 'reasons', failDetail) testRet.totalRun += 1 oldVal = getattr(testRet, 'total' + aggRet.status) oldVal += 1 setattr(testRet, 'total' + aggRet.status, oldVal) testRet.caseList.append(aggRet) if self.advance in ['clear', 'both']: #clear test if oriRet.status != 'NoReturn' and hasattr( ruleType, 'clearCondition' ) and incidentId and incidentId.strip(): clearnow, clearsendTime, clearutcnow, clearutcsendTime = timeUtility.getTimeNow( ) if ruleType.clearCondition.clearOption == 'patternbased': if not hasattr(myData.dataMap['default'], 'clearEventMsg'): print '%s: need to add clearEventMsg' % incidentType else: raw_clear = getattr(myData.dataMap['default'], 'clearEventMsg') time.sleep(600) if raw_clear: for line in raw_clear: clearmsg = generalUtility.multiReplace( line.strip(), rept) if '$reporter' in line: clearmsg = clearmsg.replace( '$reporter', testConf.reptDevIpAddr) if '$randomIP' in line: ip = randomGen.getRandomIPAddr() clearmsg = clearmsg.replace( '$randomIP', ip) if self.posix: send_clearmsg = GenerateRawIPData.getRawIpPacket( clearmsg.encode('ascii', 'ignore'), testConf.reptDevIpAddr, self.testConfig.testServer. dataCollector, PORTS[testConf.method]) else: send_clearmsg = clearmsg self.clearMsgList.append(send_clearmsg) if self.clearMsgList: for i in range(int(testConf.count)): for cl_msg in self.clearMsgList: mySendEvent.sendoutEvent( cl_msg, utf_8=False) time.sleep(120) else: time.sleep( float( int(ruleType.clearCondition.clearTimeWindow) + 120)) clearParams = {} clearParams['constr'] = incident_query_advance[ 'SingleEvtConstr'] % (incidentId, '1') condition, clearRet, incidentId, failDetail, clearVari, clearData = self.retriveIncident( incidentType, testConf, timeout, clearParams, clear=True) if not condition: failDetail = "need debug" #self.eventDebug(testConf.method, self.testConfig.testServer.appServer, testConf.reptDevIpAddr, ruleType, clearsendTime, clearutcsendTime, approvedDevices, clearDebug=True) if failDetail: setattr(clearRet, 'reasons', failDetail) print 'clear name: %s' % clearRet.name testRet.totalRun += 1 oldVal = getattr(testRet, 'total' + clearRet.status) oldVal += 1 setattr(testRet, 'total' + clearRet.status, oldVal) testRet.caseList.append(clearRet) mySendEvent.close() return testRet
def _XmlToObj(self, node, wrapTag=None, filter=None): if wrapTag: subnode = '' nodes = node.getElementsByTagName(wrapTag) if not nodes: return None else: subnode = nodes[0] nodelist = self._getElementChilds(subnode) if nodelist: if nodelist[0][0] == nodelist[-1][0]: return self._XmlToObjList(nodelist, condition=filter) else: return self._XmlToObj(subnode) elif subnode.childNodes: return subnode.childNodes[0].nodeValue.strip() else: return None else: if hasattr(node, 'tagName'): tagName = node.tagName else: tagName = node.nodeName obj = getClassObj(tagName) objAttrs = classUtility.getAttrList(obj) if 'attribute' in objAttrs: self._setAttributes(node, obj) if 'namedValues' in objAttrs: obj = self._setNamedValues(node, obj) if tagName in xml_2_obj_special.keys(): attr = node.attributes.getNamedItem( xml_2_obj_special[tagName]['attr']).nodeValue setattr(obj, xml_2_obj_special[tagName]['attr'], attr) value = '' if len(node.childNodes): value = node.childNodes[0].nodeValue.strip() setattr(obj, xml_2_obj_special[tagName]['text'], value) else: elementChilds = self._getElementChilds(node) for name, element in elementChilds: if name in objAttrs: my_type = classUtility.getType(getattr(obj, name)) if my_type == 'NoneType': if len(element.childNodes): value = element.childNodes[0].nodeValue if value: setattr(obj, name, value.strip()) elif my_type == 'list': li = getattr(obj, name) subE = self._getElementChilds(element) subENames = [na[0] for na in subE] subObj = '' if subENames: if generalUtility.isWrap(subENames[0], name): if subE: subObj = self._XmlToObjList(subE) else: if subE: subObj = self._XmlToObj(element) if subObj: if classUtility.getType(subObj) == 'list': li.extend(subObj) else: li.append(subObj) setattr(obj, name, li) else: subObj = self._XmlToObj(element) setattr(obj, name, subObj) return obj
def verifyData(self, type, params, retData, debugInfo, module, sendTime): resObjList = [] for key in type.keys(): if type[key].key: keyVal = type[key].eventType + '@' + type[ key].reptDevIpAddr + ' (' + type[key].key + ')' else: keyVal = type[key].eventType + '@' + type[key].reptDevIpAddr expData = params[keyVal] resObj = getClassObj('TestCaseResult', module='autoTest') actData = '' if keyVal in retData.keys(): if keyVal: actData = retData[keyVal][0] elif ' (' in keyVal: oriKey, map = keyVal.split(' (') mapKey, mapVal = map[:-1].split(':') if oriKey in retData.keys(): for item in retData[oriKey]: if mapKey in item.attributes.keys(): if mapVal == item.attributes[mapKey]: actData = item elif not mapVal: actData = item if actData: miss, extra, common = processList(expData['params'].keys(), actData.attributes.keys()) for comkey in common: map = {} map['param'] = comkey if actData.attributes[comkey] != None: map['actValue'] = actData.attributes[comkey] if 'Name' in comkey and 'HOST-' in actData.attributes[ comkey]: ignore_param.update([comkey]) else: map['actValue'] = 'None' map['expectValue'] = expData['params'][comkey] if '\n' in map['actValue']: map['actValue'] = map['actValue'].replace('\n', '') if self.testType != 'Official' and map[ 'param'] in ignore_param: resObj.Pass.append(map) continue if map['expectValue'] == 'any' or map['expectValue'].strip( ) == map['actValue'].strip(): resObj.Pass.append(map) else: if map['param'] in ignore_space_params: if map['expectValue'].replace( ' ', '') == map['actValue'].replace(' ', ''): resObj.Pass.append(map) else: resObj.Fail.append(map) else: resObj.Fail.append(map) if miss: for misskey in miss: map = {} map['param'] = misskey map['expectValue'] = expData['params'][misskey] map['actValue'] = 'None' resObj.Missing.append(map) if extra: for exkey in extra: if exkey not in event_ignore_params and actData.attributes[ exkey]: map = {} map['param'] = exkey map['expectValue'] = 'None' map['actValue'] = actData.attributes[exkey] resObj.Extra.append(map) if resObj.Fail: resObj.status = 'Fail' else: resObj.status = 'Pass' else: resObj.status = 'NoReturn' failDetail = self.eventDebug(keyVal, expData['msg'], sendTime) setattr(resObj, 'reasons', failDetail) if self.testConfig.localhost in keyVal: keyVal = keyVal.replace(self.testConfig.localhost, '$localhost') resObj.name = key + '(' + keyVal + ')' resObjList.append(resObj) suiteObj = getClassObj('TestSuiteResult', module='autoTest') suiteObj.name = module suiteObj.taskName = 'EventParsing' suiteObj.debugInfo = debugInfo for item in resObjList: suiteObj.totalRun += 1 oldVal = getattr(suiteObj, 'total' + item.status) oldVal += 1 setattr(suiteObj, 'total' + item.status, oldVal) suiteObj.caseList.append(item) return suiteObj
def verifyData(self, name, ori, ret): resObjList = [] if ret: miss, extraRaw, common = testUtility.processList( ori.keys(), ret.keys()) extra = [] if name in testConstant.populator_comp_ignore.keys(): for subKey in extraRaw: if testConstant.populator_comp_ignore[name] not in subKey: extra.append(subKey) else: extra = extraRaw for ikey in common: oriData = ori[ikey] retData = ret[ikey] attrList = classUtility.getAttrList(oriData) resObj = getClassObj('TestCaseResult', module='autoTest') resObj.name = ikey for item in attrList: map = {} map['param'] = item map['expectValue'] = getattr(oriData, item) if hasattr(retData, item): map['actValue'] = getattr(retData, item) else: map['actValue'] = 'Missing' if '\n' in map['actValue']: map['actValue'] = map['actValue'].replace('\n', '') if map['expectValue'].strip().lower( ) == map['actValue'].strip().lower(): resObj.Pass.append(map) else: resObj.Fail.append(map) if resObj.Fail: resObj.status = 'Fail' elif resObj.Missing: resObj.status = 'Missing' elif resObj.Extra: resObj.status = 'Extra' else: resObj.status = 'Pass' resObjList.append(resObj) if miss: for misskey in miss: resObj = getClassObj('TestCaseResult', module='autoTest') resObj.name = misskey resObj.status = 'NoReturn' setattr(resObj, 'reasons', 'Fail to import') resObjList.append(resObj) if extra: for extrakey in extra: resObj = getClassObj('TestCaseResult', module='autoTest') resObj.name = extrakey resObj.status = 'Extra' map = {} map['param'] = extrakey map['expectValue'] = 'None' map['actValue'] = extrakey resObj.Extra.append(map) resObjList.append(resObj) suiteObj = getClassObj('TestSuiteResult', module='autoTest') suiteObj.name = name for item in resObjList: suiteObj.totalRun += 1 oldVal = getattr(suiteObj, 'total' + item.status) oldVal += 1 setattr(suiteObj, 'total' + item.status, oldVal) suiteObj.caseList.append(item) return suiteObj
def run(self, ruleType, testKey): fb_type=ruleType.filterOperators.type sleeper=0 if fb_type=='FOLLOWED_BY': sleeper=5 incidentType=ruleType.incidentType.split('$')[-1] ruleId=ruleType.attribute['id'] if incidentType not in self.testConfig.commonData.keys(): print 'Incidnet Name %s Incident Type %s is NOT implemented.' % (ruleType.name, incidentType) testRet=None else: testConf=self.testConfig.commonData[incidentType] if testConf.reptDevIpAddr=='$localhost': testConf.reptDevIpAddr=self.testConfig.localhost elif testConf.reptDevIpAddr=='$appServer': testConf.reptDevIpAddr=self.appServer allDevices=self.testConfig.globalData['devices'] approvedDevices=self.testConfig.globalData['applicableDevices'] perfObj=self.testConfig.globalData['perfObj'] #create device if needed if not allDevices or (testConf.createDevice and not testConf.reptDevIpAddr in allDevices.keys()): if testConf.domainController: self.deviceHandler.createDevice(testConf.reptDevIpAddr, testConf.deviceName, testConf.deviceType, perfObj, dataCollector=self.testConfig.testServer.dataCollector) else: self.deviceHandler.createDevice(testConf.reptDevIpAddr, testConf.deviceName, testConf.deviceType, perfObj) #get raw data myData=datFileHandler.getData(self.path+'/'+incident_data_path+'/'+incidentType+'.dat', incident_data_keys) #send raw event to trigger incident if not myData.dataMap: print 'Fail to get test data. Exit.' exit() now,sendTime,utcnow,utcsendTime=timeUtility.getTimeNow() rept={} rept['$localhost']=self.testConfig.localhost rept['$dataCollector']=self.testConfig.testServer.dataCollector eventMsgs=myData.dataMap['default'].eventMsg if eventMsgs is None: print '%s: No eventMsg exist.' % incidentType exit() rawSend=False if self.posix and testConf.reptDevIpAddr!=self.testConfig.localhost: rawSend=True if rawSend: mySendEvent=rawUdpSendHandler.rawUdpSendHandler(self.testConfig.testServer.dataCollector, PORTS[testConf.method]) else: mySendEvent=sendEventHandler(testConf.method, self.testConfig.testServer.dataCollector) for i in range(int(testConf.count)): for line in eventMsgs: msg=generalUtility.multiReplace(line, rept) if '$reporter' in line: msg=msg.replace('$reporter', testConf.reptDevIpAddr) if '$randomIP' in line: ip=randomGen.getRandomIPAddr() msg=msg.replace('$randomIP', ip) if '$randomNum' in line: num=randomGen.getRandomNum(1, 100) msg=msg.replace('$randomNum', num) temp_msg='' if testConf.method=='netflow': temp_msg=GenerateNetFlow.getNetFlowPacket(msg) else: temp_msg=msg.strip() send_msg='' if rawSend: send_msg=GenerateRawIPData.getRawIpPacket(temp_msg, testConf.reptDevIpAddr, self.testConfig.testServer.dataCollector, PORTS[testConf.method]) else: send_msg=msg time.sleep(sleeper) mySendEvent.sendoutEvent(send_msg) self.msgList.append(msg) #retrieve incident time.sleep(60) timeout=int(ruleType.triggerWindow)+60 if timeout>1800: timeout=1800 myParams={} myParams['constr']=incident_query_params['SingleEvtConstr'] % (testConf.reptDevIpAddr, incidentType) condition, oriRet, incidentId, failDetail, veriData, debugInfo=self.retriveIncident(incidentType, testConf, timeout, myParams) if not condition: failDetail=self.eventDebug(testConf.method, self.testConfig.testServer.appServer, testConf.reptDevIpAddr, ruleType, sendTime, utcsendTime, approvedDevices) testRet=getClassObj('TestSuiteResult', module='autoTest') testRet.name=testConf.name testRet.type=incidentType testRet.ruleId=ruleId testRet.queryString=myParams['constr'] testRet.rawMsg=self.msgList testRet.testMethod=testConf.method testRet.reptDevIpAddr=testConf.reptDevIpAddr testRet.taskName='Incident' testRet.totalRun=1 testRet.debugInfo=debugInfo setattr(testRet, 'total'+oriRet.status, 1) testRet.caseList.append(oriRet) if incidentId: print '%s: incident triggered with id: %s' % (incidentType, incidentId) testRet.info='incidentId: '+incidentId else: print '%s: no incident triggered' % incidentType testRet.info='incidentId: None' setattr(oriRet, 'reasons', failDetail) aggmsgList=[] if self.advance: if oriRet.status!='NoReturn' and incidentId and incidentId.strip(): #aggregate test for i in range(int(testConf.count)): for m in self.msgList: mySendEvent.sendoutEvent(m) time.sleep(60) aggParams={} aggParams['constr']=incident_query_advance['SingleEvtConstr'] % (incidentId, '0') condition, aggRet, inId, failDetail, aggData=self.retriveIncident(incidentType, testConf, timeout, aggParams, agg=veriData) if not condition: failDetail=self.eventDebug(testConf.method, self.testConfig.testServer.appServer, testConf.reptDevIpAddr, ruleType, sendTime, utcsendTime, approvedDevices) if failDetail: setattr(aggRet, 'reasons', failDetail) testRet.totalRun+=1 oldVal=getattr(testRet, 'total'+aggRet.status) oldVal+=1 setattr(testRet, 'total'+aggRet.status, oldVal) testRet.caseList.append(aggRet) #clear test if oriRet.status!='NoReturn' and hasattr(ruleType, 'clearCondition') and incidentId and incidentId.strip(): clearnow,clearsendTime,clearutcnow,clearutcsendTime=timeUtility.getTimeNow() if ruleType.clearCondition.clearOption=='patternbased': if not hasattr(myData.dataMap['default'], 'clearEventMsg'): print '%s: need to add clearEventMsg' % incidentType else: raw_clear=getattr(myData.dataMap['default'], 'clearEventMsg') if raw_clear: for line in raw_clear: clearmsg=generalUtility.multiReplace(line.strip(), rept) if '$randomIP' in line: ip=randomGen.getRandomIPAddr() clearmsg=clearmsg.replace('$randomIP', ip) self.clearMsgList.append(clearmsg) if self.posix: send_clearmsg=GenerateRawIPData.getRawIpPacket(clearmsg, testConf.reptDevIpAddr, self.testConfig.testServer.dataCollector, PORTS[testConf.method]) else: send_clearmsg=clearmsg if self.clearMsgList: for i in range(int(testConf.count)): for cl_msg in self.clearMsgList: mySendEvent.sendoutEvent(cl_msg) time.sleep(120) else: time.sleep(float(int(ruleType.clearCondition.clearTimeWindow)+120)) clearParams={} clearParams['constr']=incident_query_advance['SingleEvtConstr'] % (incidentId, '1') condition, clearRet, incidentId, failDetail, clearData=self.retriveIncident(incidentType, testConf, timeout, clearParams, clear=aggData) if not condition: failDetail=self.eventDebug(testConf.method, self.testConfig.testServer.appServer, testConf.reptDevIpAddr, ruleType, clearsendTime, clearutcsendTime, approvedDevices, clearDebug=True) if failDetail: setattr(clearRet, 'reasons', failDetail) print 'clear name: %s' % clearRet.name testRet.totalRun+=1 oldVal=getattr(testRet, 'total'+clearRet.status) oldVal+=1 setattr(testRet, 'total'+clearRet.status, oldVal) testRet.caseList.append(clearRet) mySendEvent.close() return testRet