-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add some missing tokio::fs
function tests etc.
#5493
add some missing tokio::fs
function tests etc.
#5493
Conversation
…Y CHECK UGLY HACK TO AVOID BUILD ISSUES WITHOUT ADDING ANY EXTRA IMPORTS
…ODO test the Windows-specific functions
- use more exotic libc::O_NOFOLLOW - separate cases for Linux vs BSD/macOS which have different stored data
…I issue with CI / cross-test (aarch64-unknown-linux-gnu)
…n master branch" This reverts commit 258278e.
This reverts commit 73eafdd.
…ome-missing-fs-function-tests
tokio::fs
function tests - DRAFT WIPtokio::fs
function tests etc.
@@ -0,0 +1,22 @@ | |||
#![warn(rust_2018_idioms)] | |||
#![cfg(all(feature = "full", not(tokio_wasi)))] // WASI does not support all fs operations |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed that this WASI comment that I copied was sometimes "file operations" and other times "directory operations". My apologies for possibly veering off-topic but from a little searching it looks to me like some fs operations may be possible with WASI but not all and WASI directory access would not work very easily with Tokio. I went ahead and used sed
to apply a slightly more general statement across tokio/tests/fs_*.rs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
# 1.26.0 (March 1st, 2023) ### Fixed - sync: don't leak tracing spans in mutex guards ([#5469]) - sync: drop wakers after unlocking the mutex in Notify ([#5471]) - sync: drop wakers outside lock in semaphore ([#5475]) - macros: fix empty `join!` and `try_join!` ([#5504]) ### Added - fs: add `fs::try_exists` ([#4299]) - net: add types for named unix pipes ([#5351]) - sync: add `MappedOwnedMutexGuard` ([#5474]) ### Documented - task: clarify what happens to spawned work during runtime shutdown ([#5394]) - task: clarify `process::Command` docs (#5406) ([#5413]) - sync: add doc aliases for `blocking_*` methods ([#5448]) - task: fix wording with 'unsend' ([#5452]) - signal: updated Documentation for Signals ([#5459]) - sync: fix docs for Send/Sync bounds in broadcast ([#5480]) - io: improve AsyncFd example ([#5481]) - tokio: document supported platforms ([#5483]) - runtime: document the nature of the main future ([#5494]) - sync: document drop behavior for channels ([#5497]) - time: document immediate completion guarantee for timeouts ([#5509]) - runtime: remove extra period in docs ([#5511]) ### Changed - net: use Message Read Mode for named pipes ([#5350]) - chore: update windows-sys to 0.45 ([#5386]) - sync: mark lock guards with `#[clippy::has_significant_drop]` ([#5422]) - sync: reduce contention in watch channel ([#5464]) - time: remove cache padding in timer entries ([#5468]) - time: Improve `Instant::now()` perf with test-util ([#5513]) ### Internal Changes - tests: port proptest fuzz harnesses to use cargo-fuzz ([#5392]) - time: don't store deadline twice in sleep entries ([#5410]) - rt: remove Arc from Clock ([#5434]) - sync: make `notify_waiters` calls atomic ([#5458]) - net: refactor named pipe builders to not use bitfields ([#5477]) - io: use `poll_fn` in `copy_bidirectional` ([#5486]) - fs: add more tests for filesystem functionality ([#5493]) - net: fix test compilation failure ([#5506]) - io: ignore SplitByUtf8BoundaryIfWindows test on miri ([#5507]) ### Unstable - metrics: add a new metric for budget exhaustion yields ([#5517]) [#4299]: #4299 [#5350]: #5350 [#5351]: #5351 [#5386]: #5386 [#5392]: #5392 [#5394]: #5394 [#5410]: #5410 [#5413]: #5413 [#5422]: #5422 [#5434]: #5434 [#5448]: #5448 [#5452]: #5452 [#5458]: #5458 [#5459]: #5459 [#5464]: #5464 [#5468]: #5468 [#5469]: #5469 [#5471]: #5471 [#5474]: #5474 [#5475]: #5475 [#5477]: #5477 [#5480]: #5480 [#5481]: #5481 [#5483]: #5483 [#5486]: #5486 [#5493]: #5493 [#5494]: #5494 [#5497]: #5497 [#5504]: #5504 [#5506]: #5506 [#5507]: #5507 [#5509]: #5509 [#5511]: #5511 [#5513]: #5513 [#5517]: #5517
Motivation
I tried experimenting with
no-panic
(long story) and discovered that a number of the functions intokio/src/fs
are not really tested. I was able to stickpanic!()
calls into over 30 of these functions without causing any test failures.I hope to improve the test coverage as discussed further below.
Solution
I started by injecting lines of code like this into
tokio/src/fs
to help keep track of what is and is not tested:to cause the untested
tokio::fs
functions to panic without triggering any build issues.I have been able to add most of the missing test coverage in my own workspace. I started this PR with test coverage of
tokio::fs::canonicalize()
and have pushed all of the changes to start testing the previously untestedtokio::fs
functions.other testing enhancements:
tokio/tests/fs_link.rs
TODO items - done ✅finish the missing test coverage fortokio::fs
ensure that all injected panicking code is removedrevert 258278eensure that there are no remaining XXX todo itemsFuture work ideas time permitting beyond this PR - updated:
tokio::io
,tokio::net
, etc.cargo-llvm-cov
with permissive licensing and design to work with faster nexte.st for testing