test/host: add check for call with fds

Create a new test that checks method calls that pass file
descriptors in both directions.
This commit is contained in:
Christian Kellner 2021-09-23 20:37:00 +00:00 committed by Tom Gundersen
parent 3da1db0865
commit fe3bb30f4c

View file

@ -4,7 +4,9 @@
# Runtime Tests for Host Services
#
import os
import sys
import tempfile
from typing import Any
import pytest
@ -16,12 +18,20 @@ from osbuild.util.jsoncomm import FdSet
class ServiceTest(host.Service):
def dispatch(self, method: str, args: Any, fds: FdSet):
ret, fds = None, None
ret = None
if method == "exception":
raise ValueError("Remote Exception")
if method == "echo":
ret = args
elif method == "echo-fd":
ret = args
with tempfile.TemporaryFile("w+") as f:
with os.fdopen(fds.steal(0)) as d:
f.write(d.read())
f.seek(0)
fds = [os.dup(f.fileno())]
elif method == "identify":
ret = self.id
else:
@ -51,6 +61,35 @@ def test_basic():
client.stop()
def test_pass_fd():
with host.ServiceManager() as mgr:
for i in range(3):
client = mgr.start(str(i), __file__)
args = ["an", "argument"]
data = "osbuild\n"
with tempfile.TemporaryFile("w+") as f:
f.write(data)
f.seek(0)
res, fds = client.call_with_fds("echo-fd", args, fds=[f.fileno()])
assert args == res
with os.fdopen(fds.steal(0)) as d:
assert data == d.read()
remote_id = client.call("identify")
assert remote_id == str(i)
with pytest.raises(ValueError, match=f"{str(i)}"):
_ = mgr.start(str(i), __file__)
for i in range(3):
client = mgr.services[str(i)]
client.stop()
def test_exception():
with host.ServiceManager() as mgr:
client = mgr.start("exception", __file__)