示例#1
0
 def testSanity(self, mock_del_cls, mock_check_call):
     TrafficClass.create_class("en0", 2, 10)
     mock_del_cls.assert_called_with("en0",
                                     2,
                                     show_error=False,
                                     throw_except=False)
     mock_check_call.assert_any_call([
         'tc', 'class', 'add', 'dev', 'en0', 'parent', '1:fffe', 'classid',
         '1:0x2', 'htb', 'rate', '12000', 'ceil', '10'
     ])
     mock_check_call.assert_any_call([
         'tc', 'qdisc', 'add', 'dev', 'en0', 'parent', '1:0x2', 'fq_codel'
     ])
     mock_check_call.assert_any_call([
         'tc', 'filter', 'add', 'dev', 'en0', 'protocol', 'ip', 'parent',
         '1:', 'prio', '1', 'handle', '0x2', 'fw', 'flowid', '1:0x2'
     ])
示例#2
0
 def testSanity(self, mock_del_cls, mock_check_call):
     TrafficClass.create_class("en0", 2, 10)
     mock_del_cls.assert_called_with("en0",
                                     2,
                                     show_error=False,
                                     throw_except=False)
     mock_check_call.assert_any_call([
         "tc",
         "class",
         "add",
         "dev",
         "en0",
         "parent",
         "1:fffe",
         "classid",
         "1:0x2",
         "htb",
         "rate",
         "12000",
         "ceil",
         "10",
     ])
     mock_check_call.assert_any_call([
         "tc", "qdisc", "add", "dev", "en0", "parent", "1:0x2", "fq_codel"
     ])
     mock_check_call.assert_any_call([
         "tc",
         "filter",
         "add",
         "dev",
         "en0",
         "protocol",
         "ip",
         "parent",
         "1:",
         "prio",
         "1",
         "handle",
         "0x2",
         "fw",
         "flowid",
         "1:0x2",
     ])
示例#3
0
文件: test_qos.py 项目: markjen/magma
    def testSanityTrafficClass(self):
        intf = 'qt'
        BRIDGE = 'qtbr0'
        BridgeTools.create_bridge(BRIDGE, BRIDGE)
        BridgeTools.create_internal_iface(BRIDGE, intf, None)

        parent_qid = 2
        qid = 3
        apn_ambr = 1000000
        bearer_mbr = 500000
        bearer_gbr = 250000
        TrafficClass.init_qdisc(intf, show_error=False)

        # create APN level ambr
        TrafficClass.create_class(intf, qid=parent_qid, max_bw=apn_ambr)

        # create child queue
        TrafficClass.create_class(
            intf, qid=qid, rate=bearer_gbr, max_bw=bearer_mbr,
            parent_qid=parent_qid,
        )

        # check if the filters installed for leaf class only
        filter_output = subprocess.check_output(['tc', 'filter', 'show', 'dev', intf])
        filter_list = filter_output.decode('utf-8').split("\n")
        filter_list = [ln for ln in filter_list if 'classid' in ln]
        assert('classid 1:{qid}'.format(qid=parent_qid) in filter_list[0])
        assert('classid 1:{qid}'.format(qid=qid) in filter_list[1])

        # check if classes are installed with appropriate bandwidth limits
        class_output = subprocess.check_output(['tc', 'class', 'show', 'dev', intf])
        class_list = class_output.decode('utf-8').split("\n")
        for info in class_list:
            if 'class htb 1:{qid}'.format(qid=qid) in info:
                child_class = info

            if 'class htb 1:{qid}'.format(qid=parent_qid) in info:
                parent_class = info

        assert(parent_class and 'ceil 1Mbit' in parent_class)
        assert(child_class and 'rate 250Kbit ceil 500Kbit' in child_class)

        # check if fq_codel is associated only with the leaf class
        qdisc_output = subprocess.check_output(['tc', 'qdisc', 'show', 'dev', intf])

        # check if read_all_classes work
        qid_list = TrafficClass.read_all_classes(intf)
        assert((qid, parent_qid) in qid_list)

        # delete leaf class
        TrafficClass.delete_class(intf, 3)

        # check class for qid 3 removed
        class_output = subprocess.check_output(['tc', 'class', 'show', 'dev', intf])
        class_list = class_output.decode('utf-8').split("\n")
        assert(
            not [
                info for info in class_list if 'class htb 1:{qid}'.format(
                    qid=qid,
                ) in info
            ]
        )

        # delete APN AMBR class
        TrafficClass.delete_class(intf, 2)

        # verify that parent class is removed
        class_output = subprocess.check_output(['tc', 'class', 'show', 'dev', intf])
        class_list = class_output.decode('utf-8').split("\n")
        assert(
            not [
                info for info in class_list if 'class htb 1:{qid}'.format(
                    qid=parent_qid,
                ) in info
            ]
        )

        # check if no fq_codel nor filter exists
        qdisc_output = subprocess.check_output(['tc', 'qdisc', 'show', 'dev', intf])
        filter_output = subprocess.check_output(['tc', 'filter', 'show', 'dev', intf])
        filter_list = filter_output.decode('utf-8').split("\n")
        filter_list = [ln for ln in filter_list if 'classid' in ln]
        qdisc_list = qdisc_output.decode('utf-8').split("\n")
        qdisc_list = [ln for ln in qdisc_list if 'fq_codel' in ln]
        assert(not filter_list and not qdisc_list)

        # destroy all qos on intf
        run_cmd(['tc qdisc del dev {intf} root'.format(intf=intf)])