Wait for the UDP socket to bind before starting the client, detect server exit, and clean up on skip. Preserve both handshake checks. Add regression checks and document the rationale for upstream submission. Validated on x86-64-v3: 796 passes, 131 existing skips, zero failures. All seven focused checks and the delayed-start reproduction passed.
126 lines
5.6 KiB
Nix
126 lines
5.6 KiB
Nix
# Test exclusions for the locally rebuilt x86-64-v3 package set.
|
|
#
|
|
# Selecting x86-64-v3 changes every affected derivation, so the normal
|
|
# nixpkgs binary cache cannot be used and upstream test suites run locally.
|
|
# The jeeves builder uses /tmp/nix-builds so filesystem tests run on tmpfs
|
|
# instead of ZFS with normalization=formD and utf8only=on; those tests remain
|
|
# enabled. The remaining workarounds cover UDP readiness, resource-sensitive
|
|
# parser and nested-worker races, and mismatched timeout clocks, plus
|
|
# architecture-dependent floating-point differences whose risk we accept for
|
|
# our workloads. Keep these exceptions visible until their causes are fixed.
|
|
_final: prev: {
|
|
prometheus = prev.prometheus.overrideAttrs (
|
|
old:
|
|
let
|
|
assets = old.passthru.assets.overrideAttrs (assetsOld: {
|
|
# CodeMirror's bounded synchronous parser can return an incomplete tree
|
|
# when these cases run on a heavily loaded builder.
|
|
postPatch = (assetsOld.postPatch or "") + ''
|
|
substituteInPlace module/codemirror-promql/src/complete/hybrid.test.ts \
|
|
--replace-fail "it(value.title, () => {" \
|
|
"(value.title === 'autocomplete topk params 2' ? it.skip : it)(value.title, () => {"
|
|
substituteInPlace module/codemirror-promql/src/parser/vector.test.ts \
|
|
--replace-fail "it(value.binaryExpr, () => {" \
|
|
"(value.binaryExpr === 'foo * on(test,blub) bar' ? it.skip : it)(value.binaryExpr, () => {"
|
|
'';
|
|
});
|
|
in
|
|
{
|
|
postPatch = builtins.replaceStrings [ "${old.passthru.assets}" ] [ "${assets}" ] (
|
|
builtins.unsafeDiscardStringContext old.postPatch
|
|
);
|
|
passthru = old.passthru // {
|
|
inherit assets;
|
|
};
|
|
}
|
|
);
|
|
|
|
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
|
(_pythonFinal: pythonPrev: {
|
|
backrefs = pythonPrev.backrefs.overridePythonAttrs (old: {
|
|
# regex measures its timeout in process CPU time, while this test used
|
|
# wall time and could miss the timeout when a busy builder descheduled it.
|
|
postPatch = (old.postPatch or "") + ''
|
|
substituteInPlace tests/test_bregex.py \
|
|
--replace-fail "time.time()" "time.process_time()"
|
|
'';
|
|
});
|
|
|
|
pytest-xdist = pythonPrev.pytest-xdist.overridePythonAttrs (old: {
|
|
# The suite exercises its own worker pools. Run the outer suite with one
|
|
# worker and allow inner workers more time on heavily loaded builders.
|
|
postPatch = (old.postPatch or "") + ''
|
|
substituteInPlace testing/test_remote.py \
|
|
--replace-fail "WAIT_TIMEOUT = 10.0" "WAIT_TIMEOUT = 60.0"
|
|
'';
|
|
preCheck = builtins.replaceStrings [ "--numprocesses=$NIX_BUILD_CORES" ] [ "--numprocesses=1" ] (
|
|
old.preCheck or ""
|
|
);
|
|
# This test deliberately crashes workers past the restart limit and
|
|
# races while checking which replacement message was emitted.
|
|
disabledTests = (old.disabledTests or [ ]) ++ [
|
|
"test_max_worker_restart_tests_queued"
|
|
];
|
|
});
|
|
|
|
jupyter-server = pythonPrev.jupyter-server.overridePythonAttrs (old: {
|
|
# The kernel reply arrived after the one-second outer deadline when the
|
|
# builder was heavily loaded. Keep the regression test but allow it the
|
|
# same margin as the other resource-sensitive tests.
|
|
postPatch = (old.postPatch or "") + ''
|
|
substituteInPlace tests/services/kernels/test_connection.py \
|
|
--replace-fail \
|
|
"await asyncio.wait_for(asyncio.wrap_future(conn2.request_kernel_info()), timeout=1.0)" \
|
|
"await asyncio.wait_for(asyncio.wrap_future(conn2.request_kernel_info()), timeout=10.0)"
|
|
'';
|
|
});
|
|
|
|
# scipy = pythonPrev.scipy.overridePythonAttrs (old: {
|
|
# # x86-64-v3 FFT implementations produce rounding differences outside
|
|
# # these tests' strict tolerances. We accept the numerical-precision
|
|
# # risk for our workloads.
|
|
# disabledTests = (old.disabledTests or [ ]) ++ [
|
|
# "test_roundtrip_float32"
|
|
# "test_roundtrip_scaling"
|
|
# ];
|
|
# });
|
|
|
|
sentry-sdk = pythonPrev.sentry-sdk.overridePythonAttrs (old: {
|
|
# This test globally mocks threading.current_thread while another
|
|
# thread is running. On Python 3.14, Thread.join can race with that
|
|
# mock and exhaust its single side effect before the worker removes it.
|
|
disabledTests = (old.disabledTests or [ ]) ++ [
|
|
"test_get_current_thread_meta_main_thread"
|
|
];
|
|
});
|
|
|
|
torchaudio = pythonPrev.torchaudio.overridePythonAttrs (old: {
|
|
# x86-64-v3 pitch shifting produces batch-versus-single-item numerical
|
|
# differences up to 2.9e-6. We accept that audio-precision risk for our
|
|
# workloads.
|
|
disabledTests = (old.disabledTests or [ ]) ++ [
|
|
"test_batch_pitch_shift"
|
|
];
|
|
});
|
|
|
|
torchcodec = pythonPrev.torchcodec.overridePythonAttrs (old: {
|
|
# For these 8 kHz MP3 cases, the x86-64-v3 API and CLI codec paths
|
|
# differ in 0.8% of decoded samples. Retain the original tolerance for
|
|
# 99% of samples and accept the localized audio-precision risk.
|
|
postPatch = (old.postPatch or "") + ''
|
|
substituteInPlace test/test_encoders.py \
|
|
--replace-fail \
|
|
'if sys.platform == "darwin":' \
|
|
'if sys.platform == "darwin" or (
|
|
format == "mp3"
|
|
and sample_rate == 8_000
|
|
and asset is SINE_MONO_S32
|
|
and bit_rate in (None, 0)
|
|
and num_channels in (None, 1)
|
|
):'
|
|
'';
|
|
});
|
|
})
|
|
];
|
|
}
|