diff options
author | Alexander Skorichenko <askorichenko@netgate.com> | 2024-09-12 09:32:46 +0200 |
---|---|---|
committer | Matthew Smith <mgsmith@netgate.com> | 2024-09-27 12:30:16 +0000 |
commit | e3ad5aa68a3a8338c7ee27eaf0b45fa7e56841f4 (patch) | |
tree | 13b8cf9c79829f152dffd34ee07586b507b0ad7d /test | |
parent | d0e8bd75f6371d09f31f48ffaf5843dce86ca8e6 (diff) |
snort: API functions for plugin
Also, made disconnect-instance and delete-instance functions
available via cli.
Type: feature
Change-Id: I7939d27867959cb871b1cc7205b94410b53906fd
Signed-off-by: Alexander Skorichenko <askorichenko@netgate.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/test_snort.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/test/test_snort.py b/test/test_snort.py index 352eaa315a9..19401cb7b85 100644 --- a/test/test_snort.py +++ b/test/test_snort.py @@ -30,6 +30,7 @@ class TestSnort(VppTestCase): def test_snort_cli(self): # TODO: add a test with packets # { cli command : part of the expected reply } + print("TEST SNORT CLI") commands_replies = { "snort create-instance name snortTest queue-size 16 on-disconnect drop": "", "snort create-instance name snortTest2 queue-size 16 on-disconnect pass": "", @@ -43,6 +44,7 @@ class TestSnort(VppTestCase): "snort mode interrupt": "", "snort detach interface pg0": "", "snort detach interface pg1": "", + "snort delete instance snortTest": "", } for command, reply in commands_replies.items(): @@ -50,5 +52,101 @@ class TestSnort(VppTestCase): self.assertIn(reply, actual_reply) +@unittest.skipIf("snort" in config.excluded_plugins, "Exclude snort plugin test") +class TestSnortVapi(VppTestCase): + """Snort plugin test [VAPI]""" + + @classmethod + def setUpClass(cls): + super(TestSnortVapi, 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(TestSnortVapi, cls).tearDownClass() + + def test_snort_01_modes_set_interrupt(self): + """Set mode to interrupt""" + self.vapi.snort_input_mode_set(input_mode=1) + reply = self.vapi.snort_input_mode_get() + self.assertEqual(reply.snort_mode, 1) + reply = self.vapi.cli("show snort mode") + self.assertIn("interrupt", reply) + + def test_snort_02_modes_set_polling(self): + """Set mode to polling""" + self.vapi.snort_input_mode_set(input_mode=0) + reply = self.vapi.snort_input_mode_get() + self.assertEqual(reply.snort_mode, 0) + + def test_snort_03_create(self): + """Create two snort instances""" + reply = self.vapi.snort_instance_create( + queue_size=8, drop_on_disconnect=0, name="snortTest0" + ) + self.assertEqual(reply.instance_index, 0) + reply = self.vapi.snort_instance_create( + queue_size=32, drop_on_disconnect=1, name="snortTest1" + ) + self.assertEqual(reply.instance_index, 1) + reply = self.vapi.cli("show snort instances") + self.assertIn("snortTest0", reply) + self.assertIn("snortTest1", reply) + + def test_snort_04_attach_if(self): + """Interfaces can be attached""" + reply = self.vapi.snort_interface_attach( + instance_index=0, sw_if_index=1, snort_dir=1 + ) + try: + reply = self.vapi.snort_interface_attach( + instance_index=1, sw_if_index=1, snort_dir=1 + ) + except: + pass + else: + self.assertNotEqual(reply.retval, 0) + + reply = self.vapi.snort_interface_attach( + instance_index=1, sw_if_index=2, snort_dir=3 + ) + reply = self.vapi.cli("show snort interfaces") + self.assertIn("snortTest0", reply) + self.assertIn("snortTest1", reply) + + def test_snort_05_delete_instance(self): + """Instances can be deleted""" + reply = self.vapi.snort_instance_delete(instance_index=0) + reply = self.vapi.cli("show snort interfaces") + self.assertNotIn("snortTest0", reply) + self.assertIn("snortTest1", reply) + reply = self.vapi.cli("show snort interfaces") + self.assertNotIn("pg0", reply) + self.assertIn("pg1", reply) + + def test_snort_06_detach_if(self): + """Interfaces can be detached""" + try: + reply = self.vapi.snort_interface_detach(sw_if_index=1) + except: + pass + else: + self.assertNotEqual(reply.retval, 0) + reply = self.vapi.snort_interface_detach(sw_if_index=2) + reply = self.vapi.cli("show snort interfaces") + self.assertNotIn("pg1", reply) + + if __name__ == "__main__": unittest.main(testRunner=VppTestRunner) |