summaryrefslogtreecommitdiffstats
path: root/test/hook.py
diff options
context:
space:
mode:
authorPaul Vinciguerra <pvinci@vinciconsulting.com>2019-01-08 20:37:40 -0800
committerOle Trøan <otroan@employees.org>2019-02-04 15:37:38 +0000
commit895e2f850659ccc2a644d0d955c2f4313263f106 (patch)
tree8b3315ab6d78323f7372940fcde44ebdb71f8547 /test/hook.py
parent2baf9422cf42e6f3ca5841bacf1a5424e6db8bea (diff)
Fix inheritance problem in test/hook.py.
Subclasses cannot modify the signature of their constructors. def __init__(self, test): - super(PollHook, self).__init__(test.logger) + super(PollHook, self).__init__(test) Change-Id: I764df8871128f9198a03fac4ec2f45528547467a Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
Diffstat (limited to 'test/hook.py')
-rw-r--r--test/hook.py32
1 files changed, 16 insertions, 16 deletions
diff --git a/test/hook.py b/test/hook.py
index 64fc076c1a0..cddb603e46e 100644
--- a/test/hook.py
+++ b/test/hook.py
@@ -17,8 +17,9 @@ class Hook(object):
Generic hooks before/after API/CLI calls
"""
- def __init__(self, logger):
- self.logger = logger
+ def __init__(self, test):
+ self.test = test
+ self.logger = test.logger
def before_api(self, api_name, api_args):
"""
@@ -79,13 +80,12 @@ class VppDiedError(Exception):
class PollHook(Hook):
""" Hook which checks if the vpp subprocess is alive """
- def __init__(self, testcase):
- super(PollHook, self).__init__(testcase.logger)
- self.testcase = testcase
+ def __init__(self, test):
+ super(PollHook, self).__init__(test)
def on_crash(self, core_path):
self.logger.error("Core file present, debug with: gdb %s %s" %
- (self.testcase.vpp_bin, core_path))
+ (self.test.vpp_bin, core_path))
check_core_path(self.logger, core_path)
self.logger.error("Running `file %s':" % core_path)
try:
@@ -101,27 +101,27 @@ class PollHook(Hook):
Poll the vpp status and throw an exception if it's not running
:raises VppDiedError: exception if VPP is not running anymore
"""
- if self.testcase.vpp_dead:
+ if self.test.vpp_dead:
# already dead, nothing to do
return
- self.testcase.vpp.poll()
- if self.testcase.vpp.returncode is not None:
+ self.test.vpp.poll()
+ if self.test.vpp.returncode is not None:
signaldict = dict(
(k, v) for v, k in reversed(sorted(signal.__dict__.items()))
if v.startswith('SIG') and not v.startswith('SIG_'))
- if self.testcase.vpp.returncode in signaldict:
- s = signaldict[abs(self.testcase.vpp.returncode)]
+ if self.test.vpp.returncode in signaldict:
+ s = signaldict[abs(self.test.vpp.returncode)]
else:
s = "unknown"
msg = "VPP subprocess died unexpectedly with returncode %d [%s]." \
- % (self.testcase.vpp.returncode, s)
+ % (self.test.vpp.returncode, s)
self.logger.critical(msg)
- core_path = get_core_path(self.testcase.tempdir)
+ core_path = get_core_path(self.test.tempdir)
if os.path.isfile(core_path):
self.on_crash(core_path)
- self.testcase.vpp_dead = True
+ self.test.vpp_dead = True
raise VppDiedError(msg)
def before_api(self, api_name, api_args):
@@ -151,11 +151,11 @@ class PollHook(Hook):
class StepHook(PollHook):
""" Hook which requires user to press ENTER before doing any API/CLI """
- def __init__(self, testcase):
+ def __init__(self, test):
self.skip_stack = None
self.skip_num = None
self.skip_count = 0
- super(StepHook, self).__init__(testcase)
+ super(StepHook, self).__init__(test)
def skip(self):
if self.skip_stack is None:
dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
#!/usr/bin/env python3
# Copyright (c) 2021 Graphiant, Inc.

import unittest
import scapy.compat
from scapy.layers.inet import IP, UDP
from scapy.layers.l2 import Ether
from scapy.packet import Raw
from framework import VppTestCase, VppTestRunner
from vpp_papi import VppEnum
from vpp_policer import VppPolicer, PolicerAction

NUM_PKTS = 67


class TestPolicerInput(VppTestCase):
    """ Policer on an input interface """

    def setUp(self):
        super(TestPolicerInput, self).setUp()

        self.create_pg_interfaces(range(2))
        for i in self.pg_interfaces:
            i.admin_up()
            i.config_ip4()
            i.resolve_arp()

        self.pkt = (Ether(src=self.pg0.remote_mac,
                          dst=self.pg0.local_mac) /
                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
                    UDP(sport=1234, dport=1234) /
                    Raw(b'\xa5' * 100))

    def tearDown(self):
        for i in self.pg_interfaces:
            i.unconfig_ip4()
            i.admin_down()
        super(TestPolicerInput, self).tearDown()

    def test_policer_input(self):
        action_tx = PolicerAction(
            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
            0)
        policer = VppPolicer(self, "pol1", 80, 0, 1000, 0,
                             conform_action=action_tx,
                             exceed_action=action_tx,
                             violate_action=action_tx)
        policer.add_vpp_config()

        # Start policing on pg0
        policer.apply_vpp_config(self.pg0.sw_if_index, True)

        rx = self.send_and_expect(self.pg0, self.pkt * NUM_PKTS, self.pg1)
        stats = policer.get_stats()

        # Single rate, 2 colour policer - expect conform, violate but no exceed
        self.assertGreater(stats['conform_packets'], 0)
        self.assertEqual(stats['exceed_packets'], 0)
        self.assertGreater(stats['violate_packets'], 0)

        # Stop policing on pg0
        policer.apply_vpp_config(self.pg0.sw_if_index, False)

        rx = self.send_and_expect(self.pg0, self.pkt * NUM_PKTS, self.pg1)
        statsnew = policer.get_stats()

        # No new packets counted
        self.assertEqual(stats, statsnew)

        policer.remove_vpp_config()


if __name__ == '__main__':
    unittest.main(testRunner=VppTestRunner)