1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365
|
#! /bin/bash
# Some of the tests must be excluded for a variety of reasons.
# This script is called from both debian/rules and from the
# autopkgtest suite (both from our hand-crafted test script and from
# autopkgtest-pkg-pybuild), with the first argument being "rules"
# (for build-time and autopkgtest-pkg-pybuild) or "autopkgtest"
# (for our hand-crafted autopkgtest), and the second argument being
# the Python interpreter (eg python3.12) and returns an argument
# string that can then be passed to pytest.
# At present, we do not need to handle different Python versions, but
# this may be needed in future.
source=$1
interpreter=$2
case $source in
rules)
if [ -n "$AUTOPKGTEST_TMP" ]
then
mode=autopkgtest-pybuild
arch=$(dpkg --print-architecture)
else
mode=build
arch=$(dpkg-architecture -qDEB_HOST_ARCH)
fi
;;
autopkgtest)
mode=autopkgtest-manual
arch=$(dpkg --print-architecture)
;;
*)
echo "Unexpected mode for debian/get_test_exclusions: $mode" >&2
echo "Giving up" >&2
exit 1
;;
esac
EXCLUDES=(
cli/tests/test_dask_scheduler.py::test_no_dashboard
deploy/tests/test_local.py::test_localcluster_get_client
deploy/tests/test_old_ssh.py::test_cluster
deploy/tests/test_old_ssh.py::test_old_ssh_nprocs_renamed_to_n_workers
deploy/tests/test_old_ssh.py::test_nprocs_attribute_is_deprecated
deploy/tests/test_ssh.py::test_nprocs_attribute_is_deprecated
http/tests/test_core.py::test_prometheus_api_doc
tests/test_init.py::test_git_revision
tests/test_jupyter.py::test_jupyter_idle_timeout
tests/test_jupyter.py::test_jupyter_idle_timeout_returned
tests/test_jupyter.py::test_jupyter_server
tests/test_jupyter.py::test_shutsdown_cleanly
tests/test_profile.py::test_stack_overflow
tests/test_pubsub.py::test_client_worker
tests/test_queues.py::test_queue_in_task
tests/test_spill.py::test_spillbuffer_oserror
tests/test_steal.py::test_steal_twice
tests/test_utils_test.py::test_cluster
tests/test_variable.py::test_variable_in_task
tests/test_worker.py::test_process_executor_kills_process
tests/test_worker_memory.py::test_fail_to_pickle_execute_1
tests/test_worker_state_machine.py::test_task_state_instance_are_garbage_collected
)
IGNORES=()
# The following test item is pending resolution of [1]. Deeply
# nested structures may be generated with dask.distributed profiling
# code, and since python3.12, somehow the TypeError is not raised
# anymore. Probable outcome will be a RecursionError, which may
# mismatch some expectations downstream.
#
# [1]: https://github.com/dask/distributed/issues/8700
EXCLUDES+=(
protocol/tests/test_protocol.py::test_deeply_nested_structures
protocol/tests/test_serialize.py::test_deeply_nested_structures
)
# armel and armhf crash on some tests for unknown reasons. We skip
# these.
case $arch in
armel)
EXCLUDES+=(
tests/test_steal.py::test_dont_steal_fast_tasks_compute_time
)
;;
armhf)
EXCLUDES+=(
deploy/tests/test_local.py::test_local_cluster_redundant_kwarg
deploy/tests/test_slow_adaptive.py::test_adaptive
tests/test_client.py::test_futures_in_subgraphs
tests/test_dask_collections.py::test_dataframe_groupby_tasks
tests/test_dask_collections.py::test_dataframes
tests/test_dask_collections.py::test_rolling_sync
tests/test_scheduler.py::test_balance_many_workers_2
tests/test_scheduler.py::test_default_task_duration_splits
tests/test_steal.py::test_blocklist_shuffle_split
)
;;
esac
# Some cpu architectures are tripping on the following tests because they
# react too slowly for the expected timings; this includes riscv64, but also
# surprizingly s390x. Issue is reproducible while running CPU emulation,
# which may also be an indicator of something else wrong.
case $arch in
riscv64|s390x)
EXCLUDES+=(
tests/test_asyncprocess.py::test_exit_callback
tests/test_asyncprocess.py::test_num_fds
tests/test_chaos.py::test_KillWorker
tests/test_nanny.py::test_nanny_process_failure
tests/test_nanny.py::test_num_fds
tests/test_priorities.py::test_last_in_first_out
tests/test_steal.py::test_dont_steal_fast_tasks_compute_time
tests/test_worker.py::test_missing_released_zombie_tasks_2
tests/test_worker_state_machine.py::test_task_state_instance_are_garbage_collected
)
;;
esac
# These tests need an Internet access to pass properly. Use a
# build environment that properly hides the host's network card to
# capture newer such tests (e.g. chroot mode "unshare" or lxc).
# (Note that several of these test names are repeated in different test
# files, so it is possible that this is broader than needed. These
# tests will be picked up by autopkgtest, though, so it is not much of
# an issue.)
case $mode in
build|autopkgtest-pybuild)
EXCLUDES+=(
cli/tests/test_dask_scheduler.py::test_defaults
cli/tests/test_dask_scheduler.py::test_hostport
cli/tests/test_dask_spec.py::test_errors
cli/tests/test_dask_worker.py::test_scheduler_file
cli/tests/test_dask_worker.py::test_scheduler_file
cli/tests/test_dask_worker.py::test_scheduler_file
dashboard/tests/test_scheduler_bokeh.py::test_counters
dashboard/tests/test_worker_bokeh.py::test_counters
deploy/tests/test_local.py::test_adapt_then_manual
deploy/tests/test_local.py::test_async_with
deploy/tests/test_local.py::test_close_twice
deploy/tests/test_local.py::test_cluster_info_sync
deploy/tests/test_local.py::test_local_tls
deploy/tests/test_local.py::test_no_dangling_asyncio_tasks
deploy/tests/test_local.py::test_only_local_access
deploy/tests/test_local.py::test_remote_access
diagnostics/tests/test_progress_widgets.py::test_serializers
diagnostics/tests/test_scheduler_plugin.py::test_lifecycle
http/scheduler/tests/test_missing_bokeh.py::test_missing_bokeh
http/scheduler/tests/test_scheduler_http.py::test_metrics_when_prometheus_client_not_installed
protocol/tests/test_serialize.py::test_errors
tests/test_batched.py::test_BatchedSend
tests/test_batched.py::test_close_closed
tests/test_batched.py::test_close_twice
tests/test_batched.py::test_send_after_stream_start
tests/test_batched.py::test_send_before_close
tests/test_batched.py::test_send_before_start
tests/test_batched.py::test_sending_traffic_jam
tests/test_batched.py::test_serializers
tests/test_client.py::TestClientSecurityLoader::test_security_loader
tests/test_client.py::TestClientSecurityLoader::test_security_loader_ignored_if_explicit_security_provided
tests/test_client.py::TestClientSecurityLoader::test_security_loader_ignored_if_returns_none
tests/test_client.py::test_async_with
tests/test_client.py::test_client_is_quiet_cluster_close
tests/test_client.py::test_dashboard_link_cluster
tests/test_client.py::test_dashboard_link_inproc
tests/test_client.py::test_file_descriptors_dont_leak
tests/test_client.py::test_mixing_clients_different_scheduler
tests/test_client.py::test_quiet_client_close
tests/test_client.py::test_rebalance_sync
tests/test_client.py::test_repr_localcluster
tests/test_client.py::test_security_loader
tests/test_client.py::test_security_loader_ignored_if_explicit_security_provided
tests/test_client.py::test_security_loader_ignored_if_returns_none
tests/test_client.py::test_shutdown
tests/test_client.py::test_shutdown_is_quiet_with_cluster
tests/test_client.py::test_shutdown_localcluster
tests/test_client.py::test_shutdown_stops_callbacks
tests/test_client_loop.py::test_close_loop_sync_start_new_loop
tests/test_client_loop.py::test_close_loop_sync_use_running_loop
tests/test_core.py::test_close_fast_without_active_handlers
tests/test_core.py::test_close_grace_period_for_handlers
tests/test_core.py::test_close_properly
tests/test_core.py::test_compression
tests/test_core.py::test_connection_pool
tests/test_core.py::test_connection_pool_close_while_connecting
tests/test_core.py::test_connection_pool_detects_remote_close
tests/test_core.py::test_connection_pool_outside_cancellation
tests/test_core.py::test_connection_pool_remove
tests/test_core.py::test_connection_pool_respects_limit
tests/test_core.py::test_connection_pool_tls
tests/test_core.py::test_counters
tests/test_core.py::test_deserialize_error
tests/test_core.py::test_errors
tests/test_core.py::test_identity_inproc
tests/test_core.py::test_identity_tcp
tests/test_core.py::test_large_packets_inproc
tests/test_core.py::test_messages_are_ordered_bsend
tests/test_core.py::test_messages_are_ordered_raw
tests/test_core.py::test_ports
tests/test_core.py::test_rpc_default
tests/test_core.py::test_rpc_inproc
tests/test_core.py::test_rpc_message_lifetime_default
tests/test_core.py::test_rpc_message_lifetime_inproc
tests/test_core.py::test_rpc_message_lifetime_tcp
tests/test_core.py::test_rpc_serialization
tests/test_core.py::test_rpc_tcp
tests/test_core.py::test_rpc_tls
tests/test_core.py::test_rpc_with_many_connections_inproc
tests/test_core.py::test_rpc_with_many_connections_tcp
tests/test_core.py::test_send_recv_args
tests/test_core.py::test_send_recv_cancelled
tests/test_core.py::test_server
tests/test_core.py::test_server_comms_mark_active_handlers
tests/test_core.py::test_server_raises_on_blocked_handlers
tests/test_jupyter.py::test_jupyter_idle_timeout
tests/test_jupyter.py::test_jupyter_server
tests/test_locks.py::test_errors
tests/test_nanny.py::test_scheduler_file
tests/test_nanny.py::test_scheduler_file
tests/test_nanny.py::test_scheduler_file
tests/test_nanny.py::test_worker_uses_same_host_as_nanny
tests/test_preload.py::test_failure_doesnt_crash_scheduler
tests/test_preload.py::test_preload_import_time
tests/test_preload.py::test_preload_manager_sequence
tests/test_preload.py::test_worker_preload_text
tests/test_scheduler.py::test_allowed_failures_config
tests/test_scheduler.py::test_async_context_manager
tests/test_scheduler.py::test_dashboard_host
tests/test_scheduler.py::test_file_descriptors_dont_leak
tests/test_scheduler.py::test_finished
tests/test_scheduler.py::test_multiple_listeners
tests/test_scheduler.py::test_no_dangling_asyncio_tasks
tests/test_scheduler.py::test_scheduler_file
tests/test_scheduler.py::test_scheduler_file
tests/test_scheduler.py::test_scheduler_file
tests/test_security.py::test_require_encryption
tests/test_security.py::test_tls_listen_connect
tests/test_security.py::test_tls_temporary_credentials_functional
tests/test_semaphore.py::test_threadpoolworkers_pick_correct_ioloop
tests/test_tls_functional.py::test_security_dict_input_no_security
tests/test_utils_test.py::test_ensure_no_new_clients
tests/test_utils_test.py::test_freeze_batched_send
tests/test_utils_test.py::test_locked_comm_drop_in_replacement
tests/test_utils_test.py::test_locked_comm_intercept_read
tests/test_utils_test.py::test_locked_comm_intercept_write
tests/test_worker.py::test_host_uses_scheduler_protocol
tests/test_worker.py::test_plugin_exception
tests/test_worker.py::test_plugin_internal_exception
tests/test_worker.py::test_plugin_multiple_exceptions
tests/test_worker.py::test_scheduler_file
tests/test_worker.py::test_scheduler_file
tests/test_worker.py::test_scheduler_file
tests/test_worker_client.py::test_dont_override_default_get
)
# The preamble of these files requires internet access, so
# we have to ignore the whole file.
IGNORES+=(
comm/tests/test_comms.py
comm/tests/test_ws.py
)
# Many or most of the tests in these files require internet access;
# rather than list them explicity, we ignore the whole file
# when we don't have internet access.
IGNORES+=(
deploy/tests/test_adaptive.py
deploy/tests/test_local.py
deploy/tests/test_slow_adaptive.py
deploy/tests/test_spec_cluster.py
)
;;
esac
# Some tests require the package to be installed, so we do not run them
# at build time.
case $mode in
build)
EXCLUDES+=(
cli/tests/test_dask_scheduler.py::test_dashboard
cli/tests/test_dask_scheduler.py::test_dashboard_allowlist
cli/tests/test_dask_scheduler.py::test_dashboard_non_standard_ports
cli/tests/test_dask_scheduler.py::test_dashboard_port_zero
cli/tests/test_dask_scheduler.py::test_defaults
cli/tests/test_dask_scheduler.py::test_hostport
cli/tests/test_dask_scheduler.py::test_multiple_protocols
cli/tests/test_dask_scheduler.py::test_multiple_workers
cli/tests/test_dask_scheduler.py::test_multiple_workers_2
cli/tests/test_dask_scheduler.py::test_preload_command
cli/tests/test_dask_scheduler.py::test_preload_command_default
cli/tests/test_dask_scheduler.py::test_preload_config
cli/tests/test_dask_scheduler.py::test_preload_file
cli/tests/test_dask_scheduler.py::test_preload_module
cli/tests/test_dask_scheduler.py::test_preload_remote_module
cli/tests/test_dask_scheduler.py::test_scheduler_port_zero
cli/tests/test_dask_scheduler.py::test_single_executable_deprecated
cli/tests/test_dask_worker.py::test_contact_listen_address
cli/tests/test_dask_worker.py::test_dashboard_non_standard_ports
cli/tests/test_dask_worker.py::test_error_during_startup
cli/tests/test_dask_worker.py::test_integer_names
cli/tests/test_dask_worker.py::test_listen_address_ipv6
cli/tests/test_dask_worker.py::test_local_directory
cli/tests/test_dask_worker.py::test_memory_limit
cli/tests/test_dask_worker.py::test_nanny_worker_port_range
cli/tests/test_dask_worker.py::test_nanny_worker_port_range_too_many_workers_raises
cli/tests/test_dask_worker.py::test_nanny_worker_ports
cli/tests/test_dask_worker.py::test_no_nanny
cli/tests/test_dask_worker.py::test_nworkers_auto
cli/tests/test_dask_worker.py::test_nworkers_expands_name
cli/tests/test_dask_worker.py::test_nworkers_negative
cli/tests/test_dask_worker.py::test_nworkers_requires_nanny
cli/tests/test_dask_worker.py::test_preload_config
cli/tests/test_dask_worker.py::test_resources
cli/tests/test_dask_worker.py::test_respect_host_listen_address
cli/tests/test_dask_worker.py::test_scheduler_address_env
cli/tests/test_dask_worker.py::test_scheduler_file
cli/tests/test_dask_worker.py::test_set_lifetime_restart_via_env_var
cli/tests/test_dask_worker.py::test_set_lifetime_stagger_via_env_var
cli/tests/test_dask_worker.py::test_signal_handling
cli/tests/test_dask_worker.py::test_single_executable_deprecated
cli/tests/test_dask_worker.py::test_single_executable_works
cli/tests/test_dask_worker.py::test_timeout
cli/tests/test_dask_worker.py::test_worker_class
tests/test_config.py::test_logging_extended
tests/test_config.py::test_logging_file_config
tests/test_config.py::test_logging_mutual_exclusive
tests/test_config.py::test_logging_simple
tests/test_config.py::test_logging_simple_under_distributed
tests/test_queues.py::test_queue_in_task
tests/test_variable.py::test_variable_in_task
)
;;
esac
# Print the list of excluded tests for pytest; during build, this
# requires a "distributed/" prefix on all test names, but for the
# installed version during autopkgtests, it does not.
case $mode in
build)
ignoreprefix="distributed/"
excludeprefix="distributed/"
;;
autopkgtest-manual)
# See https://github.com/pytest-dev/pytest/issues/3287
# The rootdir is /tmp/autopkgtest-*/downtmp/autopkgtest_tmp
ignoreprefix="../../../../usr/lib/python3/dist-packages/distributed/"
excludeprefix=""
;;
autopkgtest-pybuild)
# The rootdir path has a different depth in the pybuild autopkgtest:
# /tmp/autopkgtest-*/downtmp/autopkgtest_tmp/build
ignoreprefix="../../../../../usr/lib/python3/dist-packages/distributed/"
excludeprefix=""
;;
esac
for test in "${IGNORES[@]}"
do
printf "%s" "--ignore=$ignoreprefix$test "
done
for test in "${EXCLUDES[@]}"
do
printf "%s" "--deselect=$excludeprefix$test "
done
|