-
Notifications
You must be signed in to change notification settings - Fork 35
wasi:[email protected]: Add tests for unlink errors #137
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"dirs": ["fs-tests.dir"] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
use std::process; | ||
extern crate wit_bindgen; | ||
|
||
wit_bindgen::generate!({ | ||
inline: r" | ||
package test:test; | ||
|
||
world test { | ||
include wasi:filesystem/[email protected]; | ||
include wasi:cli/[email protected]; | ||
} | ||
", | ||
additional_derives: [PartialEq, Eq, Hash, Clone], | ||
// Work around https://github.com/bytecodealliance/wasm-tools/issues/2285. | ||
features:["clocks-timezone"], | ||
generate_all | ||
}); | ||
|
||
use wasi::filesystem::types::Descriptor; | ||
use wasi::filesystem::types::ErrorCode; | ||
|
||
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)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. MacOS error: STDERR: thread '' (1) panicked at src/bin/filesystem-unlink-errors.rs:25:5: |
||
assert_eq!(rm("..").await, Err(ErrorCode::NotPermitted)); | ||
assert_eq!(rm("../fs-tests.dir").await, Err(ErrorCode::NotPermitted)); | ||
assert_eq!(rm("/").await, Err(ErrorCode::NotPermitted)); | ||
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)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 ? There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. |
||
} | ||
|
||
struct Component; | ||
export!(Component); | ||
impl exports::wasi::cli::run::Guest for Component { | ||
async fn run() -> Result<(), ()> { | ||
match &wasi::filesystem::preopens::get_directories()[..] { | ||
[(dir, dirname)] if dirname == "fs-tests.dir" => { | ||
test_unlink_errors(dir).await; | ||
} | ||
[..] => { | ||
eprintln!("usage: run with one open dir named 'fs-tests.dir'"); | ||
process::exit(1) | ||
} | ||
}; | ||
Ok(()) | ||
} | ||
} | ||
|
||
fn main() { | ||
unreachable!("main is a stub"); | ||
} |
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.
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
failedleft: 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 backtraceError: failed to run main module
tests\rust\testsuite\wasm32-wasip3\filesystem-unlink-errors.wasm