aboutsummaryrefslogtreecommitdiffstats
path: root/test/asf/test_http_static.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/asf/test_http_static.py')
-rw-r--r--test/asf/test_http_static.py164
1 files changed, 164 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..18e8ba56a1e
--- /dev/null
+++ b/test/asf/test_http_static.py
@@ -0,0 +1,164 @@
+from config import config
+from asfframework import VppAsfTestCase, VppTestRunner
+import unittest
+import subprocess
+import tempfile
+from vpp_qemu_utils import (
+ create_host_interface,
+ delete_host_interfaces,
+ create_namespace,
+ delete_namespace,
+)
+
+
+@unittest.skipIf(
+ "http_static" in config.excluded_plugins, "Exclude HTTP Static Server plugin tests"
+)
+@unittest.skipIf(config.skip_netns_tests, "netns not available or disabled from cli")
+class TestHttpStaticVapi(VppAsfTestCase):
+ """enable the http static server and send requests [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")
+
+ try:
+ create_namespace("HttpStatic")
+ except Exception:
+ cls.logger.warning("Unable to create a namespace, retrying.")
+ delete_namespace("HttpStatic")
+ 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"
+)
+@unittest.skipIf(config.skip_netns_tests, "netns not available or disabled from cli")
+class TestHttpStaticCli(VppAsfTestCase):
+ """enable the static http server and send requests [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")
+
+ try:
+ create_namespace("HttpStatic2")
+ except Exception:
+ cls.logger.warning("Unable to create namespace, retrying.")
+ delete_namespace("HttpStatic2")
+ 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)