Example #1
0
    def expect(self, state, title=None, expect_str=None, fact_str=None):
        """报告中加入期望值对比的内容;
           state是报告状态设置,包括:'info', 'error', 'fatal',不可缺省;
           title就这次对比的标题,可缺省;
           expect_str是期望的结果,不可缺省;
           fact_str是实际的结果,不可缺省。
        """
        if fact_str is None and expect_str is not None:
            fact_str = expect_str
            expect_str = title
            title = None
        elif fact_str is None and expect_str is None:
            log(2, "Report expect: para number error")
            raise EXCEPTION(1, "Report expect: para number error")

        if title is not None:
            self.detail.append('-'+title)

        if state is None or state is 'info':
            self.detail.append('EXPECT: '+expect_str+' | FACT: '+fact_str)
        elif state is 'error':
            self.result = 1
            self.detail.append('<ERROR> EXPECT: '+expect_str+' | FACT: '+fact_str)
        elif state is 'fatal':
            self.result = 2
            self.detail.append('<FATAL> EXPECT: '+expect_str+' | FACT: '+fact_str)
            raise EXCEPTION(1, "")
        else:
            log(2, "Report expect: the 1st para error")
            raise EXCEPTION(1, "Report expect: the 1st para error")
Example #2
0
    def load(self, stream, multiple):
        if self.initial == False:
            raise(EXCEPTION(1, "Instance not properly instanitiated"))
           
        dir = gl.current_case.dir
        port_path = "%s/port_%s.tcl"%(self.path,self.type)
        newtcl = "%s-%s"%(dir.strip("/").rpartition("/")[-1],stream.rpartition("/")[-1])
        stream_path = "%s/%s"%(self.path,newtcl)
        src_stream = "%s/%s"%(dir.strip("/"),stream)
        dst_stream = r"C:\autotest_G\NETFIRM\%s"%newtcl   

        f = file.File()
        f.connect(self.ts_addr[0], 1234)
        f.transfer(src_stream, dst_stream)

        log(0, 'Set multiple of initial stream-rate: x%-5.4f' % multiple)

        ret = self.__execute("tc_exec %s port_load %s %s %s %d" % (self.server, self.portmap, port_path, stream_path, multiple*10000000))

        c = IxiaPort.parse(ret)
        if c['code'] == -1:
            log(2, "In load(): " + c['reason'])
            raise(EXCEPTION(1, c['reason']))
        else:
            self.loaded = True
            return 0
Example #3
0
 def getResource(self, name):
     """从数据文件中获取资源。
     """
     dct = {}
     lst = self.tree.findall("resource/unit")
     num = 0
     exist = False
     for node in lst:
         if node.get("name") == name:
             exist = True
             if node.get("num") == None:
                 num = 0
             elif node.get("num") == "ALL":
                 num = "ALL"
             else:
                 num = int(node.get("num"))
             for child in node.getchildren():
                 if child.tag == "connect":
                     cnt_childs = child.getchildren()
                     if cnt_childs == []:
                         dct.update({child.tag:child.text})
                     else:
                         cnt_dct = {}
                         for cnt_child in cnt_childs:
                             cnt_dct.update(self.__getResourceDict(cnt_child))
                         dct.update({child.tag:cnt_dct})
                 else:
                     dct.update(self.__getResourceDict(child))
     if not exist:
         log(2, 'Resource "%s" is not exist' % name)
         raise EXCEPTION(2, 'Resource "%s" is not exist' % name)
     return [dct, num]
Example #4
0
 def clearFragmentTable(self):
     """功能:清除分片缓存"""
     self._permissionCheck('setInfoCarry')
     ss = self.child
     self._enterView('service')
     ss.sendline('fragment-reset')
     ss.expect('fragment-reset\r\n<(.*?)@(.*?) service>', 5)
     log(0, 'Clear fragment table')
Example #5
0
 def rollback(self):
     """开始回滚命令"""
     if self.state > 1:
         self.rollbacking = True
         log(0, "-- (%s) Rollback start --"%self.kind)
         while(self.rollback_stack != []):
             method = self.rollback_stack.pop()
             exec('self.%s(%s)' % (method[0], method[1]))
