Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,9 @@ jobs:
- mypy
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: [ '3.9', '3.10', '3.11', '3.12', '3.13']
python: [ '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.15' ]
steps:
- uses: actions/checkout@v7.0.1
- name: Setup Build Tools
Expand All @@ -64,6 +65,7 @@ jobs:
- name: Set Up Python
uses: actions/setup-python@v7.0.0
with:
allow-prereleases: true
python-version: ${{ matrix.python }}
- name: Install dependencies
run: |
Expand Down
10 changes: 9 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,15 @@ def http_server_port() -> int:

@pytest.fixture(scope='session')
def http_server(request, krb_realm: k5test.K5Realm, http_server_port: int):
ps = mp.Process(
# Python 3.14 changed the default multiprocessing start method on POSIX
# from "fork" to "forkserver". "forkserver" (and "spawn") pickle the
# target's arguments to hand them to the worker process, but the
# ``k5test.K5Realm`` object holds an unpicklable ``threading.Lock``
# (``TypeError: cannot pickle '_thread.lock' object``). Force the classic
# "fork" method so the realm is inherited via memory instead of pickled.
# These tests are POSIX/Kerberos-only, so "fork" is always available here.
ctx = mp.get_context('fork')
ps = ctx.Process(
target=start_http_server,
args=(krb_realm,),
kwargs={'port': http_server_port},
Expand Down
Loading