From 58cf5abf0b2308d7deb6cdf0cade14e59ad89167 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 17 Feb 2025 05:46:14 +0100 Subject: [PATCH] test: verify modifying a running container takes Add new test step that adds a content mount to /var/www/index.html to verify that changes to a running container are activated. This test pass was previously part of the container bridge test, but was moved here to allow that test to focus on bridge specific checks. Issue #930 Signed-off-by: Joachim Wiberg --- .../container_phys/container_phys.adoc | 8 ++- .../infix_containers/container_phys/test.py | 72 ++++++++++++------- 2 files changed, 50 insertions(+), 30 deletions(-) diff --git a/test/case/infix_containers/container_phys/container_phys.adoc b/test/case/infix_containers/container_phys/container_phys.adoc index fc4220e1..eb02a4cb 100644 --- a/test/case/infix_containers/container_phys/container_phys.adoc +++ b/test/case/infix_containers/container_phys/container_phys.adoc @@ -17,10 +17,12 @@ endif::testgroup[] endif::topdoc[] ==== Test sequence . Set up topology and attach to target DUT -. Create container 'web-phys' from bundled OCI image -. Verify container 'web-phys' has started +. Create httpd container from bundled OCI image +. Verify container has started . Verify host:data can ping 10.0.0.2 -. Verify container 'web-phys' is reachable on http://10.0.0.2:91 +. Verify container is reachable on http://10.0.0.2:91 +. Add a content mount, overriding index.html +. Verify server is restarted and returns new content <<< diff --git a/test/case/infix_containers/container_phys/test.py b/test/case/infix_containers/container_phys/test.py index 08256649..fa54f7a8 100755 --- a/test/case/infix_containers/container_phys/test.py +++ b/test/case/infix_containers/container_phys/test.py @@ -11,12 +11,14 @@ given a physical interface instead of an end of a VETH pair. """ import base64 import infamy -from infamy.util import until +from infamy.util import until, to_binary with infamy.Test() as test: NAME = "web-phys" DUTIP = "10.0.0.2" OURIP = "10.0.0.1" + MESG = "Kilroy was here" + BODY = f"

{MESG}

" URL = f"http://{DUTIP}:91/index.html" with test.step("Set up topology and attach to target DUT"): @@ -26,43 +28,39 @@ with infamy.Test() as test: if not target.has_model("infix-containers"): test.skip() - with test.step("Create container 'web-phys' from bundled OCI image"): + with test.step("Create httpd container from bundled OCI image"): _, ifname = env.ltop.xlate("target", "data") target.put_config_dict("ietf-interfaces", { "interfaces": { - "interface": [ - { - "name": f"{ifname}", - "ipv4": { - "address": [{ - "ip": f"{DUTIP}", - "prefix-length": 24 - }] - }, - "container-network": {} - } - ] + "interface": [{ + "name": f"{ifname}", + "ipv4": { + "address": [{ + "ip": f"{DUTIP}", + "prefix-length": 24 + }] + }, + "container-network": {} + }] } }) target.put_config_dict("infix-containers", { "containers": { - "container": [ - { - "name": f"{NAME}", - "image": f"oci-archive:{infamy.Container.HTTPD_IMAGE}", - "command": "/usr/sbin/httpd -f -v -p 91", - "network": { - "interface": [ - { "name": f"{ifname}" } - ] - } + "container": [{ + "name": f"{NAME}", + "image": f"oci-archive:{infamy.Container.HTTPD_IMAGE}", + "command": "/usr/sbin/httpd -f -v -p 91", + "network": { + "interface": [ + {"name": f"{ifname}"} + ] } - ] + }] } }) - with test.step("Verify container 'web-phys' has started"): + with test.step("Verify container has started"): c = infamy.Container(target) until(lambda: c.running(NAME), attempts=10) @@ -74,7 +72,27 @@ with infamy.Test() as test: with test.step("Verify host:data can ping 10.0.0.2"): ns.must_reach(DUTIP) - with test.step("Verify container 'web-phys' is reachable on http://10.0.0.2:91"): + with test.step("Verify container is reachable on http://10.0.0.2:91"): until(lambda: url.nscheck(ns, "It works"), attempts=10) + with test.step("Add a content mount, overriding index.html"): + # Verify modifying a running container takes, issue #930 + data = to_binary(BODY) + + target.put_config_dict("infix-containers", { + "containers": { + "container": [{ + "name": f"{NAME}", + "mount": [{ + "name": "index.html", + "content": f"{data}", + "target": "/var/www/index.html" + }] + }] + } + }) + + with test.step("Verify server is restarted and returns new content"): + until(lambda: url.nscheck(ns, MESG), attempts=10) + test.succeed()