summaryrefslogtreecommitdiffstats
path: root/test/test_stn.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_stn.py')
-rw-r--r--test/test_stn.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/test/test_stn.py b/test/test_stn.py
new file mode 100644
index 00000000000..d6c8284f829
--- /dev/null
+++ b/test/test_stn.py
@@ -0,0 +1,63 @@
+from framework import VppTestCase, VppTestRunner
+import unittest
+from config import config
+
+
+@unittest.skipIf("stn" in config.excluded_plugins, "Exclude stn plugin tests")
+class TestStn(VppTestCase):
+ """STN plugin tests"""
+
+ # TODO: actually test the rules by sending packets
+ @classmethod
+ def setUpClass(cls):
+ super(TestStn, cls).setUpClass()
+ try:
+ cls.create_pg_interfaces(range(2))
+ for i in cls.pg_interfaces:
+ i.config_ip4()
+ i.resolve_arp()
+ i.admin_up()
+ except Exception:
+ cls.tearDownClass()
+ raise
+
+ @classmethod
+ def tearDownClass(cls):
+ for i in cls.pg_interfaces:
+ i.unconfig_ip4()
+ i.admin_down()
+ super(TestStn, cls).tearDownClass()
+
+ def test_stn_cli(self):
+ """Add, dump and delete stn rule [CLI]"""
+ expected = [
+ "rule_index: 0",
+ f"address: {self.pg0.local_ip4}",
+ "iface: pg0",
+ "next_node: pg0-output",
+ ]
+ self.vapi.cli(f"stn rule address {self.pg0.local_ip4} interface pg0")
+
+ reply = self.vapi.cli("show stn rules")
+ for entry in expected:
+ self.assertIn(entry, reply)
+
+ self.vapi.cli(f"stn rule address {self.pg0.local_ip4} interface pg0 del")
+
+ def test_stn_vapi(self):
+ """Add, dump and delete stn rule [VAPI]"""
+ self.vapi.stn_add_del_rule(
+ ip_address=self.pg1.local_ip4,
+ sw_if_index=1,
+ is_add=1,
+ )
+ self.vapi.stn_rules_dump()
+ self.vapi.stn_add_del_rule(
+ ip_address=self.pg1.local_ip4,
+ sw_if_index=1,
+ is_add=0,
+ )
+
+
+if __name__ == "__main__":
+ unittest.main(testRunner=VppTestRunner)