diff --git a/py314.patch b/py314.patch new file mode 100644 index 0000000..655e1bc --- /dev/null +++ b/py314.patch @@ -0,0 +1,104 @@ +From 456bc10d94b57e254568e7ea9a8b3cffb856ebff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Fri, 22 Nov 2024 16:41:55 +0100 +Subject: [PATCH] Tests: Avoid the multiprocessing forkserver method + +Fixes https://github.com/pexpect/pexpect/issues/807 +--- + tests/test_expect.py | 12 ++++++++++-- + tests/test_socket.py | 24 ++++++++++++++++-------- + 2 files changed, 26 insertions(+), 10 deletions(-) + +diff --git a/tests/test_expect.py b/tests/test_expect.py +index c16e0551..fb1e30e2 100755 +--- a/tests/test_expect.py ++++ b/tests/test_expect.py +@@ -33,6 +33,14 @@ + + PY3 = bool(sys.version_info.major >= 3) + ++# Python 3.14 changed the non-macOS POSIX default to forkserver ++# but the code in this module does not work with it ++# See https://github.com/python/cpython/issues/125714 ++if multiprocessing.get_start_method() == 'forkserver': ++ mp_context = multiprocessing.get_context(method='fork') ++else: ++ mp_context = multiprocessing.get_context() ++ + # Many of these test cases blindly assume that sequential directory + # listings of the /bin directory will yield the same results. + # This may not be true, but seems adequate for testing now. +@@ -682,7 +690,7 @@ def test_stdin_closed(self): + ''' + Ensure pexpect continues to operate even when stdin is closed + ''' +- class Closed_stdin_proc(multiprocessing.Process): ++ class Closed_stdin_proc(mp_context.Process): + def run(self): + sys.__stdin__.close() + cat = pexpect.spawn('cat') +@@ -698,7 +706,7 @@ def test_stdin_stdout_closed(self): + ''' + Ensure pexpect continues to operate even when stdin and stdout is closed + ''' +- class Closed_stdin_stdout_proc(multiprocessing.Process): ++ class Closed_stdin_stdout_proc(mp_context.Process): + def run(self): + sys.__stdin__.close() + sys.__stdout__.close() +diff --git a/tests/test_socket.py b/tests/test_socket.py +index b801b00a..6521d368 100644 +--- a/tests/test_socket.py ++++ b/tests/test_socket.py +@@ -29,6 +29,14 @@ + import time + import errno + ++# Python 3.14 changed the non-macOS POSIX default to forkserver ++# but the code in this module does not work with it ++# See https://github.com/python/cpython/issues/125714 ++if multiprocessing.get_start_method() == 'forkserver': ++ mp_context = multiprocessing.get_context(method='fork') ++else: ++ mp_context = multiprocessing.get_context() ++ + + class SocketServerError(Exception): + pass +@@ -83,8 +91,8 @@ def setUp(self): + self.prompt3 = b'Press X to exit:' + self.enter = b'\r\n' + self.exit = b'X\r\n' +- self.server_up = multiprocessing.Event() +- self.server_process = multiprocessing.Process(target=self.socket_server, args=(self.server_up,)) ++ self.server_up = mp_context.Event() ++ self.server_process = mp_context.Process(target=self.socket_server, args=(self.server_up,)) + self.server_process.daemon = True + self.server_process.start() + counter = 0 +@@ -189,9 +197,9 @@ def test_timeout(self): + session.expect(b'Bogus response') + + def test_interrupt(self): +- timed_out = multiprocessing.Event() +- all_read = multiprocessing.Event() +- test_proc = multiprocessing.Process(target=self.socket_fn, args=(timed_out, all_read)) ++ timed_out = mp_context.Event() ++ all_read = mp_context.Event() ++ test_proc = mp_context.Process(target=self.socket_fn, args=(timed_out, all_read)) + test_proc.daemon = True + test_proc.start() + while not all_read.is_set(): +@@ -203,9 +211,9 @@ def test_interrupt(self): + self.assertEqual(test_proc.exitcode, errno.ETIMEDOUT) + + def test_multiple_interrupts(self): +- timed_out = multiprocessing.Event() +- all_read = multiprocessing.Event() +- test_proc = multiprocessing.Process(target=self.socket_fn, args=(timed_out, all_read)) ++ timed_out = mp_context.Event() ++ all_read = mp_context.Event() ++ test_proc = mp_context.Process(target=self.socket_fn, args=(timed_out, all_read)) + test_proc.daemon = True + test_proc.start() + while not all_read.is_set(): diff --git a/python-pexpect.changes b/python-pexpect.changes index a284b4c..c74b74f 100644 --- a/python-pexpect.changes +++ b/python-pexpect.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon Sep 8 03:28:29 UTC 2025 - Markéta Machová + +- Add upstream py314.patch to fix tests with Python 3.14 + ------------------------------------------------------------------- Fri Dec 6 07:28:04 UTC 2024 - Guillaume GARDET diff --git a/python-pexpect.spec b/python-pexpect.spec index 7f95a79..4a62fbd 100644 --- a/python-pexpect.spec +++ b/python-pexpect.spec @@ -1,7 +1,7 @@ # # spec file for package python-pexpect # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,6 +24,8 @@ Summary: Pure Python Expect-like module License: ISC URL: https://github.com/pexpect/pexpect Source: https://files.pythonhosted.org/packages/source/p/pexpect/pexpect-%{version}.tar.gz +# PATCH-FIX-UPSTREAM https://github.com/pexpect/pexpect/pull/808 Tests: Avoid the multiprocessing forkserver method +Patch0: py314.patch BuildRequires: %{python_module pip} BuildRequires: %{python_module ptyprocess} BuildRequires: %{python_module pytest}