Example #6
0
 def setIfState(self, name, state):
     try:
         ss = self.child
         ss.sendline('ifconfig %s %s'%(name,state))
         ss.expect('#')
         log(0, 'Set interface %s: %s' % (name, state))
     except pexpect.TIMEOUT:
         log(2, 'Set interface %s: time out' % name)
         raise EXCEPTION(2, 'Set interface %s: time out' % name) 
Example #7
0
 def cd(self, dir):
     try:
         ss = self.child
         ss.sendline('cd %s' % dir)
         ss.expect('cd %s\r\n[root@(.*?) (.*?)]#' % dir, 10)
         log(0, 'Enter directory: %s' % dir)
     except pexpect.TIMEOUT:
         log(2, 'Enter directory: time out')
         raise EXCEPTION(2, 'Enter directory: time out')
Example #8
0
 def setRcpPermitIp(self, ip):
     """功能:设置RCP允许IP
        输入:ip(被允许的IP)
     """
     self._permissionCheck('setRcpPermitIp')
     ss = self.child
     self._enterView('rcp')
     ss.sendline('permit %s' % ip) 
     ss.expect('permit %s\r\n<(.*?)@(.*?) rcp>' % ip, 5)
     log(0, 'Set rcp permit ip: %s' % ip)
Example #9
0
 def reflowClear(self):
     try:
         if self.type == "vb":
             self.__vbReflowClear()
         elif self.type == "netfirm":
             self.__netfirmReflowClear()
         log(0, "Clear reflow(%s) counts"%self.if_ip)
     except pexpect.TIMEOUT:
         log(2, "Clear reflow(%s) counts: time out"%self.if_ip)
         raise EXCEPTION(2, "Clear reflow(%s) counts: time out"%self.if_ip)
Example #10
0
 def getRxFrame(self, pktNum):
     if self.initial == False:
         raise(EXCEPTION(1, "Instance not properly instanitiated"))
     
     ret = self.__execute("tc_exec %s get_rx_frame %s %d" % (self.server, self.portmap, pktNum))
     c = IxiaPort.parse(ret)
     if c['code'] == -1:
         log(2, "In getRxFrame(): " + c['reason'])
         raise(EXCEPTION(1, c['reason']))
     else:
         return c['reason']    
Example #11
0
 def add(self, rules_path):
     """规则下发方法。
        rules_path:规则文件的路径,可以是字符串,也可以是字符串组成的列表
     """
     if isinstance(rules_path, str):
         rules_path = "%s/%s"%(self.case_path.strip("/"),rules_path.split("/")[-1])
         rules_path = [rules_path]
     for rule in rules_path:
         cmd = self.add_tool + ' -u ' +  self.auth_path + ' -f ' + rule
         log(0, 'Adding rules ...')
         pipe = os.popen(cmd).read().split('\n')
Example #12
0
 def _exitView(self):
     """退出视图"""
     ss = self.child
     ss.sendline('exit')
     index = ss.expect(['exit\r\n<(.*?)@(.*?)>', ' Device connection failure'], 5)
     if index == 0:
         pass
     elif index == 1:
         log(1, "Exit view: device connection failure, but don't need to try again")
     self.state -= 1
     self.cur_view = 'root'
Example #13
0
 def createFragrouteFile(ss, rules):
     try:
         str = ''
         for rule in rules:
            str += (rule + '\n') 
         ss.sendline('echo -e "%s">/usr/local/etc/fragtmp.conf' % str)
         ss.expect('fragtmp.conf\r\n\x1b]0;root@localhost:~\x07(.*?)#', 10)
         log(0, 'Create fragroute file: fragtmp.conf')
         return "/usr/local/etc/fragtmp.conf"
     except pexpect.TIMEOUT:
         log(2, 'Create fragroute file: time out')
         raise EXCEPTION(2, 'Create fragroute file: time out')
