Skip to content

Conversation

@wingo
Copy link
Collaborator

@wingo wingo commented Sep 16, 2025

No description provided.

@wingo wingo force-pushed the filesystem-unlink-errors branch 2 times, most recently from 89c4f76 to a6d9fc9 Compare September 22, 2025 09:57
@wingo wingo changed the title wasi:[email protected]: Add tests for unlink errors wasi:[email protected]: Add tests for unlink errors Sep 22, 2025
@wingo wingo force-pushed the filesystem-unlink-errors branch from a6d9fc9 to 344e0ee Compare September 22, 2025 11:44
@wingo wingo marked this pull request as ready for review September 22, 2025 14:00
assert_eq!(rm("/etc/passwd").await, Err(ErrorCode::NotPermitted));
assert_eq!(rm("/etc/passwd").await, Err(ErrorCode::NotPermitted));
assert_eq!(rm("z.txt").await, Err(ErrorCode::NoEntry));
assert_eq!(rm("parent/z.txt").await, Err(ErrorCode::NotPermitted));
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All of these errors follow POSIX, and I think that if Windows diverges, there should be some adapter code. WDYT @alexcrichton ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In theory that seems reasonable to me yeah. Given how tricky this can be though I wouldn't be confident in saying it's the best solution until there's an implementation. For example a simple "map this code to that code" is totally fine, but if it otherwise requires a lot of other contextual information or flags-on-files or something then that's less reasonable. I'm not sure which bucket this would fall into.

@wingo wingo force-pushed the filesystem-unlink-errors branch from 344e0ee to 08b09f1 Compare October 7, 2025 07:36
@wingo wingo force-pushed the filesystem-unlink-errors branch from 08b09f1 to fc772af Compare October 7, 2025 12:16
async fn test_unlink_errors(dir: &Descriptor) {
let rm = |path: &str| dir.unlink_file_at(path.to_string());
assert_eq!(rm("").await, Err(ErrorCode::NoEntry));
assert_eq!(rm(".").await, Err(ErrorCode::IsDirectory));
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Windows Wasmtime error:
Test filesystem-unlink-errors failed
[exit_code] 0 == 3
STDOUT:

STDERR:

thread '' (1) panicked at src/bin/filesystem-unlink-errors.rs:25:5:
assertion left == right failed
left: Err(ErrorCode { code: 0, name: "access", message: "Permission denied, similar to EACCES in POSIX." })
right: Err(ErrorCode { code: 13, name: "is-directory", message: "Is a directory, similar to EISDIR in POSIX." })
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
Error: failed to run main module tests\rust\testsuite\wasm32-wasip3\filesystem-unlink-errors.wasm

async fn test_unlink_errors(dir: &Descriptor) {
let rm = |path: &str| dir.unlink_file_at(path.to_string());
assert_eq!(rm("").await, Err(ErrorCode::NoEntry));
assert_eq!(rm(".").await, Err(ErrorCode::IsDirectory));
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MacOS error:
Test filesystem-unlink-errors failed
[exit_code] 0 == 134
STDOUT:

STDERR:

thread '' (1) panicked at src/bin/filesystem-unlink-errors.rs:25:5:
assertion left == right failed
left: Err(ErrorCode { code: 30, name: "not-permitted", message: "Operation not permitted, similar to EPERM in POSIX." })
right: Err(ErrorCode { code: 13, name: "is-directory", message: "Is a directory, similar to EISDIR in POSIX." })
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
Error: failed to run main module tests/rust/testsuite/wasm32-wasip3/filesystem-unlink-errors.wasm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants