diff options
Diffstat (limited to 'test/asf')
-rw-r--r-- | test/asf/test_http_static.py | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/test/asf/test_http_static.py b/test/asf/test_http_static.py new file mode 100644 index 00000000000..17eed9c9c7b --- /dev/null +++ b/test/asf/test_http_static.py @@ -0,0 +1,155 @@ +from config import config +from asfframework import VppTestCase, VppTestRunner +import unittest +import subprocess +import tempfile +from vpp_qemu_utils import ( + create_host_interface, + delete_host_interfaces, + can_create_namespaces, + create_namespace, + delete_namespace, +) + + +@unittest.skipIf( + "http_static" in config.excluded_plugins, "Exclude HTTP Static Server plugin tests" +) +class TestHttpStaticVapi(VppTestCase): + """enable the http static server [VAPI]""" + + @classmethod + def setUpClass(cls): + super(TestHttpStaticVapi, cls).setUpClass() + # 2 temp files to improve coverage of http_cache.c + cls.temp = tempfile.NamedTemporaryFile() + cls.temp.write(b"Hello world") + + cls.temp2 = tempfile.NamedTemporaryFile() + cls.temp2.write(b"Hello world2") + + if not can_create_namespaces(): + raise Exception("Unable to create namespace") + create_namespace("HttpStatic") + + create_host_interface("vppHost", "vppOut", "HttpStatic", "10.10.1.1/24") + cls.vapi.cli("create host-interface name vppOut") + cls.vapi.cli("set int state host-vppOut up") + cls.vapi.cli("set int ip address host-vppOut 10.10.1.2/24") + + @classmethod + def tearDownClass(cls): + delete_namespace(["HttpStatic"]) + delete_host_interfaces("vppHost") + cls.temp.close() + cls.temp2.close() + super(TestHttpStaticVapi, cls).tearDownClass() + + def test_http_static_vapi(self): + self.vapi.http_static_enable( + www_root="/tmp", + uri="tcp://0.0.0.0/80", + ) + # move file pointer to the beginning + self.temp.seek(0) + process = subprocess.run( + [ + "ip", + "netns", + "exec", + "HttpStatic", + "curl", + f"10.10.1.2/{self.temp.name[5:]}", + ], + capture_output=True, + ) + self.assertIn(b"Hello world", process.stdout) + + self.temp2.seek(0) + process = subprocess.run( + [ + "ip", + "netns", + "exec", + "HttpStatic", + "curl", + f"10.10.1.2/{self.temp2.name[5:]}", + ], + capture_output=True, + ) + self.assertIn(b"Hello world2", process.stdout) + + +@unittest.skipIf( + "http_static" in config.excluded_plugins, "Exclude HTTP Static Server plugin tests" +) +class TestHttpStaticCli(VppTestCase): + """enable the static http server [CLI]""" + + @classmethod + def setUpClass(cls): + super(TestHttpStaticCli, cls).setUpClass() + # 2 temp files to improve coverage of http_cache.c + cls.temp = tempfile.NamedTemporaryFile() + cls.temp.write(b"Hello world") + + cls.temp2 = tempfile.NamedTemporaryFile() + cls.temp2.write(b"Hello world2") + + if not can_create_namespaces("vpp_chk_4212_2"): + raise Exception("Unable to create namespace") + create_namespace("HttpStatic2") + + create_host_interface("vppHost2", "vppOut2", "HttpStatic2", "10.10.1.1/24") + cls.vapi.cli("create host-interface name vppOut2") + cls.vapi.cli("set int state host-vppOut2 up") + cls.vapi.cli("set int ip address host-vppOut2 10.10.1.2/24") + + @classmethod + def tearDownClass(cls): + delete_namespace(["HttpStatic2"]) + delete_host_interfaces("vppHost2") + cls.temp.close() + cls.temp2.close() + super(TestHttpStaticCli, cls).tearDownClass() + + def test_http_static_cli(self): + self.vapi.cli( + "http static server www-root /tmp uri tcp://0.0.0.0/80 cache-size 2m" + ) + # move file pointer to the beginning + self.temp.seek(0) + process = subprocess.run( + [ + "ip", + "netns", + "exec", + "HttpStatic2", + "curl", + f"10.10.1.2/{self.temp.name[5:]}", + ], + capture_output=True, + ) + self.assertIn(b"Hello world", process.stdout) + + self.temp2.seek(0) + process = subprocess.run( + [ + "ip", + "netns", + "exec", + "HttpStatic2", + "curl", + f"10.10.1.2/{self.temp2.name[5:]}", + ], + capture_output=True, + ) + self.assertIn(b"Hello world2", process.stdout) + + self.vapi.cli("show http static server cache") + self.vapi.cli("clear http static cache") + self.vapi.cli("show http static server sessions") + + +if __name__ == "__main__": + unittest.main(testRunner=VppTestRunner) |