Example #14
0
 def clearStats(self):
     if self.initial == False:
         raise(EXCEPTION(1, "Instance not properly instanitiated"))
     
     ret = self.__execute("tc_exec %s clear_stat %s" % (self.server, self.portmap))
     c = IxiaPort.parse(ret)
     if c['code'] == -1:
         log(2, "In clearStats(): " + c['reason'])
         raise(EXCEPTION(1, c['reason']))
     else:
         log(0, 'Clear ixia stats')
         return 0
Example #15
0
 def countChange(self, count_list1, count_list2):
     """比对计数是否全部都发生变化,变化返回True,部分变化或没有变化返回False"""
     if isinstance(count_list1, int):
         count_list1 = [count_list1]
     if isinstance(count_list2, int):
         count_list2 = [count_list2]
     if len(count_list1) != len(count_list2):
         log(1, 'Unmatched length')
         raise EXCEPTION(1, "Count_change: unmatched length")
     for i in range(0, len(count_list1)):
         if count_list1[i] == count_list2[i]:
             return False
     return True
Example #16
0
 def stopCapture(self):
     if self.initial == False:
         raise(EXCEPTION(1, "Instance not properly instanitiated"))
     
     ret = self.__execute("tc_exec %s stop_rx %s" % (self.server, self.portmap))
     c = IxiaPort.parse(ret)
     if c['code'] == -1:
         log(2, "In stopCapture(): " + c['reason'])
         raise(EXCEPTION(1, c['reason']))
     else:
         self.rx = False
         log(0, 'Stop capture')
         return 0
Example #17
0
 def stopTransmit(self):
     if self.initial == False:
         raise(EXCEPTION(1, "Instance not properly instanitiated"))
     
     ret = self.__execute("tc_exec %s stop_tx %s" % (self.server, self.portmap))
     c = IxiaPort.parse(ret)
     if c['code'] == -1:
         log(2, "In stopTransmit(): " + c['reason'])
         raise(EXCEPTION(1, c['reason']))
     else:
         time.sleep(1)
         self.tx = False
         log(0, 'Stop ixia transmit')
         return 0
Example #18
0
 def countContrast(self, count_list, contrast_list):
     """比对计数是否符合预期,符合返回True,不符合返回False"""
     if isinstance(count_list, int):
         count_list = [count_list]
     if isinstance(contrast_list, int):
         contrast_list = [contrast_list]
     if len(count_list) != len(contrast_list):
         log(1, 'Unmatched length')
         raise EXCEPTION(1, "Count_contrast: unmatched length")
     match = True
     for i in range(0, len(count_list)):
         if count_list[i] != contrast_list[i]:
             match = False
     return match
Example #19
0
 def setFragmentCache(self, cache):
     """功能:设置分片缓存容量"""
     self._permissionCheck('setFragmentCache')
     ss = self.child
     if 0<=cache<=32:
         self._enterView('service')
         ss.sendline('fragment-cache %d'%cache)
         ss.expect('fragment-cache %d\r\n<(.*?)@(.*?) service>'%cache, 5)
         log(0, 'Set fragment cache: %d'%cache)
         if cache != 32:
             self._addRollback('setFragmentCache', '32')
     else:
         log(2, 'Set fragment cache: out of cache range')
         raise EXCEPTION(1, 'Set fragment cache: out of cache range')
Example #20
0
 def setFragmentAge(self, time):
     """功能:设置分片老化时间"""
     self._permissionCheck('setFragmentAge')
     ss = self.child
     if 10<=time<=2000:
         self._enterView('service')
         ss.sendline('fragment-age %d'%time)
         ss.expect('fragment-age %d\r\n<(.*?)@(.*?) service>'%time, 5)
         log(0, 'Set fragment age: %d'%time)
         if time != 2000:
             self._addRollback('setFragmentAge', '2000')
     else:
         log(2, 'Set fragment age: out of age range')
         raise EXCEPTION(1, 'Set fragment age: out of age range')
Example #21
0
 def _enterInterfaceView(self, port_name):
     """进入端口视图"""
     if 'interface %s' % port_name != self.cur_view:
         ss = self.child
         ss.sendline('interface %s' % port_name)
         index = ss.expect(['interface %s\r\n<(.*?)@(.*?) interface (.*?)>' % port_name,\
                           'The interface name is'], 5)
         if index == 0:
             if self.cur_view == 'root':
                 self.state += 1
             self.cur_view = 'interface %s' % port_name
         elif index == 1:
             log(2, 'Unmatched port name')
             raise EXCEPTION(1, 'Enter interface view: unmatched port name')
