Exemple #1
0
    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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
    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
Exemple #7
0
    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))
Exemple #9
0
    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
Exemple #10
0
    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
Exemple #11
0
    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
Exemple #12
0
    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
Exemple #13
0
    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