From 01aae91949a550e0ec4222d3c27d5ccf0d69c5ef Mon Sep 17 00:00:00 2001 From: chloenayon Date: Wed, 2 Sep 2020 18:34:22 +0200 Subject: [PATCH] api: remove setup_stdio API.setup_stdio was replaced in PRs 506 and 507, remove setup_stdio functions and call sites. --- osbuild/api.py | 32 +------------------------------- runners/org.osbuild.rhel82 | 2 -- test/mod/test_buildroot.py | 14 -------------- test/mod/test_monitor.py | 38 -------------------------------------- 4 files changed, 1 insertion(+), 85 deletions(-) diff --git a/osbuild/api.py b/osbuild/api.py index 1c2e4d2e..212e4531 100644 --- a/osbuild/api.py +++ b/osbuild/api.py @@ -3,7 +3,6 @@ import asyncio import io import json import os -import sys import tempfile import threading from typing import Dict, Optional @@ -174,20 +173,6 @@ class API(BaseAPI): self._output_data.write(data) self.monitor.log(data) - def _setup_stdio(self, server): - with self._prepare_input() as stdin, \ - self._prepare_output() as stdout: - msg = {} - fds = [] - fds.append(stdin.fileno()) - msg['stdin'] = 0 - fds.append(stdout.fileno()) - msg['stdout'] = 1 - fds.append(stdout.fileno()) - msg['stderr'] = 2 - - server.send(msg, fds=fds) - def _set_metadata(self, message): self.metadata.update(message["metadata"]) @@ -198,9 +183,7 @@ class API(BaseAPI): sock.send({"type": "fd", "fd": 0}, fds=fds) def _message(self, msg, fds, sock): - if msg["method"] == 'setup-stdio': - self._setup_stdio(sock) - elif msg["method"] == 'add-metadata': + if msg["method"] == 'add-metadata': self._set_metadata(msg) elif msg["method"] == 'get-arguments': self._get_arguments(sock) @@ -224,19 +207,6 @@ def arguments(path="/run/osbuild/api/osbuild"): return data -def setup_stdio(path="/run/osbuild/api/osbuild"): - """Replace standard i/o with the ones provided by the API""" - with jsoncomm.Socket.new_client(path) as client: - req = {"method": "setup-stdio"} - client.send(req) - msg, fds, _ = client.recv() - for sio in ["stdin", "stdout", "stderr"]: - target = getattr(sys, sio) - source = fds[msg[sio]] - os.dup2(source, target.fileno()) - fds.close() - - def metadata(data: Dict, path="/run/osbuild/api/osbuild"): """Update metadata for the current module""" with jsoncomm.Socket.new_client(path) as client: diff --git a/runners/org.osbuild.rhel82 b/runners/org.osbuild.rhel82 index 94fe5d0b..9c6a9658 100755 --- a/runners/org.osbuild.rhel82 +++ b/runners/org.osbuild.rhel82 @@ -3,7 +3,6 @@ import os import subprocess import sys -import osbuild.api def ldconfig(): @@ -49,7 +48,6 @@ def python_alternatives(): pass if __name__ == "__main__": - osbuild.api.setup_stdio() ldconfig() sysusers() tmpfiles() diff --git a/test/mod/test_buildroot.py b/test/mod/test_buildroot.py index 1f50d4ad..60de5732 100644 --- a/test/mod/test_buildroot.py +++ b/test/mod/test_buildroot.py @@ -8,7 +8,6 @@ import sys import tempfile import unittest -import osbuild from osbuild.buildroot import BuildRoot from osbuild.monitor import LogMonitor, NullMonitor from .. import test @@ -24,9 +23,6 @@ class TestBuildRoot(test.TestBase): self.tmp.cleanup() def test_basic(self): - # This also checks the API and BuildRoot integration: - # the runner will call api.setup_stdio and thus check - # that connecting to the api works correctly runner = "org.osbuild.linux" libdir = os.path.abspath(os.curdir) var = pathlib.Path(self.tmp.name, "var") @@ -34,8 +30,6 @@ class TestBuildRoot(test.TestBase): monitor = NullMonitor(sys.stderr.fileno()) with BuildRoot("/", runner, libdir=libdir, var=var) as root: - api = osbuild.api.API({}, monitor) - root.register_api(api) r = root.run(["/usr/bin/true"], monitor) self.assertEqual(r.returncode, 0) @@ -59,8 +53,6 @@ class TestBuildRoot(test.TestBase): open(logfile, "w") as log: monitor = LogMonitor(log.fileno()) - api = osbuild.api.API({}, monitor) - root.register_api(api) r = root.run(["/usr/bin/true"], monitor) @@ -81,8 +73,6 @@ class TestBuildRoot(test.TestBase): monitor = NullMonitor(sys.stderr.fileno()) with BuildRoot("/", runner, libdir=libdir, var=var) as root: - api = osbuild.api.API({}, monitor) - root.register_api(api) r = root.run(["/usr/bin/echo", data], monitor) self.assertEqual(r.returncode, 0) @@ -103,8 +93,6 @@ class TestBuildRoot(test.TestBase): monitor = NullMonitor(sys.stderr.fileno()) with BuildRoot("/", runner, libdir=libdir, var=var) as root: - api = osbuild.api.API({}, monitor) - root.register_api(api) ro_binds = [f"{scripts}:/scripts"] @@ -139,8 +127,6 @@ class TestBuildRoot(test.TestBase): monitor = NullMonitor(sys.stderr.fileno()) with BuildRoot("/", runner, libdir=libdir, var=var) as root: - api = osbuild.api.API({}, monitor) - root.register_api(api) ro_binds = [f"{scripts}:/scripts"] diff --git a/test/mod/test_monitor.py b/test/mod/test_monitor.py index 01d84e77..6969977c 100644 --- a/test/mod/test_monitor.py +++ b/test/mod/test_monitor.py @@ -3,9 +3,7 @@ # import io -import json import os -import multiprocessing as mp import sys import tempfile import unittest @@ -13,24 +11,10 @@ from collections import defaultdict import osbuild import osbuild.meta -from osbuild.api import API from osbuild.monitor import LogMonitor from .. import test -def echo(path): - """echo stdin to stdout after setting stdio up via API - - Meant to be called as the main function in a process - simulating an osbuild runner and a stage run which does - nothing but returns the supplied options to stdout again. - """ - osbuild.api.setup_stdio(path) - data = json.load(sys.stdin) - json.dump(data, sys.stdout) - sys.exit(0) - - class TapeMonitor(osbuild.monitor.BaseMonitor): """Record the usage of all called functions""" def __init__(self): @@ -66,28 +50,6 @@ class TapeMonitor(osbuild.monitor.BaseMonitor): class TestMonitor(unittest.TestCase): - def test_log_monitor_api(self): - # Basic log and API integration check - with tempfile.TemporaryDirectory() as tmpdir: - args = {"foo": "bar"} - path = os.path.join(tmpdir, "osbuild-api") - logfile = os.path.join(tmpdir, "log.txt") - - with open(logfile, "w") as log: - api = API(args, LogMonitor(log.fileno()), socket_address=path) - with api as api: - p = mp.Process(target=echo, args=(path, )) - p.start() - p.join() - self.assertEqual(p.exitcode, 0) - output = api.output # pylint: disable=no-member - assert output - - self.assertEqual(json.dumps(args), output) - with open(logfile) as f: - log = f.read() - self.assertEqual(log, output) - @unittest.skipUnless(test.TestBase.can_bind_mount(), "root-only") def test_log_monitor_vfuncs(self): # Checks the basic functioning of the LogMonitor