Example #22
0
 def reset(self, board_no):
     """功能:重启板卡
        输入:board_no(板卡槽位号,1到14)
     """
     self._permissionCheck('reset')
     if 0 < board_no < 15:
         ss = self.child
         self._enterView('hardware')
         ss.sendline('reset linecard %d' % board_no)
         ss.expect('(yes or no) :', 5)
         ss.sendline('yes')
         ss.expect('yes\r\n(.*?)<(.*?)@(.*?) hardware>', 5)
         log(0, 'Reset linecard %d' % board_no)
     else:
         log(2, 'Wrong linecard number: %d' % board_no)
         raise EXCEPTION(2, 'Wrong linecard number: %d' % board_no)
Example #23
0
    def set(self, device_ip, user, password):
        """配置RCP客户端
           device_ip:下发目标设备的IP
           user:用户名
           password:密码
        """
        self.case_path = gl.current_case.dir
        self.auth_path = "%s/auth.conf"%(self.case_path.strip("/"))

        str =  "RCP_DEV_IP=%s\nRCP_DEV_PORT=1000\n"%device_ip
        str += "CLIENT_IP=%s\n"%self.client_ip
        str += "USER=%s\nPASSWORD=%s\n"%(user,password)
        str += "BLOCK_NUM=1\nIS_ORDER=1\n"
        f = open(self.auth_path, 'w')
        f.write(str)
        f.close()
        log(0, 'Generate auth.conf ...')
Example #24
0
    def setFragroute(self, rules, ip, mac):

        def setStaticArp(ss, name, ip, mac):
            try:
                ss.sendline('arp -s %s %s -i %s' % (ip, mac, name))
                index = ss.expect(["arp -s %s %s -i %s\r\n\x1b]0;root@localhost:~\x07(.*?)#" % (ip, mac, name), 'SIOCSARP: Network is unreachable', 'SIOCSARP: Invalid argument'], 10)
                if index == 1:
                    log(2, 'Set static arp: Network is unreachable')
                    raise EXCEPTION(2, 'Set static arp: Network is unreachable')
                elif index == 2:
                    print repr(ss.before)
                    log(2, 'Set static arp: Invalid argument')
                    raise EXCEPTION(2, 'Set static arp: Invalid argument')
                log(0, 'Set static arp: %s %s' % (ip, mac))
            except pexpect.TIMEOUT:
                log(2, 'Set static arp: time out')
                raise EXCEPTION(2, 'Set static arp: time out')
    
        def createFragrouteFile(ss, rules):
            try:
                str = ''
                for rule in rules:
                   str += (rule + '\n') 
                ss.sendline('echo -e "%s">/usr/local/etc/fragtmp.conf' % str)
                ss.expect('fragtmp.conf\r\n\x1b]0;root@localhost:~\x07(.*?)#', 10)
                log(0, 'Create fragroute file: fragtmp.conf')
                return "/usr/local/etc/fragtmp.conf"
            except pexpect.TIMEOUT:
                log(2, 'Create fragroute file: time out')
                raise EXCEPTION(2, 'Create fragroute file: time out')

        try:
            ss = self.child
            setStaticArp(ss, self.if_name, ip, mac)
            file = createFragrouteFile(ss, rules)
            ss.sendline("killall fragroute")
            ss.expect("#", 5)
            ss.sendline('/usr/local/sbin/fragroute -f %s %s > /dev/null &' % (file, ip))
            ss.expect("#", 5)
            self.is_fragroute = True
            log(0, 'Start fragroute: -> %s' % ip)
        except pexpect.TIMEOUT:
            print repr(ss.before)
            log(2, 'Start fragroute: time out')
            raise EXCEPTION(2, 'Set fragroute: time out') 
