aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2023-10-29 21:43:42 -0700
committerZac Medico <zmedico@gentoo.org>2023-10-29 21:47:55 -0700
commit6a7297abca88c5d86ac299e51a52547baac791f1 (patch)
treead124870f25a57221ee8a60addd727bebd54f610
parenttests/emerge/meson.build: replace test_simple with test_baseline (diff)
downloadportage-6a7297abca88c5d86ac299e51a52547baac791f1.tar.gz
portage-6a7297abca88c5d86ac299e51a52547baac791f1.tar.bz2
portage-6a7297abca88c5d86ac299e51a52547baac791f1.zip
test_doebuild_fd_pipes.py: multiprocessing spawn compat
Use multiprocessing.Pipe for compatibility with the spawn start method. Also pass QueryCommand._db to the child process, like MergeProcess does. Bug: https://bugs.gentoo.org/916247 Signed-off-by: Zac Medico <zmedico@gentoo.org>
-rw-r--r--lib/portage/tests/ebuild/test_doebuild_fd_pipes.py30
1 files changed, 20 insertions, 10 deletions
diff --git a/lib/portage/tests/ebuild/test_doebuild_fd_pipes.py b/lib/portage/tests/ebuild/test_doebuild_fd_pipes.py
index 51ddc2390..678486ed1 100644
--- a/lib/portage/tests/ebuild/test_doebuild_fd_pipes.py
+++ b/lib/portage/tests/ebuild/test_doebuild_fd_pipes.py
@@ -1,6 +1,8 @@
# Copyright 2013-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
+import multiprocessing
+
import portage
from portage import os
from portage.tests import TestCase
@@ -13,6 +15,8 @@ from _emerge.PipeReader import PipeReader
class DoebuildFdPipesTestCase(TestCase):
+ output_fd = 200
+
def testDoebuild(self):
"""
Invoke portage.doebuild() with the fd_pipes parameter, and
@@ -21,7 +25,7 @@ class DoebuildFdPipesTestCase(TestCase):
supported for API consumers (see bug #475812).
"""
- output_fd = 200
+ output_fd = self.output_fd
ebuild_body = ["S=${WORKDIR}"]
for phase_func in (
"pkg_info",
@@ -117,21 +121,19 @@ class DoebuildFdPipesTestCase(TestCase):
"clean",
"merge",
):
- pr, pw = os.pipe()
+ pr, pw = multiprocessing.Pipe(duplex=False)
producer = ForkProcess(
- target=portage.doebuild,
- args=(ebuildpath, phase),
+ target=self._doebuild,
+ fd_pipes={
+ 1: dev_null.fileno(),
+ },
+ args=(QueryCommand._db, pw, ebuildpath, phase),
kwargs={
"settings": settings,
"mydbapi": portdb,
"tree": "porttree",
"vartree": root_config.trees["vartree"],
- "fd_pipes": {
- 1: dev_null.fileno(),
- 2: dev_null.fileno(),
- output_fd: pw,
- },
"prev_mtimes": {},
},
)
@@ -144,7 +146,7 @@ class DoebuildFdPipesTestCase(TestCase):
task_scheduler.start()
finally:
# PipeReader closes pr
- os.close(pw)
+ pw.close()
task_scheduler.wait()
output = portage._unicode_decode(consumer.getvalue()).rstrip("\n")
@@ -161,3 +163,11 @@ class DoebuildFdPipesTestCase(TestCase):
dev_null.close()
playground.cleanup()
QueryCommand._db = None
+
+ @staticmethod
+ def _doebuild(db, pw, *args, **kwargs):
+ QueryCommand._db = db
+ kwargs["fd_pipes"] = {
+ DoebuildFdPipesTestCase.output_fd: pw.fileno(),
+ }
+ return portage.doebuild(*args, **kwargs)