예제 #1
0
파일: test_qos.py 프로젝트: markjen/magma
    def testError(self, mock_check_call):
        def dummy_check_call(*args):
            raise subprocess.CalledProcessError(returncode=1, cmd="tc")

        mock_check_call.side_effect = dummy_check_call
        with self.assertLogs("pipelined.qos.tc_cmd", level="ERROR") as cm:
            TrafficClass.init_qdisc("eth0", show_error=True)
        self.assertTrue("error: 1 running: tc qdisc add dev " in cm.output[0])
예제 #2
0
파일: test_qos.py 프로젝트: markjen/magma
    def testSudoUser(self, _, mock_check_call):
        intf = 'qt'
        BRIDGE = 'qtbr0'
        BridgeTools.create_bridge(BRIDGE, BRIDGE)
        BridgeTools.create_internal_iface(BRIDGE, intf, None)

        TrafficClass.init_qdisc(intf)
        mock_check_call.assert_any_call(
            ["sudo", "tc", "qdisc", "add", "dev", intf, "root", "handle", "1:", "htb"],
        )
예제 #3
0
    def testError(self, mock_check_call):
        def dummy_check_call(*args):
            raise subprocess.CalledProcessError(returncode=1, cmd="tc")

        mock_check_call.side_effect = dummy_check_call
        with self.assertLogs("pipelined.qos.qos_tc_impl", level="ERROR") as cm:
            try:
                TrafficClass.init_qdisc("en0",
                                        throw_except=True,
                                        show_error=True)
                self.fail("init_qdisc didn't raise an exception")
            except subprocess.CalledProcessError:
                pass
        self.assertTrue("error running tc qdisc add dev" in cm.output[0])
        args = [
            "tc", "qdisc", "add", "dev", "en0", "root", "handle", "1:", "htb"
        ]
        mock_check_call.assert_called_with(args)
예제 #4
0
    def testError(self, mock_check_call):
        def dummy_check_call(*args):
            raise subprocess.CalledProcessError(returncode=1, cmd="tc")

        mock_check_call.side_effect = dummy_check_call
        with self.assertLogs('pipelined.qos.qos_tc_impl', level='ERROR') as cm:
            try:
                TrafficClass.init_qdisc("en0",
                                        throw_except=True,
                                        show_error=True)
                self.fail("init_qdisc didn't raise an exception")
            except subprocess.CalledProcessError:
                pass
        self.assertTrue("error running tc qdisc add dev" in cm.output[0])
        args = [
            'tc', 'qdisc', 'add', 'dev', 'en0', 'root', 'handle', '1:', 'htb'
        ]
        mock_check_call.assert_called_with(args)
예제 #5
0
 def setUpClass(cls):
     BridgeTools.create_bridge(cls.BRIDGE, cls.BRIDGE)
     BridgeTools.create_internal_iface(cls.BRIDGE, cls.IFACE, None)
     TrafficClass.init_qdisc(cls.IFACE, True)
예제 #6
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)])
예제 #7
0
 def testSudoUser(self, _, mock_check_call):
     TrafficClass.init_qdisc("eth0")
     mock_check_call.assert_any_call(
         ["sudo", "tc", "qdisc", "add", "dev", "eth0", "root", "handle", "1:", "htb"]
     )
예제 #8
0
 def testSudoUser(self, _, mock_check_call):
     TrafficClass.init_qdisc("en0")
     mock_check_call.assert_any_call([
         'sudo', 'tc', 'qdisc', 'add', 'dev', 'en0', 'root', 'handle', '1:',
         'htb'
     ])