Example #25
0
 def __runCase(self, case):
     mod = self.__importCase(case)
     test_case = mod.TestCase()
     test_case.pool = copy.deepcopy(self.pool)
     test_case.conf = copy.deepcopy(self.conf)
     test_case.report = report.Report()
     case_name = case.name
     test_case.report.name = case_name
     test_case.report.begin_time = time.time()
     log(0, '<< %s >>'%(case_name))
     
     def process(fn, case):
         """执行函数fn,同时对函数的异常进行处理"""
         try:
             fn()
         except EXCEPTION, x:
             self.__handleException(x, case.report)
         except:
Example #26
0
 def release(self):
     log(0, "-- (%s) Release start --"%self.kind)
     if self.is_init:
         IxiaPort.ref_count[self.key] = IxiaPort.ref_count[self.key] - 1
         #Try to release the device
         if self.initial == True:
             ### Never release the port
             #ret = self.__execute("tc_exec %s port_release %s" % (self.server, self.portmap))
             if self.tx == True:
                 self.__execute("tc_exec %s stop_tx %s" % (self.server, self.portmap))
             if self.rx == True:
                 self.__execute("tc_exec %s stop_rx %s" % (self.server, self.portmap))
                         
         if IxiaPort.ref_count[self.key] == 0:
             if IxiaPort.init_dict[self.key] == True:
                 ret = self.__execute("tc_exec %s ixia_exit %s" % (self.server, self.chassis_ip))
             else:
                 IxiaPort.init_dict[self.key] == False
Example #27
0
 def clearPort(self, port_list=[]):
     """功能:清除端口计数
        输入:port_list(端口列表,端口为Port类的实例;缺省为空列表,代表全清)
     """
     self._permissionCheck('clearPort')
     ss = self.child
     if port_list == []:
         self._enterView('root')
         ss.sendline('clear interface-all')
         ss.expect('clear interface-all\r\n<(.*?)@(.*?)>', 5)
         log(0, 'Clear interface all')
     else:
         for port in port_list:
             port_name = port.get()
             self._enterInterfaceView(port_name)
             ss.sendline('clear interface %s' % port_name)
             ss.expect('clear interface %s\r\n<(.*?)@(.*?) interface (.*?)>' % port_name, 5)
             log(0, 'Clear interface %s' % port_name)
Example #28
0
 def get(self, dct, num=None):
     """根据字典获取资源"""
     if dct == {}:
         return []
     lst = []
     try:
         iter = self.__search(self.children, dct)
         if not num:
             for rsc in iter:
                 lst.append(rsc)
         elif num == 0:
             return iter.next()
         else:
             while num != 0:
                 lst.append(iter.next())
                 num -= 1
     except StopIteration:
         log(2, "Resources(%s) aren't enough"%dct)
         raise EXCEPTION(1, "Resources(%s) aren't enough"%dct)
     return lst
Example #29
0
 def _enterView(self, view_name):
     """进入某视图"""
     if view_name != self.cur_view: 
         if view_name == 'root':
             self._exitView()
         else:
             ss = self.child
             try_time = 2
             for i in range(0, try_time):
                 ss.sendline(view_name)
                 index = ss.expect(['%s\r\n<(.*?)@(.*?) (.*?)>' % view_name, ' Device connection failure'], 5)
                 if index == 0:
                     if self.cur_view == 'root':
                         self.state += 1
                     self.cur_view = view_name
                     break
                 elif index == 1:
                     log(1, 'Enter %s view: device connection failure, try again')
             if i > try_time - 1:
                 log(2, 'Enter %s view: device connection failure')
                 raise EXCEPTION(2, 'Enter %s view: device connection failure')
Example #30
0
 def remoteLogin(self):
     ret = sshLoginServ(self.ip, 'root', self.password)
     self.child = ret.child
     if ret.state == 0:
         log(0, 'Login root@%s' % self.ip)
     elif ret.state == -1:
         log(2, 'Password error')
         raise EXCEPTION(2, 'Login remote: password error')
     elif ret.state == -2:
         log(2, 'Host key verification failed')
         raise EXCEPTION(2, 'Remote login: host key verification failed')
     elif ret.state == -3:
         log(2, 'Remote login(%s): time out'%self.ip)
         raise EXCEPTION(2, 'Remote login(%s): time out'%self.ip)