mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-27 19:23:02 +02:00
Let's drop the leading IETF or Infix prefixes from tests. Initially the idea was to mimnic the YANG models, but it's difficult to navigate and does not provide any real benefit to developers or end-users. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
109 lines
3.6 KiB
Python
Executable File
109 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Container environment variables
|
|
|
|
Verify that environment variables can be set in container configuration
|
|
and are available inside the running container.
|
|
|
|
1 Set up a container config with multiple environment variables
|
|
2. Serve variables back to host using a CGI script in container
|
|
3. Verify served content against environment variables
|
|
"""
|
|
import infamy
|
|
from infamy.util import until, to_binary, curl
|
|
|
|
|
|
with infamy.Test() as test:
|
|
ENV_VARS = [
|
|
{"key": "TEST_VAR", "value": "hello-world"},
|
|
{"key": "APP_PORT", "value": "8080"},
|
|
{"key": "DEBUG_MODE", "value": "true"},
|
|
{"key": "PATH_WITH_SPACES", "value": "/path with spaces/test"}
|
|
]
|
|
NAME = "web-env"
|
|
DUTIP = "10.0.0.2"
|
|
OURIP = "10.0.0.1"
|
|
URL =f"http://{DUTIP}:8080/cgi-bin/env.cgi"
|
|
|
|
with test.step("Set up topology and attach to target DUT"):
|
|
env = infamy.Env()
|
|
target = env.attach("target", "mgmt")
|
|
_, hport = env.ltop.xlate("host", "data")
|
|
|
|
if not target.has_model("infix-containers"):
|
|
test.skip()
|
|
|
|
with test.step("Configure data interface with static IPv4"):
|
|
_, 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
|
|
}]
|
|
}
|
|
}]
|
|
}
|
|
})
|
|
|
|
with test.step("Set up container with environment variables"):
|
|
cgi = [
|
|
'#!/bin/sh',
|
|
'# CGI script to output environment variables',
|
|
'echo "Content-Type: text/plain"',
|
|
'echo ""'
|
|
]
|
|
|
|
for var in ENV_VARS:
|
|
cgi.append(f'echo "{var["key"]}=${var["key"]}"')
|
|
|
|
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 8080",
|
|
"env": ENV_VARS,
|
|
"network": {
|
|
"host": True
|
|
},
|
|
"mount": [
|
|
{
|
|
"name": "env.cgi",
|
|
"content": to_binary('\n'.join(cgi) + '\n'),
|
|
"target": "/var/www/cgi-bin/env.cgi",
|
|
"mode": "0755"
|
|
}
|
|
],
|
|
"volume": [{
|
|
"name": "www",
|
|
"target": "/var/www"
|
|
}]
|
|
}
|
|
]
|
|
}
|
|
})
|
|
|
|
with test.step("Verify container has started"):
|
|
c = infamy.Container(target)
|
|
until(lambda: c.running(NAME), attempts=60)
|
|
|
|
with infamy.IsolatedMacVlan(hport) as ns:
|
|
ns.addip(OURIP)
|
|
|
|
with test.step("Verify basic connectivity to data interface"):
|
|
ns.must_reach(DUTIP)
|
|
|
|
with test.step("Verify environment variables in CGI response"):
|
|
expected_strings = []
|
|
for var in ENV_VARS:
|
|
expected_strings.append(f'{var["key"]}={var["value"]}')
|
|
|
|
until(lambda: all(string in ns.call(lambda: curl(URL)) for string in expected_strings))
|
|
|
|
test.succeed()
|