You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Audit the filesystem tests changed since the #1239 audit #1328
The rest of the suite, by contract. Starting from the contracts that the structure audit lists, find contracts without a test and tests without a contract: coverage-only tests, tests of internal call order or arguments, near-duplicates across the sync and asyncio suites, and tests whose fakes omit the real service's behavior.
Stability and cost. Tests that depend on unsynchronized timing, patch private methods for synchronization, or create more S3 objects than their contract needs.
Output
A table per file of the tests to keep, rewrite, merge, or remove, and of the missing tests, posted here and implemented in one PR per test file group, as #1240 and #1241 did.
Constraints
Changing tests only in the implementing PRs, with mutation evidence for every removal; no change to pyathena/filesystem/ behavior.
Audit for this issue at 766d79d0 (master after #1321), read-only.
Scope correction.59e00fbf is the merge of #1262, not of #1259, so the 41 commits under tests/pyathena/filesystem/ include #1259 itself (19 GH-1239 commits) besides #1228 (3), #1229 (2), #1230 (6), #1208 (3, plus the merge d36a1f82), #1209 (6) and #1309 (1). #1281 changed no filesystem test. The range adds 22 and changes 66 test functions and helpers in seven files, and removes 81 (inventory by AST).
Method. Every added or changed test was traced to the contract it names, compared with the tests that could protect the same contract with the same kind of evidence (for the asyncio tests: whether the asyncio code is its own or delegates to the synchronous code), and checked by about 140 mutations of pyathena/filesystem/ in scratch worktrees. Each mutation was run against the whole offline filesystem suite: --noconftest, every AWS endpoint pointed at a closed local port, 1,048 tests passing at baseline. The 95 tests that need S3 were read instead of run; their rows say "AWS-only". The rest of the suite was swept for the patterns of scope 2 and 3, and the contracts of the #1327 report and #1332-#1342 were checked for missing tests. A removal below always names the other tests that failed under the same mutation.
Used by the delegation and copy tests. _serve_keys and 13 sites in lines 1-1460 assign sync_fs._call, which nothing calls; only _core.call takes effect (see "Not in this issue").
release_blocked_waits (fixture)
keep
Without it, a cleanup regression fails the tests in 21 s and keeps the process alive until killed (400 s). It patches pyathena.filesystem.s3_async.wait, so it silently stops working if #1332 or #1340 moves the wait to another module; re-check it there.
cmu_small_head_object_size
keep
Single-request branch of the asyncio driver; only test failing when fits_single_request is ignored.
cmu_copies_source
keep
Requests of the asyncio driver, annotations from the completed version.
cmu_failed_part
keep
Only asyncio test of the abort request parameters.
cmu_failed_annotation
keep
A failed annotation is raised and the completed destination kept.
cmu_waits_for_running_parts
remove
Same except BaseException path as cmu_cancelled: every mutation that fails it (no shielded abort, no withdrawal, abort not waiting, no stop) also fails cmu_cancelled, cmu_loop_shutdown[part] or cmu_failed_part_with_threads_taken. Its ordering check depends on time.sleep(0.05).
Each parameter is the only test of its delegation (six mutations, each fails exactly its case). Extended in section 2.
test_max_workers_none
keep
Only test of the asyncio None resolution.
cmu_cancelled[1,2]
keep
[2] is the only test of the shielded cleanup under a repeated cancellation.
test_close_releases_threads
keep
close(), with, async with each fail their own case.
test_close_during_multipart_copy
keep
close() does not wait for a running part (shutdown instead of release fails it).
cmu_cancelled_completion
keep
Waits for a started completion; the sleep(0.1) backs only a negative check.
cmu_cancelled_creation
keep
Waits for the creation and aborts a created upload.
cmu_cancelled_queued_completion
rewrite
await task (line 1021) is unbounded: use await_bounded. Its spy on submit_to makes it fail for an unrelated change of how the completion is submitted; assert the requests instead.
cmu_interrupted_while_scheduling_completion
keep
Only test failing when the completion future is created by submit() (the shape before #1230).
cmu_failed_part_with_threads_taken
keep
Only test of begin_complete() before queueing; carries the asyncio stop path.
cmu_failed_part_stops_running_parts
remove
The stop is session code: the mutation fails the sync test of the same name and cmu_failed_part_with_threads_taken. The two asyncio-only mutations of that path (no begin_abort, no settled() wait) do not fail this test.
cmu_cancelled_creation_stops_retries
remove
Passes with the whole cleanup (begin_abort and the shielded abort) removed, because operation.calls == 1 is checked before the retries end; cmu_cancelled_creation fails under that mutation. The session stop is covered by TestAioS3StreamedFile::test_cancelled_creation_stops_retries and TestS3File::test_interrupted_creation_stops_retries.
Only test of max_workers reaching the copy from _cp_file, but max(concurrency) == 1 relies on two parts overlapping during time.sleep(0.01): use overlapping_calls.
test_multipart_copy_uses_creation_algorithm
remove
The behavior is in S3Core: breaking it fails the sync test and TestS3Core::test_complete_multipart_upload_uses_creation_algorithm too; the asyncio-only parameter paths are caught by the other copy tests, not by this one.
TestAioS3FileSystem::fs (fixture)
rewrite
Class-scoped and never closed; since #1209 the filesystem owns threads, so yield it and close().
test_write_transaction
keep
AWS-only. Only real-S3 multipart write through AioS3File; revisit with #1332.
test_find, test_rm_recursive, test_upload_cp_file
remove
AWS-only. The asyncio methods delegate to the synchronous code that the sync S3 tests cover; the forwarding is caught offline by the delegation test, the rm tests and test_cp_file_multipart_parameters. Saves about six PutObject, listings, a copy and reads per run. The implementing PR confirms on S3 that the sync tests fail under the same mutations.
AioS3File is S3File, and the session enforces both: allowing max_workers + 1 parts fails these with TestS3File::test_write_parts_in_flight (5 cases) and test_write_failed_part_while_waiting (4 cases). They do not check S3AioExecutor's own bound either (removing it leaves them passing).
TestAioS3File::test_open_lookup_parameters
keep
Only test of _open forwarding its parameters.
TestAioS3StreamedFile::test_write_parts_in_flight
keep
Only test that the wait does not block the event loop.
test_open_async_cancelled
keep
A file opened after a cancelled open_async() is closed, without a ResourceWarning.
test_append_failed_part_copy
keep
Own driver of AioS3StreamedFile.
test_commit_failed_part_first
keep
Only test of a failure that arrives while the commit waits (the sync commit() raises through check() before it waits).
test_write_after_failed_part
keep
test_close_cancelled
merge
No single mutation fails it (only two combined). Make it a close() case of test_flush_cancelled_then_exit_with_exception.
A parameter that CopyObject does not accept reaches CreateMultipartUpload.
cmu_part_sizes
keep
Only test of the driver's default part size (GH-951).
cmu_interrupted_creation
keep
With the removals below, the only test of the driver's except BaseException.
cmu_interrupted_part_scheduling
remove
Catching only Exception fails cmu_interrupted_creation; an abort that does not wait for running parts fails TestS3File::test_part_scheduling_interrupted[write/append] (the [append] case schedules a part copy through the same submit_copy), test_discard_waits_for_running_parts and test_commit_stops_at_failed_part. Synchronizes by replacing the private session._changed.
cmu_repeated_creation_interrupt
remove
An unshielded creation wait fails TestS3File::test_repeated_creation_interrupt[wb/ab]; catching only Exception fails cmu_interrupted_creation.
cmu_interrupted_cleanup
rewrite
#1229 changed it from an interrupt while the cleanup waits for running part copies to an interrupted abort. The first case is documented (docs/filesystem.md:150-153) and now unprotected: suppressing KeyboardInterrupt in _S3WriteSession.abort()'s wait for the parts fails no offline test. Add it back as a second case.
Each the only detector of its mutation (copy, __cause__, precedence of call parameters, storage_class, given parts, per-call fields, retained encryption, unsigned request_kwargs).
test_abort_multipart_upload_in_stopped_scope
keep
Moved from test_s3.py by #1230; the only test of the abort's unstoppable_retries().
Drop match= on undocumented messages; the exception type alone fails every mutation (without the checks, Stubber raises UnStubbedResponseError or nothing is raised).
Each the only detector of its mutation; waits bounded.
TestS3AioThreadPool::test_shutdown
rewrite
Removing the pool's own shutdown check leaves it passing, because the stdlib pool raises the same RuntimeError. Also submit to a shut-down pool that has no threads (never used, or after release()).
Reach their branch only through the private executor._pool.shutdown(), because S3AioExecutor.shutdown() orders the pool shutdown after the dispatches; decide with #1332. Drop match="after shutdown".
Each table entry fails its case. The generic 405 → EPERM case stays valid with #1338: #1345 recognizes the delete-marker header in test_s3_core.py and does not change this file.
renamed to cmu_interrupted_while_scheduling_completion
the interrupt-during-part-wait case of cmu_interrupted_cleanup (#1229)
nothing; restored by the rewrite above
2. Contracts without a test, and tests without a contract
Missing tests that this issue adds (the current behavior is the contract)
Each mutation left the whole offline suite passing, and no AWS test asserts the contract.
Contract
Missing test
Where
The asyncio methods that call the synchronous method pass their arguments and return its result: _mkdir, _makedirs, _rmdir/rmdir, sign, getxattr, setxattr, list_multipart_uploads, clear_multipart_uploads, created, modified, invalidate_cache, touch
Parameters of test_delegations_send_the_requests_of_the_sync_methods, with _serve_keys extended for the multipart listing, abort and ACL. Uncaught today: setxattr dropping copy_kwargs, sign dropping expiration, invalidate_cache doing nothing, list_multipart_uploads returning [], _mkdir dropping **kwargs. Before #1340, this protects its refactor.
test_s3_async.py
sign(expiration=N) expires after N seconds
test_sign (AWS) passes a 3,600 s URL; add an upper bound, or check offline (signing sends no request); drop its sleep(1)
test_s3.py
modified()/created() return LastModified, None for directories
Offline; no test calls them
test_s3.py
touch() of a version path raises ValueError
A case of an existing touch test
test_s3.py
A file opened without cache_type uses the documented "bytes"
An unset case of test_read_with_cache_type
test_s3.py
The asyncio _expand_path rejects maxdepth < 1
A case of an asyncio _expand_path test, unless #1337 delegates _expand_path first
test_s3_async.py
An interrupt while the copy cleanup waits for running parts stops the cleanup and logs the upload ID
The cmu_interrupted_cleanup rewrite in section 1
test_s3.py
Tests without a contract, unsynchronized waits, and AWS cost (rest of the suite)
File
Test
Verdict
Reason
test_s3_async.py
register_async_filesystem (fixture)
remove
Registers by string, which lands in known_implementations, while import pyathena.pandas/pyathena.polars puts S3FileSystem in _registry, which fsspec checks first: after that import, get_filesystem_class("s3") is S3FileSystem. No teardown; with it disabled, all 139 offline tests of the file pass.
test_pandas_read_csv
remove
Its only dependent; in a suite run it reads through S3FileSystem and repeats the sync test against S3.
test_glob
remove
AWS-only. fsspec's _glob runs over the delegated _find; the only asyncio-specific branch (detail) fails test_expand_path_glob_lists_stem_prefix.
test_put_file_mode
remove
Delegated to put_file; dropping mode= fails the delegation test; the sync test protects the translation.
test_pipe_file_compression
rewrite
Keep intrans=True; the False cases run the sync code (breaking it fails them and 14 sync cases).
test_touch_sync_wrapper
merge
Into the delegation test as touch rows; renaming _touch away leaves it passing.
test_transaction_pipe_put_file_create_existing
rewrite
Drop exists.call_count == 2; the contract is FileExistsError without a request.
test_copy_version
rewrite
Assert the CopyObject request through _serve_keys instead of the awaited _cp_file arguments.
test_flush_cancelled_then_exit_with_exception
rewrite
Drop asyncio.sleep(0.1) (__aexit__ awaits the discard; the mutation still fails without it), bound release.wait(), and take the close() case above.
test_write_cancelled
rewrite
release.wait() has no timeout: blocking the loop in _wait_ready hangs the test instead of failing it.
test_mv, test_mv_copy_failure
keep
Replace the private _copy_file; rewrite through the client once #1340 settles the mv failure policy.
join(0.2) plus is_alive() passes a regression whenever the closer has not reached close() in 0.2 s; assert the order of the gated read's end and the close.
Activity
laughingman7743 commentedon Oct 24, 2026
Audit for this issue at
766d79d0(master after #1321), read-only.Scope correction.
59e00fbfis the merge of #1262, not of #1259, so the 41 commits undertests/pyathena/filesystem/include #1259 itself (19 GH-1239 commits) besides #1228 (3), #1229 (2), #1230 (6), #1208 (3, plus the merged36a1f82), #1209 (6) and #1309 (1). #1281 changed no filesystem test. The range adds 22 and changes 66 test functions and helpers in seven files, and removes 81 (inventory by AST).Method. Every added or changed test was traced to the contract it names, compared with the tests that could protect the same contract with the same kind of evidence (for the asyncio tests: whether the asyncio code is its own or delegates to the synchronous code), and checked by about 140 mutations of
pyathena/filesystem/in scratch worktrees. Each mutation was run against the whole offline filesystem suite:--noconftest, every AWS endpoint pointed at a closed local port, 1,048 tests passing at baseline. The 95 tests that need S3 were read instead of run; their rows say "AWS-only". The rest of the suite was swept for the patterns of scope 2 and 3, and the contracts of the #1327 report and #1332-#1342 were checked for missing tests. A removal below always names the other tests that failed under the same mutation.cmu_abbreviatestest_copy_object_with_multipart_upload_.1. Tests changed since
59e00fbftest_s3_async.py_RecordingCallback,_serve_keys,_multipart_copy(helpers)_serve_keysand 13 sites in lines 1-1460 assignsync_fs._call, which nothing calls; only_core.calltakes effect (see "Not in this issue").release_blocked_waits(fixture)pyathena.filesystem.s3_async.wait, so it silently stops working if #1332 or #1340 moves the wait to another module; re-check it there.cmu_small_head_object_sizefits_single_requestis ignored.cmu_copies_sourcecmu_failed_partcmu_failed_annotationcmu_waits_for_running_partsexcept BaseExceptionpath ascmu_cancelled: every mutation that fails it (no shielded abort, no withdrawal, abort not waiting, no stop) also failscmu_cancelled,cmu_loop_shutdown[part]orcmu_failed_part_with_threads_taken. Its ordering check depends ontime.sleep(0.05).cmu_max_workerstest_delegations_send_the_requests_of_the_sync_methodstest_max_workers_noneNoneresolution.cmu_cancelled[1,2][2]is the only test of the shielded cleanup under a repeated cancellation.test_close_releases_threadsclose(),with,async witheach fail their own case.test_close_during_multipart_copyclose()does not wait for a running part (shutdown instead of release fails it).cmu_cancelled_completionsleep(0.1)backs only a negative check.cmu_cancelled_creationcmu_cancelled_queued_completionawait task(line 1021) is unbounded: useawait_bounded. Its spy onsubmit_tomakes it fail for an unrelated change of how the completion is submitted; assert the requests instead.cmu_interrupted_while_scheduling_completionsubmit()(the shape before #1230).cmu_failed_part_with_threads_takenbegin_complete()before queueing; carries the asyncio stop path.cmu_failed_part_stops_running_partscmu_failed_part_with_threads_taken. The two asyncio-only mutations of that path (nobegin_abort, nosettled()wait) do not fail this test.cmu_cancelled_creation_stops_retriesbegin_abortand the shielded abort) removed, becauseoperation.calls == 1is checked before the retries end;cmu_cancelled_creationfails under that mutation. The session stop is covered byTestAioS3StreamedFile::test_cancelled_creation_stops_retriesandTestS3File::test_interrupted_creation_stops_retries.cmu_failed_annotation_stops_running_copies,cmu_failed_annotation_skips_queued_copiescmu_cancelled_queued_partscmu_loop_shutdownasyncio.run()shutdown guarantee, whichtask.cancel()does not reproduce.test_rm_requeststest_rm_maxdepthmaxdepthin_rm.test_put_file_in_transaction_open_parameterstest_expand_path_glob_lists_stem_prefix_find(detail=True).test_get_versiontest_cp_file_multipart_parametersmax_workersreaching the copy from_cp_file, butmax(concurrency) == 1relies on two parts overlapping duringtime.sleep(0.01): useoverlapping_calls.test_multipart_copy_uses_creation_algorithmS3Core: breaking it fails the sync test andTestS3Core::test_complete_multipart_upload_uses_creation_algorithmtoo; the asyncio-only parameter paths are caught by the other copy tests, not by this one.TestAioS3FileSystem::fs(fixture)close().test_write_transactionAioS3File; revisit with #1332.test_find,test_rm_recursive,test_upload_cp_filetest_cp_file_multipart_parameters. Saves about six PutObject, listings, a copy and reads per run. The implementing PR confirms on S3 that the sync tests fail under the same mutations.TestAioS3File::test_open_parts_in_flight,test_open_failed_part_while_waitingAioS3FileisS3File, and the session enforces both: allowingmax_workers + 1parts fails these withTestS3File::test_write_parts_in_flight(5 cases) andtest_write_failed_part_while_waiting(4 cases). They do not checkS3AioExecutor's own bound either (removing it leaves them passing).TestAioS3File::test_open_lookup_parameters_openforwarding its parameters.TestAioS3StreamedFile::test_write_parts_in_flighttest_open_async_cancelledopen_async()is closed, without aResourceWarning.test_append_failed_part_copyAioS3StreamedFile.test_commit_failed_part_firstcommit()raises throughcheck()before it waits).test_write_after_failed_parttest_close_cancelledclose()case oftest_flush_cancelled_then_exit_with_exception.test_flush_cancelled_while_queued_then_exit_with_exceptionf._pool.shutdown(True).test_close_interrupted_while_queuing_commit,test_flush_cancelled_then_exit_joins_abort,test_close_small,test_cancelled_read_frees_rangestest_s3.pycmu_unknown_parametercmu_part_sizescmu_interrupted_creationexcept BaseException.cmu_interrupted_part_schedulingExceptionfailscmu_interrupted_creation; an abort that does not wait for running parts failsTestS3File::test_part_scheduling_interrupted[write/append](the[append]case schedules a part copy through the samesubmit_copy),test_discard_waits_for_running_partsandtest_commit_stops_at_failed_part. Synchronizes by replacing the privatesession._changed.cmu_repeated_creation_interruptTestS3File::test_repeated_creation_interrupt[wb/ab]; catching onlyExceptionfailscmu_interrupted_creation.cmu_interrupted_cleanupdocs/filesystem.md:150-153) and now unprotected: suppressingKeyboardInterruptin_S3WriteSession.abort()'s wait for the parts fails no offline test. Add it back as a second case.test_s3_core.pytest_request_kwargs_is_a_copy,test_call_translates_errors,test_get_object,test_list_objects,test_complete_multipart_upload,test_upload_part_uses_creation_algorithm_and_identity,test_replace_object_metadata,test_generate_presigned_url__cause__, precedence of call parameters,storage_class, given parts, per-call fields, retained encryption, unsignedrequest_kwargs).test_abort_multipart_upload_in_stopped_scopetest_s3.pyby #1230; the only test of the abort'sunstoppable_retries().test_multipart_upload_requires_identity,test_acl_validation,test_object_operations_reject_paths,TestS3DeleteBatch::test_from_pathsmatch=on undocumented messages; the exception type alone fails every mutation (without the checks,StubberraisesUnStubbedResponseErroror nothing is raised).test_s3_executor.pyTestS3AioThreadPool::test_default_max_workers,test_run_cancelled_after_return,test_run_cancelled_before_start,test_release_after_calls,test_kept_future_keeps_no_pool,test_release_after_interrupted_submit,test_forkTestS3AioThreadPool::test_shutdownRuntimeError. Also submit to a shut-down pool that has no threads (never used, or afterrelease()).TestS3Executor::test_submit_to_loop_shutdownTestS3Executor::test_submit_to_executor_shut_down,test_submit_to_cancelled_executor_shut_downexecutor._pool.shutdown(), becauseS3AioExecutor.shutdown()orders the pool shutdown after the dispatches; decide with #1332. Dropmatch="after shutdown".test_s3_errors.py,test_s3_path_pairing.py,test_s3_path.pyTestS3ClientError::test_os_error_by_error_code,_errno,_by_http_status_codeEPERMcase stays valid with #1338: #1345 recognizes the delete-marker header intest_s3_core.pyand does not change this file.TestS3PathPairing::test_move_pairs_null_version_bucket_statetest_s3_path.pyTests removed by #1228, #1229, #1230, #1208, #1209, #1309
TestS3FileSystem::test_abort_multipart_upload_in_stopped_scope(#1230)TestS3Core::test_abort_multipart_upload_in_stopped_scope(fails under the mutation)TestS3AioThreadPool::test_submit_during_release(added and replaced within #1286)test_release_after_callscmu_interrupted_while_queuing_completion(#1230)cmu_interrupted_while_scheduling_completioncmu_interrupted_cleanup(#1229)2. Contracts without a test, and tests without a contract
Missing tests that this issue adds (the current behavior is the contract)
Each mutation left the whole offline suite passing, and no AWS test asserts the contract.
_mkdir,_makedirs,_rmdir/rmdir,sign,getxattr,setxattr,list_multipart_uploads,clear_multipart_uploads,created,modified,invalidate_cache,touchtest_delegations_send_the_requests_of_the_sync_methods, with_serve_keysextended for the multipart listing, abort and ACL. Uncaught today:setxattrdroppingcopy_kwargs,signdroppingexpiration,invalidate_cachedoing nothing,list_multipart_uploadsreturning[],_mkdirdropping**kwargs. Before #1340, this protects its refactor.test_s3_async.pysign(expiration=N)expires after N secondstest_sign(AWS) passes a 3,600 s URL; add an upper bound, or check offline (signing sends no request); drop itssleep(1)test_s3.pymodified()/created()returnLastModified,Nonefor directoriestest_s3.pytouch()of a version path raisesValueErrortouchtesttest_s3.pycache_typeuses the documented"bytes"test_read_with_cache_typetest_s3.py_expand_pathrejectsmaxdepth < 1_expand_pathtest, unless #1337 delegates_expand_pathfirsttest_s3_async.pycmu_interrupted_cleanuprewrite in section 1test_s3.pyTests without a contract, unsynchronized waits, and AWS cost (rest of the suite)
test_s3_async.pyregister_async_filesystem(fixture)known_implementations, whileimport pyathena.pandas/pyathena.polarsputsS3FileSystemin_registry, which fsspec checks first: after that import,get_filesystem_class("s3")isS3FileSystem. No teardown; with it disabled, all 139 offline tests of the file pass.test_pandas_read_csvS3FileSystemand repeats the sync test against S3.test_glob_globruns over the delegated_find; the only asyncio-specific branch (detail) failstest_expand_path_glob_lists_stem_prefix.test_put_file_modeput_file; droppingmode=fails the delegation test; the sync test protects the translation.test_pipe_file_compressionintrans=True; theFalsecases run the sync code (breaking it fails them and 14 sync cases).test_touch_sync_wrappertouchrows; renaming_touchaway leaves it passing.test_transaction_pipe_put_file_create_existingexists.call_count == 2; the contract isFileExistsErrorwithout a request.test_copy_version_serve_keysinstead of the awaited_cp_filearguments.test_flush_cancelled_then_exit_with_exceptionasyncio.sleep(0.1)(__aexit__awaits the discard; the mutation still fails without it), boundrelease.wait(), and take theclose()case above.test_write_cancelledrelease.wait()has no timeout: blocking the loop in_wait_readyhangs the test instead of failing it.test_mv,test_mv_copy_failure_copy_file; rewrite through the client once #1340 settles themvfailure policy.test_rm_request_error_keeps_errors,TestAioS3File::test_failed_read_frees_other_ranges,cmu_shares_threads,TestAioS3File::test_open_parallel_requeststest_s3.pytest_write,test_append,test_pipe_cat,test_put,test_put_with_callback,test_upload_cp_file(1, 2**20)case takes the same single-request path as(1, 2**10); drop it and the commented-out cases.test_open_multipart_with_checksum[None-None],test_append_multipart_with_checksum[None-None]test_s3_executor.pyTestS3Executor::test_submit_totest_submit_to_failure_frees_arguments,test_failed_part_is_released,test_submit_context, fourS3AioExecutortests).test_reader.pytest_close_waits_for_running_reads,test_interrupted_close,test_close_with_queued_readsjoin(0.2)plusis_alive()passes a regression whenever the closer has not reachedclose()in 0.2 s; assert the order of the gated read's end and the close.test_init.pytest_register_s3_filesystem_overwrites_existing_registrationWARNINGrecord frompyathena.filesystem.test_s3_object.pytest_inits3. Not in this issue
test_mvasserts DeleteObjects without the givenRequestPayer(Pass the source's SSE-C and RequestPayer parameters to the lookups of copies and setxattr #1333);test_open_version_idandtest_open_version_aware_pins_version_in_pathindexf.__reduce__()[1][1](Keep the caller's parameters and the open-time pin in S3File #1334); the three recursive-chmodtests mockfs.findand bypass the defect (Fix recursive chmod, empty key segments, and version paths in listings #1335);tests/pyathena/polars/test_result_set.pypatchesS3FileSystemwhile the whole-CSV read goes throughfsspec.open()(Fix the filesystem's integration with PolarsCursor, the fsspec registry, pickling, and connection= #1339). Make files usable after fork with either filesystem #1336, Align AioS3FileSystem with S3FileSystem for cancellation, recursive put, expand_path, and arguments #1337 and Translate delete-marker versions to FileNotFoundError and fix two S3Core edge cases #1338 only add tests.fs._call/fs._clientseams, which nothing in the package calls, are used by 209 of 281 tests intest_s3.pyand 30 of 91 intest_s3_async.py(58 more reach into_sync_fs); rewrite them ontofs.corein Remove the duplication between S3FileSystem and AioS3FileSystem #1340's PR, so they are rewritten once. Settle the response models, S3Object, and the listing cache #1341:fs.dircacheis inspected by 37 sync and 3 asyncio tests,test_touch_put_objectasserts["_etag"],test_s3_object.pydepends on the mapping. Consolidate the filesystem executors before parallel batch operations #1332:S3AioExecutorhas no test of its ownmax_workersbound, andS3AioExecutor,S3ThreadPoolExecutorandS3AioThreadPoolare named by 17, 18 and 18 tests. Decide request-parameter coverage, error translation, and S3 retry codes #1342: the retry-stop tests (8 sync, 11 asyncio, 1 core, 4 executor) fake S3 throttling with Athena'sThrottlingException, which S3 does not send.test_s3.py; compare them then.Implementation
One PR per file group, as #1240 and #1241 did:
test_s3_async.py: the asyncio rows of sections 1 and 2, including the delegation-test extension and the fixture removal. No open PR touches the file.test_s3_core.py,test_s3_errors.py,test_s3_executor.py,test_reader.py,test_init.py: after Translate delete-marker versions to FileNotFoundError and fix two S3Core edge cases (GH-1338) #1345 (Translate delete-marker versions to FileNotFoundError and fix two S3Core edge cases #1338) merges, which editstest_s3_core.pynext totest_call_translates_errorsandtest_part_ranges.test_s3.py: after Run the batch operations of S3FileSystem concurrently (GH-1322) #1344 (Run the batch operations of S3FileSystem concurrently #1322) merges, which edits_make_fsand inserts tests aftertest_mv_nothing_within_maxdepth. The rows here do not overlap those lines, and thefs._callrewrite stays with Remove the duplication between S3FileSystem and AioS3FileSystem #1340.Every removal keeps the mutation evidence above in its PR; the five AWS-only removals are confirmed on S3 there.
Record the signing arguments instead of comparing signed URLs (GH-1328)
Check the asyncio find details, bound two waits, and enable the listi…
Fail the cancellation tests whose gate is released by its timeout (GH…